return status;
 }
 
+static struct workqueue_struct *laundry_wq;
 static struct work_struct laundromat_work;
 static void laundromat_main(void *);
 static DECLARE_WORK(laundromat_work, laundromat_main, NULL);
 
        t = nfs4_laundromat();
        dprintk("NFSD: laundromat_main - sleeping for %ld seconds\n", t);
-       schedule_delayed_work(&laundromat_work, t*HZ);
+       queue_delayed_work(laundry_wq, &laundromat_work, t*HZ);
 }
 
 /* search ownerid_hashtbl[] and close_lru for stateid owner
                printk("NFSD: starting %ld-second grace period\n", grace_time);
        grace_end = boot_time + grace_time;
        INIT_WORK(&laundromat_work,laundromat_main, NULL);
-       schedule_delayed_work(&laundromat_work, NFSD_LEASE_TIME*HZ);
+       laundry_wq = create_singlethread_workqueue("nfsd4");
+       queue_delayed_work(laundry_wq, &laundromat_work, NFSD_LEASE_TIME*HZ);
 }
 
 int
        }
 
        cancel_delayed_work(&laundromat_work);
-       flush_scheduled_work();
+       flush_workqueue(laundry_wq);
+       destroy_workqueue(laundry_wq);
        nfs4_init = 0;
 }