diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2019-11-09 16:43:16 -0500 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@linux.dev> | 2023-10-22 17:08:32 -0400 |
commit | 4be1a412ea34923370cd6163232d7928ae9a0e4a (patch) | |
tree | 572fcb3d4556c549a97d93c49cdbf14f8a65b83d /fs/bcachefs/fs-io.c | |
parent | 08c07fea7b437f0a841f85cc9b670b60dacd85cf (diff) | |
download | lwn-4be1a412ea34923370cd6163232d7928ae9a0e4a.tar.gz lwn-4be1a412ea34923370cd6163232d7928ae9a0e4a.zip |
bcachefs: Inline data extents
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@linux.dev>
Diffstat (limited to 'fs/bcachefs/fs-io.c')
-rw-r--r-- | fs/bcachefs/fs-io.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/fs/bcachefs/fs-io.c b/fs/bcachefs/fs-io.c index fab952856e36..7abe53be7dd3 100644 --- a/fs/bcachefs/fs-io.c +++ b/fs/bcachefs/fs-io.c @@ -990,6 +990,18 @@ static void bch2_writepage_io_done(struct closure *cl) } } + if (io->op.flags & BCH_WRITE_WROTE_DATA_INLINE) { + bio_for_each_segment_all(bvec, bio, iter) { + struct bch_page_state *s; + + s = __bch2_page_state(bvec->bv_page); + spin_lock(&s->lock); + for (i = 0; i < PAGE_SECTORS; i++) + s->s[i].nr_replicas = 0; + spin_unlock(&s->lock); + } + } + /* * racing with fallocate can cause us to add fewer sectors than * expected - but we shouldn't add more sectors than expected: |