Btrfs: remove nr_async_bios
This was intended to congest higher layers to not send bios, but as 1) the congested bit has been taken by writeback Async bios come from buffered writes and DIO writes. For DIO writes, we want to submit them ASAP, while for buffered writes, writeback uses balance_dirty_pages() to throttle how much dirty pages we can have. 2) and no one is waiting for %nr_async_bios down to zero, Historically, it was introduced along with changes which let checksumming workload spread accross different cpus. And at that time, pdflush was used instead of per-bdi flushing, perhaps pdflush did not have the necessary information for writeback to do throttling. We can safely remove them now. Signed-off-by: Liu Bo <bo.li.liu@oracle.com> [ additional explanation from mails, removed unused variable 'limit' ] Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
8806d7185b
commit
f851689b5a
|
@ -880,7 +880,6 @@ struct btrfs_fs_info {
|
|||
|
||||
atomic_t nr_async_submits;
|
||||
atomic_t async_submit_draining;
|
||||
atomic_t nr_async_bios;
|
||||
atomic_t async_delalloc_pages;
|
||||
atomic_t open_ioctl_trans;
|
||||
|
||||
|
|
|
@ -2518,7 +2518,6 @@ int open_ctree(struct super_block *sb,
|
|||
atomic_set(&fs_info->nr_async_submits, 0);
|
||||
atomic_set(&fs_info->async_delalloc_pages, 0);
|
||||
atomic_set(&fs_info->async_submit_draining, 0);
|
||||
atomic_set(&fs_info->nr_async_bios, 0);
|
||||
atomic_set(&fs_info->defrag_running, 0);
|
||||
atomic_set(&fs_info->qgroup_op_seq, 0);
|
||||
atomic_set(&fs_info->reada_works_cnt, 0);
|
||||
|
|
|
@ -360,7 +360,6 @@ static noinline void run_scheduled_bios(struct btrfs_device *device)
|
|||
int again = 0;
|
||||
unsigned long num_run;
|
||||
unsigned long batch_run = 0;
|
||||
unsigned long limit;
|
||||
unsigned long last_waited = 0;
|
||||
int force_reg = 0;
|
||||
int sync_pending = 0;
|
||||
|
@ -375,8 +374,6 @@ static noinline void run_scheduled_bios(struct btrfs_device *device)
|
|||
blk_start_plug(&plug);
|
||||
|
||||
bdi = device->bdev->bd_bdi;
|
||||
limit = btrfs_async_submit_limit(fs_info);
|
||||
limit = limit * 2 / 3;
|
||||
|
||||
loop:
|
||||
spin_lock(&device->io_lock);
|
||||
|
@ -443,13 +440,6 @@ loop_lock:
|
|||
pending = pending->bi_next;
|
||||
cur->bi_next = NULL;
|
||||
|
||||
/*
|
||||
* atomic_dec_return implies a barrier for waitqueue_active
|
||||
*/
|
||||
if (atomic_dec_return(&fs_info->nr_async_bios) < limit &&
|
||||
waitqueue_active(&fs_info->async_submit_wait))
|
||||
wake_up(&fs_info->async_submit_wait);
|
||||
|
||||
BUG_ON(atomic_read(&cur->__bi_cnt) == 0);
|
||||
|
||||
/*
|
||||
|
@ -6075,13 +6065,6 @@ static noinline void btrfs_schedule_bio(struct btrfs_device *device,
|
|||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* nr_async_bios allows us to reliably return congestion to the
|
||||
* higher layers. Otherwise, the async bio makes it appear we have
|
||||
* made progress against dirty pages when we've really just put it
|
||||
* on a queue for later
|
||||
*/
|
||||
atomic_inc(&fs_info->nr_async_bios);
|
||||
WARN_ON(bio->bi_next);
|
||||
bio->bi_next = NULL;
|
||||
|
||||
|
|
Loading…
Reference in New Issue