diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2016-05-29 15:29:26 -0400 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2016-05-29 16:22:09 -0400 |
commit | 77d5a6b7d9924e2ebb96c6e80bb9fc78615e41b5 (patch) | |
tree | 81db85dbb4b7e90ea233953d07acaf52c4a8fa77 | |
parent | acc29fb8f7921ac85828021cf884579957446d3b (diff) |
9p: new helper - v9fs_parent_fid()
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
-rw-r--r-- | fs/9p/fid.h | 4 | ||||
-rw-r--r-- | fs/9p/vfs_inode.c | 10 | ||||
-rw-r--r-- | fs/9p/vfs_inode_dotl.c | 16 |
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 | ||
26 | struct p9_fid *v9fs_fid_lookup(struct dentry *dentry); | 26 | struct p9_fid *v9fs_fid_lookup(struct dentry *dentry); |
27 | static inline struct p9_fid *v9fs_parent_fid(struct dentry *dentry) | ||
28 | { | ||
29 | return v9fs_fid_lookup(dentry->d_parent); | ||
30 | } | ||
27 | struct p9_fid *v9fs_fid_clone(struct dentry *dentry); | 31 | struct p9_fid *v9fs_fid_clone(struct dentry *dentry); |
28 | void v9fs_fid_add(struct dentry *dentry, struct p9_fid *fid); | 32 | void v9fs_fid_add(struct dentry *dentry, struct p9_fid *fid); |
29 | struct p9_fid *v9fs_writeback_fid(struct dentry *dentry); | 33 | struct 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); |