aboutsummaryrefslogtreecommitdiff
path: root/fs
AgeCommit message (Collapse)AuthorFilesLines
2018-01-22btrfs: set fs_devices->seed directlyAnand Jain1-3/+1
This is in preparation to move a section of code in __btrfs_open_devices() into a new function so that it can be reused. As we set seeding if any of the device is having SB flag BTRFS_SUPER_FLAG_SEEDING, so do it in the device list loop itself. No functional changes. Signed-off-by: Anand Jain <[email protected]> Signed-off-by: David Sterba <[email protected]>
2018-01-22btrfs: ref-verify: Remove unused parameter from walk_up_tree() to kill warningGeert Uytterhoeven1-4/+2
With gcc-4.1.2: fs/btrfs/ref-verify.c: In function ‘btrfs_build_ref_tree’: fs/btrfs/ref-verify.c:1017: warning: ‘root’ is used uninitialized in this function The variable is indeed passed uninitialized, but it is never used by the callee. However, not all versions of gcc are smart enough to notice. Hence remove the unused parameter from walk_up_tree() to silence the compiler warning. Signed-off-by: Geert Uytterhoeven <[email protected]> Signed-off-by: David Sterba <[email protected]>
2018-01-22btrfs: sink get_extent parameter to read_extent_buffer_pagesDavid Sterba4-8/+11
All callers pass btree_get_extent, which needs to be exported. Signed-off-by: David Sterba <[email protected]>
2018-01-22btrfs: sink get_extent parameter to __do_contiguous_readpagesDavid Sterba1-6/+4
All callers pass btrfs_get_extent. Signed-off-by: David Sterba <[email protected]>
2018-01-22btrfs: sink get_extent parameter to __extent_readpagesDavid Sterba1-7/+8
All callers pass btrfs_get_extent. Signed-off-by: David Sterba <[email protected]>
2018-01-22btrfs: sink get_extent parameter to extent_readpagesDavid Sterba3-10/+7
There's only one caller that passes btrfs_get_extent. Signed-off-by: David Sterba <[email protected]>
2018-01-22btrfs: sink get_extent parameter to get_extent_skip_holesDavid Sterba1-8/+5
All callers pass btrfs_get_extent_fiemap and get_extent_skip_holes itself is used only as a fiemap helper. Signed-off-by: David Sterba <[email protected]>
2018-01-22btrfs: sink get_extent parameter to extent_fiemapDavid Sterba3-5/+5
All callers pass btrfs_get_extent_fiemap and we don't expect anything else in the context of extent_fiemap. Signed-off-by: David Sterba <[email protected]>
2018-01-22btrfs: drop get_extent from extent_page_dataDavid Sterba1-6/+1
Previous patches cleaned up all places where extent_page_data::get_extent was set and it was btrfs_get_extent all the time, so we can simply call that instead. This also reduces size of extent_page_data by 8 bytes which has positive effect on stack consumption on various functions on the write out path. Signed-off-by: David Sterba <[email protected]>
2018-01-22btrfs: sink get_extent parameter to extent_write_full_pageDavid Sterba3-4/+2
There's only one caller. Signed-off-by: David Sterba <[email protected]>
2018-01-22btrfs: sink get_extent parameter to extent_write_locked_rangeDavid Sterba3-6/+3
There's only one caller. Signed-off-by: David Sterba <[email protected]>
2018-01-22btrfs: sink get_extent parameter to extent_writepagesDavid Sterba3-4/+2
There's only one caller. Signed-off-by: David Sterba <[email protected]>
2018-01-22btrfs: Cleanup existing name_len checksQu Wenruo9-186/+9
Since tree-checker has verified leaf when reading from disk, we don't need the existing verify_dir_item() or btrfs_is_name_len_valid() checks. Signed-off-by: Qu Wenruo <[email protected]> Reviewed-by: Nikolay Borisov <[email protected]> Reviewed-by: David Sterba <[email protected]> Signed-off-by: David Sterba <[email protected]>
2018-01-22btrfs: tree-checker: Add checker for dir itemQu Wenruo1-0/+141
Add checker for dir item, for key types DIR_ITEM, DIR_INDEX and XATTR_ITEM. This checker does comprehensive checks for: 1) dir_item header and its data size Against item boundary and maximum name/xattr length. This part is mostly the same as old verify_dir_item(). 2) dir_type Against maximum file types, and against key type. Since XATTR key should only have FT_XATTR dir item, and normal dir item type should not have XATTR key. The check between key->type and dir_type is newly introduced by this patch. 3) name hash For XATTR and DIR_ITEM key, key->offset is name hash (crc32c). Check the hash of the name against the key to ensure it's correct. The name hash check is only found in btrfs-progs before this patch. Signed-off-by: Qu Wenruo <[email protected]> Reviewed-by: Nikolay Borisov <[email protected]> Reviewed-by: Su Yue <[email protected]> Reviewed-by: David Sterba <[email protected]> Signed-off-by: David Sterba <[email protected]>
2018-01-22btrfs: use GFP_KERNEL in btrfs_alloc_inodeDavid Sterba1-1/+1
This callback is called directly from VFS, no locks are held at the allocation time. Signed-off-by: David Sterba <[email protected]>
2018-01-22btrfs: sink gfp parameter to clear_extent_uptodateDavid Sterba2-3/+3
There's only one callsite with GFP_NOFS. Signed-off-by: David Sterba <[email protected]>
2018-01-22btrfs: sink gfp parameter to clear_extent_bitDavid Sterba9-42/+30
All callers use GFP_NOFS, we don't have to pass it as an argument. The built-in tests pass GFP_KERNEL, but they run only at module load time and NOFS works there as well. Signed-off-by: David Sterba <[email protected]>
2018-01-22btrfs: prepare to drop gfp mask parameter from clear_extent_bitDavid Sterba2-7/+11
Use __clear_extent_bit directly in case we want to pass unknown gfp flags. Otherwise all clear_extent_bit callers use GFP_NOFS, so we can sink them to the function and reduce argument count, at the cost that __clear_extent_bit has to be exported. Signed-off-by: David Sterba <[email protected]>
2018-01-22btrfs: use non-RCU list traversal in write_all_supers calleesDavid Sterba1-4/+5
We take the fs_devices::device_list_mutex mutex in write_all_supers which will prevent any add/del changes to the device list. Therefore we don't need to use the RCU variant list_for_each_entry_rcu in any of the called functions. Signed-off-by: David Sterba <[email protected]>
2018-01-22btrfs: switch to RCU for device traversal in btrfs_ioctl_fs_infoDavid Sterba1-4/+4
We don't need to use the mutex as we do not modify the devices nor the list itself and just read information about device counts. Move copying fsid out of the protected section, not applicable to RCU same as the rest of the retrieved information. Signed-off-by: David Sterba <[email protected]>
2018-01-22btrfs: switch to RCU for device traversal in btrfs_ioctl_dev_infoDavid Sterba1-5/+2
We don't need to use the mutex as we do not modify the devices nor the list itself and just read some information: does not change during device lifetime: - devid - uuid - name (ie. the path) may change in parallel to the ioctl call, but can lead only to reporting inacurracy: - bytes_used - total_bytes Signed-off-by: David Sterba <[email protected]>
2018-01-22btrfs: simplify btrfs_close_bdevDavid Sterba1-3/+5
Split the conditions a bit. Signed-off-by: David Sterba <[email protected]>
2018-01-22btrfs: document device lockingDavid Sterba1-0/+65
Overview of the main locks protecting various device-related structures. Signed-off-by: David Sterba <[email protected]>
2018-01-22btrfs: simplify exit paths in btrfs_init_new_deviceDavid Sterba1-4/+3
Reviewed-by: Anand Jain <[email protected]> Signed-off-by: David Sterba <[email protected]>
2018-01-22btrfs: use free_device where opencodedDavid Sterba1-28/+11
Reviewed-by: Anand Jain <[email protected]> Signed-off-by: David Sterba <[email protected]>
2018-01-22btrfs: introduce free_device helperDavid Sterba1-2/+14
A helper to free a device and all it's dynamically allocated members, like the rcu_string name or flush_bio. This is going to replace all open coded places. Signed-off-by: David Sterba <[email protected]>
2018-01-22btrfs: rename device free rcu helper to free_device_rcuDavid Sterba1-5/+5
Make it clear that it is an RCU helper, we want to use the name free_device for a wrapper freeing all device members. Signed-off-by: David Sterba <[email protected]>
2018-01-22Btrfs: document rules about bio async submitLiu Bo1-1/+16
These rules have been hidden in several if-else and are not straightforward to follow, for example, dio submit hook's nocsum case has a bug , i.e. doing async submit instead of sync submit, which has been fixed recently. This is documenting the rules for reference. Signed-off-by: Liu Bo <[email protected]> Signed-off-by: David Sterba <[email protected]>
2018-01-22btrfs: Reduce scope of delayed_rsv->lock in may_commit_transNikolay Borisov1-2/+2
After commit 996478ca9c460886ac1 ("btrfs: change how we decide to commit transactions during flushing") there is no need to hold the delayed_rsv during the percpu_counter_compare call since we get the byte's snapshot earlier. So hold the lock only while reading delayed_rsv. Signed-off-by: Nikolay Borisov <[email protected]> Reviewed-by: David Sterba <[email protected]> Signed-off-by: David Sterba <[email protected]>
2018-01-22Btrfs: add __init macro to btrfs init functionsLiu Bo8-11/+11
Adding __init macro gives kernel a hint that this function is only used during the initialization phase and its memory resources can be freed up after. Signed-off-by: Liu Bo <[email protected]> Reviewed-by: David Sterba <[email protected]> Signed-off-by: David Sterba <[email protected]>
2018-01-22btrfs: rename btrfs_add_device to btrfs_add_dev_itemAnand Jain1-2/+2
Function btrfs_add_device() is adding the device item so rename to reflect that in the function. Similarly we have btrfs_rm_dev_item(). Signed-off-by: Anand Jain <[email protected]> Reviewed-by: David Sterba <[email protected]> Signed-off-by: David Sterba <[email protected]>
2018-01-22btrfs: Don't generate UUID for non-fs treeQu Wenruo1-2/+3
btrfs_create_tree() will unconditionally generate UUID for any root. So for quota tree and data reloc tree created by kernel, they will have unique UUIDs. However UUID in root item is only referred by UUID tree, which only records UUID for fs trees. This makes unique UUIDs for quota/data reloc tree meaningless. Leave the UUID as zero for non-fs tree, making btrfs-debug-tree output less confusing. Reported-by: Misono Tomohiro <[email protected]> Signed-off-by: Qu Wenruo <[email protected]> Reviewed-by: David Sterba <[email protected]> Signed-off-by: David Sterba <[email protected]>
2018-01-22btrfs: move volume_mutex into the btrfs_rm_device()Anand Jain2-4/+2
A cleanup patch no functional change, we hold volume_mutex before calling btrfs_rm_device, so move it into the function itself. Signed-off-by: Anand Jain <[email protected]> Reviewed-by: Nikolay Borisov <[email protected]> Reviewed-by: David Sterba <[email protected]> Signed-off-by: David Sterba <[email protected]>
2018-01-22btrfs: Use locked_end rather than open coding itNikolay Borisov1-2/+2
Right before we go into this loop locked_end is set to alloc_end - 1 and is being used in nearby functions, no need to have exceptions. This just makes the code consistent, no functional changes. Signed-off-by: Nikolay Borisov <[email protected]> Reviewed-by: David Sterba <[email protected]> Signed-off-by: David Sterba <[email protected]>
2018-01-22btrfs: Move loop termination condition in while()Nikolay Borisov1-3/+1
Fallocating a file in btrfs goes through several stages. The one before actually inserting the fallocated extents is to create a qgroup reservation, covering the desired range. To this end there is a loop in btrfs_fallocate which checks to see if there are holes in the fallocated range or !PREALLOC extents past EOF and if so create qgroup reservations for them. Unfortunately, the main condition of the loop is burried right at the end of its body rather than in the actual while statement which makes it non-obvious. Fix this by moving the condition in the while statement where it belongs. No functional changes. Signed-off-by: Nikolay Borisov <[email protected]> Reviewed-by: David Sterba <[email protected]> Signed-off-by: David Sterba <[email protected]>
2018-01-22Btrfs: remove rcu_barrier in btrfs_close_devicesLiu Bo1-6/+0
It was introduced because btrfs used to do blkdev_put in a deferred work, now that btrfs has blkdev_put in place, this rcu_barrier can be removed. modprobe -r btrfs will do btrfs_cleanup_fs_uuids(), where it cleanup every %fs_devices on the list, but when we do btrfs_close_devices(), we have replaced the devices on the list with dummy ones which only have the same name and uuid, so modprobe -r btrfs will free those instead of what we were using, this change won't cause a problem for it. Signed-off-by: Liu Bo <[email protected]> Reviewed-by: Anand Jain <[email protected]> Reviewed-by: David Sterba <[email protected]> [ copied 2nd paragraph from mailinglist discussion ] Signed-off-by: David Sterba <[email protected]>
2018-01-22btrfs: Move checks from btrfs_wq_run_delayed_node to btrfs_balance_delayed_itemsNikolay Borisov1-5/+2
btrfs_balance_delayed_items is the sole caller of btrfs_wq_run_delayed_node and already includes one of the checks whether the delayed inodes should be run. On the other hand btrfs_wq_run_delayed_node duplicates that check and performs an additional one for wq congestion. Let's remove the duplicate check and move the congestion one in btrfs_balance_delayed_items, leaving btrfs_wq_run_delayed_node to only care about setting up the wq run. No functional changes. Signed-off-by: Nikolay Borisov <[email protected]> Reviewed-by: Qu Wenruo <[email protected]> Signed-off-by: David Sterba <[email protected]>
2018-01-22btrfs: Make btrfs_async_run_delayed_root use a loop rather than multiple labelsNikolay Borisov1-25/+27
Currently btrfs_async_run_delayed_root's implementation uses 3 goto labels to mimic the functionality of a simple do {} while loop. Refactor the function to use a do {} while construct, making intention clear and code easier to follow. No functional changes. Signed-off-by: Nikolay Borisov <[email protected]> Reviewed-by: Qu Wenruo <[email protected]> Signed-off-by: David Sterba <[email protected]>
2018-01-22btrfs: Remove redundant mirror_num argNikolay Borisov1-9/+7
The following callpath is always invoked with mirror_num set to 0, so let's remove it as an argument and directly pass 0 to __do_redpage. No functional change. extent_readpages __extent_readpages __do_contiguous_readpages __do_readpage Signed-off-by: Nikolay Borisov <[email protected]> Reviewed-by: David Sterba <[email protected]> Signed-off-by: David Sterba <[email protected]>
2018-01-22btrfs: Remove unused functionNikolay Borisov1-5/+0
It's sole callsite was removed in a previous patch so just nuke it for good. Signed-off-by: Nikolay Borisov <[email protected]> Signed-off-by: David Sterba <[email protected]>
2018-01-22btrfs: Remove redundant memory barrier in dev statsNikolay Borisov1-1/+7
As per atomic_t.txt documentation : - RMW operations that have a return value are fully ordered; atomic_xchg is one such operation so it already includes everything it needs w.r.t memory ordering and add a comment to be more explicit about that. Signed-off-by: Nikolay Borisov <[email protected]> Reviewed-by: David Sterba <[email protected]> Signed-off-by: David Sterba <[email protected]>
2018-01-22btrfs: Fix memory barriers usage with device stats countersNikolay Borisov2-2/+28
Commit addc3fa74e5b ("Btrfs: Fix the problem that the dirty flag of dev stats is cleared") reworked the way device stats changes are tracked. A new atomic dev_stats_ccnt counter was introduced which is incremented every time any of the device stats counters are changed. This serves as a flag whether there are any pending stats changes. However, this patch only partially implemented the correct memory barriers necessary: - It only ordered the stores to the counters but not the reads e.g. btrfs_run_dev_stats - It completely omitted any comments documenting the intended design and how the memory barriers pair with each-other This patch provides the necessary comments as well as adds a missing smp_rmb in btrfs_run_dev_stats. Furthermore since dev_stats_cnt is only a snapshot at best there was no point in reading the counter twice - once in btrfs_dev_stats_dirty and then again when assigning stats_cnt. Just collapse both reads into 1. Fixes: addc3fa74e5b ("Btrfs: Fix the problem that the dirty flag of dev stats is cleared") Signed-off-by: Nikolay Borisov <[email protected]> Reviewed-by: Mathieu Desnoyers <[email protected]> Reviewed-by: David Sterba <[email protected]> Signed-off-by: David Sterba <[email protected]>
2018-01-22btrfs: clean up btrfs_dev_stat_inc usageAnand Jain1-4/+3
btrfs_end_bio() is using btrfs_dev_stat_inc() and then btrfs_dev_stat_print_on_error() separately instead use btrfs_dev_stat_inc_and_print() directly. As of now there isn't any bio in btrfs which is - a non-empty write and also the REQ_PREFLUSH flag is set. So in actual the condition if (bio->bi_opf & REQ_PREFLUSH) is never true in btrfs_end_bio(), and so there won't be any redundant error log by using btrfs_dev_stat_inc_and_print() separately one for write and another for flush. This consolidation will help to add the device critical error handles in the function btrfs_dev_stat_inc_and_print() and which can be renamed as needed. Signed-off-by: Anand Jain <[email protected]> Reviewed-by: Nikolay Borisov <[email protected]> Reviewed-by: David Sterba <[email protected]> Signed-off-by: David Sterba <[email protected]>
2018-01-22Btrfs: free btrfs_device in placeLiu Bo2-13/+2
It's pointless to defer it to a kthread helper as we're not under a special context. For reference, commit 1f78160ce1b1 ("Btrfs: using rcu lock in the reader side of devices list") introduced RCU freeing for device structures. Originally the blkdev_put was called from free_device and rcu_barrier had to be called. This is no longer required, bdev and our device structures are now freed separately. Signed-off-by: Liu Bo <[email protected]> Reviewed-by: Anand Jain <[email protected]> Reviewed-by: David Sterba <[email protected]> [ enhance changelog ] Signed-off-by: David Sterba <[email protected]>
2018-01-22Btrfs: remove redundant btrfs_balance_delayed_itemsLiu Bo1-5/+0
In functions like btrfs_create(), we run both btrfs_balance_delayed_items() and btrfs_btree_balance_dirty() after the operation, but btrfs_btree_balance_dirty() is surely going to run btrfs_balance_delayed_items(). This keeps only btrfs_btree_balance_dirty(). Signed-off-by: Liu Bo <[email protected]> Reviewed-by: Lu Fengqi <[email protected]> Reviewed-by: Nikolay Borisov <[email protected]> Signed-off-by: David Sterba <[email protected]>
2018-01-22NFS: reject request for id_legacy key without auxdataEric Biggers1-1/+5
nfs_idmap_legacy_upcall() is supposed to be called with 'aux' pointing to a 'struct idmap', via the call to request_key_with_auxdata() in nfs_idmap_request_key(). However it can also be reached via the request_key() system call in which case 'aux' will be NULL, causing a NULL pointer dereference in nfs_idmap_prepare_pipe_upcall(), assuming that the key description is valid enough to get that far. Fix this by making nfs_idmap_legacy_upcall() negate the key if no auxdata is provided. As usual, this bug was found by syzkaller. A simple reproducer using the command-line keyctl program is: keyctl request2 id_legacy uid:0 '' @s Fixes: 57e62324e469 ("NFS: Store the legacy idmapper result in the keyring") Reported-by: [email protected] Cc: <[email protected]> # v3.4+ Signed-off-by: Eric Biggers <[email protected]> Signed-off-by: Trond Myklebust <[email protected]>
2018-01-22gfs2: Get rid of gfs2_log_header_inAndreas Gruenbacher3-30/+17
Get rid of gfs2_log_header_in by integrating it into get_log_header. Clean up the crc32 computations and use the same functions for encoding and decoding to make things less confusing. Eliminate lh_hash from gfs2_log_header_host which is completely useless. Signed-off-by: Andreas Gruenbacher <[email protected]> Signed-off-by: Bob Peterson <[email protected]>
2018-01-20seq_file: fix incomplete reset on read from zero offsetMiklos Szeredi1-1/+4
When resetting iterator on a zero offset we need to discard any data already in the buffer (count), and private state of the iterator (version). For example this bug results in first line being repeated in /proc/mounts if doing a zero size read before a non-zero size read. Reported-by: Rich Felker <[email protected]> Signed-off-by: Miklos Szeredi <[email protected]> Fixes: e522751d605d ("seq_file: reset iterator to first record for zero offset") Cc: <[email protected]> # v4.10 Signed-off-by: Al Viro <[email protected]>
2018-01-19Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/netDavid S. Miller1-2/+5
The BPF verifier conflict was some minor contextual issue. The TUN conflict was less trivial. Cong Wang fixed a memory leak of tfile->tx_array in 'net'. This is an skb_array. But meanwhile in net-next tun changed tfile->tx_arry into tfile->tx_ring which is a ptr_ring. Signed-off-by: David S. Miller <[email protected]>
2018-01-19dax: require 'struct page' by default for filesystem daxDan Williams1-0/+7
If a dax buffer from a device that does not map pages is passed to read(2) or write(2) as a target for direct-I/O it triggers SIGBUS. If gdb attempts to examine the contents of a dax buffer from a device that does not map pages it triggers SIGBUS. If fork(2) is called on a process with a dax mapping from a device that does not map pages it triggers SIGBUS. 'struct page' is required otherwise several kernel code paths break in surprising ways. Disable filesystem-dax on devices that do not map pages. In addition to needing pfn_to_page() to be valid we also require devmap pages. We need this to detect dax pages in the get_user_pages_fast() path and so that we can stop managing the VM_MIXEDMAP flag. For DAX drivers that have not supported get_user_pages() to date we allow them to opt-in to supporting DAX with the CONFIG_FS_DAX_LIMITED configuration option which requires ->direct_access() to return pfn_t_special() pfns. This leaves DAX support in brd disabled and scheduled for removal. Note that when the initial dax support was being merged a few years back there was concern that struct page was unsuitable for use with next generation persistent memory devices. The theoretical concern was that struct page access, being such a hotly used data structure in the kernel, would lead to media wear out. While that was a reasonable conservative starting position it has not held true in practice. We have long since committed to using devm_memremap_pages() to support higher order kernel functionality that needs get_user_pages() and pfn_to_page(). Cc: Jeff Moyer <[email protected]> Cc: Ross Zwisler <[email protected]> Cc: Benjamin Herrenschmidt <[email protected]> Cc: Paul Mackerras <[email protected]> Cc: Michael Ellerman <[email protected]> Cc: Martin Schwidefsky <[email protected]> Cc: Heiko Carstens <[email protected]> Reviewed-by: Jan Kara <[email protected]> Reviewed-by: Christoph Hellwig <[email protected]> Reviewed-by: Gerald Schaefer <[email protected]> Signed-off-by: Dan Williams <[email protected]>