mirror of
https://github.com/torvalds/linux.git
synced 2026-09-23 22:14:03 +02:00
ntfs: unhash failed inode reads
Remove a newly allocated inode from the inode hash before discarding it.
NTFS may set i_nlink before a later initialization step fails, in which
case iput alone can retain the incomplete inode in the cache.
Fixes: bf6be898fbc5 ("ntfs: discard inodes that fail initialization")
Reviewed-by: Hyunchul Lee <hyc.lee@gmail.com>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
This commit is contained in:
parent
fc440366c4
commit
0c32a42fd9
|
|
@ -170,9 +170,10 @@ struct inode *ntfs_iget(struct super_block *sb, u64 mft_no)
|
|||
/* If this is a freshly allocated inode, need to read it now. */
|
||||
if (inode_state_read_once(vi) & I_NEW) {
|
||||
err = ntfs_read_locked_inode(vi);
|
||||
if (err)
|
||||
if (err) {
|
||||
remove_inode_hash(vi);
|
||||
discard_new_inode(vi);
|
||||
else
|
||||
} else
|
||||
unlock_new_inode(vi);
|
||||
}
|
||||
/*
|
||||
|
|
@ -232,9 +233,10 @@ struct inode *ntfs_attr_iget(struct inode *base_vi, __le32 type,
|
|||
/* If this is a freshly allocated inode, need to read it now. */
|
||||
if (inode_state_read_once(vi) & I_NEW) {
|
||||
err = ntfs_read_locked_attr_inode(base_vi, vi);
|
||||
if (err)
|
||||
if (err) {
|
||||
remove_inode_hash(vi);
|
||||
discard_new_inode(vi);
|
||||
else
|
||||
} else
|
||||
unlock_new_inode(vi);
|
||||
}
|
||||
/*
|
||||
|
|
@ -288,9 +290,10 @@ struct inode *ntfs_index_iget(struct inode *base_vi, __le16 *name,
|
|||
/* If this is a freshly allocated inode, need to read it now. */
|
||||
if (inode_state_read_once(vi) & I_NEW) {
|
||||
err = ntfs_read_locked_index_inode(base_vi, vi);
|
||||
if (err)
|
||||
if (err) {
|
||||
remove_inode_hash(vi);
|
||||
discard_new_inode(vi);
|
||||
else
|
||||
} else
|
||||
unlock_new_inode(vi);
|
||||
}
|
||||
/*
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user