return err;
 }
 
-static int rpc_pipefs_event(struct notifier_block *nb, unsigned long event,
-                           void *ptr)
+static struct nfs_client *nfs_get_client_for_event(struct net *net, int event)
 {
-       struct super_block *sb = ptr;
-       struct nfs_net *nn = net_generic(sb->s_fs_info, nfs_net_id);
+       struct nfs_net *nn = net_generic(net, nfs_net_id);
+       struct dentry *cl_dentry;
        struct nfs_client *clp;
-       int error = 0;
 
        spin_lock(&nn->nfs_client_lock);
        list_for_each_entry(clp, &nn->nfs_client_list, cl_share_link) {
                if (clp->rpc_ops != &nfs_v4_clientops)
                        continue;
+               cl_dentry = clp->cl_idmap->idmap_pipe->dentry;
+               if (((event == RPC_PIPEFS_MOUNT) && cl_dentry) ||
+                   ((event == RPC_PIPEFS_UMOUNT) && !cl_dentry))
+                       continue;
+               atomic_inc(&clp->cl_count);
+               spin_unlock(&nn->nfs_client_lock);
+               return clp;
+       }
+       spin_unlock(&nn->nfs_client_lock);
+       return NULL;
+}
+
+static int rpc_pipefs_event(struct notifier_block *nb, unsigned long event,
+                           void *ptr)
+{
+       struct super_block *sb = ptr;
+       struct nfs_client *clp;
+       int error = 0;
+
+       while ((clp = nfs_get_client_for_event(sb->s_fs_info, event))) {
                error = __rpc_pipefs_event(clp, event, sb);
+               nfs_put_client(clp);
                if (error)
                        break;
        }
-       spin_unlock(&nn->nfs_client_lock);
        return error;
 }