NFS: Check return value from rpc_queue_upcall()
authorBryan Schumaker <bjschuma@netapp.com>
Mon, 12 Mar 2012 15:33:00 +0000 (11:33 -0400)
committerTrond Myklebust <Trond.Myklebust@netapp.com>
Mon, 12 Mar 2012 16:51:42 +0000 (12:51 -0400)
This function could fail to queue the upcall if rpc.idmapd is not running,
causing a warning message to be printed.  Instead, I want to check the
return value and revoke the key if the upcall can't be run.

Signed-off-by: Bryan Schumaker <bjschuma@netapp.com>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

fs/nfs/idmap.c

index f9f89fc..a701a83 100644 (file)
@@ -656,14 +656,19 @@ static int nfs_idmap_legacy_upcall(struct key_construction *cons,
 
        idmap->idmap_key_cons = cons;
 
-       return rpc_queue_upcall(idmap->idmap_pipe, msg);
+       ret = rpc_queue_upcall(idmap->idmap_pipe, msg);
+       if (ret < 0)
+               goto out2;
+
+       return ret;
 
 out2:
        kfree(im);
 out1:
        kfree(msg);
 out0:
-       complete_request_key(cons, ret);
+       key_revoke(cons->key);
+       key_revoke(cons->authkey);
        return ret;
 }