diff options
Diffstat (limited to 'fs/9p/vfs_inode_dotl.c')
| -rw-r--r-- | fs/9p/vfs_inode_dotl.c | 32 | 
1 files changed, 22 insertions, 10 deletions
diff --git a/fs/9p/vfs_inode_dotl.c b/fs/9p/vfs_inode_dotl.c index 7dee89ba32e7..d17502a738a9 100644 --- a/fs/9p/vfs_inode_dotl.c +++ b/fs/9p/vfs_inode_dotl.c @@ -344,7 +344,8 @@ v9fs_vfs_atomic_open_dotl(struct inode *dir, struct dentry *dentry,  		goto err_clunk_old_fid;  	file->private_data = ofid;  	if (v9ses->cache == CACHE_LOOSE || v9ses->cache == CACHE_FSCACHE) -		v9fs_cache_inode_set_cookie(inode, file); +		fscache_use_cookie(v9fs_inode_cookie(v9inode), +				   file->f_mode & FMODE_WRITE);  	v9fs_open_fid_add(inode, ofid);  	file->f_mode |= FMODE_CREATED;  out: @@ -551,7 +552,10 @@ int v9fs_vfs_setattr_dotl(struct user_namespace *mnt_userns,  {  	int retval, use_dentry = 0;  	struct p9_fid *fid = NULL; -	struct p9_iattr_dotl p9attr; +	struct p9_iattr_dotl p9attr = { +		.uid = INVALID_UID, +		.gid = INVALID_GID, +	};  	struct inode *inode = d_inode(dentry);  	p9_debug(P9_DEBUG_VFS, "\n"); @@ -561,14 +565,22 @@ int v9fs_vfs_setattr_dotl(struct user_namespace *mnt_userns,  		return retval;  	p9attr.valid = v9fs_mapped_iattr_valid(iattr->ia_valid); -	p9attr.mode = iattr->ia_mode; -	p9attr.uid = iattr->ia_uid; -	p9attr.gid = iattr->ia_gid; -	p9attr.size = iattr->ia_size; -	p9attr.atime_sec = iattr->ia_atime.tv_sec; -	p9attr.atime_nsec = iattr->ia_atime.tv_nsec; -	p9attr.mtime_sec = iattr->ia_mtime.tv_sec; -	p9attr.mtime_nsec = iattr->ia_mtime.tv_nsec; +	if (iattr->ia_valid & ATTR_MODE) +		p9attr.mode = iattr->ia_mode; +	if (iattr->ia_valid & ATTR_UID) +		p9attr.uid = iattr->ia_uid; +	if (iattr->ia_valid & ATTR_GID) +		p9attr.gid = iattr->ia_gid; +	if (iattr->ia_valid & ATTR_SIZE) +		p9attr.size = iattr->ia_size; +	if (iattr->ia_valid & ATTR_ATIME_SET) { +		p9attr.atime_sec = iattr->ia_atime.tv_sec; +		p9attr.atime_nsec = iattr->ia_atime.tv_nsec; +	} +	if (iattr->ia_valid & ATTR_MTIME_SET) { +		p9attr.mtime_sec = iattr->ia_mtime.tv_sec; +		p9attr.mtime_nsec = iattr->ia_mtime.tv_nsec; +	}  	if (iattr->ia_valid & ATTR_FILE) {  		fid = iattr->ia_file->private_data;  |