aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2016-05-29 15:29:26 -0400
committerAl Viro <viro@zeniv.linux.org.uk>2016-05-29 16:22:09 -0400
commit77d5a6b7d9924e2ebb96c6e80bb9fc78615e41b5 (patch)
tree81db85dbb4b7e90ea233953d07acaf52c4a8fa77
parentacc29fb8f7921ac85828021cf884579957446d3b (diff)
9p: new helper - v9fs_parent_fid()
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
-rw-r--r--fs/9p/fid.h4
-rw-r--r--fs/9p/vfs_inode.c10
-rw-r--r--fs/9p/vfs_inode_dotl.c16
3 files changed, 14 insertions, 16 deletions
diff --git a/fs/9p/fid.h b/fs/9p/fid.h
index 2b6787fcb626..12700df0bb51 100644
--- a/fs/9p/fid.h
+++ b/fs/9p/fid.h
@@ -24,6 +24,10 @@
24#include <linux/list.h> 24#include <linux/list.h>
25 25
26struct p9_fid *v9fs_fid_lookup(struct dentry *dentry); 26struct p9_fid *v9fs_fid_lookup(struct dentry *dentry);
27static inline struct p9_fid *v9fs_parent_fid(struct dentry *dentry)
28{
29 return v9fs_fid_lookup(dentry->d_parent);
30}
27struct p9_fid *v9fs_fid_clone(struct dentry *dentry); 31struct p9_fid *v9fs_fid_clone(struct dentry *dentry);
28void v9fs_fid_add(struct dentry *dentry, struct p9_fid *fid); 32void v9fs_fid_add(struct dentry *dentry, struct p9_fid *fid);
29struct p9_fid *v9fs_writeback_fid(struct dentry *dentry); 33struct p9_fid *v9fs_writeback_fid(struct dentry *dentry);
diff --git a/fs/9p/vfs_inode.c b/fs/9p/vfs_inode.c
index f4645c515262..cca44862f2cf 100644
--- a/fs/9p/vfs_inode.c
+++ b/fs/9p/vfs_inode.c
@@ -595,7 +595,7 @@ static int v9fs_remove(struct inode *dir, struct dentry *dentry, int flags)
595 595
596 v9ses = v9fs_inode2v9ses(dir); 596 v9ses = v9fs_inode2v9ses(dir);
597 inode = d_inode(dentry); 597 inode = d_inode(dentry);
598 dfid = v9fs_fid_lookup(dentry->d_parent); 598 dfid = v9fs_parent_fid(dentry);
599 if (IS_ERR(dfid)) { 599 if (IS_ERR(dfid)) {
600 retval = PTR_ERR(dfid); 600 retval = PTR_ERR(dfid);
601 p9_debug(P9_DEBUG_VFS, "fid lookup failed %d\n", retval); 601 p9_debug(P9_DEBUG_VFS, "fid lookup failed %d\n", retval);
@@ -653,7 +653,7 @@ v9fs_create(struct v9fs_session_info *v9ses, struct inode *dir,
653 ofid = NULL; 653 ofid = NULL;
654 fid = NULL; 654 fid = NULL;
655 name = (char *) dentry->d_name.name; 655 name = (char *) dentry->d_name.name;
656 dfid = v9fs_fid_lookup(dentry->d_parent); 656 dfid = v9fs_parent_fid(dentry);
657 if (IS_ERR(dfid)) { 657 if (IS_ERR(dfid)) {
658 err = PTR_ERR(dfid); 658 err = PTR_ERR(dfid);
659 p9_debug(P9_DEBUG_VFS, "fid lookup failed %d\n", err); 659 p9_debug(P9_DEBUG_VFS, "fid lookup failed %d\n", err);
@@ -798,7 +798,7 @@ struct dentry *v9fs_vfs_lookup(struct inode *dir, struct dentry *dentry,
798 798
799 v9ses = v9fs_inode2v9ses(dir); 799 v9ses = v9fs_inode2v9ses(dir);
800 /* We can walk d_parent because we hold the dir->i_mutex */ 800 /* We can walk d_parent because we hold the dir->i_mutex */
801 dfid = v9fs_fid_lookup(dentry->d_parent); 801 dfid = v9fs_parent_fid(dentry);
802 if (IS_ERR(dfid)) 802 if (IS_ERR(dfid))
803 return ERR_CAST(dfid); 803 return ERR_CAST(dfid);
804 804
@@ -975,13 +975,13 @@ v9fs_vfs_rename(struct inode *old_dir, struct dentry *old_dentry,
975 if (IS_ERR(oldfid)) 975 if (IS_ERR(oldfid))
976 return PTR_ERR(oldfid); 976 return PTR_ERR(oldfid);
977 977
978 olddirfid = v9fs_fid_clone(old_dentry->d_parent); 978 olddirfid = v9fs_parent_fid(old_dentry);
979 if (IS_ERR(olddirfid)) { 979 if (IS_ERR(olddirfid)) {
980 retval = PTR_ERR(olddirfid); 980 retval = PTR_ERR(olddirfid);
981 goto done; 981 goto done;
982 } 982 }
983 983
984 newdirfid = v9fs_fid_clone(new_dentry->d_parent); 984 newdirfid = v9fs_parent_fid(new_dentry);
985 if (IS_ERR(newdirfid)) { 985 if (IS_ERR(newdirfid)) {
986 retval = PTR_ERR(newdirfid); 986 retval = PTR_ERR(newdirfid);
987 goto clunk_olddir; 987 goto clunk_olddir;
diff --git a/fs/9p/vfs_inode_dotl.c b/fs/9p/vfs_inode_dotl.c
index a34702c998f5..7432e1615311 100644
--- a/fs/9p/vfs_inode_dotl.c
+++ b/fs/9p/vfs_inode_dotl.c
@@ -273,7 +273,7 @@ v9fs_vfs_atomic_open_dotl(struct inode *dir, struct dentry *dentry,
273 p9_debug(P9_DEBUG_VFS, "name:%s flags:0x%x mode:0x%hx\n", 273 p9_debug(P9_DEBUG_VFS, "name:%s flags:0x%x mode:0x%hx\n",
274 name, flags, omode); 274 name, flags, omode);
275 275
276 dfid = v9fs_fid_lookup(dentry->d_parent); 276 dfid = v9fs_parent_fid(dentry);
277 if (IS_ERR(dfid)) { 277 if (IS_ERR(dfid)) {
278 err = PTR_ERR(dfid); 278 err = PTR_ERR(dfid);
279 p9_debug(P9_DEBUG_VFS, "fid lookup failed %d\n", err); 279 p9_debug(P9_DEBUG_VFS, "fid lookup failed %d\n", err);
@@ -389,7 +389,6 @@ static int v9fs_vfs_mkdir_dotl(struct inode *dir,
389 umode_t mode; 389 umode_t mode;
390 struct inode *inode; 390 struct inode *inode;
391 struct p9_qid qid; 391 struct p9_qid qid;
392 struct dentry *dir_dentry;
393 struct posix_acl *dacl = NULL, *pacl = NULL; 392 struct posix_acl *dacl = NULL, *pacl = NULL;
394 393
395 p9_debug(P9_DEBUG_VFS, "name %pd\n", dentry); 394 p9_debug(P9_DEBUG_VFS, "name %pd\n", dentry);
@@ -400,8 +399,7 @@ static int v9fs_vfs_mkdir_dotl(struct inode *dir,
400 if (dir->i_mode & S_ISGID) 399 if (dir->i_mode & S_ISGID)
401 omode |= S_ISGID; 400 omode |= S_ISGID;
402 401
403 dir_dentry = dentry->d_parent; 402 dfid = v9fs_parent_fid(dentry);
404 dfid = v9fs_fid_lookup(dir_dentry);
405 if (IS_ERR(dfid)) { 403 if (IS_ERR(dfid)) {
406 err = PTR_ERR(dfid); 404 err = PTR_ERR(dfid);
407 p9_debug(P9_DEBUG_VFS, "fid lookup failed %d\n", err); 405 p9_debug(P9_DEBUG_VFS, "fid lookup failed %d\n", err);
@@ -691,7 +689,7 @@ v9fs_vfs_symlink_dotl(struct inode *dir, struct dentry *dentry,
691 p9_debug(P9_DEBUG_VFS, "%lu,%s,%s\n", dir->i_ino, name, symname); 689 p9_debug(P9_DEBUG_VFS, "%lu,%s,%s\n", dir->i_ino, name, symname);
692 v9ses = v9fs_inode2v9ses(dir); 690 v9ses = v9fs_inode2v9ses(dir);
693 691
694 dfid = v9fs_fid_lookup(dentry->d_parent); 692 dfid = v9fs_parent_fid(dentry);
695 if (IS_ERR(dfid)) { 693 if (IS_ERR(dfid)) {
696 err = PTR_ERR(dfid); 694 err = PTR_ERR(dfid);
697 p9_debug(P9_DEBUG_VFS, "fid lookup failed %d\n", err); 695 p9_debug(P9_DEBUG_VFS, "fid lookup failed %d\n", err);
@@ -762,7 +760,6 @@ v9fs_vfs_link_dotl(struct dentry *old_dentry, struct inode *dir,
762 struct dentry *dentry) 760 struct dentry *dentry)
763{ 761{
764 int err; 762 int err;
765 struct dentry *dir_dentry;
766 struct p9_fid *dfid, *oldfid; 763 struct p9_fid *dfid, *oldfid;
767 struct v9fs_session_info *v9ses; 764 struct v9fs_session_info *v9ses;
768 765
@@ -770,8 +767,7 @@ v9fs_vfs_link_dotl(struct dentry *old_dentry, struct inode *dir,
770 dir->i_ino, old_dentry, dentry); 767 dir->i_ino, old_dentry, dentry);
771 768
772 v9ses = v9fs_inode2v9ses(dir); 769 v9ses = v9fs_inode2v9ses(dir);
773 dir_dentry = dentry->d_parent; 770 dfid = v9fs_parent_fid(dentry);
774 dfid = v9fs_fid_lookup(dir_dentry);
775 if (IS_ERR(dfid)) 771 if (IS_ERR(dfid))
776 return PTR_ERR(dfid); 772 return PTR_ERR(dfid);
777 773
@@ -822,7 +818,6 @@ v9fs_vfs_mknod_dotl(struct inode *dir, struct dentry *dentry, umode_t omode,
822 struct p9_fid *fid = NULL, *dfid = NULL; 818 struct p9_fid *fid = NULL, *dfid = NULL;
823 struct inode *inode; 819 struct inode *inode;
824 struct p9_qid qid; 820 struct p9_qid qid;
825 struct dentry *dir_dentry;
826 struct posix_acl *dacl = NULL, *pacl = NULL; 821 struct posix_acl *dacl = NULL, *pacl = NULL;
827 822
828 p9_debug(P9_DEBUG_VFS, " %lu,%pd mode: %hx MAJOR: %u MINOR: %u\n", 823 p9_debug(P9_DEBUG_VFS, " %lu,%pd mode: %hx MAJOR: %u MINOR: %u\n",
@@ -830,8 +825,7 @@ v9fs_vfs_mknod_dotl(struct inode *dir, struct dentry *dentry, umode_t omode,
830 MAJOR(rdev), MINOR(rdev)); 825 MAJOR(rdev), MINOR(rdev));
831 826
832 v9ses = v9fs_inode2v9ses(dir); 827 v9ses = v9fs_inode2v9ses(dir);
833 dir_dentry = dentry->d_parent; 828 dfid = v9fs_parent_fid(dentry);
834 dfid = v9fs_fid_lookup(dir_dentry);
835 if (IS_ERR(dfid)) { 829 if (IS_ERR(dfid)) {
836 err = PTR_ERR(dfid); 830 err = PTR_ERR(dfid);
837 p9_debug(P9_DEBUG_VFS, "fid lookup failed %d\n", err); 831 p9_debug(P9_DEBUG_VFS, "fid lookup failed %d\n", err);