.release        = tasks_release,
  };
  
 -      if (!debugfs_create_symlink(link, clnt->cl_debugfs, name))
 -              return -1;
+ static int do_xprt_debugfs(struct rpc_clnt *clnt, struct rpc_xprt *xprt, void *numv)
+ {
+       int len;
+       char name[24]; /* enough for "../../rpc_xprt/ + 8 hex digits + NULL */
+       char link[9]; /* enough for 8 hex digits + NULL */
+       int *nump = numv;
+ 
+       if (IS_ERR_OR_NULL(xprt->debugfs))
+               return 0;
+       len = snprintf(name, sizeof(name), "../../rpc_xprt/%s",
+                      xprt->debugfs->d_name.name);
+       if (len > sizeof(name))
+               return -1;
+       if (*nump == 0)
+               strcpy(link, "xprt");
+       else {
+               len = snprintf(link, sizeof(link), "xprt%d", *nump);
+               if (len > sizeof(link))
+                       return -1;
+       }
++      debugfs_create_symlink(link, clnt->cl_debugfs, name);
+       (*nump)++;
+       return 0;
+ }
+ 
  void
  rpc_clnt_debugfs_register(struct rpc_clnt *clnt)
  {
        int len;
-       char name[24]; /* enough for "../../rpc_xprt/ + 8 hex digits + NULL */
-       struct rpc_xprt *xprt;
+       char name[9]; /* enough for 8 hex digits + NULL */
+       int xprtnum = 0;
  
 -      /* Already registered? */
 -      if (clnt->cl_debugfs || !rpc_clnt_dir)
 -              return;
 -
        len = snprintf(name, sizeof(name), "%x", clnt->cl_clid);
        if (len >= sizeof(name))
                return;
  
        /* make the per-client dir */
        clnt->cl_debugfs = debugfs_create_dir(name, rpc_clnt_dir);
 -      if (!clnt->cl_debugfs)
 -              return;
  
        /* make tasks file */
 -      if (!debugfs_create_file("tasks", S_IFREG | 0400, clnt->cl_debugfs,
 -                               clnt, &tasks_fops))
 -              goto out_err;
 +      debugfs_create_file("tasks", S_IFREG | 0400, clnt->cl_debugfs, clnt,
 +                          &tasks_fops);
  
-       rcu_read_lock();
-       xprt = rcu_dereference(clnt->cl_xprt);
-       /* no "debugfs" dentry? Don't bother with the symlink. */
-       if (IS_ERR_OR_NULL(xprt->debugfs)) {
-               rcu_read_unlock();
-               return;
-       }
-       len = snprintf(name, sizeof(name), "../../rpc_xprt/%s",
-                       xprt->debugfs->d_name.name);
-       rcu_read_unlock();
- 
-       if (len >= sizeof(name))
 -      if (rpc_clnt_iterate_for_each_xprt(clnt, do_xprt_debugfs, &xprtnum) < 0)
--              goto out_err;
- 
-       debugfs_create_symlink("xprt", clnt->cl_debugfs, name);
--
--      return;
--out_err:
--      debugfs_remove_recursive(clnt->cl_debugfs);
--      clnt->cl_debugfs = NULL;
++      rpc_clnt_iterate_for_each_xprt(clnt, do_xprt_debugfs, &xprtnum);
  }
  
  void