svn commit: r252074 - head/sys/fs/nfsclient
Glen Barber
gjb at FreeBSD.org
Sat Jun 22 04:22:24 UTC 2013
On Fri, Jun 21, 2013 at 10:46:17PM +0000, Rick Macklem wrote:
> Author: rmacklem
> Date: Fri Jun 21 22:46:16 2013
> New Revision: 252074
> URL: http://svnweb.freebsd.org/changeset/base/252074
>
> Log:
> The NFSv4.1 LayoutCommit operation requires a valid offset and length.
> (0, 0 is not sufficient) This patch a loop for each file layout, using
> the offset, length of each file layout in a separate LayoutCommit.
>
> Modified:
> head/sys/fs/nfsclient/nfs_clstate.c
>
> Modified: head/sys/fs/nfsclient/nfs_clstate.c
> ==============================================================================
> --- head/sys/fs/nfsclient/nfs_clstate.c Fri Jun 21 22:45:03 2013 (r252073)
> +++ head/sys/fs/nfsclient/nfs_clstate.c Fri Jun 21 22:46:16 2013 (r252074)
> @@ -5145,16 +5145,28 @@ static void
> nfscl_dolayoutcommit(struct nfsmount *nmp, struct nfscllayout *lyp,
> struct ucred *cred, NFSPROC_T *p)
> {
> + struct nfsclflayout *flp;
> + uint64_t len;
> int error;
>
> - error = nfsrpc_layoutcommit(nmp, lyp->nfsly_fh, lyp->nfsly_fhlen,
> - 0, 0, 0, lyp->nfsly_lastbyte, &lyp->nfsly_stateid,
> - NFSLAYOUT_NFSV4_1_FILES, 0, NULL, cred, p, NULL);
> - if (error == NFSERR_NOTSUPP) {
> - /* If the server doesn't want it, don't bother doing it. */
> - NFSLOCKMNT(nmp);
> - nmp->nm_state |= NFSSTA_NOLAYOUTCOMMIT;
> - NFSUNLOCKMNT(nmp);
> + LIST_FOREACH(flp, &lyp->nfsly_flayrw, nfsfl_list) {
> + if (flp->nfsfl_off <= lyp->nfsly_lastbyte) {
> + len = flp->nfsfl_end - flp->nfsfl_off;
> + error = nfsrpc_layoutcommit(nmp, lyp->nfsly_fh,
> + lyp->nfsly_fhlen, 0, flp->nfsfl_off, len,
> + lyp->nfsly_lastbyte, &lyp->nfsly_stateid,
> + NFSLAYOUT_NFSV4_1_FILES, 0, NULL, cred, p, NULL);
> + NFSCL_DEBUG(4, "layoutcommit err=%d off=%qd len=%qd "
> + "lastbyte=%qd\n", error, flp->nfsfl_off, len,
> + lyp->nfsly_lastbyte);
> + if (error == NFSERR_NOTSUPP) {
> + /* If not supported, don't bother doing it. */
> + NFSLOCKMNT(nmp);
> + nmp->nm_state |= NFSSTA_NOLAYOUTCOMMIT;
> + NFSUNLOCKMNT(nmp);
> + break;
> + }
> + }
> }
> }
>
This breaks head/.
/src/sys/fs/nfsclient/nfs_clstate.c:5161:8: error: format specifies type 'long long' but the
argument has type 'uint64_t' (aka 'unsigned long') [-Werror,-Wformat]
lyp->nfsly_lastbyte);
^~~~~~~~~~~~~~~~~~~
/src/sys/fs/nfs/nfscl.h:74:11: note: expanded from macro 'NFSCL_DEBUG'
printf(__VA_ARGS__); \
^
3 errors generated.
*** Error code 1
Stop.
make: stopped in /obj/amd64.amd64/src/sys/LINT
*** Error code 1
Stop.
make: stopped in /src
Glen
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 488 bytes
Desc: not available
URL: <http://lists.freebsd.org/pipermail/svn-src-head/attachments/20130622/11b01d68/attachment.sig>
More information about the svn-src-head
mailing list