In func ceph_osdc_start_request,there are two types: A:nofail which mean if met error, the request will retry to do. B:fail which mean if met error, the caller handle the error,like realse those relative pages. But now, the code don't distinguish between them. For caller which can met error, it must call __unregister_request if met error.It don't make any sense to retry to do because the caller alreay handle failed routine like release papges. For requests which in req_notarget,they only remap in func ceph_osdc_handle_map which update the epoch of osdmap. But for reaseon which cause __map_request failed like ENOMEM,it won't update the epoch of osdmap,so notarget-requests won't remap for ever. Jianpeng Ma (2): libceph: For nofail == false, if __map_request failed,it should unregister. libceph: Remap notarget requests in handle_timeout. net/ceph/osd_client.c | 39 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-)?韬{.n?????%??檩??w?{.n????u朕?Ф?塄}?财??j:+v??????2??璀??摺?囤??z夸z罐?+?????w棹f