f2fs: correctly fix the parent inode number during fsync()
fsync() may be called on a deleted file that's still open. So when fsync() tries to set the parent inode number when the inode has LOST_PINO and i_nlink == 1 (to avoid later checkpoints), it needs to make sure to get the parent directory via a non-deleted alias. Also remove the unnecessary igrab() and iput(), as the caller already holds a reference to the inode. Signed-off-by: Eric Biggers <ebiggers@google.com> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
This commit is contained in:
parent
43c780ba26
commit
84c9c2de06
|
@ -169,9 +169,11 @@ static int get_parent_ino(struct inode *inode, nid_t *pino)
|
|||
{
|
||||
struct dentry *dentry;
|
||||
|
||||
inode = igrab(inode);
|
||||
dentry = d_find_any_alias(inode);
|
||||
iput(inode);
|
||||
/*
|
||||
* Make sure to get the non-deleted alias. The alias associated with
|
||||
* the open file descriptor being fsync()'ed may be deleted already.
|
||||
*/
|
||||
dentry = d_find_alias(inode);
|
||||
if (!dentry)
|
||||
return 0;
|
||||
|
||||
|
|
Loading…
Reference in New Issue