aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2017-02-17btrfs: pass fs_info to (more) routines that are only called with extent_rootJeff Mahoney1-50/+53
Outside of interactions with qgroups, the roots passed in extent-tree.c are usually passed to ensure that we don't do refcounts on log trees or to get the allocation profile for an allocation request. Otherwise, it operates on the extent root. This patch converts some more routines in extent-tree.c that are always called with the extent root to accept an fs_info instead. Signed-off-by: Jeff Mahoney <[email protected]> Signed-off-by: David Sterba <[email protected]>
2017-02-17btrfs: qgroup: Move half of the qgroup accounting time out of commit transQu Wenruo3-11/+75
Just as Filipe pointed out, the most time consuming parts of qgroup are btrfs_qgroup_account_extents() and btrfs_qgroup_prepare_account_extents(). Which both call btrfs_find_all_roots() to get old_roots and new_roots ulist. What makes things worse is, we're calling that expensive btrfs_find_all_roots() at transaction committing time with TRANS_STATE_COMMIT_DOING, which will blocks all incoming transaction. Such behavior is necessary for @new_roots search as current btrfs_find_all_roots() can't do it correctly so we do call it just before switch commit roots. However for @old_roots search, it's not necessary as such search is based on commit_root, so it will always be correct and we can move it out of transaction committing. This patch moves the @old_roots search part out of commit_transaction(), so in theory we can half the time qgroup time consumption at commit_transaction(). But please note that, this won't speedup qgroup overall, the total time consumption is still the same, just reduce the performance stall. Cc: Filipe Manana <[email protected]> Signed-off-by: Qu Wenruo <[email protected]> Reviewed-by: Filipe Manana <[email protected]> Signed-off-by: David Sterba <[email protected]>
2017-02-17btrfs: remove unused parameter from adjust_slots_upwardsDavid Sterba1-3/+2
Never used. Reviewed-by: Liu Bo <[email protected]> Signed-off-by: David Sterba <[email protected]>
2017-02-17btrfs: remove unused parameters from __btrfs_write_out_cacheDavid Sterba1-8/+3
Both unused after the call to update_cache_item has been moved to __btrfs_wait_cache_io. Reviewed-by: Liu Bo <[email protected]> Signed-off-by: David Sterba <[email protected]>
2017-02-17btrfs: remove unused parameter from cleanup_write_cache_enospcDavid Sterba1-3/+2
bitmap_list is unused since the io_ctl framework. Reviewed-by: Liu Bo <[email protected]> Signed-off-by: David Sterba <[email protected]>
2017-02-17btrfs: remove unused parameter from __add_inode_refDavid Sterba1-2/+1
Unused since the helper has been split, eb used in the caller. Reviewed-by: Liu Bo <[email protected]> Signed-off-by: David Sterba <[email protected]>
2017-02-17btrfs: remove unused parameter from clone_copy_inline_extentDavid Sterba1-3/+2
Never used. Reviewed-by: Liu Bo <[email protected]> Signed-off-by: David Sterba <[email protected]>
2017-02-17btrfs: remove unused parameters from btrfs_cmp_dataDavid Sterba1-3/+2
After the page locking has been reworked, we get all pages prepared via cmp_pages. Reviewed-by: Liu Bo <[email protected]> Signed-off-by: David Sterba <[email protected]>
2017-02-17btrfs: remove unused parameter from __add_inline_refsDavid Sterba1-3/+2
Never used. Reviewed-by: Liu Bo <[email protected]> Signed-off-by: David Sterba <[email protected]>
2017-02-17btrfs: remove unused parameters from scrub_setup_wr_ctxDavid Sterba1-7/+3
Never used. Reviewed-by: Liu Bo <[email protected]> Signed-off-by: David Sterba <[email protected]>
2017-02-17btrfs: remove unused parameter from create_snapshotDavid Sterba1-2/+2
The name parameters have never been used, as the name is passed via the dentry. Reviewed-by: Liu Bo <[email protected]> Signed-off-by: David Sterba <[email protected]>
2017-02-17btrfs: remove unused parameter from init_first_rw_deviceDavid Sterba1-5/+3
The 'device' used to be added in that function, but now it's done by the caller. Reviewed-by: Liu Bo <[email protected]> Signed-off-by: David Sterba <[email protected]>
2017-02-17btrfs: remove unused parameter from __btrfs_alloc_chunkDavid Sterba1-6/+4
We grab fs_info from other parameters. Reviewed-by: Liu Bo <[email protected]> Signed-off-by: David Sterba <[email protected]>
2017-02-17btrfs: remove unused parameter from btrfs_fill_superDavid Sterba1-3/+2
Never used for anything meaningful since we have our own superblock filler. Reviewed-by: Liu Bo <[email protected]> Signed-off-by: David Sterba <[email protected]>
2017-02-17btrfs: remove unused parameter from extent_write_cache_pagesDavid Sterba1-4/+2
The 'tree' was used to call locking hook that does not exist anymore. Reviewed-by: Liu Bo <[email protected]> Signed-off-by: David Sterba <[email protected]>
2017-02-17btrfs: remove unused parameter from add_pending_csumsDavid Sterba1-4/+2
Never used. Reviewed-by: Liu Bo <[email protected]> Signed-off-by: David Sterba <[email protected]>
2017-02-17btrfs: remove unused parameter from update_nr_writtenDavid Sterba1-4/+4
The logic has been updated in "Btrfs: make mapping->writeback_index point to the last written page" (a91326679f2a0a4c2) and page is not needed anymore. Reviewed-by: Liu Bo <[email protected]> Signed-off-by: David Sterba <[email protected]>
2017-02-17btrfs: remove unused parameter from submit_extent_pageDavid Sterba1-9/+3
This used to hold number of maximum pages to allocate, but this is now limited by BIO_MAX_PAGES. The local are now unused and removed as well. Reviewed-by: Liu Bo <[email protected]> Signed-off-by: David Sterba <[email protected]>
2017-02-17btrfs: remove unused parameter from tree_move_next_or_upnextDavid Sterba1-4/+2
Not needed. Reviewed-by: Liu Bo <[email protected]> Signed-off-by: David Sterba <[email protected]>
2017-02-17btrfs: remove unused parameter from tree_move_downDavid Sterba1-2/+2
Never needed. Reviewed-by: Liu Bo <[email protected]> Signed-off-by: David Sterba <[email protected]>
2017-02-17btrfs: remove unused parameter from btrfs_check_super_validDavid Sterba1-5/+3
None of the checks need to know the ro/rw status as they're all not changing the superblock. Moreover, we can access the sb flags directly if we'd need to decide by the ro/rw status. Reviewed-by: Liu Bo <[email protected]> Signed-off-by: David Sterba <[email protected]>
2017-02-17btrfs: remove unused parameter from btrfs_prepare_extent_commitDavid Sterba3-5/+3
Added but never used. Reviewed-by: Liu Bo <[email protected]> Signed-off-by: David Sterba <[email protected]>
2017-02-17btrfs: remove unused parameter from btrfs_subvolume_release_metadataDavid Sterba3-11/+6
Unused since qgroup refactoring that split data and metadata accounting, the btrfs_qgroup_free helper. Reviewed-by: Liu Bo <[email protected]> Signed-off-by: David Sterba <[email protected]>
2017-02-17btrfs: remove unused parameter from __push_leaf_leftDavid Sterba1-3/+2
Unused since long ago. Reviewed-by: Liu Bo <[email protected]> Signed-off-by: David Sterba <[email protected]>
2017-02-17btrfs: remove unused parameter from __push_leaf_rightDavid Sterba1-3/+2
Unused since long ago. Reviewed-by: Liu Bo <[email protected]> Signed-off-by: David Sterba <[email protected]>
2017-02-17btrfs: merge two superblock writing helpersDavid Sterba4-11/+4
write_all_supers and write_ctree_super are almost equal, the parameter 'trans' is unused so we can drop it and have just one helper. Reviewed-by: Liu Bo <[email protected]> Signed-off-by: David Sterba <[email protected]>
2017-02-17btrfs: remove unused parameter from write_dev_supersDavid Sterba1-3/+3
The barriers are handled by the caller. Reviewed-by: Liu Bo <[email protected]> Signed-off-by: David Sterba <[email protected]>
2017-02-17btrfs: remove unused parameter from split_itemDavid Sterba1-3/+2
Never used. Reviewed-by: Liu Bo <[email protected]> Signed-off-by: David Sterba <[email protected]>
2017-02-17btrfs: remove unused parameter from clean_tree_blockDavid Sterba7-19/+17
Added but never needed. Reviewed-by: Liu Bo <[email protected]> Signed-off-by: David Sterba <[email protected]>
2017-02-17btrfs: remove unused parameter from check_async_writeDavid Sterba1-2/+2
Added but never used. Reviewed-by: Liu Bo <[email protected]> Signed-off-by: David Sterba <[email protected]>
2017-02-17btrfs: remove unused parameter from read_block_for_searchDavid Sterba1-5/+5
Never used in that function. Reviewed-by: Liu Bo <[email protected]> Signed-off-by: David Sterba <[email protected]>
2017-02-17btrfs: ulist: rename ulist_fini to ulist_releaseDavid Sterba3-10/+10
Change the name so it matches the naming we already use eg. for btrfs_path. Suggested-by: Qu Wenruo <[email protected]> Signed-off-by: David Sterba <[email protected]>
2017-02-17btrfs: remove pointless rcu protection from btrfs_qgroup_inheritDavid Sterba1-2/+0
There was never need for RCU protection around reading nodesize or other fairly constant filesystem data. Signed-off-by: David Sterba <[email protected]>
2017-02-17btrfs: qgroups: opencode qgroup_free helperDavid Sterba1-9/+9
The helper name is not too helpful and is just wrapping a simple call. Signed-off-by: David Sterba <[email protected]>
2017-02-17btrfs: remove unnecessary mutex lock in qgroup_account_snapshotDavid Sterba1-5/+1
The quota status used to be tracked as a variable, so the mutex was needed (until "Btrfs: add a flags field to btrfs_fs_info" afcdd129e05a9). Since the status is a bit modified atomically and we don't hold the mutex beyond the check, we can drop it. Signed-off-by: David Sterba <[email protected]>
2017-02-17btrfs: check quota status earlier and don't do unnecessary freesDavid Sterba1-2/+3
Status of quotas should be the first check in btrfs_qgroup_account_extent and we can return immediatelly, no need to do no-op ulist frees. Signed-off-by: David Sterba <[email protected]>
2017-02-17btrfs: embed extent_changeset::range_changed to the structureDavid Sterba3-17/+11
We can embed range_changed to the extent changeset to address following problems: - no need to allocate ulist dynamically, we also get rid of the GFP_NOFS for free - fix lack of allocation failure checking in btrfs_qgroup_reserve_data The stack consuption where extent_changeset is used slightly increases: before: 16 after: 16 - 8 (for pointer) + 32 (sizeof ulist) = 40 Which is bearable. Reviewed-by: Qu Wenruo <[email protected]> Signed-off-by: David Sterba <[email protected]>
2017-02-17btrfs: ulist: make the finalization function publicDavid Sterba2-1/+2
Make ulist_fini externally visible so the ulist API is complete. Signed-off-by: David Sterba <[email protected]>
2017-02-17btrfs: qgroups: make __del_qgroup_relation staticDavid Sterba1-1/+1
Internal helper. Signed-off-by: David Sterba <[email protected]>
2017-02-17btrfs: make space cache inode readahead failure nonfatalDavid Sterba1-7/+3
We do a readahead of the free space cache inode to speed things up but the failure is not fatal, like in other readahead cases. Proper reads would need to happen anyway and any errors would be caught there. Reviewed-by: Liu Bo <[email protected]> Signed-off-by: David Sterba <[email protected]>
2017-02-17btrfs: use GFP_KERNEL in btrfs_add/del_qgroup_relationDavid Sterba1-2/+2
Qgroup relations are added/deleted from ioctl, we hold the high level qgroup lock, no deadlocks or recursion from the allocation possible here. Signed-off-by: David Sterba <[email protected]>
2017-02-17btrfs: use GFP_KERNEL in btrfs_quota_enableDavid Sterba1-1/+1
We don't need to use GFP_NOFS here as this is called from ioctls an the only lock held is the subvol_sem, which is of a high level and protects creation/renames/deletion and is never held in the writeout paths. Signed-off-by: David Sterba <[email protected]>
2017-02-17btrfs: use GFP_KERNEL in btrfs_read_qgroup_configDavid Sterba1-1/+1
The qgroup config is read during mount, we do not have to use NOFS. Signed-off-by: David Sterba <[email protected]>
2017-02-17btrfs: use GFP_KERNEL in create_snapshotDavid Sterba1-2/+2
We don't need to use GFP_NOFS here as this is called from ioctls an the only lock held is the subvol_sem, which is of a high level and protects creation/renames/deletion and is never held in the writeout paths. Signed-off-by: David Sterba <[email protected]>
2017-02-17Btrfs: specify a new ordered extent type for create_io_emLiu Bo2-4/+6
As 0 refers to an existing type BTRFS_ORDERED_IO_DONE, this specifies a new type 'REGULAR' for regular IO. Signed-off-by: Liu Bo <[email protected]> Reviewed-by: David Sterba <[email protected]> Signed-off-by: David Sterba <[email protected]>
2017-02-17Btrfs: create a helper to create em for IOLiu Bo1-115/+74
We have similar codes to create and insert extent mapping around IO path, this merges them into a single helper. Signed-off-by: Liu Bo <[email protected]> Reviewed-by: David Sterba <[email protected]> Signed-off-by: David Sterba <[email protected]>
2017-02-17Btrfs: use helper to get used bytes of space_infoLiu Bo1-22/+19
This uses a helper instead of open code around used byte of space_info everywhere. Signed-off-by: Liu Bo <[email protected]> Reviewed-by: David Sterba <[email protected]> Signed-off-by: David Sterba <[email protected]>
2017-02-17Btrfs: try to avoid acquiring free space ctl's lockLiu Bo1-11/+13
We don't need to take the lock if the block group has not been cached. Signed-off-by: Liu Bo <[email protected]> Reviewed-by: David Sterba <[email protected]> Signed-off-by: David Sterba <[email protected]>
2017-02-17btrfs: Better csum error message for data csum mismatchQu Wenruo3-7/+22
The original csum error message only outputs inode number, offset, check sum and expected check sum. However no root objectid is outputted, which sometimes makes debugging quite painful under multi-subvolume case (including relocation). Also the checksum output is decimal, which seldom makes sense for users/developers and is hard to read in most time. This patch will add root objectid, which will be %lld for rootid larger than LAST_FREE_OBJECTID, and hex csum output for better readability. Signed-off-by: Qu Wenruo <[email protected]> Reviewed-by: David Sterba <[email protected]> Signed-off-by: David Sterba <[email protected]>
2017-02-17Btrfs: add another missing end_page_writeback on submit_extent_page failureTakafumi Kubota1-2/+6
If btrfs_bio_alloc fails in submit_extent_page, submit_extent_page returns without clearing the writeback bit of the failed page. __extent_writepage_io, that is a caller of submit_extent_page, does not clear the remaining writeback bit anywhere. As a result, this will cause the hang at filemap_fdatawait_range, because it waits the writeback bit to be cleared from the failed page. So, we have to call end_page_writeback to clear the writeback bit. For reproducing the hang, we inject a fault like if (should_failtest()) { // I define should_failtest() bio = NULL; } else { bio = btrfs_bio_alloc(...); } in submit_extent_page. We should also check whether page has the bit before end_page_writeback, to avoid the conflict against the other end_page_writeback in bio_endio. Thus, we add PageWriteback checks not only in __extent_writepage_io, but also in write_one_eb too, because it misses the check. Signed-off-by: Takafumi Kubota <[email protected]> Reviewed-by: Liu Bo <[email protected]> Cc: David Sterba <[email protected]> Signed-off-by: David Sterba <[email protected]>