1 // SPDX-License-Identifier: GPL-2.0 2 3 #include <linux/slab.h> 4 #include "messages.h" 5 #include "subpage.h" 6 #include "btrfs_inode.h" 7 8 /* 9 * Subpage (block size < folio size) support overview: 10 * 11 * Limitations: 12 * 13 * - Metadata must be fully aligned to node size 14 * So when nodesize <= page size, the metadata can never cross folio boundaries. 15 * 16 * - Only support blocks per folio <= min(BTRFS_MAX_FOLIO_SIZE / fs block size, 17 * BTRFS_MAX_BLOCKS_PER_FOLIO) 18 * This is to ensure we can afford an on-stack bitmap, without the need to allocate 19 * bitmap memory at runtime. 20 * 21 * Implementation: 22 * 23 * - Common 24 * Both metadata and data will use a new structure, btrfs_folio_state, to 25 * record the status of each sector inside a page. This provides the extra 26 * granularity needed. 27 * 28 * - Metadata 29 * Since we have multiple tree blocks inside one page, we can't rely on page 30 * locking anymore, or we will have greatly reduced concurrency or even 31 * deadlocks (hold one tree lock while trying to lock another tree lock in 32 * the same page). 33 * 34 * Thus for metadata locking, subpage support relies on io_tree locking only. 35 * This means a slightly higher tree locking latency. 36 */ 37 38 int btrfs_attach_folio_state(const struct btrfs_fs_info *fs_info, 39 struct folio *folio, enum btrfs_folio_type type) 40 { 41 struct btrfs_folio_state *bfs; 42 43 /* For metadata we don't support large folio yet. */ 44 if (type == BTRFS_SUBPAGE_METADATA) 45 ASSERT(!folio_test_large(folio)); 46 47 /* 48 * We have cases like a dummy extent buffer page, which is not mapped 49 * and doesn't need to be locked. 50 */ 51 if (folio->mapping) 52 ASSERT(folio_test_locked(folio)); 53 54 /* Either not subpage, or the folio already has private attached. */ 55 if (folio_test_private(folio)) 56 return 0; 57 if (type == BTRFS_SUBPAGE_METADATA && !btrfs_meta_is_subpage(fs_info)) 58 return 0; 59 if (type == BTRFS_SUBPAGE_DATA && !btrfs_is_subpage(fs_info, folio)) 60 return 0; 61 62 bfs = btrfs_alloc_folio_state(fs_info, folio_size(folio), type, GFP_NOFS); 63 if (IS_ERR(bfs)) 64 return PTR_ERR(bfs); 65 66 folio_attach_private(folio, bfs); 67 return 0; 68 } 69 70 void btrfs_detach_folio_state(const struct btrfs_fs_info *fs_info, struct folio *folio, 71 enum btrfs_folio_type type) 72 { 73 struct btrfs_folio_state *bfs; 74 75 /* Either not subpage, or the folio already has private attached. */ 76 if (!folio_test_private(folio)) 77 return; 78 if (type == BTRFS_SUBPAGE_METADATA && !btrfs_meta_is_subpage(fs_info)) 79 return; 80 if (type == BTRFS_SUBPAGE_DATA && !btrfs_is_subpage(fs_info, folio)) 81 return; 82 83 bfs = folio_detach_private(folio); 84 ASSERT(bfs); 85 btrfs_free_folio_state(bfs); 86 } 87 88 struct btrfs_folio_state *btrfs_alloc_folio_state(const struct btrfs_fs_info *fs_info, 89 size_t fsize, enum btrfs_folio_type type, 90 gfp_t gfp) 91 { 92 struct btrfs_folio_state *ret; 93 unsigned int real_size; 94 95 ASSERT(fs_info->sectorsize < fsize); 96 97 real_size = struct_size(ret, bitmaps, 98 BITS_TO_LONGS(btrfs_bitmap_nr_max * 99 (fsize >> fs_info->sectorsize_bits))); 100 ret = kzalloc(real_size, gfp); 101 if (!ret) 102 return ERR_PTR(-ENOMEM); 103 104 spin_lock_init(&ret->lock); 105 if (type == BTRFS_SUBPAGE_METADATA) 106 atomic_set(&ret->eb_refs, 0); 107 else 108 atomic_set(&ret->nr_locked, 0); 109 return ret; 110 } 111 112 /* 113 * Increase the eb_refs of current subpage. 114 * 115 * This is important for eb allocation, to prevent race with last eb freeing 116 * of the same page. 117 * With the eb_refs increased before the eb inserted into radix tree, 118 * detach_extent_buffer_page() won't detach the folio private while we're still 119 * allocating the extent buffer. 120 */ 121 void btrfs_folio_inc_eb_refs(const struct btrfs_fs_info *fs_info, struct folio *folio) 122 { 123 struct btrfs_folio_state *bfs; 124 125 if (!btrfs_meta_is_subpage(fs_info)) 126 return; 127 128 ASSERT(folio_test_private(folio) && folio->mapping); 129 lockdep_assert_held(&folio->mapping->i_private_lock); 130 131 bfs = folio_get_private(folio); 132 atomic_inc(&bfs->eb_refs); 133 } 134 135 void btrfs_folio_dec_eb_refs(const struct btrfs_fs_info *fs_info, struct folio *folio) 136 { 137 struct btrfs_folio_state *bfs; 138 139 if (!btrfs_meta_is_subpage(fs_info)) 140 return; 141 142 ASSERT(folio_test_private(folio) && folio->mapping); 143 lockdep_assert_held(&folio->mapping->i_private_lock); 144 145 bfs = folio_get_private(folio); 146 ASSERT(atomic_read(&bfs->eb_refs)); 147 atomic_dec(&bfs->eb_refs); 148 } 149 150 static void btrfs_subpage_assert(const struct btrfs_fs_info *fs_info, 151 struct folio *folio, u64 start, u32 len) 152 { 153 /* Basic checks */ 154 ASSERT(folio_test_private(folio) && folio_get_private(folio)); 155 ASSERT(IS_ALIGNED(start, fs_info->sectorsize) && 156 IS_ALIGNED(len, fs_info->sectorsize), "start=%llu len=%u", start, len); 157 /* 158 * The range check only works for mapped page, we can still have 159 * unmapped page like dummy extent buffer pages. 160 */ 161 if (folio->mapping) 162 ASSERT(folio_pos(folio) <= start && 163 start + len <= folio_next_pos(folio), 164 "start=%llu len=%u folio_pos=%llu folio_size=%zu", 165 start, len, folio_pos(folio), folio_size(folio)); 166 } 167 168 #define subpage_calc_start_bit(fs_info, folio, name, start, len) \ 169 ({ \ 170 unsigned int __start_bit; \ 171 const unsigned int __bpf = btrfs_blocks_per_folio(fs_info, folio); \ 172 \ 173 btrfs_subpage_assert(fs_info, folio, start, len); \ 174 __start_bit = offset_in_folio(folio, start) >> fs_info->sectorsize_bits; \ 175 __start_bit += __bpf * btrfs_bitmap_nr_##name; \ 176 __start_bit; \ 177 }) 178 179 static void btrfs_subpage_clamp_range(struct folio *folio, u64 *start, u32 *len) 180 { 181 u64 orig_start = *start; 182 u32 orig_len = *len; 183 184 *start = max_t(u64, folio_pos(folio), orig_start); 185 /* 186 * For certain call sites like btrfs_drop_pages(), we may have pages 187 * beyond the target range. In that case, just set @len to 0, subpage 188 * helpers can handle @len == 0 without any problem. 189 */ 190 if (folio_pos(folio) >= orig_start + orig_len) 191 *len = 0; 192 else 193 *len = min_t(u64, folio_next_pos(folio), orig_start + orig_len) - *start; 194 } 195 196 static bool btrfs_subpage_end_and_test_lock(const struct btrfs_fs_info *fs_info, 197 struct folio *folio, u64 start, u32 len) 198 { 199 struct btrfs_folio_state *bfs = folio_get_private(folio); 200 const int nbits = (len >> fs_info->sectorsize_bits); 201 unsigned long flags; 202 bool last; 203 204 btrfs_subpage_assert(fs_info, folio, start, len); 205 206 spin_lock_irqsave(&bfs->lock, flags); 207 /* 208 * We have call sites passing @lock_page into 209 * extent_clear_unlock_delalloc() for compression path. 210 * 211 * This @locked_page is locked by plain lock_page(), thus its 212 * subpage::locked is 0. Handle them in a special way. 213 */ 214 if (atomic_read(&bfs->nr_locked) == 0) { 215 spin_unlock_irqrestore(&bfs->lock, flags); 216 return true; 217 } 218 ASSERT(atomic_read(&bfs->nr_locked) >= nbits, 219 "atomic_read(&bfs->nr_locked)=%d nbits=%d", 220 atomic_read(&bfs->nr_locked), nbits); 221 last = atomic_sub_and_test(nbits, &bfs->nr_locked); 222 spin_unlock_irqrestore(&bfs->lock, flags); 223 return last; 224 } 225 226 /* 227 * Handle different locked folios: 228 * 229 * - Non-subpage folio 230 * Just unlock it. 231 * 232 * - folio locked but without any subpage locked 233 * This happens either before writepage_delalloc() or the delalloc range is 234 * already handled by previous folio. 235 * We can simple unlock it. 236 * 237 * - folio locked with subpage range locked. 238 * We go through the locked sectors inside the range and clear their locked 239 * bitmap, reduce the writer lock number, and unlock the page if that's 240 * the last locked range. 241 */ 242 void btrfs_folio_end_lock(const struct btrfs_fs_info *fs_info, 243 struct folio *folio, u64 start, u32 len) 244 { 245 struct btrfs_folio_state *bfs = folio_get_private(folio); 246 247 ASSERT(folio_test_locked(folio)); 248 249 if (unlikely(!fs_info) || !btrfs_is_subpage(fs_info, folio)) { 250 folio_unlock(folio); 251 return; 252 } 253 254 /* 255 * For subpage case, there are two types of locked page. With or 256 * without locked number. 257 * 258 * Since we own the page lock, no one else could touch subpage::locked 259 * and we are safe to do several atomic operations without spinlock. 260 */ 261 if (atomic_read(&bfs->nr_locked) == 0) { 262 /* No subpage lock, locked by plain lock_page(). */ 263 folio_unlock(folio); 264 return; 265 } 266 267 btrfs_subpage_clamp_range(folio, &start, &len); 268 if (btrfs_subpage_end_and_test_lock(fs_info, folio, start, len)) 269 folio_unlock(folio); 270 } 271 272 void btrfs_folio_end_lock_bitmap(const struct btrfs_fs_info *fs_info, 273 struct folio *folio, unsigned long *bitmap) 274 { 275 struct btrfs_folio_state *bfs = folio_get_private(folio); 276 const unsigned int blocks_per_folio = btrfs_blocks_per_folio(fs_info, folio); 277 const unsigned int nbits = bitmap_weight(bitmap, blocks_per_folio); 278 unsigned long flags; 279 bool last = false; 280 281 if (!btrfs_is_subpage(fs_info, folio)) { 282 folio_unlock(folio); 283 return; 284 } 285 286 if (atomic_read(&bfs->nr_locked) == 0) { 287 /* No subpage lock, locked by plain lock_page(). */ 288 folio_unlock(folio); 289 return; 290 } 291 292 spin_lock_irqsave(&bfs->lock, flags); 293 ASSERT(atomic_read(&bfs->nr_locked) >= nbits, 294 "atomic_read(&bfs->nr_locked)=%d nbits=%d", 295 atomic_read(&bfs->nr_locked), nbits); 296 last = atomic_sub_and_test(nbits, &bfs->nr_locked); 297 spin_unlock_irqrestore(&bfs->lock, flags); 298 if (last) 299 folio_unlock(folio); 300 } 301 302 #define subpage_test_bitmap_all_set(fs_info, folio, name) \ 303 ({ \ 304 struct btrfs_folio_state *__bfs = folio_get_private(folio); \ 305 const unsigned int __bpf = btrfs_blocks_per_folio(fs_info, folio); \ 306 \ 307 bitmap_test_range_all_set(__bfs->bitmaps, \ 308 __bpf * btrfs_bitmap_nr_##name, __bpf); \ 309 }) 310 311 #define subpage_test_bitmap_all_zero(fs_info, folio, name) \ 312 ({ \ 313 struct btrfs_folio_state *__bfs = folio_get_private(folio); \ 314 const unsigned int __bpf = btrfs_blocks_per_folio(fs_info, folio); \ 315 \ 316 bitmap_test_range_all_zero(__bfs->bitmaps, \ 317 __bpf * btrfs_bitmap_nr_##name, __bpf); \ 318 }) 319 320 void btrfs_subpage_set_uptodate(const struct btrfs_fs_info *fs_info, 321 struct folio *folio, u64 start, u32 len) 322 { 323 struct btrfs_folio_state *bfs = folio_get_private(folio); 324 unsigned int start_bit = subpage_calc_start_bit(fs_info, folio, 325 uptodate, start, len); 326 unsigned long flags; 327 328 spin_lock_irqsave(&bfs->lock, flags); 329 bitmap_set(bfs->bitmaps, start_bit, len >> fs_info->sectorsize_bits); 330 if (subpage_test_bitmap_all_set(fs_info, folio, uptodate)) 331 folio_mark_uptodate(folio); 332 spin_unlock_irqrestore(&bfs->lock, flags); 333 } 334 335 void btrfs_subpage_clear_uptodate(const struct btrfs_fs_info *fs_info, 336 struct folio *folio, u64 start, u32 len) 337 { 338 struct btrfs_folio_state *bfs = folio_get_private(folio); 339 unsigned int start_bit = subpage_calc_start_bit(fs_info, folio, 340 uptodate, start, len); 341 unsigned long flags; 342 343 spin_lock_irqsave(&bfs->lock, flags); 344 bitmap_clear(bfs->bitmaps, start_bit, len >> fs_info->sectorsize_bits); 345 folio_clear_uptodate(folio); 346 spin_unlock_irqrestore(&bfs->lock, flags); 347 } 348 349 /* 350 * folio_mark_dirty() for a folio we are dirtying with a space reservation. 351 * 352 * Dirtiers without a reservation use btrfs_data_dirty_folio(). 353 */ 354 static void btrfs_folio_mark_dirty(struct folio *folio) 355 { 356 struct address_space *mapping = folio_mapping(folio); 357 358 if (!mapping || !mapping->host || !is_data_inode(BTRFS_I(mapping->host))) { 359 folio_mark_dirty(folio); 360 return; 361 } 362 if (folio_test_reclaim(folio)) 363 folio_clear_reclaim(folio); 364 filemap_dirty_folio(mapping, folio); 365 } 366 367 /* 368 * The set helper of the dirty ops, so it only runs for folios without a 369 * fixup bitmap: for those the folio flag is the whole fixup state, and this 370 * reserving write covers the block, so retire it. Metadata never has the 371 * flag set and only pays the test. 372 */ 373 static void btrfs_folio_mark_dirty_reserved(struct folio *folio) 374 { 375 if (folio_test_fixup_pending(folio)) 376 folio_clear_fixup_pending(folio); 377 btrfs_folio_mark_dirty(folio); 378 } 379 380 void btrfs_subpage_set_dirty(const struct btrfs_fs_info *fs_info, 381 struct folio *folio, u64 start, u32 len) 382 { 383 struct btrfs_folio_state *bfs = folio_get_private(folio); 384 unsigned int dirty_bit = subpage_calc_start_bit(fs_info, folio, 385 dirty, start, len); 386 unsigned int fixup_bit = subpage_calc_start_bit(fs_info, folio, 387 fixup, start, len); 388 const unsigned int nbits = len >> fs_info->sectorsize_bits; 389 unsigned long flags; 390 391 spin_lock_irqsave(&bfs->lock, flags); 392 bitmap_set(bfs->bitmaps, dirty_bit, nbits); 393 /* Proper dirtying obviates the need for fixup. */ 394 bitmap_clear(bfs->bitmaps, fixup_bit, nbits); 395 if (folio_test_fixup_pending(folio) && 396 subpage_test_bitmap_all_zero(fs_info, folio, fixup)) 397 folio_clear_fixup_pending(folio); 398 spin_unlock_irqrestore(&bfs->lock, flags); 399 btrfs_folio_mark_dirty(folio); 400 } 401 402 static void folio_clear_tags(struct folio *folio) 403 { 404 struct address_space *mapping = folio_mapping(folio); 405 XA_STATE(xas, &mapping->i_pages, folio->index); 406 unsigned long flags; 407 408 ASSERT(folio_test_locked(folio)); 409 ASSERT(mapping); 410 ASSERT(mapping_use_writeback_tags(mapping)); 411 412 xas_lock_irqsave(&xas, flags); 413 xas_load(&xas); 414 xas_clear_mark(&xas, PAGECACHE_TAG_DIRTY); 415 xas_clear_mark(&xas, PAGECACHE_TAG_TOWRITE); 416 xas_unlock_irqrestore(&xas, flags); 417 } 418 419 /* 420 * Extra clear_and_test function for subpage dirty bitmap. 421 * 422 * Return true if we're the last bits in the dirty_bitmap and clear the 423 * dirty_bitmap. 424 * Return false otherwise. 425 * 426 * NOTE: Callers should manually clear page dirty for true case, as we have 427 * extra handling for tree blocks. 428 */ 429 bool btrfs_subpage_clear_and_test_dirty(const struct btrfs_fs_info *fs_info, 430 struct folio *folio, u64 start, u32 len) 431 { 432 struct btrfs_folio_state *bfs = folio_get_private(folio); 433 unsigned int start_bit = subpage_calc_start_bit(fs_info, folio, 434 dirty, start, len); 435 unsigned long flags; 436 bool last = false; 437 438 spin_lock_irqsave(&bfs->lock, flags); 439 bitmap_clear(bfs->bitmaps, start_bit, len >> fs_info->sectorsize_bits); 440 if (subpage_test_bitmap_all_zero(fs_info, folio, dirty)) 441 last = true; 442 spin_unlock_irqrestore(&bfs->lock, flags); 443 return last; 444 } 445 446 void btrfs_subpage_clear_dirty(const struct btrfs_fs_info *fs_info, 447 struct folio *folio, u64 start, u32 len) 448 { 449 bool last; 450 451 last = btrfs_subpage_clear_and_test_dirty(fs_info, folio, start, len); 452 if (last) 453 folio_clear_dirty_for_io(folio); 454 } 455 456 void btrfs_subpage_set_writeback(const struct btrfs_fs_info *fs_info, 457 struct folio *folio, u64 start, u32 len) 458 { 459 struct btrfs_folio_state *bfs = folio_get_private(folio); 460 unsigned int start_bit = subpage_calc_start_bit(fs_info, folio, 461 writeback, start, len); 462 unsigned long flags; 463 464 spin_lock_irqsave(&bfs->lock, flags); 465 bitmap_set(bfs->bitmaps, start_bit, len >> fs_info->sectorsize_bits); 466 467 /* 468 * Don't clear the TOWRITE tag when starting writeback on a still-dirty 469 * folio. Doing so can cause WB_SYNC_ALL writepages() to overlook it, 470 * assume writeback is complete, and exit too early — violating sync 471 * ordering guarantees. 472 * 473 * Instead we manually clear the DIRTY and TOWRITE tags after the folio 474 * is no longer dirty. 475 */ 476 if (!folio_test_writeback(folio)) 477 __folio_start_writeback(folio, true); 478 if (!folio_test_dirty(folio)) 479 folio_clear_tags(folio); 480 spin_unlock_irqrestore(&bfs->lock, flags); 481 } 482 483 void btrfs_subpage_clear_writeback(const struct btrfs_fs_info *fs_info, 484 struct folio *folio, u64 start, u32 len) 485 { 486 struct btrfs_folio_state *bfs = folio_get_private(folio); 487 unsigned int start_bit = subpage_calc_start_bit(fs_info, folio, 488 writeback, start, len); 489 unsigned long flags; 490 491 spin_lock_irqsave(&bfs->lock, flags); 492 bitmap_clear(bfs->bitmaps, start_bit, len >> fs_info->sectorsize_bits); 493 if (subpage_test_bitmap_all_zero(fs_info, folio, writeback)) { 494 ASSERT(folio_test_writeback(folio)); 495 folio_end_writeback(folio); 496 } 497 spin_unlock_irqrestore(&bfs->lock, flags); 498 } 499 500 void btrfs_subpage_clear_fixup(const struct btrfs_fs_info *fs_info, 501 struct folio *folio, u64 start, u32 len) 502 { 503 struct btrfs_folio_state *bfs = folio_get_private(folio); 504 unsigned int start_bit = subpage_calc_start_bit(fs_info, folio, 505 fixup, start, len); 506 unsigned long flags; 507 508 spin_lock_irqsave(&bfs->lock, flags); 509 bitmap_clear(bfs->bitmaps, start_bit, len >> fs_info->sectorsize_bits); 510 if (subpage_test_bitmap_all_zero(fs_info, folio, fixup)) 511 folio_clear_fixup_pending(folio); 512 spin_unlock_irqrestore(&bfs->lock, flags); 513 } 514 515 /* 516 * In one pass under bfs->lock, mark every block with a clear dirty bit in the 517 * range both dirty and needing fixup. 518 * 519 * Only called from the dirty_folio callback, which owns the folio-level 520 * dirty flag; calling folio_mark_dirty() here would recurse. 521 * 522 * The folio fixup flag and bits are both set under bfs->lock so that a 523 * writeback pass observing the new bits also observes the flag. 524 */ 525 static void btrfs_subpage_set_fixup_dirty(const struct btrfs_fs_info *fs_info, 526 struct folio *folio, u64 start, u32 len) 527 { 528 struct btrfs_folio_state *bfs = folio_get_private(folio); 529 unsigned int dirty_bit = subpage_calc_start_bit(fs_info, folio, 530 dirty, start, len); 531 unsigned int fixup_bit = subpage_calc_start_bit(fs_info, folio, 532 fixup, start, len); 533 const unsigned int nbits = len >> fs_info->sectorsize_bits; 534 unsigned long flags; 535 bool marked = false; 536 537 spin_lock_irqsave(&bfs->lock, flags); 538 for (unsigned int i = 0; i < nbits; i++) { 539 if (test_bit(dirty_bit + i, bfs->bitmaps)) 540 continue; 541 set_bit(dirty_bit + i, bfs->bitmaps); 542 set_bit(fixup_bit + i, bfs->bitmaps); 543 marked = true; 544 } 545 if (marked) 546 folio_set_fixup_pending(folio); 547 spin_unlock_irqrestore(&bfs->lock, flags); 548 } 549 550 /* 551 * Mark the still-clean blocks of a folio dirty and needing fixup, for 552 * btrfs_data_dirty_folio(). 553 * 554 * A subpage block size folio that is not uptodate is left alone: its clean 555 * blocks may hold content that was never read in, which must not be marked 556 * dirty. 557 */ 558 void btrfs_folio_set_fixup_dirty(const struct btrfs_fs_info *fs_info, 559 struct folio *folio, u64 start, u32 len) 560 { 561 if (!btrfs_is_subpage(fs_info, folio)) { 562 if (!folio_test_dirty(folio)) 563 folio_set_fixup_pending(folio); 564 return; 565 } 566 if (!folio_test_uptodate(folio)) 567 return; 568 btrfs_subpage_set_fixup_dirty(fs_info, folio, start, len); 569 } 570 571 /* 572 * Drop the fixup blocks inside the range: clear both their fixup and dirty 573 * bits. 574 * 575 * Fixup blocks carry no space reservation, so their fixup and dirty bits 576 * must be dropped together. Clearing only the fixup bit would leave a 577 * dirty block without a reservation which is not a valid state. 578 * 579 * Returns true if the folio has no dirty blocks left. 580 */ 581 static bool btrfs_subpage_clear_fixup_dirty(const struct btrfs_fs_info *fs_info, 582 struct folio *folio, u64 start, u32 len) 583 { 584 struct btrfs_folio_state *bfs = folio_get_private(folio); 585 unsigned int dirty_bit = subpage_calc_start_bit(fs_info, folio, 586 dirty, start, len); 587 unsigned int fixup_bit = subpage_calc_start_bit(fs_info, folio, 588 fixup, start, len); 589 const unsigned int nbits = len >> fs_info->sectorsize_bits; 590 unsigned long flags; 591 bool last; 592 593 spin_lock_irqsave(&bfs->lock, flags); 594 for (unsigned int i = 0; i < nbits; i++) { 595 if (!test_bit(fixup_bit + i, bfs->bitmaps)) 596 continue; 597 clear_bit(fixup_bit + i, bfs->bitmaps); 598 clear_bit(dirty_bit + i, bfs->bitmaps); 599 } 600 if (subpage_test_bitmap_all_zero(fs_info, folio, fixup)) 601 folio_clear_fixup_pending(folio); 602 last = subpage_test_bitmap_all_zero(fs_info, folio, dirty); 603 spin_unlock_irqrestore(&bfs->lock, flags); 604 return last; 605 } 606 607 /* 608 * Drop the fixup blocks inside the range, for callers discarding their data: 609 * btrfs_invalidate_folio() and the writepage fixup worker's error path. 610 * 611 * Callers that have just reserved space for a block want 612 * btrfs_folio_clear_fixup() instead - there the block stays dirty and gets 613 * written. 614 * 615 * The range can be byte-granular (an unaligned truncate through 616 * btrfs_invalidate_folio()); only blocks fully inside it are dropped, as a 617 * partially covered block still holds live data outside the range. For 618 * single-block folios the folio flag is the fixup state, so it is dropped 619 * only when the range covers the whole folio. 620 */ 621 void btrfs_folio_clear_fixup_dirty(const struct btrfs_fs_info *fs_info, 622 struct folio *folio, u64 start, u32 len) 623 { 624 u64 aligned_start; 625 u64 aligned_end; 626 627 /* The folio flag is set whenever any fixup bitmap bit is. */ 628 if (!folio_test_fixup_pending(folio)) 629 return; 630 if (!btrfs_is_subpage(fs_info, folio)) { 631 if (start <= folio_pos(folio) && 632 start + len >= folio_next_pos(folio)) { 633 folio_clear_fixup_pending(folio); 634 folio_clear_dirty_for_io(folio); 635 } 636 return; 637 } 638 btrfs_subpage_clamp_range(folio, &start, &len); 639 aligned_start = round_up(start, fs_info->sectorsize); 640 aligned_end = round_down(start + len, fs_info->sectorsize); 641 if (aligned_end <= aligned_start) 642 return; 643 if (btrfs_subpage_clear_fixup_dirty(fs_info, folio, aligned_start, 644 aligned_end - aligned_start)) 645 folio_clear_dirty_for_io(folio); 646 } 647 648 bool btrfs_folio_test_fixup(const struct btrfs_fs_info *fs_info, 649 struct folio *folio, u64 start, u32 len) 650 { 651 if (!btrfs_is_subpage(fs_info, folio)) 652 return folio_test_fixup_pending(folio); 653 return btrfs_subpage_test_fixup(fs_info, folio, start, len); 654 } 655 656 void btrfs_folio_clear_fixup(const struct btrfs_fs_info *fs_info, 657 struct folio *folio, u64 start, u32 len) 658 { 659 if (!btrfs_is_subpage(fs_info, folio)) { 660 folio_clear_fixup_pending(folio); 661 return; 662 } 663 btrfs_subpage_clear_fixup(fs_info, folio, start, len); 664 } 665 666 /* 667 * Unlike set/clear which is dependent on each page status, for test all bits 668 * are tested in the same way. 669 */ 670 #define IMPLEMENT_BTRFS_SUBPAGE_TEST_OP(name) \ 671 bool btrfs_subpage_test_##name(const struct btrfs_fs_info *fs_info, \ 672 struct folio *folio, u64 start, u32 len) \ 673 { \ 674 struct btrfs_folio_state *bfs = folio_get_private(folio); \ 675 unsigned int start_bit = subpage_calc_start_bit(fs_info, folio, \ 676 name, start, len); \ 677 unsigned long flags; \ 678 bool ret; \ 679 \ 680 spin_lock_irqsave(&bfs->lock, flags); \ 681 ret = bitmap_test_range_all_set(bfs->bitmaps, start_bit, \ 682 len >> fs_info->sectorsize_bits); \ 683 spin_unlock_irqrestore(&bfs->lock, flags); \ 684 return ret; \ 685 } 686 IMPLEMENT_BTRFS_SUBPAGE_TEST_OP(uptodate); 687 IMPLEMENT_BTRFS_SUBPAGE_TEST_OP(dirty); 688 IMPLEMENT_BTRFS_SUBPAGE_TEST_OP(writeback); 689 IMPLEMENT_BTRFS_SUBPAGE_TEST_OP(fixup); 690 691 /* 692 * Note that, in selftests (extent-io-tests), we can have empty fs_info passed 693 * in. We only test sectorsize == PAGE_SIZE cases so far, thus we can fall 694 * back to regular sectorsize branch. 695 */ 696 #define IMPLEMENT_BTRFS_PAGE_OPS(name, folio_set_func, \ 697 folio_clear_func, folio_test_func) \ 698 void btrfs_folio_set_##name(const struct btrfs_fs_info *fs_info, \ 699 struct folio *folio, u64 start, u32 len) \ 700 { \ 701 if (unlikely(!fs_info) || \ 702 !btrfs_is_subpage(fs_info, folio)) { \ 703 folio_set_func(folio); \ 704 return; \ 705 } \ 706 btrfs_subpage_set_##name(fs_info, folio, start, len); \ 707 } \ 708 void btrfs_folio_clear_##name(const struct btrfs_fs_info *fs_info, \ 709 struct folio *folio, u64 start, u32 len) \ 710 { \ 711 if (unlikely(!fs_info) || \ 712 !btrfs_is_subpage(fs_info, folio)) { \ 713 folio_clear_func(folio); \ 714 return; \ 715 } \ 716 btrfs_subpage_clear_##name(fs_info, folio, start, len); \ 717 } \ 718 bool btrfs_folio_test_##name(const struct btrfs_fs_info *fs_info, \ 719 struct folio *folio, u64 start, u32 len) \ 720 { \ 721 if (unlikely(!fs_info) || \ 722 !btrfs_is_subpage(fs_info, folio)) \ 723 return folio_test_func(folio); \ 724 return btrfs_subpage_test_##name(fs_info, folio, start, len); \ 725 } \ 726 void btrfs_folio_clamp_set_##name(const struct btrfs_fs_info *fs_info, \ 727 struct folio *folio, u64 start, u32 len) \ 728 { \ 729 if (unlikely(!fs_info) || \ 730 !btrfs_is_subpage(fs_info, folio)) { \ 731 folio_set_func(folio); \ 732 return; \ 733 } \ 734 btrfs_subpage_clamp_range(folio, &start, &len); \ 735 btrfs_subpage_set_##name(fs_info, folio, start, len); \ 736 } \ 737 void btrfs_folio_clamp_clear_##name(const struct btrfs_fs_info *fs_info, \ 738 struct folio *folio, u64 start, u32 len) \ 739 { \ 740 if (unlikely(!fs_info) || \ 741 !btrfs_is_subpage(fs_info, folio)) { \ 742 folio_clear_func(folio); \ 743 return; \ 744 } \ 745 btrfs_subpage_clamp_range(folio, &start, &len); \ 746 btrfs_subpage_clear_##name(fs_info, folio, start, len); \ 747 } \ 748 bool btrfs_folio_clamp_test_##name(const struct btrfs_fs_info *fs_info, \ 749 struct folio *folio, u64 start, u32 len) \ 750 { \ 751 if (unlikely(!fs_info) || \ 752 !btrfs_is_subpage(fs_info, folio)) \ 753 return folio_test_func(folio); \ 754 btrfs_subpage_clamp_range(folio, &start, &len); \ 755 return btrfs_subpage_test_##name(fs_info, folio, start, len); \ 756 } \ 757 void btrfs_meta_folio_set_##name(struct folio *folio, const struct extent_buffer *eb) \ 758 { \ 759 if (!btrfs_meta_is_subpage(eb->fs_info)) { \ 760 folio_set_func(folio); \ 761 return; \ 762 } \ 763 btrfs_subpage_set_##name(eb->fs_info, folio, eb->start, eb->len); \ 764 } \ 765 void btrfs_meta_folio_clear_##name(struct folio *folio, const struct extent_buffer *eb) \ 766 { \ 767 if (!btrfs_meta_is_subpage(eb->fs_info)) { \ 768 folio_clear_func(folio); \ 769 return; \ 770 } \ 771 btrfs_subpage_clear_##name(eb->fs_info, folio, eb->start, eb->len); \ 772 } \ 773 bool btrfs_meta_folio_test_##name(struct folio *folio, const struct extent_buffer *eb) \ 774 { \ 775 if (!btrfs_meta_is_subpage(eb->fs_info)) \ 776 return folio_test_func(folio); \ 777 return btrfs_subpage_test_##name(eb->fs_info, folio, eb->start, eb->len); \ 778 } 779 IMPLEMENT_BTRFS_PAGE_OPS(uptodate, folio_mark_uptodate, folio_clear_uptodate, 780 folio_test_uptodate); 781 IMPLEMENT_BTRFS_PAGE_OPS(dirty, btrfs_folio_mark_dirty_reserved, 782 folio_clear_dirty_for_io, folio_test_dirty); 783 IMPLEMENT_BTRFS_PAGE_OPS(writeback, folio_start_writeback, folio_end_writeback, 784 folio_test_writeback); 785 786 #define DEFINE_GET_SUBPAGE_BITMAP(name) \ 787 static inline unsigned long get_bitmap_value_##name( \ 788 const struct btrfs_fs_info *fs_info, \ 789 struct folio *folio) \ 790 { \ 791 const unsigned int __bpf = btrfs_blocks_per_folio(fs_info, folio); \ 792 const struct btrfs_folio_state *__bfs = folio_get_private(folio); \ 793 unsigned long value; \ 794 \ 795 ASSERT(__bpf <= BITS_PER_LONG); \ 796 value = bitmap_read(__bfs->bitmaps, __bpf * btrfs_bitmap_nr_##name, \ 797 __bpf); \ 798 return value; \ 799 } \ 800 static inline const unsigned long *get_bitmap_pointer_##name( \ 801 const struct btrfs_fs_info *fs_info, \ 802 struct folio *folio) \ 803 { \ 804 const unsigned int __bpf = btrfs_blocks_per_folio(fs_info, folio); \ 805 struct btrfs_folio_state *__bfs = folio_get_private(folio); \ 806 unsigned long *pointer; \ 807 \ 808 ASSERT(__bpf >= BITS_PER_LONG); \ 809 ASSERT(IS_ALIGNED(__bpf, BITS_PER_LONG)); \ 810 pointer = __bfs->bitmaps + (BIT_WORD(__bpf) * btrfs_bitmap_nr_##name); \ 811 return pointer; \ 812 } 813 814 DEFINE_GET_SUBPAGE_BITMAP(uptodate); 815 DEFINE_GET_SUBPAGE_BITMAP(dirty); 816 DEFINE_GET_SUBPAGE_BITMAP(writeback); 817 818 #define SUBPAGE_DUMP_BITMAP(fs_info, folio, name, start, len) \ 819 { \ 820 const unsigned int __bpf = btrfs_blocks_per_folio(fs_info, folio); \ 821 \ 822 if (__bpf <= BITS_PER_LONG) { \ 823 unsigned long bitmap = get_bitmap_value_##name(fs_info, folio); \ 824 \ 825 btrfs_warn(fs_info, \ 826 "dumping bitmap start=%llu len=%u folio=%llu " #name "_bitmap=%*pbl", \ 827 start, len, folio_pos(folio), __bpf, &bitmap); \ 828 } else { \ 829 btrfs_warn(fs_info, \ 830 "dumping bitmap start=%llu len=%u folio=%llu " #name "_bitmap=%*pbl", \ 831 start, len, folio_pos(folio), __bpf, \ 832 get_bitmap_pointer_##name(fs_info, folio)); \ 833 } \ 834 } 835 836 /* 837 * Make sure not only the page dirty bit is cleared, but also subpage dirty bit 838 * is cleared. 839 */ 840 void btrfs_folio_assert_not_dirty(const struct btrfs_fs_info *fs_info, 841 struct folio *folio, u64 start, u32 len) 842 { 843 struct btrfs_folio_state *bfs; 844 unsigned int start_bit; 845 unsigned int nbits; 846 unsigned long flags; 847 848 if (!IS_ENABLED(CONFIG_BTRFS_ASSERT)) 849 return; 850 851 if (!btrfs_is_subpage(fs_info, folio)) { 852 ASSERT(!folio_test_dirty(folio)); 853 return; 854 } 855 856 start_bit = subpage_calc_start_bit(fs_info, folio, dirty, start, len); 857 nbits = len >> fs_info->sectorsize_bits; 858 bfs = folio_get_private(folio); 859 ASSERT(bfs); 860 spin_lock_irqsave(&bfs->lock, flags); 861 if (unlikely(!bitmap_test_range_all_zero(bfs->bitmaps, start_bit, nbits))) { 862 SUBPAGE_DUMP_BITMAP(fs_info, folio, dirty, start, len); 863 ASSERT(bitmap_test_range_all_zero(bfs->bitmaps, start_bit, nbits)); 864 } 865 ASSERT(bitmap_test_range_all_zero(bfs->bitmaps, start_bit, nbits)); 866 spin_unlock_irqrestore(&bfs->lock, flags); 867 } 868 869 /* 870 * This is for folio already locked by plain lock_page()/folio_lock(), which 871 * doesn't have any subpage awareness. 872 * 873 * This populates the involved subpage ranges so that subpage helpers can 874 * properly unlock them. 875 */ 876 void btrfs_folio_set_lock(const struct btrfs_fs_info *fs_info, 877 struct folio *folio, u64 start, u32 len) 878 { 879 struct btrfs_folio_state *bfs; 880 unsigned long flags; 881 unsigned int nbits; 882 int ret; 883 884 ASSERT(folio_test_locked(folio)); 885 if (unlikely(!fs_info) || !btrfs_is_subpage(fs_info, folio)) 886 return; 887 888 bfs = folio_get_private(folio); 889 nbits = len >> fs_info->sectorsize_bits; 890 spin_lock_irqsave(&bfs->lock, flags); 891 ret = atomic_add_return(nbits, &bfs->nr_locked); 892 ASSERT(ret <= btrfs_blocks_per_folio(fs_info, folio)); 893 spin_unlock_irqrestore(&bfs->lock, flags); 894 } 895 896 /* 897 * Clear the dirty flag for the folio. 898 * 899 * If the affected folio is no longer dirty, return true. Otherwise return false. 900 */ 901 bool btrfs_meta_folio_clear_and_test_dirty(struct folio *folio, const struct extent_buffer *eb) 902 { 903 bool last; 904 905 if (!btrfs_meta_is_subpage(eb->fs_info)) { 906 folio_clear_dirty_for_io(folio); 907 return true; 908 } 909 910 last = btrfs_subpage_clear_and_test_dirty(eb->fs_info, folio, eb->start, eb->len); 911 if (last) { 912 folio_clear_dirty_for_io(folio); 913 return true; 914 } 915 return false; 916 } 917 918 void __cold btrfs_subpage_dump_bitmap(const struct btrfs_fs_info *fs_info, 919 struct folio *folio, u64 start, u32 len) 920 { 921 struct btrfs_folio_state *bfs; 922 const unsigned int blocks_per_folio = btrfs_blocks_per_folio(fs_info, folio); 923 unsigned long flags; 924 925 ASSERT(folio_test_private(folio) && folio_get_private(folio)); 926 ASSERT(blocks_per_folio > 1); 927 bfs = folio_get_private(folio); 928 929 dump_page(folio_page(folio, 0), "btrfs folio state dump"); 930 931 if (blocks_per_folio <= BITS_PER_LONG) { 932 unsigned long uptodate; 933 unsigned long dirty; 934 unsigned long writeback; 935 936 spin_lock_irqsave(&bfs->lock, flags); 937 uptodate = get_bitmap_value_uptodate(fs_info, folio); 938 dirty = get_bitmap_value_dirty(fs_info, folio); 939 writeback = get_bitmap_value_writeback(fs_info, folio); 940 941 spin_unlock_irqrestore(&bfs->lock, flags); 942 943 btrfs_warn(fs_info, 944 "start=%llu len=%u page=%llu, bitmaps uptodate=%*pbl dirty=%*pbl writeback=%*pbl", 945 start, len, folio_pos(folio), 946 blocks_per_folio, &uptodate, 947 blocks_per_folio, &dirty, 948 blocks_per_folio, &writeback); 949 return; 950 } 951 952 spin_lock_irqsave(&bfs->lock, flags); 953 btrfs_warn(fs_info, 954 "start=%llu len=%u page=%llu, bitmaps uptodate=%*pbl dirty=%*pbl writeback=%*pbl", 955 start, len, folio_pos(folio), 956 blocks_per_folio, get_bitmap_pointer_uptodate(fs_info, folio), 957 blocks_per_folio, get_bitmap_pointer_dirty(fs_info, folio), 958 blocks_per_folio, get_bitmap_pointer_writeback(fs_info, folio)); 959 spin_unlock_irqrestore(&bfs->lock, flags); 960 } 961 962 void btrfs_copy_subpage_dirty_bitmap(struct btrfs_fs_info *fs_info, 963 struct folio *folio, 964 unsigned long *dst) 965 { 966 struct btrfs_folio_state *bfs; 967 const unsigned int blocks_per_folio = btrfs_blocks_per_folio(fs_info, folio); 968 unsigned long flags; 969 unsigned long value; 970 971 if (blocks_per_folio == 1) { 972 value = 1; 973 bitmap_copy(dst, &value, 1); 974 return; 975 } 976 977 ASSERT(folio_test_private(folio) && folio_get_private(folio)); 978 ASSERT(blocks_per_folio > 1); 979 bfs = folio_get_private(folio); 980 981 if (blocks_per_folio <= BITS_PER_LONG) { 982 spin_lock_irqsave(&bfs->lock, flags); 983 value = bitmap_read(bfs->bitmaps, btrfs_bitmap_nr_dirty * blocks_per_folio, 984 blocks_per_folio); 985 spin_unlock_irqrestore(&bfs->lock, flags); 986 bitmap_copy(dst, &value, blocks_per_folio); 987 return; 988 } 989 spin_lock_irqsave(&bfs->lock, flags); 990 bitmap_copy(dst, get_bitmap_pointer_dirty(fs_info, folio), 991 blocks_per_folio); 992 spin_unlock_irqrestore(&bfs->lock, flags); 993 } 994