ceph: Move the place for EOLDSNAPC handle in ceph_aio_write to easily understand
authormajianpeng <majianpeng@gmail.com>
Thu, 8 Aug 2013 07:32:19 +0000 (15:32 +0800)
committerSage Weil <sage@inktank.com>
Sat, 10 Aug 2013 00:55:43 +0000 (17:55 -0700)
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>
fs/ceph/file.c

index 63ec830b93061fcc18ea49a1cab156df5c5a7ca2..7478d5dbd1aaf10159b91889c05f12cb348289aa 100644 (file)
@@ -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);