diff options
author | Yehuda Sadeh <yehuda@hq.newdream.net> | 2010-02-23 13:16:23 -0500 |
---|---|---|
committer | Sage Weil <sage@newdream.net> | 2010-02-23 17:26:36 -0500 |
commit | 88d892a37fc231ab2aa3b1c40ca9d67224616594 (patch) | |
tree | 48ce9b4645716848a20852f552efa8cad87eabe2 /fs | |
parent | a1ea787c7b6ec036d169d84e08cca7b6e399ba70 (diff) |
ceph: don't clobber write return value when using O_SYNC
Signed-off-by: Yehuda Sadeh <yehuda@hq.newdream.net>
Signed-off-by: Sage Weil <sage@newdream.net>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/ceph/file.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/fs/ceph/file.c b/fs/ceph/file.c index 2c4ae4441cab..88932c9145e9 100644 --- a/fs/ceph/file.c +++ b/fs/ceph/file.c | |||
@@ -807,7 +807,7 @@ static ssize_t ceph_aio_write(struct kiocb *iocb, const struct iovec *iov, | |||
807 | struct ceph_osd_client *osdc = &ceph_client(inode->i_sb)->osdc; | 807 | struct ceph_osd_client *osdc = &ceph_client(inode->i_sb)->osdc; |
808 | loff_t endoff = pos + iov->iov_len; | 808 | loff_t endoff = pos + iov->iov_len; |
809 | int got = 0; | 809 | int got = 0; |
810 | int ret; | 810 | int ret, err; |
811 | 811 | ||
812 | if (ceph_snap(inode) != CEPH_NOSNAP) | 812 | if (ceph_snap(inode) != CEPH_NOSNAP) |
813 | return -EROFS; | 813 | return -EROFS; |
@@ -838,9 +838,12 @@ retry_snap: | |||
838 | 838 | ||
839 | if ((ret >= 0 || ret == -EIOCBQUEUED) && | 839 | if ((ret >= 0 || ret == -EIOCBQUEUED) && |
840 | ((file->f_flags & O_SYNC) || IS_SYNC(file->f_mapping->host) | 840 | ((file->f_flags & O_SYNC) || IS_SYNC(file->f_mapping->host) |
841 | || ceph_osdmap_flag(osdc->osdmap, CEPH_OSDMAP_NEARFULL))) | 841 | || ceph_osdmap_flag(osdc->osdmap, CEPH_OSDMAP_NEARFULL))) { |
842 | ret = vfs_fsync_range(file, file->f_path.dentry, | 842 | err = vfs_fsync_range(file, file->f_path.dentry, |
843 | pos, pos + ret - 1, 1); | 843 | pos, pos + ret - 1, 1); |
844 | if (err < 0) | ||
845 | ret = err; | ||
846 | } | ||
844 | } | 847 | } |
845 | if (ret >= 0) { | 848 | if (ret >= 0) { |
846 | spin_lock(&inode->i_lock); | 849 | spin_lock(&inode->i_lock); |