diff options
author | Chao Yu <yuchao0@huawei.com> | 2016-09-21 17:09:40 (GMT) |
---|---|---|
committer | Bob Peterson <rpeterso@redhat.com> | 2016-09-21 17:09:40 (GMT) |
commit | e0d735c1cc2749598f2d29f60f9a16658fd96ae9 (patch) | |
tree | 93baef2e9a3f8f250a230b916550742044ccdc72 | |
parent | 23e5671a79be00b2f1c895aa93ff40fb75a4647e (diff) | |
download | linux-e0d735c1cc2749598f2d29f60f9a16658fd96ae9.tar.xz |
gfs2: fix to detect failure of register_shrinker
register_shrinker can fail after commit 1d3d4437eae1 ("vmscan: per-node
deferred work"), we should detect the failure of it, otherwise we may
fail to register shrinker after gfs2 module was been inited successfully.
Signed-off-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Bob Peterson <rpeterso@redhat.com>
-rw-r--r-- | fs/gfs2/glock.c | 8 | ||||
-rw-r--r-- | fs/gfs2/main.c | 4 |
2 files changed, 10 insertions, 2 deletions
diff --git a/fs/gfs2/glock.c b/fs/gfs2/glock.c index c8e2e7f..14cbf60 100644 --- a/fs/gfs2/glock.c +++ b/fs/gfs2/glock.c @@ -1781,7 +1781,13 @@ int __init gfs2_glock_init(void) return -ENOMEM; } - register_shrinker(&glock_shrinker); + ret = register_shrinker(&glock_shrinker); + if (ret) { + destroy_workqueue(gfs2_delete_workqueue); + destroy_workqueue(glock_workqueue); + rhashtable_destroy(&gl_hash_table); + return ret; + } return 0; } diff --git a/fs/gfs2/main.c b/fs/gfs2/main.c index 74fd013..67d1fc4 100644 --- a/fs/gfs2/main.c +++ b/fs/gfs2/main.c @@ -145,7 +145,9 @@ static int __init init_gfs2_fs(void) if (!gfs2_qadata_cachep) goto fail; - register_shrinker(&gfs2_qd_shrinker); + error = register_shrinker(&gfs2_qd_shrinker); + if (error) + goto fail; error = register_filesystem(&gfs2_fs_type); if (error) |