]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - fs/btrfs/disk-io.c
Btrfs: Throttle for async bio submits higher up the chain
[linux-2.6-omap-h63xx.git] / fs / btrfs / disk-io.c
index bbba14b629d217d2f96e19707bb6e9f3eb82c6f1..6a218f792e597273d136a42c8ad3e7682caa804e 100644 (file)
@@ -487,9 +487,15 @@ int btrfs_wq_submit_bio(struct btrfs_fs_info *fs_info, struct inode *inode,
        atomic_inc(&fs_info->nr_async_submits);
        btrfs_queue_worker(&fs_info->workers, &async->work);
 
-       wait_event_timeout(fs_info->async_submit_wait,
+       if (atomic_read(&fs_info->nr_async_submits) > limit) {
+               wait_event_timeout(fs_info->async_submit_wait,
                           (atomic_read(&fs_info->nr_async_submits) < limit),
                           HZ/10);
+
+               wait_event_timeout(fs_info->async_submit_wait,
+                          (atomic_read(&fs_info->nr_async_bios) < limit),
+                          HZ/10);
+       }
        return 0;
 }