xfs
[Top] [All Lists]

[PATCH] xfs: Fix wrong return value of xfs_file_aio_write

To: Christoph Hellwig <hch@xxxxxxxxxxxxx>
Subject: [PATCH] xfs: Fix wrong return value of xfs_file_aio_write
From: Markus Trippelsdorf <markus@xxxxxxxxxxxxxxx>
Date: Sun, 24 Jul 2011 13:54:20 +0200
Cc: Josef Bacik <josef@xxxxxxxxxx>, linux-fsdevel@xxxxxxxxxxxxxxx, viro@xxxxxxxxxxxxxxxxxx, jack@xxxxxxx, linux-kernel@xxxxxxxxxxxxxxx, Dave Chinner <david@xxxxxxxxxxxxx>, xfs@xxxxxxxxxxx
Dkim-signature: v=1; a=rsa-sha256; c=simple; d=mail.ud10.udmedia.de; h= date:from:to:cc:subject:message-id:references:mime-version: content-type:in-reply-to; q=dns/txt; s=beta; bh=8xn5nN+qIntlVPAA wBfPVHCjpnVWGHG2Kmvu2rIXn0c=; b=Y9QdvmunIbhrLn6PEePRI9A8Y0GD9JmD PdYApzNpUpbdymZuwC6W4qw5QQjRCnyI8cwo5WDRh/hVVRrObCljZ6IuGnZueiGG gd7TdDirZytsokIaYDtaJctFl9jkaRmJXrQybNetbce0smG1dzcrP3iK4VCY8Ipz qamghYKTcjI=
In-reply-to: <20110724111625.GA12658@xxxxxxxxxxxxx>
References: <1309370716-12235-1-git-send-email-josef@xxxxxxxxxx> <20110723180942.GA1616@xxxxxxxxxxxxxx> <4E2B2E88.8080006@xxxxxxxxxx> <20110723203824.GB1652@xxxxxxxxxxxxxx> <20110723220212.GA1648@xxxxxxxxxxxxxx> <20110724111625.GA12658@xxxxxxxxxxxxx>
On 2011.07.24 at 07:16 -0400, Christoph Hellwig wrote:
> On Sun, Jul 24, 2011 at 12:02:12AM +0200, Markus Trippelsdorf wrote:
> > The following patch fixes the problem for me:
> 
> Good catch, can you send it with a proper signoff and description?

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.
---
 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

<Prev in Thread] Current Thread [Next in Thread>