NFSv4: A root pathname is sent as a zero component4
authorAndy Adamson <andros@citi.umich.edu>
Fri, 9 Jun 2006 13:34:30 +0000 (09:34 -0400)
committerTrond Myklebust <Trond.Myklebust@netapp.com>
Fri, 9 Jun 2006 13:34:30 +0000 (09:34 -0400)
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
fs/nfs/nfs4xdr.c

index 646f16d..1750d99 100644 (file)
@@ -2408,8 +2408,10 @@ static int decode_pathname(struct xdr_stream *xdr, struct nfs4_pathname *path)
 
        READ_BUF(4);
        READ32(n);
 
        READ_BUF(4);
        READ32(n);
-       if (n <= 0)
+       if (n < 0)
                goto out_eio;
                goto out_eio;
+       if (n == 0)
+               goto root_path;
        dprintk("path ");
        path->ncomponents = 0;
        while (path->ncomponents < n) {
        dprintk("path ");
        path->ncomponents = 0;
        while (path->ncomponents < n) {
@@ -2430,6 +2432,13 @@ static int decode_pathname(struct xdr_stream *xdr, struct nfs4_pathname *path)
 out:
        dprintk("\n");
        return status;
 out:
        dprintk("\n");
        return status;
+root_path:
+/* a root pathname is sent as a zero component4 */
+       path->ncomponents = 1;
+       path->components[0].len=0;
+       path->components[0].data=NULL;
+       dprintk("path /\n");
+       goto out;
 out_eio:
        dprintk(" status %d", status);
        status = -EIO;
 out_eio:
        dprintk(" status %d", status);
        status = -EIO;