nfsd4: don't pretend to support write delegations
authorJ. Bruce Fields <bfields@redhat.com>
Wed, 28 Jul 2010 14:08:57 +0000 (10:08 -0400)
committerJ. Bruce Fields <bfields@redhat.com>
Thu, 29 Jul 2010 20:05:51 +0000 (16:05 -0400)
The delegation code mostly pretends to support either read or write
delegations.  However, correct support for write delegations would
require, for example, breaking of delegations (and/or implementation of
cb_getattr) on stat.  Currently all that stops us from handing out
delegations is a subtle reference-counting issue.

Avoid confusion by adding an earlier check that explicitly refuses write
delegations.

For now, though, I'm not going so far as to rip out existing
half-support for write delegations, in case we get around to using that
soon.

Signed-off-by: J. Bruce Fields <bfields@redhat.com>
fs/nfsd/nfs4state.c

index 9cc3b78..c07c988 100644 (file)
@@ -170,6 +170,13 @@ alloc_init_deleg(struct nfs4_client *clp, struct nfs4_stateid *stp, struct svc_f
        struct nfs4_cb_conn *cb = &stp->st_stateowner->so_client->cl_cb_conn;
 
        dprintk("NFSD alloc_init_deleg\n");
+       /*
+        * Major work on the lease subsystem (for example, to support
+        * calbacks on stat) will be required before we can support
+        * write delegations properly.
+        */
+       if (type != NFS4_OPEN_DELEGATE_READ)
+               return NULL;
        if (fp->fi_had_conflict)
                return NULL;
        if (num_delegations > max_delegations)