aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2013-07-14 14:42:26 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2013-07-14 14:42:26 -0400
commit41d9884c44237cd66e2bdbc412028b29196b344c (patch)
tree7a386f6de2f07c01f87f3a16965c9bb8b40f63c1 /net
parent63345b4794aef4ebe16502cfe35b02bc9822d763 (diff)
parentdae3794fd603b92dcbac2859fe0bc7fe129a5188 (diff)
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
Pull more vfs stuff from Al Viro: "O_TMPFILE ABI changes, Oleg's fput() series, misc cleanups, including making simple_lookup() usable for filesystems with non-NULL s_d_op, which allows us to get rid of quite a bit of ugliness" * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs: sunrpc: now we can just set ->s_d_op cgroup: we can use simple_lookup() now efivarfs: we can use simple_lookup() now make simple_lookup() usable for filesystems that set ->s_d_op configfs: don't open-code d_alloc_name() __rpc_lookup_create_exclusive: pass string instead of qstr rpc_create_*_dir: don't bother with qstr llist: llist_add() can use llist_add_batch() llist: fix/simplify llist_add() and llist_add_batch() fput: turn "list_head delayed_fput_list" into llist_head fs/file_table.c:fput(): add comment Safer ABI for O_TMPFILE
Diffstat (limited to 'net')
-rw-r--r--net/sunrpc/cache.c18
-rw-r--r--net/sunrpc/clnt.c20
-rw-r--r--net/sunrpc/rpc_pipe.c40
3 files changed, 26 insertions, 52 deletions
diff --git a/net/sunrpc/cache.c b/net/sunrpc/cache.c
index 49eb37010aa3..a72de074172d 100644
--- a/net/sunrpc/cache.c
+++ b/net/sunrpc/cache.c
@@ -1823,19 +1823,11 @@ int sunrpc_cache_register_pipefs(struct dentry *parent,
1823 const char *name, umode_t umode, 1823 const char *name, umode_t umode,
1824 struct cache_detail *cd) 1824 struct cache_detail *cd)
1825{ 1825{
1826 struct qstr q; 1826 struct dentry *dir = rpc_create_cache_dir(parent, name, umode, cd);
1827 struct dentry *dir; 1827 if (IS_ERR(dir))
1828 int ret = 0; 1828 return PTR_ERR(dir);
1829 1829 cd->u.pipefs.dir = dir;
1830 q.name = name; 1830 return 0;
1831 q.len = strlen(name);
1832 q.hash = full_name_hash(q.name, q.len);
1833 dir = rpc_create_cache_dir(parent, &q, umode, cd);
1834 if (!IS_ERR(dir))
1835 cd->u.pipefs.dir = dir;
1836 else
1837 ret = PTR_ERR(dir);
1838 return ret;
1839} 1831}
1840EXPORT_SYMBOL_GPL(sunrpc_cache_register_pipefs); 1832EXPORT_SYMBOL_GPL(sunrpc_cache_register_pipefs);
1841 1833
diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c
index aa401560777b..9963584605c0 100644
--- a/net/sunrpc/clnt.c
+++ b/net/sunrpc/clnt.c
@@ -128,9 +128,7 @@ static struct dentry *rpc_setup_pipedir_sb(struct super_block *sb,
128{ 128{
129 static uint32_t clntid; 129 static uint32_t clntid;
130 char name[15]; 130 char name[15];
131 struct qstr q = { .name = name };
132 struct dentry *dir, *dentry; 131 struct dentry *dir, *dentry;
133 int error;
134 132
135 dir = rpc_d_lookup_sb(sb, dir_name); 133 dir = rpc_d_lookup_sb(sb, dir_name);
136 if (dir == NULL) { 134 if (dir == NULL) {
@@ -138,19 +136,17 @@ static struct dentry *rpc_setup_pipedir_sb(struct super_block *sb,
138 return dir; 136 return dir;
139 } 137 }
140 for (;;) { 138 for (;;) {
141 q.len = snprintf(name, sizeof(name), "clnt%x", (unsigned int)clntid++); 139 snprintf(name, sizeof(name), "clnt%x", (unsigned int)clntid++);
142 name[sizeof(name) - 1] = '\0'; 140 name[sizeof(name) - 1] = '\0';
143 q.hash = full_name_hash(q.name, q.len); 141 dentry = rpc_create_client_dir(dir, name, clnt);
144 dentry = rpc_create_client_dir(dir, &q, clnt);
145 if (!IS_ERR(dentry)) 142 if (!IS_ERR(dentry))
146 break; 143 break;
147 error = PTR_ERR(dentry); 144 if (dentry == ERR_PTR(-EEXIST))
148 if (error != -EEXIST) { 145 continue;
149 printk(KERN_INFO "RPC: Couldn't create pipefs entry" 146 printk(KERN_INFO "RPC: Couldn't create pipefs entry"
150 " %s/%s, error %d\n", 147 " %s/%s, error %ld\n",
151 dir_name, name, error); 148 dir_name, name, PTR_ERR(dentry));
152 break; 149 break;
153 }
154 } 150 }
155 dput(dir); 151 dput(dir);
156 return dentry; 152 return dentry;
diff --git a/net/sunrpc/rpc_pipe.c b/net/sunrpc/rpc_pipe.c
index 61239a2cb786..406859cc68aa 100644
--- a/net/sunrpc/rpc_pipe.c
+++ b/net/sunrpc/rpc_pipe.c
@@ -673,13 +673,12 @@ static int __rpc_rmpipe(struct inode *dir, struct dentry *dentry)
673} 673}
674 674
675static struct dentry *__rpc_lookup_create_exclusive(struct dentry *parent, 675static struct dentry *__rpc_lookup_create_exclusive(struct dentry *parent,
676 struct qstr *name) 676 const char *name)
677{ 677{
678 struct dentry *dentry; 678 struct qstr q = QSTR_INIT(name, strlen(name));
679 679 struct dentry *dentry = d_hash_and_lookup(parent, &q);
680 dentry = d_lookup(parent, name);
681 if (!dentry) { 680 if (!dentry) {
682 dentry = d_alloc(parent, name); 681 dentry = d_alloc(parent, &q);
683 if (!dentry) 682 if (!dentry)
684 return ERR_PTR(-ENOMEM); 683 return ERR_PTR(-ENOMEM);
685 } 684 }
@@ -704,8 +703,7 @@ static void __rpc_depopulate(struct dentry *parent,
704 for (i = start; i < eof; i++) { 703 for (i = start; i < eof; i++) {
705 name.name = files[i].name; 704 name.name = files[i].name;
706 name.len = strlen(files[i].name); 705 name.len = strlen(files[i].name);
707 name.hash = full_name_hash(name.name, name.len); 706 dentry = d_hash_and_lookup(parent, &name);
708 dentry = d_lookup(parent, &name);
709 707
710 if (dentry == NULL) 708 if (dentry == NULL)
711 continue; 709 continue;
@@ -747,12 +745,7 @@ static int rpc_populate(struct dentry *parent,
747 745
748 mutex_lock(&dir->i_mutex); 746 mutex_lock(&dir->i_mutex);
749 for (i = start; i < eof; i++) { 747 for (i = start; i < eof; i++) {
750 struct qstr q; 748 dentry = __rpc_lookup_create_exclusive(parent, files[i].name);
751
752 q.name = files[i].name;
753 q.len = strlen(files[i].name);
754 q.hash = full_name_hash(q.name, q.len);
755 dentry = __rpc_lookup_create_exclusive(parent, &q);
756 err = PTR_ERR(dentry); 749 err = PTR_ERR(dentry);
757 if (IS_ERR(dentry)) 750 if (IS_ERR(dentry))
758 goto out_bad; 751 goto out_bad;
@@ -785,7 +778,7 @@ out_bad:
785} 778}
786 779
787static struct dentry *rpc_mkdir_populate(struct dentry *parent, 780static struct dentry *rpc_mkdir_populate(struct dentry *parent,
788 struct qstr *name, umode_t mode, void *private, 781 const char *name, umode_t mode, void *private,
789 int (*populate)(struct dentry *, void *), void *args_populate) 782 int (*populate)(struct dentry *, void *), void *args_populate)
790{ 783{
791 struct dentry *dentry; 784 struct dentry *dentry;
@@ -856,7 +849,6 @@ struct dentry *rpc_mkpipe_dentry(struct dentry *parent, const char *name,
856 struct dentry *dentry; 849 struct dentry *dentry;
857 struct inode *dir = parent->d_inode; 850 struct inode *dir = parent->d_inode;
858 umode_t umode = S_IFIFO | S_IRUSR | S_IWUSR; 851 umode_t umode = S_IFIFO | S_IRUSR | S_IWUSR;
859 struct qstr q;
860 int err; 852 int err;
861 853
862 if (pipe->ops->upcall == NULL) 854 if (pipe->ops->upcall == NULL)
@@ -864,12 +856,8 @@ struct dentry *rpc_mkpipe_dentry(struct dentry *parent, const char *name,
864 if (pipe->ops->downcall == NULL) 856 if (pipe->ops->downcall == NULL)
865 umode &= ~S_IWUGO; 857 umode &= ~S_IWUGO;
866 858
867 q.name = name;
868 q.len = strlen(name);
869 q.hash = full_name_hash(q.name, q.len),
870
871 mutex_lock_nested(&dir->i_mutex, I_MUTEX_PARENT); 859 mutex_lock_nested(&dir->i_mutex, I_MUTEX_PARENT);
872 dentry = __rpc_lookup_create_exclusive(parent, &q); 860 dentry = __rpc_lookup_create_exclusive(parent, name);
873 if (IS_ERR(dentry)) 861 if (IS_ERR(dentry))
874 goto out; 862 goto out;
875 err = __rpc_mkpipe_dentry(dir, dentry, umode, &rpc_pipe_fops, 863 err = __rpc_mkpipe_dentry(dir, dentry, umode, &rpc_pipe_fops,
@@ -940,8 +928,8 @@ static void rpc_clntdir_depopulate(struct dentry *dentry)
940 928
941/** 929/**
942 * rpc_create_client_dir - Create a new rpc_client directory in rpc_pipefs 930 * rpc_create_client_dir - Create a new rpc_client directory in rpc_pipefs
943 * @dentry: dentry from the rpc_pipefs root to the new directory 931 * @dentry: the parent of new directory
944 * @name: &struct qstr for the name 932 * @name: the name of new directory
945 * @rpc_client: rpc client to associate with this directory 933 * @rpc_client: rpc client to associate with this directory
946 * 934 *
947 * This creates a directory at the given @path associated with 935 * This creates a directory at the given @path associated with
@@ -950,7 +938,7 @@ static void rpc_clntdir_depopulate(struct dentry *dentry)
950 * later be created using rpc_mkpipe(). 938 * later be created using rpc_mkpipe().
951 */ 939 */
952struct dentry *rpc_create_client_dir(struct dentry *dentry, 940struct dentry *rpc_create_client_dir(struct dentry *dentry,
953 struct qstr *name, 941 const char *name,
954 struct rpc_clnt *rpc_client) 942 struct rpc_clnt *rpc_client)
955{ 943{
956 return rpc_mkdir_populate(dentry, name, S_IRUGO | S_IXUGO, NULL, 944 return rpc_mkdir_populate(dentry, name, S_IRUGO | S_IXUGO, NULL,
@@ -996,7 +984,7 @@ static void rpc_cachedir_depopulate(struct dentry *dentry)
996 rpc_depopulate(dentry, cache_pipefs_files, 0, 3); 984 rpc_depopulate(dentry, cache_pipefs_files, 0, 3);
997} 985}
998 986
999struct dentry *rpc_create_cache_dir(struct dentry *parent, struct qstr *name, 987struct dentry *rpc_create_cache_dir(struct dentry *parent, const char *name,
1000 umode_t umode, struct cache_detail *cd) 988 umode_t umode, struct cache_detail *cd)
1001{ 989{
1002 return rpc_mkdir_populate(parent, name, umode, NULL, 990 return rpc_mkdir_populate(parent, name, umode, NULL,
@@ -1076,9 +1064,7 @@ struct dentry *rpc_d_lookup_sb(const struct super_block *sb,
1076 const unsigned char *dir_name) 1064 const unsigned char *dir_name)
1077{ 1065{
1078 struct qstr dir = QSTR_INIT(dir_name, strlen(dir_name)); 1066 struct qstr dir = QSTR_INIT(dir_name, strlen(dir_name));
1079 1067 return d_hash_and_lookup(sb->s_root, &dir);
1080 dir.hash = full_name_hash(dir.name, dir.len);
1081 return d_lookup(sb->s_root, &dir);
1082} 1068}
1083EXPORT_SYMBOL_GPL(rpc_d_lookup_sb); 1069EXPORT_SYMBOL_GPL(rpc_d_lookup_sb);
1084 1070