summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2019-11-16bcachefs: KEY_TYPE_extent_block_checksumextent-inline-dataKent Overstreet
Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2019-11-16bcachefs: Shorten data len XXXKent Overstreet
2019-11-16bcachefs: Reorganize extents.cKent Overstreet
Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2019-11-16bcachefs: Inline data extentsKent Overstreet
This implements extents that have their data inline, in the value, instead of the bkey value being pointers to the data - and the read and write paths are updated to read from these new extent types and write them out, when the write size is small enough. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2019-11-16bcachefs: Split out extent_update.cKent Overstreet
Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2019-11-16bcachefs: Rework of cut_front & cut_backKent Overstreet
This changes bch2_cut_front and bch2_cut_back so that they're able to shorten the size of the value, and it also changes the extent update path to update the accounting in the btree node when this happens. When the size of the value is shortened, they zero out the space that's no longer used, so it's interpreted as noops (as implemented in the last patch). Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2019-11-16bcachefs: bkey noopsKent Overstreet
For upcoming inline data extents, we're going to need to be able to shorten the value of existing bkeys in the btree - and to make that work we're going to be able to need to pad out the space the value previously took up with something. This patch changes the various code that iterates over bkeys to handle k->u64s == 0 as meaning "skip the next 8 bytes". Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2019-11-16bcachefs: kill bch2_extent_has_device()Kent Overstreet
Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2019-11-13bcachefs: bkey_on_stackKent Overstreet
This implements code for storing small bkeys on the stack and allocating out of a mempool if they're too big. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2019-11-13bcachefs: Make memcpy_to_bio() param constKent Overstreet
Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2019-11-13bcachefs: Use wbc_to_write_flags()Kent Overstreet
Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2019-11-11bcachefs: Fix erorr path in bch2_write()Kent Overstreet
The error path in bch2_write wasn't updated when the end_io callback was added to bch_write_op. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2019-11-09bcachefs: Set lost+found mode to 0700Justin Husted
For security and conformance with other filesystems, the lost+found directory should not be world or group accessible. Signed-off-by: Justin Husted <sigstop@gmail.com>
2019-11-09bcachefs: Be slightly less tricky with union usageKent Overstreet
This is to fix a valgrind complaint - the code was correct, but too tricky for valgrind to know that. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2019-11-08bcachefs: Remove some BKEY_PADDED usesKent Overstreet
Prep work for extents with inline data Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2019-11-07bcachefs: Go back to 16 bit mantissa bkey floatsKent Overstreet
The previous optimizations means using 32 bit mantissas are now a net loss - having bkey_float be only 4 bytes is good for prefetching. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2019-11-07bcachefs: Fall back to slowpath on exact comparisonKent Overstreet
This is basically equivalent to the original strategy of falling back to checking against the original key when the original key and previous key didn't differ in the required bits - except, now we only fall back when the search key doesn't differ in the required bits, which ends up being a bit faster. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2019-11-07bcachefs: kill BFLOAT_FAILED_PREVKent Overstreet
The assumption underlying BFLOAT_FAILED_PREV was wrong; the comparison we're doing in bset_search_tree() doesn't have to tell the pivot apart from the previous key, it just has to tell if search is definitely greater than or equal to the pivot. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2019-11-07bcachefs: bch2_read_extent() microoptimizationsKent Overstreet
Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2019-11-07bcachefs: Pipeline binary searches and linear searchesKent Overstreet
This makes prefetching for the linear search at the end of the lookup much more effective, and is a couple percent speedup. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2019-11-07bcachefs: Make __bch2_bkey_cmp_packed() smallerKent Overstreet
We can probably get rid of the version that dispatches based on type checking too. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2019-11-07bcachefs: Inline fast path of bch2_increment_clock()Kent Overstreet
Shaving more cycles. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2019-11-06bcachefs: Avoid calling bch2_btree_iter_relock() in bch2_btree_iter_traverse()Kent Overstreet
2019-11-06bcachefs: Add an option for fsck error ratelimitingKent Overstreet
Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2019-11-06bcachefs: Don't BUG_ON() sector count overflowKent Overstreet
Return an error instead (still work in progress...) Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2019-11-06bcachefs: Some reflink fixesKent Overstreet
len might fit into a loff_t when aligned_len does not - make sure we use a u64 for aligned_len. Also, we weren't always extending the inode correctly. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2019-11-06bcachefs: Fix setting of attributes mask in getattrKent Overstreet
Discovered by xfstests generic/553 Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2019-11-04bcachefs: Move pagecache add lock to bcachefs codeKent Overstreet
Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2019-11-04bcachefs: Add pagecache_add lock to buffered IO path, fault pathKent Overstreet
2019-11-04mm: Add a mechanism to disable faults for a specific mappingKent Overstreet
This will be used to prevent a nasty cache coherency issue for O_DIRECT writes; O_DIRECT writes need to shoot down the range of the page cache corresponding to the part of the file being written to - but, if the file is mapped in, userspace can pass in an address in that mapping to pwrite(), causing those pages to be faulted back into the page cache in get_user_pages(). Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2019-11-04bcachefs: Fix uninitialized field in hash_check_init()Justin Husted
The chain_end field was not initialized before use in hash_set_chain_start. Signed-off-by: Justin Husted <sigstop@gmail.com>
2019-11-04bcachefs: Don't hold inode lock longer than necessary in dio write pathKent Overstreet
In theory we should be able to do (non appending/extending) dio writes without taking the inode lock at all - but this gets us most of the way there. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2019-11-04bcachefs: Avoid atomics in write fast pathKent Overstreet
This adds some horrible hacks, but the atomic ops for closures were getting to be a pretty expensive part of the write path. We don't want to rip out closures entirely from the write path, because they're used for e.g. waiting on the allocator, or waiting on the journal flush, and that stuff would get really ugly without closures. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2019-11-04bcachefs: Don't use extent_ptr_decoded_append() in write pathKent Overstreet
bch2_extent_ptr_decoded_append() is more general than we need here; we know we're initializing a new extent so e.g. we're going to need the crc entry. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2019-11-04bcachefs: bch2_btree_iter_fix_key_modified()Kent Overstreet
This is considerably cheaper than bch2_btree_node_iter_fix(), for cases where the key was only modified and key ordering isn't changing. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2019-11-04bcachefs: Inline more of bch2_trans_commit hot pathKent Overstreet
The main optimization here is that if we let bch2_replicas_delta_list_apply() fail, we can completely skip calling bch2_bkey_replicas_marked_locked(). And assorted other small optimizations. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2019-11-04bcachefs: Trust btree alloc info at runtimeKent Overstreet
This lets us avoid a cache miss in the write path. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2019-11-04bcachefs: More bset.c microoptimizationKent Overstreet
Improve a few paper cuts that've shown up during profiling. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2019-11-01bcachefs: Initialize btree_node flags field in bch2_btree_root_alloc.Justin Husted
Valgrind data indicated that the flags field was only partially initialized when written to disk. Signed-off-by: Justin Husted <sigstop@gmail.com>
2019-11-01bcachefs: Further padding fixes in bch2_journal_super_entries_add_common()Justin Husted
The previous patch 128cb1a to fix uninitialized data was incorrect and did not initialize the padding space correctly. Furthermore, several other cases in this function do not initialize their padding space correctly. Move initialization into some helper functions in a more robust way. Signed-off-by: Justin Husted <sigstop@gmail.com>
2019-11-01bcachefs: Initialize padding space after alloc bkeyJustin Husted
Packed bkeys are padded up to 64 bit alignment, but the alloc bkey type was not clearing the pad bytes after the last data byte. This left the key possibly containing some random garbage at the end. This problem was found using valgrind. This patch also changes a path with the inode bkey to clear in the same way. Signed-off-by: Justin Husted <sigstop@gmail.com>
2019-10-25bcachefs: Add missing error checking in bch2_find_by_inum_trans()Kent Overstreet
Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2019-10-25bcachefs: Fix an error path raceKent Overstreet
On IO error, bch2_writepages_io_done() will set the page state to indicate nothing's already reserved (since the write didn't happen, we don't know what's already reserved). This can race with the buffered IO path, in between getting a disk reservation and calling bch2_set_page_dirty(). Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2019-10-24bcachefs: Don't reuse bio in retry pathKent Overstreet
We can't reuse bios without reinitializing them, and in the retry path it's safer to just make sure we don't reuse them at all. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2019-10-23bcachefs: Don't use rep movsq for small memcopiesKent Overstreet
Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2019-10-22bcachefs: Avoid calling iter_prev() in extent update pathKent Overstreet
Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2019-10-22bcachefs: kill bch2_extent_merge_inline()Kent Overstreet
2019-10-22bcachefs: Don't use FUA unnecessarilyKent Overstreet
Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
2019-10-22bcachefs: Refactor bch2_trans_commit() pathKent Overstreet
2019-10-22bcachefs: Make btree_node_type_needs_gc() cheaperKent Overstreet
Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>