diff options
author | Chris Mason <chris.mason@oracle.com> | 2008-11-06 22:02:51 -0500 |
---|---|---|
committer | Chris Mason <chris.mason@oracle.com> | 2008-11-06 22:02:51 -0500 |
commit | 771ed689d2cd53439e28e095bc38fbe40a71429e (patch) | |
tree | 518801f7141928e398d40c2b5955720d4346ce1a /fs/btrfs/ctree.h | |
parent | 4a69a41009c4ac691f7d9c289f5f37fabeddce46 (diff) |
Btrfs: Optimize compressed writeback and reads
When reading compressed extents, try to put pages into the page cache
for any pages covered by the compressed extent that readpages didn't already
preload.
Add an async work queue to handle transformations at delayed allocation processing
time. Right now this is just compression. The workflow is:
1) Find offsets in the file marked for delayed allocation
2) Lock the pages
3) Lock the state bits
4) Call the async delalloc code
The async delalloc code clears the state lock bits and delalloc bits. It is
important this happens before the range goes into the work queue because
otherwise it might deadlock with other work queue items that try to lock
those extent bits.
The file pages are compressed, and if the compression doesn't work the
pages are written back directly.
An ordered work queue is used to make sure the inodes are written in the same
order that pdflush or writepages sent them down.
This changes extent_write_cache_pages to let the writepage function
update the wbc nr_written count.
Signed-off-by: Chris Mason <chris.mason@oracle.com>
Diffstat (limited to 'fs/btrfs/ctree.h')
-rw-r--r-- | fs/btrfs/ctree.h | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h index 689df070c8e9..c83cc5b2ded7 100644 --- a/fs/btrfs/ctree.h +++ b/fs/btrfs/ctree.h | |||
@@ -625,8 +625,8 @@ struct btrfs_fs_info { | |||
625 | struct btrfs_transaction *running_transaction; | 625 | struct btrfs_transaction *running_transaction; |
626 | wait_queue_head_t transaction_throttle; | 626 | wait_queue_head_t transaction_throttle; |
627 | wait_queue_head_t transaction_wait; | 627 | wait_queue_head_t transaction_wait; |
628 | wait_queue_head_t async_submit_wait; | ||
629 | 628 | ||
629 | wait_queue_head_t async_submit_wait; | ||
630 | wait_queue_head_t tree_log_wait; | 630 | wait_queue_head_t tree_log_wait; |
631 | 631 | ||
632 | struct btrfs_super_block super_copy; | 632 | struct btrfs_super_block super_copy; |
@@ -653,6 +653,7 @@ struct btrfs_fs_info { | |||
653 | atomic_t nr_async_submits; | 653 | atomic_t nr_async_submits; |
654 | atomic_t async_submit_draining; | 654 | atomic_t async_submit_draining; |
655 | atomic_t nr_async_bios; | 655 | atomic_t nr_async_bios; |
656 | atomic_t async_delalloc_pages; | ||
656 | atomic_t tree_log_writers; | 657 | atomic_t tree_log_writers; |
657 | atomic_t tree_log_commit; | 658 | atomic_t tree_log_commit; |
658 | unsigned long tree_log_batch; | 659 | unsigned long tree_log_batch; |
@@ -677,6 +678,7 @@ struct btrfs_fs_info { | |||
677 | * two | 678 | * two |
678 | */ | 679 | */ |
679 | struct btrfs_workers workers; | 680 | struct btrfs_workers workers; |
681 | struct btrfs_workers delalloc_workers; | ||
680 | struct btrfs_workers endio_workers; | 682 | struct btrfs_workers endio_workers; |
681 | struct btrfs_workers endio_write_workers; | 683 | struct btrfs_workers endio_write_workers; |
682 | struct btrfs_workers submit_workers; | 684 | struct btrfs_workers submit_workers; |