diff options
author | Sage Weil <sage@newdream.net> | 2010-03-18 15:20:53 -0700 |
---|---|---|
committer | Sage Weil <sage@newdream.net> | 2010-03-23 07:46:59 -0700 |
commit | 3c3f2e32effd4c6acc3a9434bd7eecb0af653d89 (patch) | |
tree | 9f1b1cbee6e1d79ccc7f8160bfb41b856e9cd179 /fs/ceph | |
parent | e4cb4cb8a03adde1aa4b874623c50b9a5b56e635 (diff) | |
download | op-kernel-dev-3c3f2e32effd4c6acc3a9434bd7eecb0af653d89.zip op-kernel-dev-3c3f2e32effd4c6acc3a9434bd7eecb0af653d89.tar.gz |
ceph: fix connection fault con_work reentrancy problem
The messenger fault was clearing the BUSY bit, for reasons unclear. This
made it possible for the con->ops->fault function to reopen the connection,
and requeue work in the workqueue--even though the current thread was
already in con_work.
This avoids a problem where the client busy loops with connection failures
on an unreachable OSD, but doesn't address the root cause of that problem.
Signed-off-by: Sage Weil <sage@newdream.net>
Diffstat (limited to 'fs/ceph')
-rw-r--r-- | fs/ceph/messenger.c | 2 |
1 files changed, 0 insertions, 2 deletions
diff --git a/fs/ceph/messenger.c b/fs/ceph/messenger.c index 203c435..9832855 100644 --- a/fs/ceph/messenger.c +++ b/fs/ceph/messenger.c @@ -1836,8 +1836,6 @@ static void ceph_fault(struct ceph_connection *con) goto out; } - clear_bit(BUSY, &con->state); /* to avoid an improbable race */ - mutex_lock(&con->mutex); if (test_bit(CLOSED, &con->state)) goto out_unlock; |