Skip to content

Commit

Permalink
ceph: remove req from unsafe list when unregistering it
Browse files Browse the repository at this point in the history
There's no reason a request should ever be on a s_unsafe list but not
in the request tree.

Cc: [email protected]
Link: http://tracker.ceph.com/issues/18474
Signed-off-by: Jeff Layton <[email protected]>
Reviewed-by: Yan, Zheng <[email protected]>
Signed-off-by: Ilya Dryomov <[email protected]>
  • Loading branch information
jtlayton authored and idryomov committed Feb 20, 2017
1 parent b9942bc commit df963ea
Showing 1 changed file with 3 additions and 2 deletions.
5 changes: 3 additions & 2 deletions fs/ceph/mds_client.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -1058,7 +1061,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);
Expand Down Expand Up @@ -2469,7 +2471,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))
Expand Down

0 comments on commit df963ea

Please sign in to comment.