The functions "pop", "push_head", "do_work" can only be called from
process context. Therefore, we can replace
spin_lock_irqsave/spin_unlock_irqrestore with
spin_lock_irq/spin_unlock_irq.

Signed-off-by: Mikulas Patocka <[email protected]>

Index: linux-2.6/drivers/md/dm-kcopyd.c
===================================================================
--- linux-2.6.orig/drivers/md/dm-kcopyd.c
+++ linux-2.6/drivers/md/dm-kcopyd.c
@@ -437,9 +437,8 @@ static struct kcopyd_job *pop(struct lis
                              struct dm_kcopyd_client *kc)
 {
        struct kcopyd_job *job = NULL;
-       unsigned long flags;
 
-       spin_lock_irqsave(&kc->job_lock, flags);
+       spin_lock_irq(&kc->job_lock);
 
        if (!list_empty(jobs)) {
                if (jobs == &kc->io_jobs)
@@ -449,7 +448,7 @@ static struct kcopyd_job *pop(struct lis
                        list_del(&job->list);
                }
        }
-       spin_unlock_irqrestore(&kc->job_lock, flags);
+       spin_unlock_irq(&kc->job_lock);
 
        return job;
 }
@@ -467,12 +466,11 @@ static void push(struct list_head *jobs,
 
 static void push_head(struct list_head *jobs, struct kcopyd_job *job)
 {
-       unsigned long flags;
        struct dm_kcopyd_client *kc = job->kc;
 
-       spin_lock_irqsave(&kc->job_lock, flags);
+       spin_lock_irq(&kc->job_lock);
        list_add(&job->list, jobs);
-       spin_unlock_irqrestore(&kc->job_lock, flags);
+       spin_unlock_irq(&kc->job_lock);
 }
 
 /*
@@ -655,7 +653,6 @@ static void do_work(struct work_struct *
        struct dm_kcopyd_client *kc = container_of(work,
                                        struct dm_kcopyd_client, kcopyd_work);
        struct blk_plug plug;
-       unsigned long flags;
 
        /*
         * The order that these are called is *very* important.
@@ -664,9 +661,9 @@ static void do_work(struct work_struct *
         * list.  io jobs call wake when they complete and it all
         * starts again.
         */
-       spin_lock_irqsave(&kc->job_lock, flags);
+       spin_lock_irq(&kc->job_lock);
        list_splice_tail_init(&kc->callback_jobs, &kc->complete_jobs);
-       spin_unlock_irqrestore(&kc->job_lock, flags);
+       spin_unlock_irq(&kc->job_lock);
 
        blk_start_plug(&plug);
        process_jobs(&kc->complete_jobs, kc, run_complete_job);

--
dm-devel mailing list
[email protected]
https://listman.redhat.com/mailman/listinfo/dm-devel

Reply via email to