Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752046AbcDSWnU (ORCPT ); Tue, 19 Apr 2016 18:43:20 -0400 Received: from mail-ob0-f178.google.com ([209.85.214.178]:34913 "EHLO mail-ob0-f178.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751653AbcDSWnQ (ORCPT ); Tue, 19 Apr 2016 18:43:16 -0400 From: Seth Forshee To: Miklos Szeredi Cc: Seth Forshee , fuse-devel@lists.sourceforge.net, linux-kernel@vger.kernel.org Subject: [PATCH] fuse: Fix fuse_get_user_pages() return value Date: Tue, 19 Apr 2016 17:43:04 -0500 Message-Id: <1461105785-83223-1-git-send-email-seth.forshee@canonical.com> X-Mailer: git-send-email 1.9.1 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1058 Lines: 32 fuse_direct_io() expects this to return either 0 or a negative error code, but on success it may return a positive value. fuse_direct_io() may return this same value when the subsequent I/O operation doesn't transfer any data, which means that it will return a positive value when no bytes were transferred. This is obviously problematic. Fix fuse_get_user_pages() to return 0 on success. This will in turn make it so that fuse_direct_io() returns 0 if no bytes are transferred. Fixes: 742f992708df ("fuse: return patrial success from fuse_direct_io()") Signed-off-by: Seth Forshee --- fs/fuse/file.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fs/fuse/file.c b/fs/fuse/file.c index b5c616c5ec98..78af5c0996b8 100644 --- a/fs/fuse/file.c +++ b/fs/fuse/file.c @@ -1295,7 +1295,7 @@ static int fuse_get_user_pages(struct fuse_req *req, struct iov_iter *ii, *nbytesp = nbytes; - return ret; + return ret < 0 ? ret : 0; } static inline int fuse_iter_npages(const struct iov_iter *ii_p) -- 1.9.1