summaryrefslogtreecommitdiffstats
path: root/fs/ceph
diff options
context:
space:
mode:
authormajianpeng <majianpeng@gmail.com>2013-08-08 09:32:19 +0200
committerSage Weil <sage@inktank.com>2013-08-10 02:55:43 +0200
commit0e5dd45ce4c41d3e3857116a77f34f04c99e78ad (patch)
tree5c55028ec8312394bcffddc19652eae3cd16ba77 /fs/ceph
parentblock: rbd: use NULL instead of 0 (diff)
downloadlinux-0e5dd45ce4c41d3e3857116a77f34f04c99e78ad.tar.xz
linux-0e5dd45ce4c41d3e3857116a77f34f04c99e78ad.zip
ceph: Move the place for EOLDSNAPC handle in ceph_aio_write to easily understand
Only for ceph_sync_write, the osd can return EOLDSNAPC.so move the related codes after the call ceph_sync_write. Signed-off-by: Jianpeng Ma <majianpeng@gmail.com> Reviewed-by: Sage Weil <sage@inktank.com>
Diffstat (limited to 'fs/ceph')
-rw-r--r--fs/ceph/file.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/fs/ceph/file.c b/fs/ceph/file.c
index 63ec830b9306..7478d5dbd1aa 100644
--- a/fs/ceph/file.c
+++ b/fs/ceph/file.c
@@ -766,6 +766,15 @@ retry_snap:
mutex_unlock(&inode->i_mutex);
written = ceph_sync_write(file, iov->iov_base, count,
pos, &iocb->ki_pos);
+ if (written == -EOLDSNAPC) {
+ dout("aio_write %p %llx.%llx %llu~%u"
+ "got EOLDSNAPC, retrying\n",
+ inode, ceph_vinop(inode),
+ pos, (unsigned)iov->iov_len);
+ mutex_lock(&inode->i_mutex);
+ hold_mutex = true;
+ goto retry_snap;
+ }
} else {
written = generic_file_buffered_write(iocb, iov, nr_segs,
pos, &iocb->ki_pos,
@@ -796,13 +805,6 @@ retry_snap:
written = err;
}
- if (written == -EOLDSNAPC) {
- dout("aio_write %p %llx.%llx %llu~%u got EOLDSNAPC, retrying\n",
- inode, ceph_vinop(inode), pos, (unsigned)iov->iov_len);
- mutex_lock(&inode->i_mutex);
- hold_mutex = true;
- goto retry_snap;
- }
out:
if (hold_mutex)
mutex_unlock(&inode->i_mutex);