Merge tag 'pci-v3.13-changes' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaa...
[linux-2.6-block.git] / fs / gfs2 / main.c
index 351586e24e3004f59b8bf3c5db022ce07afeaedd..0650db2541ef6ff1739f0321bdf132f084a9f23f 100644 (file)
 
 struct workqueue_struct *gfs2_control_wq;
 
-static struct shrinker qd_shrinker = {
-       .count_objects = gfs2_qd_shrink_count,
-       .scan_objects = gfs2_qd_shrink_scan,
-       .seeks = DEFAULT_SEEKS,
-};
-
 static void gfs2_init_inode_once(void *foo)
 {
        struct gfs2_inode *ip = foo;
@@ -87,6 +81,10 @@ static int __init init_gfs2_fs(void)
        if (error)
                return error;
 
+       error = list_lru_init(&gfs2_qd_lru);
+       if (error)
+               goto fail_lru;
+
        error = gfs2_glock_init();
        if (error)
                goto fail;
@@ -139,7 +137,7 @@ static int __init init_gfs2_fs(void)
        if (!gfs2_rsrv_cachep)
                goto fail;
 
-       register_shrinker(&qd_shrinker);
+       register_shrinker(&gfs2_qd_shrinker);
 
        error = register_filesystem(&gfs2_fs_type);
        if (error)
@@ -179,7 +177,9 @@ fail_wq:
 fail_unregister:
        unregister_filesystem(&gfs2_fs_type);
 fail:
-       unregister_shrinker(&qd_shrinker);
+       list_lru_destroy(&gfs2_qd_lru);
+fail_lru:
+       unregister_shrinker(&gfs2_qd_shrinker);
        gfs2_glock_exit();
 
        if (gfs2_rsrv_cachep)
@@ -214,13 +214,14 @@ fail:
 
 static void __exit exit_gfs2_fs(void)
 {
-       unregister_shrinker(&qd_shrinker);
+       unregister_shrinker(&gfs2_qd_shrinker);
        gfs2_glock_exit();
        gfs2_unregister_debugfs();
        unregister_filesystem(&gfs2_fs_type);
        unregister_filesystem(&gfs2meta_fs_type);
        destroy_workqueue(gfs_recovery_wq);
        destroy_workqueue(gfs2_control_wq);
+       list_lru_destroy(&gfs2_qd_lru);
 
        rcu_barrier();