diff --git a/fs/quota/dquot.c b/fs/quota/dquot.c index 058f0b94b98d550fa540dc4f01eeb0e2be3ee19a..961df0108a551803c8f6579e5dde3eb9a0cec9e4 100644 --- a/fs/quota/dquot.c +++ b/fs/quota/dquot.c @@ -161,6 +161,9 @@ static struct quota_module_name module_names[] = INIT_QUOTA_MODULE_NAMES; /* SLAB cache for dquot structures */ static struct kmem_cache *dquot_cachep; +/* workqueue for work quota_release_work*/ +static struct workqueue_struct *quota_unbound_wq; + int register_quota_format(struct quota_format_type *fmt) { spin_lock(&dq_list_lock); @@ -882,7 +885,7 @@ void dqput(struct dquot *dquot) put_releasing_dquots(dquot); atomic_dec(&dquot->dq_count); spin_unlock(&dq_list_lock); - queue_delayed_work(system_unbound_wq, "a_release_work, 1); + queue_delayed_work(quota_unbound_wq, "a_release_work, 1); } EXPORT_SYMBOL(dqput); @@ -3062,6 +3065,11 @@ static int __init dquot_init(void) if (register_shrinker(&dqcache_shrinker)) panic("Cannot register dquot shrinker"); + quota_unbound_wq = alloc_workqueue("quota_events_unbound", + WQ_UNBOUND | WQ_MEM_RECLAIM, WQ_MAX_ACTIVE); + if (!quota_unbound_wq) + panic("Cannot create quota_unbound_wq\n"); + return 0; } fs_initcall(dquot_init);