ceph: remove req from unsafe list when unregistering it
commit df963ea8a082d31521a120e8e31a29ad8a1dc215 upstream. There's no reason a request should ever be on a s_unsafe list but not in the request tree. Link: http://tracker.ceph.com/issues/18474 Signed-off-by: Jeff Layton <jlayton@redhat.com> Reviewed-by: Yan, Zheng <zyan@redhat.com> Signed-off-by: Ilya Dryomov <idryomov@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
ff61e0123b
commit
5da90d0018
@ -628,6 +628,9 @@ static void __unregister_request(struct ceph_mds_client *mdsc,
|
||||
{
|
||||
dout("__unregister_request %p tid %lld\n", req, req->r_tid);
|
||||
|
||||
/* Never leave an unregistered request on an unsafe list! */
|
||||
list_del_init(&req->r_unsafe_item);
|
||||
|
||||
if (req->r_tid == mdsc->oldest_tid) {
|
||||
struct rb_node *p = rb_next(&req->r_node);
|
||||
mdsc->oldest_tid = 0;
|
||||
@ -1036,7 +1039,6 @@ static void cleanup_session_requests(struct ceph_mds_client *mdsc,
|
||||
while (!list_empty(&session->s_unsafe)) {
|
||||
req = list_first_entry(&session->s_unsafe,
|
||||
struct ceph_mds_request, r_unsafe_item);
|
||||
list_del_init(&req->r_unsafe_item);
|
||||
pr_warn_ratelimited(" dropping unsafe request %llu\n",
|
||||
req->r_tid);
|
||||
__unregister_request(mdsc, req);
|
||||
@ -2423,7 +2425,6 @@ static void handle_reply(struct ceph_mds_session *session, struct ceph_msg *msg)
|
||||
* useful we could do with a revised return value.
|
||||
*/
|
||||
dout("got safe reply %llu, mds%d\n", tid, mds);
|
||||
list_del_init(&req->r_unsafe_item);
|
||||
|
||||
/* last unsafe request during umount? */
|
||||
if (mdsc->stopping && !__get_oldest_req(mdsc))
|
||||
|
Loading…
x
Reference in New Issue
Block a user