• T
    NFS: Don't use SetPageError in the NFS writeback code · ada8e20d
    Trond Myklebust 提交于
    The writeback code is already capable of passing errors back to user space
    by means of the open_context->error. In the case of ENOSPC, Neil Brown
    is reporting seeing 2 errors being returned.
    
    Neil writes:
    
    "e.g. if /mnt2/ if an nfs mounted filesystem that has no space then
    
    strace dd if=/dev/zero conv=fsync >> /mnt2/afile count=1
    
    reported Input/output error and the relevant parts of the strace output are:
    
    write(1, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512
    fsync(1)                                = -1 EIO (Input/output error)
    close(1)                                = -1 ENOSPC (No space left on device)"
    
    Neil then shows that the duplication of error messages appears to be due to
    the use of the PageError() mechanism, which causes filemap_fdatawait_range
    to return the extra EIO. The regression was introduced by
    commit 7b281ee0 (NFS: fsync() must exit
    with an error if page writeback failed).
    
    Fix this by removing the call to SetPageError(), and just relying on
    open_context->error reporting the ENOSPC back to fsync().
    Reported-by: NNeil Brown <neilb@suse.de>
    Tested-by: NNeil Brown <neilb@suse.de>
    Signed-off-by: NTrond Myklebust <Trond.Myklebust@netapp.com>
    Cc: stable@vger.kernel.org [3.6+]
    ada8e20d
write.c 47.9 KB