• Mikulas Patocka's avatar
    dm kcopyd: remove superfluous page allocation spinlock · 4cc1b4cf
    Mikulas Patocka authored
    Remove the spinlock protecting the pages allocation.  The spinlock is only
    taken on initialization or from single-threaded workqueue.  Therefore, the
    spinlock is useless.
    
    The spinlock is taken in kcopyd_get_pages and kcopyd_put_pages.
    
    kcopyd_get_pages is only called from run_pages_job, which is only
    called from process_jobs called from do_work.
    
    kcopyd_put_pages is called from client_alloc_pages (which is initialization
    function) or from run_complete_job. run_complete_job is only called from
    process_jobs called from do_work.
    
    Another spinlock, kc->job_lock is taken each time someone pushes or pops
    some work for the worker thread.  Once we take kc->job_lock, we
    guarantee that any written memory is visible to the other CPUs.
    Signed-off-by: default avatarMikulas Patocka <mpatocka@redhat.com>
    Signed-off-by: default avatarAlasdair G Kergon <agk@redhat.com>
    4cc1b4cf
dm-kcopyd.c 14.2 KB