]> rtime.felk.cvut.cz Git - linux-imx.git/blobdiff - net/sunrpc/clnt.c
Merge tag 'nfs-for-3.11-4' of git://git.linux-nfs.org/projects/trondmy/linux-nfs
[linux-imx.git] / net / sunrpc / clnt.c
index aa401560777b22ea0ec54abba730007f3347ea57..ecbc4e3d83ad3f816caa51b6ec942461dac9f090 100644 (file)
@@ -128,9 +128,7 @@ static struct dentry *rpc_setup_pipedir_sb(struct super_block *sb,
 {
        static uint32_t clntid;
        char name[15];
-       struct qstr q = { .name = name };
        struct dentry *dir, *dentry;
-       int error;
 
        dir = rpc_d_lookup_sb(sb, dir_name);
        if (dir == NULL) {
@@ -138,19 +136,17 @@ static struct dentry *rpc_setup_pipedir_sb(struct super_block *sb,
                return dir;
        }
        for (;;) {
-               q.len = snprintf(name, sizeof(name), "clnt%x", (unsigned int)clntid++);
+               snprintf(name, sizeof(name), "clnt%x", (unsigned int)clntid++);
                name[sizeof(name) - 1] = '\0';
-               q.hash = full_name_hash(q.name, q.len);
-               dentry = rpc_create_client_dir(dir, &q, clnt);
+               dentry = rpc_create_client_dir(dir, name, clnt);
                if (!IS_ERR(dentry))
                        break;
-               error = PTR_ERR(dentry);
-               if (error != -EEXIST) {
-                       printk(KERN_INFO "RPC: Couldn't create pipefs entry"
-                                       " %s/%s, error %d\n",
-                                       dir_name, name, error);
-                       break;
-               }
+               if (dentry == ERR_PTR(-EEXIST))
+                       continue;
+               printk(KERN_INFO "RPC: Couldn't create pipefs entry"
+                               " %s/%s, error %ld\n",
+                               dir_name, name, PTR_ERR(dentry));
+               break;
        }
        dput(dir);
        return dentry;
@@ -313,6 +309,7 @@ static int rpc_client_register(const struct rpc_create_args *args,
        return 0;
 err_auth:
        pipefs_sb = rpc_get_sb_net(net);
+       rpc_unregister_client(clnt);
        __rpc_clnt_remove_pipedir(clnt);
 out:
        if (pipefs_sb)
@@ -1663,6 +1660,10 @@ call_connect(struct rpc_task *task)
                task->tk_action = call_connect_status;
                if (task->tk_status < 0)
                        return;
+               if (task->tk_flags & RPC_TASK_NOCONNECT) {
+                       rpc_exit(task, -ENOTCONN);
+                       return;
+               }
                xprt_connect(task);
        }
 }