diff options
Diffstat (limited to 'fs/9p/vfs_inode_dotl.c')
-rw-r--r-- | fs/9p/vfs_inode_dotl.c | 17 |
1 files changed, 5 insertions, 12 deletions
diff --git a/fs/9p/vfs_inode_dotl.c b/fs/9p/vfs_inode_dotl.c index 4c10edec26a0..59dc8e87647f 100644 --- a/fs/9p/vfs_inode_dotl.c +++ b/fs/9p/vfs_inode_dotl.c | |||
@@ -330,7 +330,8 @@ v9fs_vfs_atomic_open_dotl(struct inode *dir, struct dentry *dentry, | |||
330 | 330 | ||
331 | v9inode = V9FS_I(inode); | 331 | v9inode = V9FS_I(inode); |
332 | mutex_lock(&v9inode->v_mutex); | 332 | mutex_lock(&v9inode->v_mutex); |
333 | if (v9ses->cache && !v9inode->writeback_fid && | 333 | if ((v9ses->cache == CACHE_LOOSE || v9ses->cache == CACHE_FSCACHE) && |
334 | !v9inode->writeback_fid && | ||
334 | ((flags & O_ACCMODE) != O_RDONLY)) { | 335 | ((flags & O_ACCMODE) != O_RDONLY)) { |
335 | /* | 336 | /* |
336 | * clone a fid and add it to writeback_fid | 337 | * clone a fid and add it to writeback_fid |
@@ -353,7 +354,7 @@ v9fs_vfs_atomic_open_dotl(struct inode *dir, struct dentry *dentry, | |||
353 | if (err) | 354 | if (err) |
354 | goto err_clunk_old_fid; | 355 | goto err_clunk_old_fid; |
355 | file->private_data = ofid; | 356 | file->private_data = ofid; |
356 | if (v9ses->cache) | 357 | if (v9ses->cache == CACHE_LOOSE || v9ses->cache == CACHE_FSCACHE) |
357 | v9fs_cache_inode_set_cookie(inode, file); | 358 | v9fs_cache_inode_set_cookie(inode, file); |
358 | *opened |= FILE_CREATED; | 359 | *opened |= FILE_CREATED; |
359 | out: | 360 | out: |
@@ -473,13 +474,11 @@ static int | |||
473 | v9fs_vfs_getattr_dotl(struct vfsmount *mnt, struct dentry *dentry, | 474 | v9fs_vfs_getattr_dotl(struct vfsmount *mnt, struct dentry *dentry, |
474 | struct kstat *stat) | 475 | struct kstat *stat) |
475 | { | 476 | { |
476 | int err; | ||
477 | struct v9fs_session_info *v9ses; | 477 | struct v9fs_session_info *v9ses; |
478 | struct p9_fid *fid; | 478 | struct p9_fid *fid; |
479 | struct p9_stat_dotl *st; | 479 | struct p9_stat_dotl *st; |
480 | 480 | ||
481 | p9_debug(P9_DEBUG_VFS, "dentry: %p\n", dentry); | 481 | p9_debug(P9_DEBUG_VFS, "dentry: %p\n", dentry); |
482 | err = -EPERM; | ||
483 | v9ses = v9fs_dentry2v9ses(dentry); | 482 | v9ses = v9fs_dentry2v9ses(dentry); |
484 | if (v9ses->cache == CACHE_LOOSE || v9ses->cache == CACHE_FSCACHE) { | 483 | if (v9ses->cache == CACHE_LOOSE || v9ses->cache == CACHE_FSCACHE) { |
485 | generic_fillattr(dentry->d_inode, stat); | 484 | generic_fillattr(dentry->d_inode, stat); |
@@ -556,7 +555,6 @@ static int v9fs_mapped_iattr_valid(int iattr_valid) | |||
556 | int v9fs_vfs_setattr_dotl(struct dentry *dentry, struct iattr *iattr) | 555 | int v9fs_vfs_setattr_dotl(struct dentry *dentry, struct iattr *iattr) |
557 | { | 556 | { |
558 | int retval; | 557 | int retval; |
559 | struct v9fs_session_info *v9ses; | ||
560 | struct p9_fid *fid; | 558 | struct p9_fid *fid; |
561 | struct p9_iattr_dotl p9attr; | 559 | struct p9_iattr_dotl p9attr; |
562 | struct inode *inode = dentry->d_inode; | 560 | struct inode *inode = dentry->d_inode; |
@@ -577,8 +575,6 @@ int v9fs_vfs_setattr_dotl(struct dentry *dentry, struct iattr *iattr) | |||
577 | p9attr.mtime_sec = iattr->ia_mtime.tv_sec; | 575 | p9attr.mtime_sec = iattr->ia_mtime.tv_sec; |
578 | p9attr.mtime_nsec = iattr->ia_mtime.tv_nsec; | 576 | p9attr.mtime_nsec = iattr->ia_mtime.tv_nsec; |
579 | 577 | ||
580 | retval = -EPERM; | ||
581 | v9ses = v9fs_dentry2v9ses(dentry); | ||
582 | fid = v9fs_fid_lookup(dentry); | 578 | fid = v9fs_fid_lookup(dentry); |
583 | if (IS_ERR(fid)) | 579 | if (IS_ERR(fid)) |
584 | return PTR_ERR(fid); | 580 | return PTR_ERR(fid); |
@@ -715,7 +711,7 @@ v9fs_vfs_symlink_dotl(struct inode *dir, struct dentry *dentry, | |||
715 | } | 711 | } |
716 | 712 | ||
717 | v9fs_invalidate_inode_attr(dir); | 713 | v9fs_invalidate_inode_attr(dir); |
718 | if (v9ses->cache) { | 714 | if (v9ses->cache == CACHE_LOOSE || v9ses->cache == CACHE_FSCACHE) { |
719 | /* Now walk from the parent so we can get an unopened fid. */ | 715 | /* Now walk from the parent so we can get an unopened fid. */ |
720 | fid = p9_client_walk(dfid, 1, &name, 1); | 716 | fid = p9_client_walk(dfid, 1, &name, 1); |
721 | if (IS_ERR(fid)) { | 717 | if (IS_ERR(fid)) { |
@@ -768,7 +764,6 @@ v9fs_vfs_link_dotl(struct dentry *old_dentry, struct inode *dir, | |||
768 | struct dentry *dentry) | 764 | struct dentry *dentry) |
769 | { | 765 | { |
770 | int err; | 766 | int err; |
771 | char *name; | ||
772 | struct dentry *dir_dentry; | 767 | struct dentry *dir_dentry; |
773 | struct p9_fid *dfid, *oldfid; | 768 | struct p9_fid *dfid, *oldfid; |
774 | struct v9fs_session_info *v9ses; | 769 | struct v9fs_session_info *v9ses; |
@@ -786,8 +781,6 @@ v9fs_vfs_link_dotl(struct dentry *old_dentry, struct inode *dir, | |||
786 | if (IS_ERR(oldfid)) | 781 | if (IS_ERR(oldfid)) |
787 | return PTR_ERR(oldfid); | 782 | return PTR_ERR(oldfid); |
788 | 783 | ||
789 | name = (char *) dentry->d_name.name; | ||
790 | |||
791 | err = p9_client_link(dfid, oldfid, (char *)dentry->d_name.name); | 784 | err = p9_client_link(dfid, oldfid, (char *)dentry->d_name.name); |
792 | 785 | ||
793 | if (err < 0) { | 786 | if (err < 0) { |
@@ -973,7 +966,7 @@ int v9fs_refresh_inode_dotl(struct p9_fid *fid, struct inode *inode) | |||
973 | */ | 966 | */ |
974 | i_size = inode->i_size; | 967 | i_size = inode->i_size; |
975 | v9fs_stat2inode_dotl(st, inode); | 968 | v9fs_stat2inode_dotl(st, inode); |
976 | if (v9ses->cache) | 969 | if (v9ses->cache == CACHE_LOOSE || v9ses->cache == CACHE_FSCACHE) |
977 | inode->i_size = i_size; | 970 | inode->i_size = i_size; |
978 | spin_unlock(&inode->i_lock); | 971 | spin_unlock(&inode->i_lock); |
979 | out: | 972 | out: |