From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752598Ab1GXMDi (ORCPT ); Sun, 24 Jul 2011 08:03:38 -0400 Received: from ud10.udmedia.de ([194.117.254.50]:60858 "EHLO mail.ud10.udmedia.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752515Ab1GXMDc (ORCPT ); Sun, 24 Jul 2011 08:03:32 -0400 Date: Sun, 24 Jul 2011 14:03:30 +0200 From: Markus Trippelsdorf To: Christoph Hellwig Cc: Josef Bacik , linux-fsdevel@vger.kernel.org, viro@zeniv.linux.org.uk, jack@suse.cz, linux-kernel@vger.kernel.org, Dave Chinner , xfs@oss.sgi.com Subject: [PATCH] xfs: Fix wrong return value of xfs_file_aio_write Message-ID: <20110724120330.GC1626@x4.trippels.de> References: <1309370716-12235-1-git-send-email-josef@redhat.com> <20110723180942.GA1616@x4.trippels.de> <4E2B2E88.8080006@redhat.com> <20110723203824.GB1652@x4.trippels.de> <20110723220212.GA1648@x4.trippels.de> <20110724111625.GA12658@infradead.org> <20110724115420.GA1626@x4.trippels.de> <20110724115826.GB1626@x4.trippels.de> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20110724115826.GB1626@x4.trippels.de> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The fsync prototype change commit 02c24a82187d accidentally overwrote the ssize_t return value of xfs_file_aio_write with 0 for SYNC type writes. Fix this by checking if an error occured when calling xfs_file_fsync and only change the return value in this case. In addition xfs_file_fsync actually returns a normal negative error, so fix this, too. Signed-off-by: Markus Trippelsdorf Reviewed-by: Christoph Hellwig Tested-by: Christoph Hellwig --- fs/xfs/linux-2.6/xfs_file.c | 5 ++++- 1 files changed, 4 insertions(+), 1 deletions(-) diff --git a/fs/xfs/linux-2.6/xfs_file.c b/fs/xfs/linux-2.6/xfs_file.c index cca00f4..825390e 100644 --- a/fs/xfs/linux-2.6/xfs_file.c +++ b/fs/xfs/linux-2.6/xfs_file.c @@ -881,11 +881,14 @@ xfs_file_aio_write( /* Handle various SYNC-type writes */ if ((file->f_flags & O_DSYNC) || IS_SYNC(inode)) { loff_t end = pos + ret - 1; + int error; xfs_rw_iunlock(ip, iolock); - ret = -xfs_file_fsync(file, pos, end, + error = xfs_file_fsync(file, pos, end, (file->f_flags & __O_SYNC) ? 0 : 1); xfs_rw_ilock(ip, iolock); + if (error) + ret = error; } out_unlock: -- Markus