summaryrefslogtreecommitdiff
path: root/fs
AgeCommit message (Collapse)Author
2022-01-10bcachefs: Ignore cached data when calculating fragmentationtestingKent Overstreet
Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2022-01-09bcachefs: BTREE_INSERT_LAZY_RW is only for recovery pathKent Overstreet
BTREE_INSERT_LAZY_RW shouldn't do anything after the filesystem has finished starting up - otherwise, it might interfere with going read-only as part of shutting down. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2022-01-09bcachefs: Handle transaction restarts in __bch2_move_data()Kent Overstreet
We weren't checking for -EINTR in the main loop in __bch2_move_data - this code predates modern transaction restarts. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2022-01-09bcachefs: Simplify bch2_inode_delete_keys()Kent Overstreet
Had a bug report that implies bch2_inode_delete_keys() returned -EINTR before it completed, so this patch simplifies it and makes the flow control a little more conventional. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2022-01-09bcachefs: iter->update_pathKent Overstreet
With BTREE_ITER_FILTER_SNAPSHOTS, we have to distinguish between the path where the key was found, and the path for inserting into the current snapshot. This adds a new field to struct btree_iter for saving a path for the current snapshot, and plumbs it through bch2_trans_update(). Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2022-01-09bcachefs: Refactor bch2_btree_iter()Kent Overstreet
This splits bch2_btree_iter() up into two functions: an inner function that handles BTREE_ITER_WITH_JOURNAL, BTREE_ITER_WITH_UPDATES, and iterating acrcoss leaf nodes, and an outer one that implements BTREE_ITER_FILTER_SNAPHSOTS. This is prep work for remember a btree_path at our update position in BTREE_ITER_FILTER_SNAPSHOTS mode. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2022-01-09bcachefs: Tracepoint improvementsKent Overstreet
This improves the transaction restart tracepoints - adding distinct tracepoints for all the locations and reasons a transaction might have been restarted, and ensures that there's a tracepoint for every transaction restart. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2022-01-08bcachefs: New snapshot unit testKent Overstreet
This still needs to be expanded more, but this adds a basic test for BTREE_ITER_FILTER_SNAPSHOTS. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2022-01-08bcachefs: Fix an error path in bch2_snapshot_node_create()Kent Overstreet
Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2022-01-08bcachefs: Use BTREE_INSERT_USE_RESERVE in btree_update_key()Kent Overstreet
bch2_btree_update_key() is used in the btree node write path - before delivering the completion we have to update the parent pointer with the number of sectors written. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2022-01-06bcachefs: Refactor trigger codeKent Overstreet
This breaks bch2_trans_commit_run_triggers() up into multiple functions, and deletes a bit of duplication - prep work for triggers on alloc keys, which will need to run last. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2022-01-06bcachefs: Rename data_op_data_progress -> data_jobsKent Overstreet
Mild refactoring. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2022-01-06bcachefs: Fix check_pos_snapshot_overwritten for !snapshotsKent Overstreet
It shouldn't run if the btree being checked doesn't have snapshots. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2022-01-05bcachefs: New data structure for buckets waiting on journal commitKent Overstreet
Implement a hash table, using cuckoo hashing, for empty buckets that are waiting on a journal commit before they can be reused. This replaces the journal_seq field of bucket_mark, and is part of eventually getting rid of the in memory bucket array. We may need to make bch2_bucket_needs_journal_commit() lockless, pending profiling and testing. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2022-01-05bcachefs: Improve path for when btree_gc needs another passKent Overstreet
btree_gc sometimes needs another pass when it corrects bucket generation numbers or data types - when it finds multiple pointers of different data types to the same bucket, it may want to keep the second one it found. When this happens, we now clear out bucket sector counts _without_ resetting the bucket generation/data types that we already found, instead of resetting them to what we have in the alloc btree. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2022-01-05bcachefs: Fix bch2_check_fix_ptrs()Kent Overstreet
The repair for for btree_ptrs was saying one thing and doing another - fortunately, that code can just be deleted. Also, when we update a btree node pointer, we also have to update node in memery, if it exists in the btree node cache - this fixes bch2_check_fix_ptrs() to do that. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2022-01-05bcachefs: Fix an uninitialized variableKent Overstreet
Only userspace builds were complaining about it, oddly enough. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2022-01-05Revert "bcachefs: Delete some obsolete journal_seq_blacklist code"Kent Overstreet
This reverts commit f95b61228efd04c9c158123da5827c96e9773b29. It turns out, we're seeing filesystems in the wild end up with blacklisted btree node bsets - this should not be happening, and until we understand why and fix it we need to keep this code around. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2022-01-05bcachefs: Log & error message improvementsKent Overstreet
- Add a shim uuid_unparse_lower() in the kernel, since %pU doesn't work in userspace - We don't need to print the bcachefs: or the filesystem name prefix in userspace - Improve a few error messages Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2022-01-05bcachefs: BTREE_ITER_FILTER_SNAPSHOTS is selected automaticallyKent Overstreet
It doesn't have to be specified - this patch deletes the two instances where it was. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2022-01-05bcachefs: Switch to __func__for recording where btree_trans was initializedKent Overstreet
Symbol decoding, via %ps, isn't supported in userspace - this will also be faster when we're using trans->fn in the fast path, as with the new BCH_JSET_ENTRY_log journal messages. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2022-01-05bcachefs: Fix bch2_journal_seq_blacklist_add()Kent Overstreet
The old code correctly handled the case where we were blacklisting a range that exactly matched an existing entry, but not the case where the new range partially overlaps an existing entry. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2022-01-05bcachefs: Add verbose log messages for journal readKent Overstreet
Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2022-01-05bcachefs: Improved superblock-related error messagesKent Overstreet
This patch converts bch2_sb_validate() and the .validate methods for the various superblock sections to take printbuf, to which they can print detailed error messages, including printing the entire section that was invalid. This is a great improvement over the previous situation, where we could only return static strings that didn't have precise information about what was wrong. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2022-01-05bcachefs: Use kvmalloc() for array of sorted keys in journal replayKent Overstreet
Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2022-01-05bcachefs: Make eytzinger size parameter more conventionalKent Overstreet
Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2022-01-05bcachefs: Kill bch2_bset_fix_invalidated_key()Kent Overstreet
Was dead code, so delete it. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2022-01-05bcachefs: Fix an assertionKent Overstreet
bch2_trans_commit() can legitimately return -ENOSPC with BTREE_INSERT_NOFAIL set if BTREE_INSERT_NOWAIT was also set. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2022-01-05bcachefs: bch_dev->devKent Overstreet
Add a field to bch_dev for the dev_t of the underlying block device - this fixes a null ptr deref in tracepoints. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2022-01-05bcachefs: Simplify journal replayKent Overstreet
With BTREE_ITER_WITH_JOURNAL, there's no longer any restrictions on the order we have to replay keys from the journal in, and we can also start up journal reclaim right away - and delete a bunch of code. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2022-01-05bcachefs: BTREE_ITER_WITH_JOURNALKent Overstreet
This adds a new btree iterator flag, BTREE_ITER_WITH_JOURNAL, that is automatically enabled when initializing a btree iterator before journal replay has completed - it overlays the contents of the journal with the btree. This lets us delete bch2_btree_and_journal_walk() and just use the normal btree iterator interface instead - which also lets us delete a significant amount of duplicated code. Note that BTREE_ITER_WITH_JOURNAL is still unoptimized in this patch - we're redoing the binary search over keys in the journal every time we call bch2_btree_iter_peek(). Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2022-01-05bcachefs: Tweak journal reclaim orderKent Overstreet
Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2022-01-05bcachefs: Make sure BCH_FS_FSCK_DONE gets setKent Overstreet
If we're not running fsck we still want to set BCH_FS_FSCK_DONE, so that bch2_fsck_err() calls are interpreted as bch2_inconsistent_error() calls(). Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2022-01-05bcachefs: Improve error messages in superblock write pathKent Overstreet
Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2022-01-05bcachefs: Log what we're doing when repairingKent Overstreet
Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2022-01-05bcachefs: Fix race between btree updates & journal replayKent Overstreet
Add a flag to indicate whether a journal replay key has been overwritten, and set/test it with appropriate btree locks held. This fixes a race between the allocator - invalidating buckets, and doing btree updates - and journal replay, which before this patch could clobber the allocator thread's update with an older version of the key from the journal. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2022-01-05bcachefs: bch2_journal_entry_to_text()Kent Overstreet
This adds a _to_text() pretty printer for journal entries - including every subtype - which will shortly be used by the 'bcachefs list_journal' subcommand. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2022-01-05bcachefs: BCH_JSET_ENTRY_logKent Overstreet
Add a journal entry type for logging messages, and add an option to use it to log the transaction name - this makes for a very handy debugging tool, as with it we can use the 'bcachefs list_journal' command to see not only what updates were done, but what was doing them. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2022-01-05fixup! bcachefs: Drop bkey noopsKent Overstreet
2022-01-05bcachefs: Add error messages for memory allocation failuresKent Overstreet
This adds some missing diagnostics from rare but annoying to debug runtime allocation failure paths. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2022-01-05bcachefs: Journal replay does't resort main list of keysKent Overstreet
The upcoming BTREE_ITER_WITH_JOURNAL patch will require journal keys to stay in sorted order, so the btree iterator code can overlay them over btree keys. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2022-01-05bcachefs: Add iter_flags arg to bch2_btree_delete_range()Kent Overstreet
Will be used by the new snapshot tests, to pass in BTREE_ITER_ALL_SNAPSHOTS. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2022-01-05bcachefs: Add an error message for copygc spinningKent Overstreet
Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2022-01-05bcachefs: Fix keylist size in btree_updateKent Overstreet
This fixes a buffer overrun, fortunately caught by a BUG_ON(). Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2022-01-05bcachefs: Improve error messages in device add pathKent Overstreet
This converts the error messages in the device add to a better style, and adds some missing ones. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2022-01-05bcachefs: bch2_hprint(): don't print decimal if conversion was exactKent Overstreet
There's places where we parse these numbers, and our parsing doesn't cope with decimals currently - this is a hack to get the device_add path working again where for the device blocksize there doesn't ever need to be a decimal. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2022-01-05bcachefs: Optimize bucket reuseKent Overstreet
If the btree updates pointing to a bucket were never flushed by the journal before the bucket became empty again, we can reuse the bucket without a journal flush. This tweaks the tracking of journal sequence numbers in alloc keys to implement this optimization: now, we only update the journal sequence number in alloc keys on transitions to and from empty. When a bucket becomes empty, we check if we can tell the journal not to flush entries starting from when the bucket was used. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2022-01-05bcachefs: bch2_journal_noflush_seq()Kent Overstreet
Add bch2_journal_noflush_seq(), for telling the journal that entries before a given sequence number should not be flushes - to be used by an upcoming allocator optimization. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2022-01-05bcachefs: Add a tracepoint for the btree cache shrinkerKent Overstreet
This is to help with diagnosing why the btree node can doesn't seem to be shrinking - we've had issues in the past with granularity/batch size, since btree nodes are so big. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2022-01-05bcachefs: Run scan_old_btree_nodes after version upgradeKent Overstreet
In the recovery path, we scan for old btree nodes if we don't have certain compat bits set. If we do this, we should be doing it after we upgraded to the newest on disk format. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>