nfsd: fix stripe size reply for the File Layout pNFS server
At a recent testing event I found out that I had misinterpreted RFC5661 where it describes the stripe size in the File Layout's nfl_util field. This patch fixes the pNFS File Layout server so that it returns the correct value to the NFSv4.1/4.2 pNFS enabled client. This affects almost no one, since pNFS server configurations are rare and the extant pNFS aware NFS clients seemed to function correctly despite the erroneous stripe size. It *might* be needed for correct behaviour if a recent Linux client mounts a FreeBSD pNFS server configuration that is using File Layout (non-mirrored configuration). MFC after: 2 weeks
This commit is contained in:
parent
1ad83445fc
commit
5a89498d19
@ -6873,14 +6873,8 @@ nfsrv_filelayout(struct nfsrv_descript *nd, int iomode, fhandle_t *fhp,
|
||||
NFSBCOPY(devid, tl, NFSX_V4DEVICEID); /* Device ID. */
|
||||
tl += (NFSX_V4DEVICEID / NFSX_UNSIGNED);
|
||||
|
||||
/*
|
||||
* Make the stripe size as many 64K blocks as will fit in the stripe
|
||||
* mask. Since there is only one stripe, the stripe size doesn't really
|
||||
* matter, except that the Linux client will only handle an exact
|
||||
* multiple of their PAGE_SIZE (usually 4K). I chose 64K as a value
|
||||
* that should cover most/all arches w.r.t. PAGE_SIZE.
|
||||
*/
|
||||
*tl++ = txdr_unsigned(NFSFLAYUTIL_STRIPE_MASK & ~0xffff);
|
||||
/* Set the stripe size to the maximum I/O size. */
|
||||
*tl++ = txdr_unsigned(NFS_SRVMAXIO & NFSFLAYUTIL_STRIPE_MASK);
|
||||
*tl++ = 0; /* 1st stripe index. */
|
||||
pattern_offset = 0;
|
||||
txdr_hyper(pattern_offset, tl); tl += 2; /* Pattern offset. */
|
||||
|
Loading…
Reference in New Issue
Block a user