]> git.ipfire.org Git - people/arne_f/kernel.git/commit
libceph: delete from need_resend_linger before check_linger_pool_dne()
authorIlya Dryomov <idryomov@gmail.com>
Thu, 15 Jun 2017 14:30:55 +0000 (16:30 +0200)
committerIlya Dryomov <idryomov@gmail.com>
Fri, 7 Jul 2017 15:25:16 +0000 (17:25 +0200)
commita10bcb19ae02cea7d5e6650fbc2de3ced46b4e5d
tree5d1d14ada42bce2e2d6cc68bb137a267b0d6353d
parent7de030d6b10a56e991312a978ace6be3c090097c
libceph: delete from need_resend_linger before check_linger_pool_dne()

When processing a map update consisting of multiple incrementals, we
may end up running check_linger_pool_dne() on a lingering request that
was previously added to need_resend_linger list.  If it is concluded
that the target pool doesn't exist, the request is killed off while
still on need_resend_linger list, which leads to a crash on a NULL
lreq->osd in kick_requests():

    libceph: linger_id 18446462598732840961 pool does not exist
    BUG: unable to handle kernel NULL pointer dereference at 0000000000000010
    IP: ceph_osdc_handle_map+0x4ae/0x870

Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
net/ceph/osd_client.c