diff options
author | Benoît Canet <benoit.canet@nodalink.com> | 2015-06-25 21:02:57 +0200 |
---|---|---|
committer | Ilya Dryomov <idryomov@gmail.com> | 2015-09-08 23:14:28 +0300 |
commit | d920ff6fc7c1ec3d7bd80432bff5575c0ebe426c (patch) | |
tree | eb265cf997abf7109fde1705a4cd7f2266d05e11 /net/ceph | |
parent | b79b23682a1649f30960fb5bd920ba46c89a1b14 (diff) | |
download | op-kernel-dev-d920ff6fc7c1ec3d7bd80432bff5575c0ebe426c.zip op-kernel-dev-d920ff6fc7c1ec3d7bd80432bff5575c0ebe426c.tar.gz |
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 <benoit.canet@nodalink.com>
Reviewed-by: Alex Elder <elder@linaro.org>
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
Diffstat (limited to 'net/ceph')
-rw-r--r-- | net/ceph/messenger.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/net/ceph/messenger.c b/net/ceph/messenger.c index e3be1d22..0f9ea60 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. |