[pnfs] new version of xdr for pNFS Linux client/server
Benny Halevy
bhalevy at panasas.com
Tue Aug 29 05:08:51 EDT 2006
attached now...
Benny Halevy wrote:
> It looks like the nfs error codes are stale...
> Attached is a patch to fix that and if there's no objection I'd like to
> submit it to the cvs tree (well, it compiles ;-)
>
> The only change in it that's not mechanical is in nfsd4_layoutget()
> in which the handling of the status returned by the file system's
> layout_get() method didn't make much sense to me, especially
> since nfserr_nomatching_layouttype does not exist in nfsv4.1.
> The gist of it is to return nfserr_layouttrylater for transient
> errors like ENOENT, nfserr_badlayout if layout are supported
> but no layout matches the client provided layout identification
> (I guessed the layout driver would return -ENOENT in this case)
> and in the default case return nfserr_layoutunavailable indicating
> that layouts are not supported for the file.
>
> I'm not sure if the default error is the best one... Should we allow
> the file
> system to return nfs errors rather than only system errors
> if it wishes to return a specific nfs error code (e.g. NFS4ERR_INVAL
> if a layoutget is called on a non-regular file). The nfsd can still
> verify that the file-system provided error code is within the
> spec before converting it to network order and returning upstream.
>
> switch (status) {
> case 0:
> break;
> - case -ENOENT:
> case -ENOMEM:
> - status = nfserr_layoutunavailable;
> + status = nfserr_layouttrylater;
> + break;
> + case -ENOENT:
> + status = nfserr_badlayout;
> break;
> default:
> - status = nfserr_nomatching_layouttype;
> + status = nfserr_layoutunavailable;
> }
>
> Benny
>
> Marc Eshel wrote:
>> Attached is the patch to upgrade the pNFS Linux client and server
>> code to the latest spec. If there are no objection I will check it in
>> to the cvs tree in a couple of days.
>> Marc.
>>
>> ------------------------------------------------------------------------
>>
>> Index: nfs4.h
>> ===================================================================
>> RCS file: /cvs/nfsv4/cvs/pnfs/include/linux/nfs4.h,v
>> retrieving revision 1.8
>> diff -u -r1.8 nfs4.h
>> --- nfs4.h 13 Jul 2006 17:18:46 -0000 1.8
>> +++ nfs4.h 22 Aug 2006 22:12:29 -0000
>> @@ -152,11 +152,11 @@
>> OP_VERIFY = 37,
>> OP_WRITE = 38,
>> OP_RELEASE_LOCKOWNER = 39,
>> - OP_LAYOUTGET = 40,
>> - OP_LAYOUTCOMMIT = 41,
>> - OP_LAYOUTRETURN = 42,
>> - OP_GETDEVICEINFO = 43,
>> - OP_GETDEVICELIST = 44,
>> + OP_GETDEVICEINFO = 47,
>> + OP_GETDEVICELIST = 48,
>> + OP_LAYOUTCOMMIT = 49,
>> + OP_LAYOUTGET = 50,
>> + OP_LAYOUTRETURN = 51,
>> OP_ILLEGAL = 10044,
>> };
>>
>> Index: nfs4_pnfs.h
>> ===================================================================
>> RCS file: /cvs/nfsv4/cvs/pnfs/include/linux/nfs4_pnfs.h,v
>> retrieving revision 1.10
>> diff -u -r1.10 nfs4_pnfs.h
>> --- nfs4_pnfs.h 18 Aug 2006 14:09:33 -0000 1.10
>> +++ nfs4_pnfs.h 22 Aug 2006 22:12:29 -0000
>> @@ -116,14 +116,16 @@
>>
>> struct pnfs_device
>> {
>> - unsigned int layoutclass;
>> int dev_id;
>> + int dev_type;
>> + unsigned int dev_count;
>> unsigned int dev_addr_len;
>> char dev_addr_buf[NFS4_PNFS_DEV_MAXSIZE];
>> };
>>
>> struct pnfs_devicelist {
>> unsigned int num_devs;
>> + unsigned int eof;
>> unsigned int devs_len;
>> struct pnfs_device devs[NFS4_PNFS_DEV_MAXCOUNT];
>> };
>> @@ -168,6 +170,11 @@
>> LAYOUT_OSD2_OBJECTS = 2,
>> LAYOUT_BLOCK_VOLUME = 3,
>> LAYOUT_PVFS2 = 4
>> +};
>> +
>> +enum file_layout_device_type {
>> + FILE_SIMPLE = 1,
>> + FILE_COMPLEX = 2
>> };
>>
>> #endif /* LINUX_NFS4_PNFS_H */
>> Index: nfsd/nfs4layoutxdr.h
>> ===================================================================
>> RCS file: /cvs/nfsv4/cvs/pnfs/include/linux/nfsd/nfs4layoutxdr.h,v
>> retrieving revision 1.2
>> diff -u -r1.2 nfs4layoutxdr.h
>> --- nfsd/nfs4layoutxdr.h 12 Apr 2006 17:59:58 -0000 1.2
>> +++ nfsd/nfs4layoutxdr.h 22 Aug 2006 22:12:30 -0000
>> @@ -62,13 +62,9 @@
>> struct xdr_netobj r_addr;
>> };
>>
>> -struct nfsd4_pnfs_layoutdevlist {
>> - u32 len;
>> - u32 *list;
>> -};
>> -
>> struct nfsd4_pnfs_layoutlist {
>> - struct nfsd4_pnfs_layoutdevlist dev_ids;
>> + u32 dev_id;
>> + u32 dev_index;
>> struct knfsd_fh *fhp;
>> };
>>
>> @@ -77,6 +73,8 @@
>> u32 lg_commit_through_mds; /*
>> response */
>> u64 lg_stripe_unit; /* response */
>> u64 lg_file_size; /* response */
>> + u32 lg_indexlen; /* response */
>> + u32 *lg_indexlist; /* response */
>> u32 lg_llistlen; /* response */
>> struct nfsd4_pnfs_layoutlist *lg_llist; /* response */
>> };
>> Index: nfsd/nfsd4_pnfs.h
>> ===================================================================
>> RCS file: /cvs/nfsv4/cvs/pnfs/include/linux/nfsd/nfsd4_pnfs.h,v
>> retrieving revision 1.4
>> diff -u -r1.4 nfsd4_pnfs.h
>> --- nfsd/nfsd4_pnfs.h 25 Jul 2006 04:35:03 -0000 1.4
>> +++ nfsd/nfsd4_pnfs.h 22 Aug 2006 22:12:30 -0000
>> @@ -45,7 +45,7 @@
>> * the gd_ops->layout_encode() callback */
>> struct nfsd4_pnfs_devlist {
>> u32 dev_id;
>> - u32 dev_lotype;
>> + u32 dev_type;
>> void *dev_addr; /* encoded by callback */
>> };
>>
>> @@ -56,8 +56,10 @@
>> /* nfs4_verifier */
>> u64 gd_verf; /* request - response */
>> struct export_operations *gd_ops;
>> + u32 gd_dev_type; /* response */
>> u32 gd_devlist_len; /* response */
>> struct nfsd4_pnfs_devlist *gd_devlist; /*response */
>> + u32 gd_eof;
>> };
>>
>> struct nfsd4_pnfs_getdevinfo {
>> @@ -65,7 +67,9 @@
>> u32 gd_dev_id; /* request */
>> u32 gd_maxcnt; /* request */
>> struct export_operations *gd_ops;
>> - void *gd_devaddr; /*response */
>> + u32 gd_dev_type; /* response */
>> + u32 gd_devlist_len; /* response */
>> + void *gd_devaddr; /*response */
>> };
>>
>> struct nfsd4_pnfs_layoutget {
>> Index: nfsd/state.h
>> ===================================================================
>> RCS file: /cvs/nfsv4/cvs/pnfs/include/linux/nfsd/state.h,v
>> retrieving revision 1.7
>> diff -u -r1.7 state.h
>> --- nfsd/state.h 25 Jul 2006 04:35:03 -0000 1.7
>> +++ nfsd/state.h 22 Aug 2006 22:12:30 -0000
>> @@ -139,7 +139,8 @@
>>
>> enum layout_recall_type {
>> RECALL_FILE = 1,
>> - RECALL_FSID = 2
>> + RECALL_FSID = 2,
>> + RECALL_ALL = 3
>> };
>>
>> struct nfs4_cb_layout {
>>
>> Index: callback.h
>> ===================================================================
>> RCS file: /cvs/nfsv4/cvs/pnfs/fs/nfs/callback.h,v
>> retrieving revision 1.4
>> diff -u -r1.4 callback.h
>> --- callback.h 25 Jul 2006 04:35:02 -0000 1.4
>> +++ callback.h 22 Aug 2006 22:11:58 -0000
>> @@ -62,7 +62,8 @@
>>
>> enum layout_recall_type {
>> RECALL_FILE = 1,
>> - RECALL_FSID = 2
>> + RECALL_FSID = 2,
>> + RECALL_ALL = 3
>> };
>>
>> struct cb_pnfs_layoutrecallargs {
>> Index: callback_xdr.c
>> ===================================================================
>> RCS file: /cvs/nfsv4/cvs/pnfs/fs/nfs/callback_xdr.c,v
>> retrieving revision 1.5
>> diff -u -r1.5 callback_xdr.c
>> --- callback_xdr.c 25 Jul 2006 04:35:02 -0000 1.5
>> +++ callback_xdr.c 22 Aug 2006 22:11:58 -0000
>> @@ -228,7 +228,7 @@
>> READ64(args->cbl_fsid.major);
>> READ64(args->cbl_fsid.minor);
>> }
>> - else {
>> + else if (args->cbl_recall_type == RECALL_FILE) {
>> status = decode_fh(xdr, &args->cbl_fh);
>> if (unlikely(status != 0))
>> goto out;
>> Index: nfs4filelayout.c
>> ===================================================================
>> RCS file: /cvs/nfsv4/cvs/pnfs/fs/nfs/nfs4filelayout.c,v
>> retrieving revision 1.25
>> diff -u -r1.25 nfs4filelayout.c
>> --- nfs4filelayout.c 31 Jul 2006 23:32:59 -0000 1.25
>> +++ nfs4filelayout.c 22 Aug 2006 22:11:58 -0000
>> @@ -443,6 +443,10 @@
>> READ32(fl->commit_through_mds);
>> READ64(fl->stripe_unit);
>> READ64(fl->file_size);
>> + READ32(fl->index_len);
>> + if (fl->index_len > 0) { //??? if>0 must build index list
>> + printk("filelayout_set_layout: XXX add loop for index list\n");
>> + }
>> READ32(fl->num_devs);
>>
>> dprintk("DEBUG: %s: type %d stripe_unit %lld file_size %lld devs
>> %d\n",
>> @@ -450,18 +454,11 @@
>> fl->file_size, fl->num_devs);
>>
>> for (i = 0; i < fl->num_devs; i++) {
>> - uint32_t devs_per_stripe, j;
>> -
>> - READ32(devs_per_stripe);
>>
>> /* dev_id */
>> READ32(fl->devs[i].dev_id);
>> + READ32(fl->devs[i].dev_index);
>>
>> - for (j = 1; j < devs_per_stripe; j++) {
>> - uint32_t tmp_id;
>> - READ32(tmp_id);
>> - }
>> -
>> /* fh */
>> memset(&fl->devs[i].fh, 0, sizeof(struct nfs_fh));
>> READ32(fl->devs[i].fh.size);
>> Index: nfs4filelayout.h
>> ===================================================================
>> RCS file: /cvs/nfsv4/cvs/pnfs/fs/nfs/nfs4filelayout.h,v
>> retrieving revision 1.5
>> diff -u -r1.5 nfs4filelayout.h
>> --- nfs4filelayout.h 13 Jul 2006 17:18:40 -0000 1.5
>> +++ nfs4filelayout.h 22 Aug 2006 22:11:58 -0000
>> @@ -56,6 +56,7 @@
>>
>> struct nfs4_filelayout_devs {
>> u32 dev_id;
>> + u32 dev_index;
>> struct nfs_fh fh;
>> };
>>
>> @@ -70,6 +71,7 @@
>> u32 stripe_type;
>> u32 commit_through_mds;
>> u64 stripe_unit;
>> + unsigned int index_len;
>> unsigned int num_devs;
>> struct nfs4_filelayout_devs devs[NFS4_PNFS_MAX_DEVS];
>> };
>> Index: nfs4xdr.c
>> ===================================================================
>> RCS file: /cvs/nfsv4/cvs/pnfs/fs/nfs/nfs4xdr.c,v
>> retrieving revision 1.19
>> diff -u -r1.19 nfs4xdr.c
>> --- nfs4xdr.c 13 Jul 2006 17:18:41 -0000 1.19
>> +++ nfs4xdr.c 22 Aug 2006 22:11:59 -0000
>> @@ -3787,7 +3787,7 @@
>> READ32(res->devs[cnt].dev_id); /* device id */
>>
>> READ_BUF(4);
>> - READ32(res->devs[cnt].layoutclass);
>> + READ32(res->devs[cnt].dev_type);
>>
>> READ_BUF(4);
>> READ32(len);
>> @@ -3807,6 +3807,8 @@
>> total_len += len;
>> cnt++;
>> }
>> + READ_BUF(4);
>> + READ32(res->eof);
>>
>> res->devs_len = total_len;
>> return 0;
>> @@ -3829,7 +3831,13 @@
>> READ32(res->dev_id); /* device id */
>>
>> READ_BUF(4);
>> - READ32(res->layoutclass);
>> + READ32(res->dev_type);
>> +
>> + READ_BUF(4);
>> + READ32(res->dev_count);
>> + if (res->dev_count > 1) { //??? if>1 must loop on list
>> + printk("decode_getdeviceinfo: XXX add loop \n");
>> + }
>>
>> READ_BUF(4);
>> READ32(len);
>> @@ -4820,11 +4828,14 @@
>> RESERVE_SPACE(40);
>> WRITE32(OP_LAYOUTRETURN);
>> WRITE64(args->clientid);
>> - WRITE64(args->offset);
>> - WRITE64(args->length);
>> WRITE32(args->reclaim);
>> - WRITE32(args->iomode);
>> WRITE32(args->type);
>> + WRITE32(args->iomode);
>> + if (args->type == LAYOUT_NFSV4_FILES)
>> + {
>> + WRITE64(args->offset);
>> + WRITE64(args->length);
>> + }
>> return 0;
>> }
>>
>> Index: nfs4callback.c
>> ===================================================================
>> RCS file: /cvs/nfsv4/cvs/pnfs/fs/nfsd/nfs4callback.c,v
>> retrieving revision 1.2
>> diff -u -r1.2 nfs4callback.c
>> --- nfs4callback.c 25 Jul 2006 04:35:03 -0000 1.2
>> +++ nfs4callback.c 22 Aug 2006 22:12:16 -0000
>> @@ -264,7 +264,7 @@
>> lr->cbl_layoutchanged, lr->cbl_recall_type,
>> lr->cbl_fsid.major, lr->cbl_fsid.minor);
>> }
>> - else {
>> + else if (lr->cbl_recall_type == RECALL_FILE) {
>> WRITE32(len);
>> WRITEMEM(lr->cbl_fhval, len);
>> WRITE64(lr->cbl_offset);
>> Index: nfs4filelayoutxdr.c
>> ===================================================================
>> RCS file: /cvs/nfsv4/cvs/pnfs/fs/nfsd/nfs4filelayoutxdr.c,v
>> retrieving revision 1.13
>> diff -u -r1.13 nfs4filelayoutxdr.c
>> --- nfs4filelayoutxdr.c 12 Apr 2006 18:03:42 -0000 1.13
>> +++ nfs4filelayoutxdr.c 22 Aug 2006 22:12:16 -0000
>> @@ -83,21 +83,14 @@
>> static int
>> filelayout_encode_layoutlist_item(struct nfsd4_compoundres *resp,
>> struct nfsd4_pnfs_layoutlist *item)
>> {
>> - struct nfsd4_pnfs_layoutdevlist *dlist;
>> - int i, len;
>> + int len;
>> unsigned int fhlen = item->fhp->fh_size;
>> - u32 *devid;
>> ENCODE_HEAD;
>>
>> - dlist = &item->dev_ids;
>> - len = 8 + (4 * dlist->len) + fhlen;
>> + len = 12 + fhlen;
>> RESERVE_SPACE(len);
>> - WRITE32(dlist->len);
>> -
>> - devid = dlist->list;
>> - for (i=0; i < dlist->len; i++) {
>> - WRITE32(devid[i]);
>> - }
>> + WRITE32(item->dev_id);
>> + WRITE32(item->dev_index);
>> WRITE32(fhlen);
>> WRITEMEM(&item->fhp->fh_base, fhlen);
>> ADJUST_ARGS();
>> @@ -115,7 +108,7 @@
>> ENCODE_HEAD;
>>
>> flp = (struct nfsd4_pnfs_filelayout *)layout;
>> - len = 28;
>> + len = 32;
>> RESERVE_SPACE(len + 4);
>> totlen = p; /* fill-in opaque layout length later*/
>> p++;
>> @@ -123,6 +116,10 @@
>> WRITE32(flp->lg_commit_through_mds);
>> WRITE64(flp->lg_stripe_unit);
>> WRITE64(flp->lg_file_size);
>> + WRITE32(flp->lg_indexlen);
>> + if (flp->lg_indexlen > 0) { //??? if>0 must build index list
>> + printk("filelayout_encode_layout: XXX add loop for index
>> list\n");
>> + }
>> WRITE32(flp->lg_llistlen);
>> ADJUST_ARGS();
>> for (i=0; i < flp->lg_llistlen; i++) {
>> @@ -147,8 +144,6 @@
>> return;
>> item = flp->lg_llist;
>> for (i=0; i < flp->lg_llistlen; i++) {
>> - if (item->dev_ids.list)
>> - kfree(item->dev_ids.list);
>> #if 0 /* the fh is part of nfsd4_pnfs_layoutget struct */
>> if (item->fhp)
>> kfree(item->fhp);
>> Index: nfs4proc.c
>> ===================================================================
>> RCS file: /cvs/nfsv4/cvs/pnfs/fs/nfsd/nfs4proc.c,v
>> retrieving revision 1.18
>> diff -u -r1.18 nfs4proc.c
>> --- nfs4proc.c 13 Jul 2006 17:18:41 -0000 1.18
>> +++ nfs4proc.c 22 Aug 2006 22:12:16 -0000
>> @@ -970,7 +970,6 @@
>>
>> /* set the ops for encoding the devaddr */
>> gdp->gd_ops = sb->s_export_op;
>> -
>> if (sb && sb->s_export_op->get_deviceinfo) {
>> status = sb->s_export_op->get_deviceinfo(sb, (void *)gdp);
>>
>> Index: nfs4xdr.c
>> ===================================================================
>> RCS file: /cvs/nfsv4/cvs/pnfs/fs/nfsd/nfs4xdr.c,v
>> retrieving revision 1.23
>> diff -u -r1.23 nfs4xdr.c
>> --- nfs4xdr.c 13 Jul 2006 17:18:41 -0000 1.23
>> +++ nfs4xdr.c 22 Aug 2006 22:12:16 -0000
>> @@ -1108,13 +1108,16 @@
>> {
>> DECODE_HEAD;
>>
>> - READ_BUF(36);
>> + READ_BUF(40);
>> READ64(lrp->lr_clientid);
>> - READ64(lrp->lr_offset);
>> - READ64(lrp->lr_length);
>> - READ32(lrp->lr_iomode);
>> READ32(lrp->lr_reclaim);
>> READ32(lrp->lr_type);
>> + READ32(lrp->lr_iomode);
>> + if (lrp->lr_type == LAYOUT_NFSV4_FILES)
>> + {
>> + READ64(lrp->lr_offset);
>> + READ64(lrp->lr_length);
>> + }
>>
>> DECODE_TAIL;
>> }
>> @@ -1606,6 +1609,7 @@
>> BUG_ON(bmval0 & ~NFSD_SUPPORTED_ATTRS_WORD0);
>> BUG_ON(bmval1 & ~NFSD_SUPPORTED_ATTRS_WORD1);
>>
>> +
>> if (exp->ex_fslocs.migrated) {
>> status = fattr_handle_absent_fs(&bmval0, &bmval1, &rdattr_err);
>> if (status)
>> @@ -2668,16 +2672,15 @@
>> }
>>
>> static void
>> -nfsd4_encode_devlist_item(struct nfsd4_compoundres *resp, struct
>> nfsd4_pnfs_devlist *dlist, struct export_operations *ex_ops)
>> +nfsd4_encode_devlist_item(struct nfsd4_compoundres *resp, struct
>> nfsd4_pnfs_devlist *dlist, struct export_operations *ex_ops, int lotype)
>> {
>> ENCODE_HEAD;
>>
>> RESERVE_SPACE(8);
>> WRITE32(dlist->dev_id);
>> - WRITE32(dlist->dev_lotype);
>> + WRITE32(dlist->dev_type);
>> ADJUST_ARGS();
>> - if (ex_ops->devaddr_encode == NULL &&
>> - dlist->dev_lotype == LAYOUT_NFSV4_FILES)
>> + if (ex_ops->devaddr_encode == NULL && lotype == LAYOUT_NFSV4_FILES)
>> {
>> filelayout_encode_devaddr(resp, dlist->dev_addr);
>> filelayout_free_devaddr(dlist->dev_addr);
>> @@ -2716,9 +2719,13 @@
>> item = gdevl->gd_devlist;
>> for (i = 0; i < gdevl->gd_devlist_len; i++) {
>> dprintk("%s: i %d item %p\n",__FUNCTION__, i, item);
>> - nfsd4_encode_devlist_item (resp, item, gdevl->gd_ops);
>> + nfsd4_encode_devlist_item (resp, item, gdevl->gd_ops,
>> + gdevl->gd_type);
>> item++;
>> }
>> + RESERVE_SPACE(4);
>> + WRITE32(gdevl->gd_eof);
>> + ADJUST_ARGS();
>> kfree(gdevl->gd_devlist);
>> }
>> }
>> @@ -2736,9 +2743,13 @@
>>
>> printk("%s: err %d\n",__FUNCTION__, nfserr);
>> if (!nfserr) {
>> - RESERVE_SPACE(8);
>> + RESERVE_SPACE(12);
>> WRITE32(gdev->gd_dev_id);
>> - WRITE32(gdev->gd_type);
>> + WRITE32(gdev->gd_dev_type);
>> + WRITE32(gdev->gd_devlist_len);
>> + if (gdev->gd_devlist_len > 1) { //??? if>1 must build list
>> + printk("nfsd4_encode_getdevinfo: XXX add loop list");
>> + }
>> ADJUST_ARGS();
>> if (gdev->gd_ops->devaddr_encode == NULL &&
>> gdev->gd_type == LAYOUT_NFSV4_FILES)
>>
>>
>> ------------------------------------------------------------------------
>>
>> _______________________________________________
>> pNFS mailing list
>> pNFS at linux-nfs.org
>> http://linux-nfs.org/cgi-bin/mailman/listinfo/pnfs
>
> _______________________________________________
> pNFS mailing list
> pNFS at linux-nfs.org
> http://linux-nfs.org/cgi-bin/mailman/listinfo/pnfs
-------------- next part --------------
? include/linux/autoconf.h
? include/linux/compile.h
? include/linux/version.h
? fs/nfs/.built-in.o.cmd
? fs/nfs/.callback.o.cmd
? fs/nfs/.callback_proc.o.cmd
? fs/nfs/.callback_xdr.o.cmd
? fs/nfs/.delegation.o.cmd
? fs/nfs/.dir.o.cmd
? fs/nfs/.direct.o.cmd
? fs/nfs/.file.o.cmd
? fs/nfs/.idmap.o.cmd
? fs/nfs/.inode.o.cmd
? fs/nfs/.namespace.o.cmd
? fs/nfs/.nfs.o.cmd
? fs/nfs/.nfs2xdr.o.cmd
? fs/nfs/.nfs3acl.o.cmd
? fs/nfs/.nfs3proc.o.cmd
? fs/nfs/.nfs3xdr.o.cmd
? fs/nfs/.nfs4filelayout.o.cmd
? fs/nfs/.nfs4filelayoutdev.o.cmd
? fs/nfs/.nfs4namespace.o.cmd
? fs/nfs/.nfs4proc.o.cmd
? fs/nfs/.nfs4renewd.o.cmd
? fs/nfs/.nfs4state.o.cmd
? fs/nfs/.nfs4xdr.o.cmd
? fs/nfs/.nfslayoutdriver.o.cmd
? fs/nfs/.pagelist.o.cmd
? fs/nfs/.pnfs.o.cmd
? fs/nfs/.proc.o.cmd
? fs/nfs/.read.o.cmd
? fs/nfs/.super.o.cmd
? fs/nfs/.symlink.o.cmd
? fs/nfs/.sysctl.o.cmd
? fs/nfs/.unlink.o.cmd
? fs/nfs/.write.o.cmd
? fs/nfs/nfs.mod.c
? fs/nfs/nfslayoutdriver.mod.c
? fs/nfsd/.auth.o.cmd
? fs/nfsd/.built-in.o.cmd
? fs/nfsd/.export.o.cmd
? fs/nfsd/.lockd.o.cmd
? fs/nfsd/.nfs2acl.o.cmd
? fs/nfsd/.nfs3acl.o.cmd
? fs/nfsd/.nfs3proc.o.cmd
? fs/nfsd/.nfs3xdr.o.cmd
? fs/nfsd/.nfs4acl.o.cmd
? fs/nfsd/.nfs4callback.o.cmd
? fs/nfsd/.nfs4filelayoutxdr.o.cmd
? fs/nfsd/.nfs4idmap.o.cmd
? fs/nfsd/.nfs4pnfsds.o.cmd
? fs/nfsd/.nfs4proc.o.cmd
? fs/nfsd/.nfs4recover.o.cmd
? fs/nfsd/.nfs4state.o.cmd
? fs/nfsd/.nfs4xdr.o.cmd
? fs/nfsd/.nfscache.o.cmd
? fs/nfsd/.nfsctl.o.cmd
? fs/nfsd/.nfsd.o.cmd
? fs/nfsd/.nfsfh.o.cmd
? fs/nfsd/.nfsproc.o.cmd
? fs/nfsd/.nfssvc.o.cmd
? fs/nfsd/.nfsxdr.o.cmd
? fs/nfsd/.stats.o.cmd
? fs/nfsd/.vfs.o.cmd
? fs/nfsd/nfsd.mod.c
Index: include/linux/nfs.h
===================================================================
RCS file: /cvs/nfsv4/cvs/pnfs/include/linux/nfs.h,v
retrieving revision 1.3
diff -u -r1.3 nfs.h
--- include/linux/nfs.h 17 May 2006 21:30:53 -0000 1.3
+++ include/linux/nfs.h 29 Aug 2006 08:54:32 -0000
@@ -113,13 +113,20 @@
NFSERR_ADMIN_REVOKED = 10047, /* v4 */
NFSERR_CB_PATH_DOWN = 10048, /* v4 */
NFSERR_REPLAY_ME = 10049, /* v4 */
- NFSERR_UNKNOWN_LAYOUTTYPE = 10050, /* v4.1 */
- NFSERR_NOMATCHING_LAYOUTTYPE = 10051, /* v4.1 */
- NFSERR_BADLAYOUTTYPE = 10052, /* v4.1 */
- NFSERR_LAYOUTUNAVAILABLE = 10053, /* v4.1 */
- NFSERR_LAYOUTTRYLATER = 10054, /* v4.1 */
- NFSERR_RECALLCONFLICT = 10055, /* v4.1 */
- NFSERR_BADIOMODE = 10056, /* v4.1 */
+ NFSERR_BADIOMODE = 10049, /* v4.1 */
+ NFSERR_BADLAYOUT = 10050, /* v4.1 */
+ NFSERR_BAD_SESSION_DIGEST = 10051, /* v4.1 */
+ NFSERR_BADSESSION = 10052, /* v4.1 */
+ NFSERR_BADSLOT = 10053, /* v4.1 */
+ NFSERR_COMPLETE_ALREADY = 10054, /* v4.1 */
+ NFSERR_CONN_NOT_BOUND_TO_SESSION = 10055,/* v4.1 */
+ NFSERR_DELEG_ALREADY_WANTED = 10056, /* v4.1 */
+ NFSERR_DIRDELEG_UNAVAIL = 10057, /* v4.1 */
+ NFSERR_LAYOUTTRYLATER = 10058, /* v4.1 */
+ NFSERR_LAYOUTUNAVAILABLE = 10059, /* v4.1 */
+ NFSERR_NOMATCHING_LAYOUT = 10060, /* v4.1 */
+ NFSERR_RECALLCONFLICT = 10061, /* v4.1 */
+ NFSERR_UNKNOWN_LAYOUTTYPE = 10062, /* v4.1 */
};
/* NFSv2 file types - beware, these are not the same in NFSv3 */
Index: include/linux/nfsd/nfsd.h
===================================================================
RCS file: /cvs/nfsv4/cvs/pnfs/include/linux/nfsd/nfsd.h,v
retrieving revision 1.7
diff -u -r1.7 nfsd.h
--- include/linux/nfsd/nfsd.h 13 Jul 2006 17:18:48 -0000 1.7
+++ include/linux/nfsd/nfsd.h 29 Aug 2006 08:54:33 -0000
@@ -234,13 +234,20 @@
#define nfserr_badname __constant_htonl(NFSERR_BADNAME)
#define nfserr_cb_path_down __constant_htonl(NFSERR_CB_PATH_DOWN)
#define nfserr_locked __constant_htonl(NFSERR_LOCKED)
-#define nfserr_unknown_layouttype __constant_htonl(NFSERR_UNKNOWN_LAYOUTTYPE)
-#define nfserr_nomatching_layouttype __constant_htonl(NFSERR_NOMATCHING_LAYOUTTYPE)
-#define nfserr_nfserr_badlayouttype __constant_htonl(NFSERR_BADLAYOUTTYPE)
-#define nfserr_layoutunavailable __constant_htonl(NFSERR_LAYOUTUNAVAILABLE)
+#define nfserr_badiomode __constant_htonl(NFSERR_BADIOMODE)
+#define nfserr_badlayout __constant_htonl(NFSERR_BADLAYOUT)
+#define nfserr_bad_session_digest __constant_htonl(NFSERR_BAD_SESSION_DIGEST)
+#define nfserr_badsession __constant_htonl(NFSERR_BADSESSION)
+#define nfserr_badslot __constant_htonl(NFSERR_BADSLOT)
+#define nfserr_complete_already __constant_htonl(NFSERR_COMPLETE_ALREADY)
+#define nfserr_conn_not_bound_to_session __constant_htonl(NFSERR_CONN_NOT_BOUND_TO_SESSION)
+#define nfserr_deleg_already_wanted __constant_htonl(NFSERR_DELEG_ALREADY_WANTED)
+#define nfserr_dirdeleg_unavail __constant_htonl(NFSERR_DIRDELEG_UNAVAIL)
#define nfserr_layouttrylater __constant_htonl(NFSERR_LAYOUTTRYLATER)
+#define nfserr_layoutunavailable __constant_htonl(NFSERR_LAYOUTUNAVAILABLE)
+#define nfserr_nomatching_layout __constant_htonl(NFSERR_NOMATCHING_LAYOUT)
#define nfserr_recallconflict __constant_htonl(NFSERR_RECALLCONFLICT)
-#define nfserr_badiomode __constant_htonl(NFSERR_BADIOMODE)
+#define nfserr_unknown_layouttype __constant_htonl(NFSERR_UNKNOWN_LAYOUTTYPE)
/* error codes for internal use */
/* if a request fails due to kmalloc failure, it gets dropped.
Index: fs/nfsd/nfs4proc.c
===================================================================
RCS file: /cvs/nfsv4/cvs/pnfs/fs/nfsd/nfs4proc.c,v
retrieving revision 1.18
diff -u -r1.18 nfs4proc.c
--- fs/nfsd/nfs4proc.c 13 Jul 2006 17:18:41 -0000 1.18
+++ fs/nfsd/nfs4proc.c 29 Aug 2006 08:54:34 -0000
@@ -827,12 +827,14 @@
switch (status) {
case 0:
break;
- case -ENOENT:
case -ENOMEM:
- status = nfserr_layoutunavailable;
+ status = nfserr_layouttrylater;
+ break;
+ case -ENOENT:
+ status = nfserr_badlayout;
break;
default:
- status = nfserr_nomatching_layouttype;
+ status = nfserr_layoutunavailable;
}
goto out;
}
More information about the pNFS
mailing list