mbox series

[v2,0/8] btrfs: do not poking into the implementation details of bio_vec

Message ID cover.1745024799.git.wqu@suse.com (mailing list archive)
Headers show
Series btrfs: do not poking into the implementation details of bio_vec | expand

Message

Qu Wenruo April 19, 2025, 7:17 a.m. UTC
- Fix a crash caused by incorrectly index sector_ptrs
  The 5th patch, caused by missing increasement of the @offset variable.

- Use physical addresses instead of virtual addresses to handle HIGHMEM
  The 6th patch, as we can still get sector_ptr from bio_sectors[] which
  is using pages from the bio, and that can be highmem.

  However I can not do a proper test on this, as the latest kernel has
  already rejected HIGHMEM64G option, thus even if my VM has extra 3GB
  for HIGHMEM (total 6GB), I'm not sure if the kernel can really utilize
  those high memories.

  Furthermore there seems to be other bugs in mm layer related to
  HIGHMEM + PAGE, resulting zswap crash when try compressing a page to
  be swapped out.
  But at least several scrub/balance related test cases passed on x86
  32bit with HIGHMEM and PAGE.

  I have tested with x86_64 (64 bit, no HIGHMEM), aarch64 (64bit, 64K
  page size, no HIGHMEM) with no regression.

- Fix a incorrect __bio_add_page() usage in scrub_bio_add_sector()
  The 6th patch, as bio_add_page() do extra bvec merging before
  allocating a new bvec, but __bio_add_page() does not.

  This triggers WARN_ON_ONCE() in __bio_add_page() checking if the bio
  is full.

  Fixing it by do the old bio_add_page() and ASSERT(), with extra
  comment on we can not use __bio_add_page().

- Various minor commit message update
  And full proper test runs.

Christoph Hellwig (8):
  btrfs: remove the alignment checks in end_bbio_data_read
  btrfs: track the next file offset in struct btrfs_bio_ctrl
  btrfs: pass a physical address to btrfs_repair_io_failure
  btrfs: move kmapping out of btrfs_check_sector_csum
  btrfs: simplify bvec iteration in index_one_bio
  btrfs: raid56: store a physical address in structure sector_ptr
  btrfs: scrub: use virtual addresses directly
  btrfs: use bvec_kmap_local in btrfs_decompress_buf2page

 fs/btrfs/bio.c         |   9 +-
 fs/btrfs/bio.h         |   3 +-
 fs/btrfs/btrfs_inode.h |   4 +-
 fs/btrfs/compression.c |   9 +-
 fs/btrfs/disk-io.c     |   7 +-
 fs/btrfs/extent_io.c   |  60 ++++---------
 fs/btrfs/inode.c       |  20 ++---
 fs/btrfs/raid56.c      | 189 ++++++++++++++++++++++-------------------
 fs/btrfs/scrub.c       |  93 +++++++++-----------
 9 files changed, 184 insertions(+), 210 deletions(-)