summaryrefslogtreecommitdiffstats
path: root/fs/ceph
diff options
context:
space:
mode:
Diffstat (limited to 'fs/ceph')
-rw-r--r--fs/ceph/file.c11
1 files changed, 4 insertions, 7 deletions
diff --git a/fs/ceph/file.c b/fs/ceph/file.c
index 7478d5dbd1aa..a17ffe4ec3ca 100644
--- a/fs/ceph/file.c
+++ b/fs/ceph/file.c
@@ -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;
}