summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2021-07-12bcachefs: Update btree ptrs after every writebcachefs_btree_ptr_updateKent Overstreet
Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2021-07-11bcachefs: Kick off btree node writes from write completionsKent Overstreet
This is a performance improvement by removing the need to wait for the in flight btree write to complete before kicking one off, which is going to be needed to avoid a performance regression with the upcoming patch to update btree ptrs after every btree write. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2021-07-11bcachefs: Mask out unknown compat features when going read-writeKent Overstreet
Compat features should be cleared if the filesystem was touched by a version that doesn't support them. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2021-07-11bcachefs: Really don't hold btree locks while btree IOs are in flightKent Overstreet
This is something we've attempted to stick to for quite some time, as it helps guarantee filesystem latency - but there's a few remaining paths that this patch fixes. We also add asserts that we're not holding btree locks when waiting on btree reads or writes. This is also necessary for an upcoming patch to update btree pointers after every btree write - since the btree write completion path will now be doing btree operations. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2021-07-11bcachefs: Assert that btree node locks aren't being leakedKent Overstreet
This asserts (when lockdep is enabled) that btree locks aren't held when exiting a btree_trans. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2021-07-11bcachefs: Regularize argument passing of btree_transKent Overstreet
btree_trans should always be passed when we have one - iter->trans is disfavoured. This mainly updates old code in btree_update_interior.c, some of which predates btree_trans. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2021-07-10locking/lockdep: lock_class_is_held()Kent Overstreet
This patch adds lock_class_is_held(), which can be used to verify that a particular type of lock is _not_ held. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2021-07-10fixup! bcache: move closures to lib/Kent Overstreet
2021-07-10bcachefs: docs: add docs for bch2_trans_resetDan Robertson
Add basic kernel docs for bch2_trans_reset and bch2_trans_begin. Signed-off-by: Dan Robertson <dan@dlrobertson.com>
2021-07-10bcachefs: set disk state should check new_stateDan Robertson
A new device state that is not a valid state should return -EINVAL in the disk set state ioctl. Signed-off-by: Dan Robertson <dan@dlrobertson.com>
2021-07-07fixup! bcachefs: More topology repair codeKent Overstreet
2021-07-06bcachefs: BTREE_UPDATE_INTERNAL_SNAPSHOT_NODEKent Overstreet
Add a new flag to control assertions about updating to internal snapshot nodes, that normally should not be written to - to be used in an upcoming patch. Also do some renaming - trigger_flags is now update_flags. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2021-07-06bcachefs: bch2_d_types[]Kent Overstreet
Add readable names for d_type, and use it in dirent_to_text(). Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2021-07-06bcachefs: Fix bch2_btree_iter_peek_slot() assertionKent Overstreet
This assertion is checking that what the iterator points to is consistent with iter->real_pos, and since it's an internal btree ordering property it should be using bpos_cmp. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2021-07-06bcachefs: Split out SPOS_MAXKent Overstreet
Internal btree code really wants a POS_MAX with all fields ~0; external code more likely wants the snapshot field to be 0, because when we're passing it to bch2_trans_get_iter() it's used for the snapshot we're operating in, which should be 0 for most btrees that don't use snapshots. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2021-07-06bcachefs: add bcachefs xxhash supportjpsollie
xxhash is a much faster algorithm compared to crc32. could be used to speed up checksum calculation. xxhash 64-bit only, as it is much faster on 64-bit CPUs compared to xxh32. Signed-off-by: jpsollie <janpieter.sollie@edpnet.be>
2021-07-06bcachefs: Prepare checksums for more advanced algorithmsjpsollie
Perform abstraction of hash calculation for advanced checksum algorithms. Algorithms like xxhash do not store their state as a u64 int. Signed-off-by: jpsollie <janpieter.sollie@edpnet.be>
2021-07-06bcachefs: Enforce SYS_CAP_ADMIN within ioctlsTobias Geerinckx-Rice
bch2_fs_ioctl() didn't distinguish between unsupported ioctls and those which the current user is unauthorised to perform. That kept the code simple but meant that, for example, an unprivileged TIOCGWINSZ ioctl on a bcachefs file would return -EPERM instead of the expected -ENOTTY. The same call made by a privileged user would correctly return -ENOTTY. Fix this discrepancy by moving the check for CAP_SYS_ADMIN into each privileged ioctl function. Signed-off-by: Tobias Geerinckx-Rice <me@tobias.gr>
2021-07-06bcachefs: Increase BTREE_TRANS_MEM_MAXKent Overstreet
This sizes the mempool that backs the bump allocator for bch2_trans_kmalloc(). Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2021-07-06bcachefs: Fix bch2_btree_iter_peek_prev()Kent Overstreet
In !BTREE_ITER_IS_EXTENTS mode, we shouldn't be looking at k->size, i.e. we shouldn't use bkey_start_pos(). Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2021-07-06bcachefs: Fix bch2_acl_chmod() cleanup on errorDan Robertson
Avoid calling kfree on the returned error pointer if bch2_acl_from_disk fails. Signed-off-by: Dan Robertson <dan@dlrobertson.com>
2021-07-06bcachefs: statfs bfree and bavail should be the sameDan Robertson
The value of f_bfree and f_bavail should be the same. The value of f_bfree is not currently scaled by the availability factor. Signed-off-by: Dan Robertson <dan@dlrobertson.com>
2021-07-06bcachefs: Fix shift-by-64 in bch2_bkey_format_validate()Kent Overstreet
We need to ensure that packed formats can't represent fields larger than the unpacked format, which is a bit tricky since the calculations can also overflow a u64. This patch fixes a shift and simplifies the overall calculations. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2021-07-06bcachefs: fix truncate without a size changeDan Robertson
Do not attempt to shortcut a truncate when the given new size is the same as the current size. There may be blocks allocated to the file that extend beyond the i_size. The ctime and mtime should not be updated in this case. Signed-off-by: Dan Robertson <dan@dlrobertson.com>
2021-07-06bcachefs: fix ifdef for x86_64 asmDan Robertson
The implementation of prefetch_four_cachelines should use ifdef CONFIG_X86_64 to conditionally compile x86_64 asm. Signed-off-by: Dan Robertson <dan@dlrobertson.com>
2021-07-06bcachefs: ensure iter->should_be_locked is setDan Robertson
Ensure that iter->should_be_locked is set to true before we call bch2_trans_update in __bch2_dev_usrdata_drop. Signed-off-by: Dan Robertson <dan@dlrobertson.com>
2021-07-06bcachefs: Fix unused variable warning when !BCACHEFS_DEBUGChristopher James Halse Rogers
Signed-off-by: Christopher James Halse Rogers <raof@ubuntu.com>
2021-07-06bcachefs: Use memalloc_nofs_save() in bch2_read_endio()Kent Overstreet
This solves a problematic memory allocation in bch2_bio_uncompress() -> vmap(). Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2021-07-06bcachefs: Fix btree_node_read_all_replicas() error handlingKent Overstreet
We weren't checking bch2_btree_node_read_done() for errors, oops. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2021-07-06bcachefs: Don't loop into topology repairKent Overstreet
Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2021-07-06bcachefs: Start journal reclaim thread earlierKent Overstreet
Especially in userspace, we sometime run into resource exhaustion issues with starting up threads after mark and sweep/fsck. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2021-07-06bcachefs: Don't ratelimit certain fsck errorsKent Overstreet
It's unhelpful if we see "Halting mark and sweep to start topology repair" but we don't see the error that triggered it. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2021-07-06bcachefs: ensure iter->should_be_locked is setDan Robertson
Ensure that iter->should_be_locked value is set to true before we call bch2_trans_update in ec_stripe_update_ptrs. Signed-off-by: Dan Robertson <dan@dlrobertson.com>
2021-07-06bcachefs: Don't disable preemption unnecessarilyKent Overstreet
Small improvements to some percpu utility code. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2021-07-06bcachefs: Extensive triggers cleanupsKent Overstreet
- We no longer mark subsets of extents, they're marked like regular keys now - which means we can drop the offset & sectors arguments to trigger functions - Drop other arguments that are no longer needed anymore in various places - fs_usage - Drop the logic for handling extents in bch2_mark_update() that isn't needed anymore, to match bch2_trans_mark_update() - Better logic for hanlding the BTREE_ITER_CACHED_NOFILL case, where we don't have an old key to mark Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2021-07-06bcachefs: fix truncate with ATTR_MODEKent Overstreet
After the v5.12 rebase, we started oopsing when truncate was passed ATTR_MODE, due to not passing mnt_userns to setattr_copy(). This refactors things so that truncate/extend finish by using bch2_setattr_nonsize(), which solves the problem. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2021-07-06bcachefs: Improve iter->should_be_lockedKent Overstreet
Adding iter->should_be_locked introduced a regression where it ended up not being set on the iterator passed to bch2_btree_update_start(), which is definitely not what we want. This patch requires it to be set when calling bch2_trans_update(), and adds various fixups to make that happen. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2021-07-06bcachefs: Kill __btree_delete_at()Kent Overstreet
With trans->updates2 gone, we can now drop this helper and use bch2_btree_delete_at() instead. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2021-07-06bcachefs: Make sure bch2_trans_mark_update uses correct iter flagsKent Overstreet
Now that bch2_btree_iter_peek_with_updates() has been removed in favor of BTREE_ITER_WITH_UPDATES, we need to make sure it's not used where we don't want it. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2021-07-06bcachefs: Fix a memory leak in dio write pathKent Overstreet
Commit c42bca92be928ce7dece5fc04cf68d0e37ee6718 "bio: don't copy bvec for direct IO" changed bio_iov_iter_get_pages() to point bio->bi_iovec at the incoming biovec, meaning if we already allocated one, it'll be leaked. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2021-07-06bcachefs: fix a possible bcachefs checksum mapping error opt-checksum enum ↵jpsollie
to type-checksum enum This fixes some rare cases where the metadata checksum option specified may map to the wrong actual checksum type. Signed-Off By: Janpieter Sollie <janpieter.sollie@edpnet.be>
2021-07-06bcachefs: Clear iter->should_be_locked in bch2_trans_resetKent Overstreet
Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2021-07-06bcachefs: Don't underflow c->sectors_availableKent Overstreet
This rarely used error path should've been checking for underflow - oops. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2021-07-06bcachefs: Kill bch2_btree_iter_peek_cached()Kent Overstreet
It's now been rolled into bch2_btree_iter_peek_slot() Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2021-07-06bcachefs: Allow shorter JSET_ENTRY_dev_usage entriesKent Overstreet
If the last entry(ies) would be all zeros, there's no need to write them out - the read path already handles that. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2021-07-06bcachefs: mount: fix null deref with null devnameDan Robertson
- Fix null deref on mount when given a null device name. - Move the dev_name checks to return EINVAL when it is invalid. Signed-off-by: Dan Robertson <dan@dlrobertson.com>
2021-07-06bcachefs: Fix null ptr deref when splitting compressed extentsKent Overstreet
Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2021-07-06bcachefs: Fix overflow in journal_replay_entry_earlyKent Overstreet
If filesystem on disk was used by a version with a larger BCH_DATA_NR thas the currently running version, we don't want this to cause a buffer overrun. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2021-07-06bcachefs: Always zero memory from bch2_trans_kmalloc()Kent Overstreet
Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2021-07-06bcachefs: Merging for indirect extentsKent Overstreet
Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>