diff options
| author | Kirill Tkhai <ktkhai@virtuozzo.com> | 2018-11-09 13:33:27 +0300 | 
|---|---|---|
| committer | Miklos Szeredi <mszeredi@redhat.com> | 2019-02-13 15:15:14 +0300 | 
| commit | c9d8f5f0692d5960ed50970ffe63756fb8f96cdb (patch) | |
| tree | 14fc8a5ccd62ebd531094841a41686e6dd255276 | |
| parent | f15ecfef058d94d03bdb35dcdfda041b3de9d543 (diff) | |
| download | linux-c9d8f5f0692d5960ed50970ffe63756fb8f96cdb.tar.xz | |
fuse: Protect fi->nlookup with fi->lock
This continues previous patch and introduces the same protection for
nlookup field.
Signed-off-by: Kirill Tkhai <ktkhai@virtuozzo.com>
Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
| -rw-r--r-- | fs/fuse/dir.c | 4 | ||||
| -rw-r--r-- | fs/fuse/inode.c | 4 | ||||
| -rw-r--r-- | fs/fuse/readdir.c | 4 | 
3 files changed, 6 insertions, 6 deletions
diff --git a/fs/fuse/dir.c b/fs/fuse/dir.c index eb7dfb0d9513..dd0f64f7bc06 100644 --- a/fs/fuse/dir.c +++ b/fs/fuse/dir.c @@ -207,9 +207,9 @@ static int fuse_dentry_revalidate(struct dentry *entry, unsigned int flags)  				fuse_queue_forget(fc, forget, outarg.nodeid, 1);  				goto invalid;  			} -			spin_lock(&fc->lock); +			spin_lock(&fi->lock);  			fi->nlookup++; -			spin_unlock(&fc->lock); +			spin_unlock(&fi->lock);  		}  		kfree(forget);  		if (ret == -ENOMEM) diff --git a/fs/fuse/inode.c b/fs/fuse/inode.c index 4c767175bd34..3d1a63e95f69 100644 --- a/fs/fuse/inode.c +++ b/fs/fuse/inode.c @@ -325,9 +325,9 @@ struct inode *fuse_iget(struct super_block *sb, u64 nodeid,  	}  	fi = get_fuse_inode(inode); -	spin_lock(&fc->lock); +	spin_lock(&fi->lock);  	fi->nlookup++; -	spin_unlock(&fc->lock); +	spin_unlock(&fi->lock);  	fuse_change_attributes(inode, attr, attr_valid, attr_version);  	return inode; diff --git a/fs/fuse/readdir.c b/fs/fuse/readdir.c index ab18b78f4755..574d03f8a573 100644 --- a/fs/fuse/readdir.c +++ b/fs/fuse/readdir.c @@ -213,9 +213,9 @@ retry:  		}  		fi = get_fuse_inode(inode); -		spin_lock(&fc->lock); +		spin_lock(&fi->lock);  		fi->nlookup++; -		spin_unlock(&fc->lock); +		spin_unlock(&fi->lock);  		forget_all_cached_acls(inode);  		fuse_change_attributes(inode, &o->attr,  | 
