Commit 7a28f59b authored by Ilya Dryomov's avatar Ilya Dryomov

libceph: allocate ceph_osd with GFP_NOFAIL

create_osd() is called way too deep in the stack to be able to error
out in a sane way; a failing create_osd() just messes everything up.
The current req_notarget list solution is broken - the list is never
traversed as it's not entirely clear when to do it, I guess.

If we were to start traversing it at regular intervals and retrying
each request, we wouldn't be far off from what __GFP_NOFAIL is doing,
so allocate OSD sessions with __GFP_NOFAIL, at least until we come up
with a better fix.
Signed-off-by: default avatarIlya Dryomov <idryomov@gmail.com>
parent 0247a0cf
...@@ -1043,10 +1043,7 @@ static struct ceph_osd *create_osd(struct ceph_osd_client *osdc, int onum) ...@@ -1043,10 +1043,7 @@ static struct ceph_osd *create_osd(struct ceph_osd_client *osdc, int onum)
WARN_ON(onum == CEPH_HOMELESS_OSD); WARN_ON(onum == CEPH_HOMELESS_OSD);
osd = kzalloc(sizeof(*osd), GFP_NOFS); osd = kzalloc(sizeof(*osd), GFP_NOIO | __GFP_NOFAIL);
if (!osd)
return NULL;
osd_init(osd); osd_init(osd);
osd->o_osdc = osdc; osd->o_osdc = osdc;
osd->o_osd = onum; osd->o_osd = onum;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment