ceph: replace hold_mutex flag with goto
authorSage Weil <sage@inktank.com>
Fri, 9 Aug 2013 16:57:58 +0000 (09:57 -0700)
committerSage Weil <sage@inktank.com>
Sat, 10 Aug 2013 00:55:48 +0000 (17:55 -0700)
All of the early exit paths need to drop the mutex; it is only the normal
path through the function that does not.  Skip the unlock in that case
with a goto out_unlocked.

Signed-off-by: Sage Weil <sage@inktank.com>
Reviewed-by: Jianpeng Ma <majianpeng@gmail.com>
fs/ceph/file.c

index 7478d5dbd1aaf10159b91889c05f12cb348289aa..a17ffe4ec3cad997af71e9f6a37bd6bdcb5248f4 100644 (file)
@@ -710,13 +710,11 @@ static ssize_t ceph_aio_write(struct kiocb *iocb, const struct iovec *iov,
                &ceph_sb_to_client(inode->i_sb)->client->osdc;
        ssize_t count, written = 0;
        int err, want, got;
-       bool hold_mutex;
 
        if (ceph_snap(inode) != CEPH_NOSNAP)
                return -EROFS;
 
        mutex_lock(&inode->i_mutex);
-       hold_mutex = true;
 
        err = generic_segment_checks(iov, &nr_segs, &count, VERIFY_READ);
        if (err)
@@ -772,7 +770,6 @@ retry_snap:
                                inode, ceph_vinop(inode),
                                pos, (unsigned)iov->iov_len);
                        mutex_lock(&inode->i_mutex);
-                       hold_mutex = true;
                        goto retry_snap;
                }
        } else {
@@ -781,7 +778,6 @@ retry_snap:
                                                      count, 0);
                mutex_unlock(&inode->i_mutex);
        }
-       hold_mutex = false;
 
        if (written >= 0) {
                int dirty;
@@ -805,11 +801,12 @@ retry_snap:
                        written = err;
        }
 
+       goto out_unlocked;
+
 out:
-       if (hold_mutex)
-               mutex_unlock(&inode->i_mutex);
+       mutex_unlock(&inode->i_mutex);
+out_unlocked:
        current->backing_dev_info = NULL;
-
        return written ? written : err;
 }