diff options
Diffstat (limited to 'fs/9p/vfs_inode_dotl.c')
| -rw-r--r-- | fs/9p/vfs_inode_dotl.c | 14 | 
1 files changed, 5 insertions, 9 deletions
diff --git a/fs/9p/vfs_inode_dotl.c b/fs/9p/vfs_inode_dotl.c index 1dc7af046615..e1c0240b51c0 100644 --- a/fs/9p/vfs_inode_dotl.c +++ b/fs/9p/vfs_inode_dotl.c @@ -59,7 +59,7 @@ static int v9fs_test_inode_dotl(struct inode *inode, void *data)  	struct p9_stat_dotl *st = (struct p9_stat_dotl *)data;  	/* don't match inode of different type */ -	if ((inode->i_mode & S_IFMT) != (st->st_mode & S_IFMT)) +	if (inode_wrong_type(inode, st->st_mode))  		return 0;  	if (inode->i_generation != st->st_gen) @@ -663,14 +663,10 @@ v9fs_stat2inode_dotl(struct p9_stat_dotl *stat, struct inode *inode,  		if (stat->st_result_mask & P9_STATS_NLINK)  			set_nlink(inode, stat->st_nlink);  		if (stat->st_result_mask & P9_STATS_MODE) { -			inode->i_mode = stat->st_mode; -			if ((S_ISBLK(inode->i_mode)) || -						(S_ISCHR(inode->i_mode))) -				init_special_inode(inode, inode->i_mode, -								inode->i_rdev); +			mode = stat->st_mode & S_IALLUGO; +			mode |= inode->i_mode & ~S_IALLUGO; +			inode->i_mode = mode;  		} -		if (stat->st_result_mask & P9_STATS_RDEV) -			inode->i_rdev = new_decode_dev(stat->st_rdev);  		if (!(flags & V9FS_STAT2INODE_KEEP_ISIZE) &&  		    stat->st_result_mask & P9_STATS_SIZE)  			v9fs_i_size_write(inode, stat->st_size); @@ -959,7 +955,7 @@ int v9fs_refresh_inode_dotl(struct p9_fid *fid, struct inode *inode)  	/*  	 * Don't update inode if the file type is different  	 */ -	if ((inode->i_mode & S_IFMT) != (st->st_mode & S_IFMT)) +	if (inode_wrong_type(inode, st->st_mode))  		goto out;  	/*  |