Message ID | 1439646553-24961-1-git-send-email-vincent@bernat.im (mailing list archive) |
---|---|
State | Accepted, archived |
Delegated to: | Eric Van Hensbergen |
Headers | show |
On Sat, Aug 15, 2015 at 03:49:13PM +0200, Vincent Bernat wrote: ACK, and IMO that should go into mainline before 4.2; I can take it via vfs.git, unless 9p folks prefer it to go through their tree. ------------------------------------------------------------------------------
ACK, you can probably fast track this before the merge window better than I can Al, I'm on holiday at the moment so it might take a bit longer for me to tee it up. On Tue, Aug 18, 2015 at 10:49 PM Al Viro <viro@zeniv.linux.org.uk> wrote: > On Sat, Aug 15, 2015 at 03:49:13PM +0200, Vincent Bernat wrote: > > ACK, and IMO that should go into mainline before 4.2; I can take it via > vfs.git, unless 9p folks prefer it to go through their tree. > ------------------------------------------------------------------------------
diff --git a/net/9p/client.c b/net/9p/client.c index 498454b3c06c..ea79ee9a7348 100644 --- a/net/9p/client.c +++ b/net/9p/client.c @@ -1541,6 +1541,7 @@ p9_client_read(struct p9_fid *fid, u64 offset, struct iov_iter *to, int *err) struct p9_client *clnt = fid->clnt; struct p9_req_t *req; int total = 0; + *err = 0; p9_debug(P9_DEBUG_9P, ">>> TREAD fid %d offset %llu %d\n", fid->fid, (unsigned long long) offset, (int)iov_iter_count(to)); @@ -1620,6 +1621,7 @@ p9_client_write(struct p9_fid *fid, u64 offset, struct iov_iter *from, int *err) struct p9_client *clnt = fid->clnt; struct p9_req_t *req; int total = 0; + *err = 0; p9_debug(P9_DEBUG_9P, ">>> TWRITE fid %d offset %llu count %zd\n", fid->fid, (unsigned long long) offset,
Some use of those functions were providing unitialized values to those functions. Notably, when reading 0 bytes from an empty file on a 9P filesystem, the return code of read() was not 0. Tested with this simple program: #include <assert.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> int main(int argc, const char **argv) { assert(argc == 2); char buffer[256]; int fd = open(argv[1], O_RDONLY|O_NOCTTY); assert(fd >= 0); assert(read(fd, buffer, 0) == 0); return 0; } Signed-off-by: Vincent Bernat <vincent@bernat.im> --- net/9p/client.c | 2 ++ 1 file changed, 2 insertions(+)