Loading fs/btrfs/async-thread.c +9 −1 Original line number Diff line number Diff line Loading @@ -349,6 +349,7 @@ int btrfs_requeue_work(struct btrfs_work *work) { struct btrfs_worker_thread *worker = work->worker; unsigned long flags; int wake = 0; if (test_and_set_bit(WORK_QUEUED_BIT, &work->flags)) goto out; Loading @@ -367,10 +368,16 @@ int btrfs_requeue_work(struct btrfs_work *work) &worker->workers->worker_list); spin_unlock_irqrestore(&worker->workers->lock, flags); } if (!worker->working) { wake = 1; worker->working = 1; } spin_unlock_irqrestore(&worker->lock, flags); if (wake) wake_up_process(worker->task); out: return 0; } Loading @@ -397,6 +404,7 @@ int btrfs_queue_worker(struct btrfs_workers *workers, struct btrfs_work *work) } spin_lock_irqsave(&worker->lock, flags); atomic_inc(&worker->num_pending); check_busy_worker(worker); list_add_tail(&work->list, &worker->pending); Loading fs/btrfs/volumes.c +9 −2 Original line number Diff line number Diff line Loading @@ -154,6 +154,7 @@ static noinline int run_scheduled_bios(struct btrfs_device *device) loop: spin_lock(&device->io_lock); loop_lock: /* take all the bios off the list at once and process them * later on (without the lock held). But, remember the * tail and other pointers so the bios can be properly reinserted Loading Loading @@ -203,7 +204,7 @@ static noinline int run_scheduled_bios(struct btrfs_device *device) * is now congested. Back off and let other work structs * run instead */ if (pending && bdi_write_congested(bdi) && if (pending && bdi_write_congested(bdi) && num_run > 16 && fs_info->fs_devices->open_devices > 1) { struct bio *old_head; Loading @@ -215,7 +216,8 @@ static noinline int run_scheduled_bios(struct btrfs_device *device) tail->bi_next = old_head; else device->pending_bio_tail = tail; device->running_pending = 0; device->running_pending = 1; spin_unlock(&device->io_lock); btrfs_requeue_work(&device->work); Loading @@ -224,6 +226,11 @@ static noinline int run_scheduled_bios(struct btrfs_device *device) } if (again) goto loop; spin_lock(&device->io_lock); if (device->pending_bios) goto loop_lock; spin_unlock(&device->io_lock); done: return 0; } Loading Loading
fs/btrfs/async-thread.c +9 −1 Original line number Diff line number Diff line Loading @@ -349,6 +349,7 @@ int btrfs_requeue_work(struct btrfs_work *work) { struct btrfs_worker_thread *worker = work->worker; unsigned long flags; int wake = 0; if (test_and_set_bit(WORK_QUEUED_BIT, &work->flags)) goto out; Loading @@ -367,10 +368,16 @@ int btrfs_requeue_work(struct btrfs_work *work) &worker->workers->worker_list); spin_unlock_irqrestore(&worker->workers->lock, flags); } if (!worker->working) { wake = 1; worker->working = 1; } spin_unlock_irqrestore(&worker->lock, flags); if (wake) wake_up_process(worker->task); out: return 0; } Loading @@ -397,6 +404,7 @@ int btrfs_queue_worker(struct btrfs_workers *workers, struct btrfs_work *work) } spin_lock_irqsave(&worker->lock, flags); atomic_inc(&worker->num_pending); check_busy_worker(worker); list_add_tail(&work->list, &worker->pending); Loading
fs/btrfs/volumes.c +9 −2 Original line number Diff line number Diff line Loading @@ -154,6 +154,7 @@ static noinline int run_scheduled_bios(struct btrfs_device *device) loop: spin_lock(&device->io_lock); loop_lock: /* take all the bios off the list at once and process them * later on (without the lock held). But, remember the * tail and other pointers so the bios can be properly reinserted Loading Loading @@ -203,7 +204,7 @@ static noinline int run_scheduled_bios(struct btrfs_device *device) * is now congested. Back off and let other work structs * run instead */ if (pending && bdi_write_congested(bdi) && if (pending && bdi_write_congested(bdi) && num_run > 16 && fs_info->fs_devices->open_devices > 1) { struct bio *old_head; Loading @@ -215,7 +216,8 @@ static noinline int run_scheduled_bios(struct btrfs_device *device) tail->bi_next = old_head; else device->pending_bio_tail = tail; device->running_pending = 0; device->running_pending = 1; spin_unlock(&device->io_lock); btrfs_requeue_work(&device->work); Loading @@ -224,6 +226,11 @@ static noinline int run_scheduled_bios(struct btrfs_device *device) } if (again) goto loop; spin_lock(&device->io_lock); if (device->pending_bios) goto loop_lock; spin_unlock(&device->io_lock); done: return 0; } Loading