diff options
Diffstat (limited to 'fs/btrfs/ctree.h')
| -rw-r--r-- | fs/btrfs/ctree.h | 73 | 
1 files changed, 50 insertions, 23 deletions
| diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h index 2c1a42ca519f..bc96c03dd259 100644 --- a/fs/btrfs/ctree.h +++ b/fs/btrfs/ctree.h | |||
| @@ -351,6 +351,7 @@ static inline unsigned long btrfs_chunk_item_size(int num_stripes) | |||
| 351 | #define BTRFS_FS_STATE_ERROR 0 | 351 | #define BTRFS_FS_STATE_ERROR 0 | 
| 352 | #define BTRFS_FS_STATE_REMOUNTING 1 | 352 | #define BTRFS_FS_STATE_REMOUNTING 1 | 
| 353 | #define BTRFS_FS_STATE_TRANS_ABORTED 2 | 353 | #define BTRFS_FS_STATE_TRANS_ABORTED 2 | 
| 354 | #define BTRFS_FS_STATE_DEV_REPLACING 3 | ||
| 354 | 355 | ||
| 355 | /* Super block flags */ | 356 | /* Super block flags */ | 
| 356 | /* Errors detected */ | 357 | /* Errors detected */ | 
| @@ -1489,6 +1490,7 @@ struct btrfs_fs_info { | |||
| 1489 | */ | 1490 | */ | 
| 1490 | struct list_head ordered_roots; | 1491 | struct list_head ordered_roots; | 
| 1491 | 1492 | ||
| 1493 | struct mutex delalloc_root_mutex; | ||
| 1492 | spinlock_t delalloc_root_lock; | 1494 | spinlock_t delalloc_root_lock; | 
| 1493 | /* all fs/file tree roots that have delalloc inodes. */ | 1495 | /* all fs/file tree roots that have delalloc inodes. */ | 
| 1494 | struct list_head delalloc_roots; | 1496 | struct list_head delalloc_roots; | 
| @@ -1503,28 +1505,27 @@ struct btrfs_fs_info { | |||
| 1503 | * A third pool does submit_bio to avoid deadlocking with the other | 1505 | * A third pool does submit_bio to avoid deadlocking with the other | 
| 1504 | * two | 1506 | * two | 
| 1505 | */ | 1507 | */ | 
| 1506 | struct btrfs_workers generic_worker; | 1508 | struct btrfs_workqueue *workers; | 
| 1507 | struct btrfs_workers workers; | 1509 | struct btrfs_workqueue *delalloc_workers; | 
| 1508 | struct btrfs_workers delalloc_workers; | 1510 | struct btrfs_workqueue *flush_workers; | 
| 1509 | struct btrfs_workers flush_workers; | 1511 | struct btrfs_workqueue *endio_workers; | 
| 1510 | struct btrfs_workers endio_workers; | 1512 | struct btrfs_workqueue *endio_meta_workers; | 
| 1511 | struct btrfs_workers endio_meta_workers; | 1513 | struct btrfs_workqueue *endio_raid56_workers; | 
| 1512 | struct btrfs_workers endio_raid56_workers; | 1514 | struct btrfs_workqueue *rmw_workers; | 
| 1513 | struct btrfs_workers rmw_workers; | 1515 | struct btrfs_workqueue *endio_meta_write_workers; | 
| 1514 | struct btrfs_workers endio_meta_write_workers; | 1516 | struct btrfs_workqueue *endio_write_workers; | 
| 1515 | struct btrfs_workers endio_write_workers; | 1517 | struct btrfs_workqueue *endio_freespace_worker; | 
| 1516 | struct btrfs_workers endio_freespace_worker; | 1518 | struct btrfs_workqueue *submit_workers; | 
| 1517 | struct btrfs_workers submit_workers; | 1519 | struct btrfs_workqueue *caching_workers; | 
| 1518 | struct btrfs_workers caching_workers; | 1520 | struct btrfs_workqueue *readahead_workers; | 
| 1519 | struct btrfs_workers readahead_workers; | ||
| 1520 | 1521 | ||
| 1521 | /* | 1522 | /* | 
| 1522 | * fixup workers take dirty pages that didn't properly go through | 1523 | * fixup workers take dirty pages that didn't properly go through | 
| 1523 | * the cow mechanism and make them safe to write. It happens | 1524 | * the cow mechanism and make them safe to write. It happens | 
| 1524 | * for the sys_munmap function call path | 1525 | * for the sys_munmap function call path | 
| 1525 | */ | 1526 | */ | 
| 1526 | struct btrfs_workers fixup_workers; | 1527 | struct btrfs_workqueue *fixup_workers; | 
| 1527 | struct btrfs_workers delayed_workers; | 1528 | struct btrfs_workqueue *delayed_workers; | 
| 1528 | struct task_struct *transaction_kthread; | 1529 | struct task_struct *transaction_kthread; | 
| 1529 | struct task_struct *cleaner_kthread; | 1530 | struct task_struct *cleaner_kthread; | 
| 1530 | int thread_pool_size; | 1531 | int thread_pool_size; | 
| @@ -1604,9 +1605,9 @@ struct btrfs_fs_info { | |||
| 1604 | atomic_t scrub_cancel_req; | 1605 | atomic_t scrub_cancel_req; | 
| 1605 | wait_queue_head_t scrub_pause_wait; | 1606 | wait_queue_head_t scrub_pause_wait; | 
| 1606 | int scrub_workers_refcnt; | 1607 | int scrub_workers_refcnt; | 
| 1607 | struct btrfs_workers scrub_workers; | 1608 | struct btrfs_workqueue *scrub_workers; | 
| 1608 | struct btrfs_workers scrub_wr_completion_workers; | 1609 | struct btrfs_workqueue *scrub_wr_completion_workers; | 
| 1609 | struct btrfs_workers scrub_nocow_workers; | 1610 | struct btrfs_workqueue *scrub_nocow_workers; | 
| 1610 | 1611 | ||
| 1611 | #ifdef CONFIG_BTRFS_FS_CHECK_INTEGRITY | 1612 | #ifdef CONFIG_BTRFS_FS_CHECK_INTEGRITY | 
| 1612 | u32 check_integrity_print_mask; | 1613 | u32 check_integrity_print_mask; | 
| @@ -1647,7 +1648,7 @@ struct btrfs_fs_info { | |||
| 1647 | /* qgroup rescan items */ | 1648 | /* qgroup rescan items */ | 
| 1648 | struct mutex qgroup_rescan_lock; /* protects the progress item */ | 1649 | struct mutex qgroup_rescan_lock; /* protects the progress item */ | 
| 1649 | struct btrfs_key qgroup_rescan_progress; | 1650 | struct btrfs_key qgroup_rescan_progress; | 
| 1650 | struct btrfs_workers qgroup_rescan_workers; | 1651 | struct btrfs_workqueue *qgroup_rescan_workers; | 
| 1651 | struct completion qgroup_rescan_completion; | 1652 | struct completion qgroup_rescan_completion; | 
| 1652 | struct btrfs_work qgroup_rescan_work; | 1653 | struct btrfs_work qgroup_rescan_work; | 
| 1653 | 1654 | ||
| @@ -1674,10 +1675,18 @@ struct btrfs_fs_info { | |||
| 1674 | 1675 | ||
| 1675 | atomic_t mutually_exclusive_operation_running; | 1676 | atomic_t mutually_exclusive_operation_running; | 
| 1676 | 1677 | ||
| 1678 | struct percpu_counter bio_counter; | ||
| 1679 | wait_queue_head_t replace_wait; | ||
| 1680 | |||
| 1677 | struct semaphore uuid_tree_rescan_sem; | 1681 | struct semaphore uuid_tree_rescan_sem; | 
| 1678 | unsigned int update_uuid_tree_gen:1; | 1682 | unsigned int update_uuid_tree_gen:1; | 
| 1679 | }; | 1683 | }; | 
| 1680 | 1684 | ||
| 1685 | struct btrfs_subvolume_writers { | ||
| 1686 | struct percpu_counter counter; | ||
| 1687 | wait_queue_head_t wait; | ||
| 1688 | }; | ||
| 1689 | |||
| 1681 | /* | 1690 | /* | 
| 1682 | * in ram representation of the tree. extent_root is used for all allocations | 1691 | * in ram representation of the tree. extent_root is used for all allocations | 
| 1683 | * and for the extent tree extent_root root. | 1692 | * and for the extent tree extent_root root. | 
| @@ -1714,11 +1723,15 @@ struct btrfs_root { | |||
| 1714 | struct mutex log_mutex; | 1723 | struct mutex log_mutex; | 
| 1715 | wait_queue_head_t log_writer_wait; | 1724 | wait_queue_head_t log_writer_wait; | 
| 1716 | wait_queue_head_t log_commit_wait[2]; | 1725 | wait_queue_head_t log_commit_wait[2]; | 
| 1726 | struct list_head log_ctxs[2]; | ||
| 1717 | atomic_t log_writers; | 1727 | atomic_t log_writers; | 
| 1718 | atomic_t log_commit[2]; | 1728 | atomic_t log_commit[2]; | 
| 1719 | atomic_t log_batch; | 1729 | atomic_t log_batch; | 
| 1720 | unsigned long log_transid; | 1730 | int log_transid; | 
| 1721 | unsigned long last_log_commit; | 1731 | /* No matter the commit succeeds or not*/ | 
| 1732 | int log_transid_committed; | ||
| 1733 | /* Just be updated when the commit succeeds. */ | ||
| 1734 | int last_log_commit; | ||
| 1722 | pid_t log_start_pid; | 1735 | pid_t log_start_pid; | 
| 1723 | bool log_multiple_pids; | 1736 | bool log_multiple_pids; | 
| 1724 | 1737 | ||
| @@ -1793,6 +1806,7 @@ struct btrfs_root { | |||
| 1793 | spinlock_t root_item_lock; | 1806 | spinlock_t root_item_lock; | 
| 1794 | atomic_t refs; | 1807 | atomic_t refs; | 
| 1795 | 1808 | ||
| 1809 | struct mutex delalloc_mutex; | ||
| 1796 | spinlock_t delalloc_lock; | 1810 | spinlock_t delalloc_lock; | 
| 1797 | /* | 1811 | /* | 
| 1798 | * all of the inodes that have delalloc bytes. It is possible for | 1812 | * all of the inodes that have delalloc bytes. It is possible for | 
| @@ -1802,6 +1816,8 @@ struct btrfs_root { | |||
| 1802 | struct list_head delalloc_inodes; | 1816 | struct list_head delalloc_inodes; | 
| 1803 | struct list_head delalloc_root; | 1817 | struct list_head delalloc_root; | 
| 1804 | u64 nr_delalloc_inodes; | 1818 | u64 nr_delalloc_inodes; | 
| 1819 | |||
| 1820 | struct mutex ordered_extent_mutex; | ||
| 1805 | /* | 1821 | /* | 
| 1806 | * this is used by the balancing code to wait for all the pending | 1822 | * this is used by the balancing code to wait for all the pending | 
| 1807 | * ordered extents | 1823 | * ordered extents | 
| @@ -1822,6 +1838,8 @@ struct btrfs_root { | |||
| 1822 | * manipulation with the read-only status via SUBVOL_SETFLAGS | 1838 | * manipulation with the read-only status via SUBVOL_SETFLAGS | 
| 1823 | */ | 1839 | */ | 
| 1824 | int send_in_progress; | 1840 | int send_in_progress; | 
| 1841 | struct btrfs_subvolume_writers *subv_writers; | ||
| 1842 | atomic_t will_be_snapshoted; | ||
| 1825 | }; | 1843 | }; | 
| 1826 | 1844 | ||
| 1827 | struct btrfs_ioctl_defrag_range_args { | 1845 | struct btrfs_ioctl_defrag_range_args { | 
| @@ -3346,6 +3364,9 @@ int btrfs_init_space_info(struct btrfs_fs_info *fs_info); | |||
| 3346 | int btrfs_delayed_refs_qgroup_accounting(struct btrfs_trans_handle *trans, | 3364 | int btrfs_delayed_refs_qgroup_accounting(struct btrfs_trans_handle *trans, | 
| 3347 | struct btrfs_fs_info *fs_info); | 3365 | struct btrfs_fs_info *fs_info); | 
| 3348 | int __get_raid_index(u64 flags); | 3366 | int __get_raid_index(u64 flags); | 
| 3367 | |||
| 3368 | int btrfs_start_nocow_write(struct btrfs_root *root); | ||
| 3369 | void btrfs_end_nocow_write(struct btrfs_root *root); | ||
| 3349 | /* ctree.c */ | 3370 | /* ctree.c */ | 
| 3350 | int btrfs_bin_search(struct extent_buffer *eb, struct btrfs_key *key, | 3371 | int btrfs_bin_search(struct extent_buffer *eb, struct btrfs_key *key, | 
| 3351 | int level, int *slot); | 3372 | int level, int *slot); | 
| @@ -3723,7 +3744,8 @@ int btrfs_truncate_inode_items(struct btrfs_trans_handle *trans, | |||
| 3723 | u32 min_type); | 3744 | u32 min_type); | 
| 3724 | 3745 | ||
| 3725 | int btrfs_start_delalloc_inodes(struct btrfs_root *root, int delay_iput); | 3746 | int btrfs_start_delalloc_inodes(struct btrfs_root *root, int delay_iput); | 
| 3726 | int btrfs_start_delalloc_roots(struct btrfs_fs_info *fs_info, int delay_iput); | 3747 | int btrfs_start_delalloc_roots(struct btrfs_fs_info *fs_info, int delay_iput, | 
| 3748 | int nr); | ||
| 3727 | int btrfs_set_extent_delalloc(struct inode *inode, u64 start, u64 end, | 3749 | int btrfs_set_extent_delalloc(struct inode *inode, u64 start, u64 end, | 
| 3728 | struct extent_state **cached_state); | 3750 | struct extent_state **cached_state); | 
| 3729 | int btrfs_create_subvol_root(struct btrfs_trans_handle *trans, | 3751 | int btrfs_create_subvol_root(struct btrfs_trans_handle *trans, | 
| @@ -4005,6 +4027,11 @@ int btrfs_scrub_cancel_dev(struct btrfs_fs_info *info, | |||
| 4005 | int btrfs_scrub_progress(struct btrfs_root *root, u64 devid, | 4027 | int btrfs_scrub_progress(struct btrfs_root *root, u64 devid, | 
| 4006 | struct btrfs_scrub_progress *progress); | 4028 | struct btrfs_scrub_progress *progress); | 
| 4007 | 4029 | ||
| 4030 | /* dev-replace.c */ | ||
| 4031 | void btrfs_bio_counter_inc_blocked(struct btrfs_fs_info *fs_info); | ||
| 4032 | void btrfs_bio_counter_inc_noblocked(struct btrfs_fs_info *fs_info); | ||
| 4033 | void btrfs_bio_counter_dec(struct btrfs_fs_info *fs_info); | ||
| 4034 | |||
| 4008 | /* reada.c */ | 4035 | /* reada.c */ | 
| 4009 | struct reada_control { | 4036 | struct reada_control { | 
| 4010 | struct btrfs_root *root; /* tree to prefetch */ | 4037 | struct btrfs_root *root; /* tree to prefetch */ | 
