diff options
author | Sage Weil <sage@newdream.net> | 2010-03-18 18:20:53 -0400 |
---|---|---|
committer | Sage Weil <sage@newdream.net> | 2010-03-23 10:46:59 -0400 |
commit | 3c3f2e32effd4c6acc3a9434bd7eecb0af653d89 (patch) | |
tree | 9f1b1cbee6e1d79ccc7f8160bfb41b856e9cd179 /fs/ceph | |
parent | e4cb4cb8a03adde1aa4b874623c50b9a5b56e635 (diff) |
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 203c4359b549..983285540945 100644 --- a/fs/ceph/messenger.c +++ b/fs/ceph/messenger.c | |||
@@ -1836,8 +1836,6 @@ static void ceph_fault(struct ceph_connection *con) | |||
1836 | goto out; | 1836 | goto out; |
1837 | } | 1837 | } |
1838 | 1838 | ||
1839 | clear_bit(BUSY, &con->state); /* to avoid an improbable race */ | ||
1840 | |||
1841 | mutex_lock(&con->mutex); | 1839 | mutex_lock(&con->mutex); |
1842 | if (test_bit(CLOSED, &con->state)) | 1840 | if (test_bit(CLOSED, &con->state)) |
1843 | goto out_unlock; | 1841 | goto out_unlock; |