Skip to content

Commit

Permalink
ceph: avoid iput() while holding spinlock in ceph_dir_fsync
Browse files Browse the repository at this point in the history
ceph_mdsc_put_request() can call iput(), which can sleep.  Don't do that.

Fixes: #1812
Signed-off-by: Sage Weil <[email protected]>
  • Loading branch information
liewegas committed Jan 10, 2012
1 parent ee6b1ba commit 2ff179e
Showing 1 changed file with 2 additions and 1 deletion.
3 changes: 2 additions & 1 deletion fs/ceph/dir.c
Original file line number Diff line number Diff line change
Expand Up @@ -1218,6 +1218,7 @@ static int ceph_dir_fsync(struct file *file, loff_t start, loff_t end,
do {
ceph_mdsc_get_request(req);
spin_unlock(&ci->i_unsafe_lock);

dout("dir_fsync %p wait on tid %llu (until %llu)\n",
inode, req->r_tid, last_tid);
if (req->r_timeout) {
Expand All @@ -1230,9 +1231,9 @@ static int ceph_dir_fsync(struct file *file, loff_t start, loff_t end,
} else {
wait_for_completion(&req->r_safe_completion);
}
spin_lock(&ci->i_unsafe_lock);
ceph_mdsc_put_request(req);

spin_lock(&ci->i_unsafe_lock);
if (ret || list_empty(head))
break;
req = list_entry(head->next,
Expand Down

0 comments on commit 2ff179e

Please sign in to comment.