Module Name: src Committed By: riz Date: Mon Jan 7 15:54:01 UTC 2013
Modified Files: src/lib/librefuse [netbsd-6]: refuse.c Log Message: Pull up following revision(s) (requested by tron in ticket #772): lib/librefuse/refuse.c: revision 1.96 FUSE seems to allow short writes without errors but PUFFS doesn't. Work around this by returning ENOSPC in case of a short write to avoid protocol errors. This change is based on problem analysis provided by Antti Kantee. This fixes PR lib/45129 by myself. To generate a diff of this commit: cvs rdiff -u -r1.95 -r1.95.2.1 src/lib/librefuse/refuse.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/lib/librefuse/refuse.c diff -u src/lib/librefuse/refuse.c:1.95 src/lib/librefuse/refuse.c:1.95.2.1 --- src/lib/librefuse/refuse.c:1.95 Thu Nov 24 01:56:22 2011 +++ src/lib/librefuse/refuse.c Mon Jan 7 15:54:00 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: refuse.c,v 1.95 2011/11/24 01:56:22 manu Exp $ */ +/* $NetBSD: refuse.c,v 1.95.2.1 2013/01/07 15:54:00 riz Exp $ */ /* * Copyright © 2007 Alistair Crooks. All rights reserved. @@ -31,7 +31,7 @@ #include <sys/cdefs.h> #if !defined(lint) -__RCSID("$NetBSD: refuse.c,v 1.95 2011/11/24 01:56:22 manu Exp $"); +__RCSID("$NetBSD: refuse.c,v 1.95.2.1 2013/01/07 15:54:00 riz Exp $"); #endif /* !lint */ #include <sys/types.h> @@ -1083,14 +1083,16 @@ puffs_fuse_node_write(struct puffs_userm ret = (*fuse->op.write)(path, (char *)buf, *resid, offset, &rn->file_info); - if (ret > 0) { + if (ret >= 0) { if ((uint64_t)(offset + ret) > pn->pn_va.va_size) pn->pn_va.va_size = offset + ret; *resid -= ret; - ret = 0; + ret = (*resid == 0) ? 0 : ENOSPC; + } else { + ret = -ret; } - return -ret; + return ret; }