From: Benoît Canet Date: Thu, 25 Jun 2015 19:02:57 +0000 (+0200) Subject: libceph: Avoid holding the zero page on ceph_msgr_slab_init errors X-Git-Url: https://git.stricted.de/?a=commitdiff_plain;h=d920ff6fc7c1ec3d7bd80432bff5575c0ebe426c;p=GitHub%2Fmoto-9609%2Fandroid_kernel_motorola_exynos9610.git libceph: Avoid holding the zero page on ceph_msgr_slab_init errors ceph_msgr_slab_init may fail due to a temporary ENOMEM. Delay a bit the initialization of zero_page in ceph_msgr_init and reorder its cleanup in _ceph_msgr_exit so it's done in reverse order of setup. BUG_ON() will not suffer to be postponed in case it is triggered. Signed-off-by: Benoît Canet Reviewed-by: Alex Elder Signed-off-by: Ilya Dryomov --- diff --git a/net/ceph/messenger.c b/net/ceph/messenger.c index e3be1d22a247..0f9ea60a8971 100644 --- a/net/ceph/messenger.c +++ b/net/ceph/messenger.c @@ -276,22 +276,22 @@ static void _ceph_msgr_exit(void) ceph_msgr_wq = NULL; } - ceph_msgr_slab_exit(); - BUG_ON(zero_page == NULL); page_cache_release(zero_page); zero_page = NULL; + + ceph_msgr_slab_exit(); } int ceph_msgr_init(void) { + if (ceph_msgr_slab_init()) + return -ENOMEM; + BUG_ON(zero_page != NULL); zero_page = ZERO_PAGE(0); page_cache_get(zero_page); - if (ceph_msgr_slab_init()) - return -ENOMEM; - /* * The number of active work items is limited by the number of * connections, so leave @max_active at default.