On Tue, Feb 23, 2010 at 6:11 AM, Talyansky, Roman
<roman.talyan...@sap.com>wrote:
> Hi Sage,
>
> As you advised us, we switched to the release 0.19 of ceph and ran into
> another bug in the ceph client. When writing to a file with the O_SYNC flag,
> "0" is always returned although the data is written to disk.
> This poses a problem in our benchmark which uses the return value as number
> of bytes written. Also it seems that such behavior infringes the POSIX
> write() contract.
>
>
Yeah, thanks. A fix was pushed to the unstable branch. We will probably
start maintaining a stable version that will contain such fixes, but you can
apply this in the mean time:
diff --git a/fs/ceph/file.c b/fs/ceph/file.c
index 2c4ae44..88932c9 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,
struct ceph_osd_client *osdc = &ceph_client(inode->i_sb)->osdc;
loff_t endoff = pos + iov->iov_len;
int got = 0;
- int ret;
+ int ret, err;
if (ceph_snap(inode) != CEPH_NOSNAP)
return -EROFS;
@@ -838,9 +838,12 @@ retry_snap:
if ((ret >= 0 || ret == -EIOCBQUEUED) &&
((file->f_flags & O_SYNC) ||
IS_SYNC(file->f_mapping->host)
- || ceph_osdmap_flag(osdc->osdmap,
CEPH_OSDMAP_NEARFULL)))
- ret = vfs_fsync_range(file, file->f_path.dentry,
+ || ceph_osdmap_flag(osdc->osdmap,
CEPH_OSDMAP_NEARFULL))) {
+ err = vfs_fsync_range(file, file->f_path.dentry,
pos, pos + ret - 1, 1);
+ if (err < 0)
+ ret = err;
+ }
}
if (ret >= 0) {
spin_lock(&inode->i_lock);
Yehuda
------------------------------------------------------------------------------
Download Intel® Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
Ceph-devel mailing list
Ceph-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ceph-devel