3158 lines · c
1// SPDX-License-Identifier: GPL-2.0-only2/*3 * linux/fs/buffer.c4 *5 * Copyright (C) 1991, 1992, 2002 Linus Torvalds6 */7 8/*9 * Start bdflush() with kernel_thread not syscall - Paul Gortmaker, 12/9510 *11 * Removed a lot of unnecessary code and simplified things now that12 * the buffer cache isn't our primary cache - Andrew Tridgell 12/9613 *14 * Speed up hash, lru, and free list operations. Use gfp() for allocating15 * hash table, use SLAB cache for buffer heads. SMP threading. -DaveM16 *17 * Added 32k buffer block sizes - these are required older ARM systems. - RMK18 *19 * async buffer flushing, 1999 Andrea Arcangeli <andrea@suse.de>20 */21 22#include <linux/kernel.h>23#include <linux/sched/signal.h>24#include <linux/syscalls.h>25#include <linux/fs.h>26#include <linux/iomap.h>27#include <linux/mm.h>28#include <linux/percpu.h>29#include <linux/slab.h>30#include <linux/capability.h>31#include <linux/blkdev.h>32#include <linux/file.h>33#include <linux/quotaops.h>34#include <linux/highmem.h>35#include <linux/export.h>36#include <linux/backing-dev.h>37#include <linux/writeback.h>38#include <linux/hash.h>39#include <linux/suspend.h>40#include <linux/buffer_head.h>41#include <linux/task_io_accounting_ops.h>42#include <linux/bio.h>43#include <linux/cpu.h>44#include <linux/bitops.h>45#include <linux/mpage.h>46#include <linux/bit_spinlock.h>47#include <linux/pagevec.h>48#include <linux/sched/mm.h>49#include <trace/events/block.h>50#include <linux/fscrypt.h>51#include <linux/fsverity.h>52#include <linux/sched/isolation.h>53 54#include "internal.h"55 56static int fsync_buffers_list(spinlock_t *lock, struct list_head *list);57static void submit_bh_wbc(blk_opf_t opf, struct buffer_head *bh,58 enum rw_hint hint, struct writeback_control *wbc);59 60#define BH_ENTRY(list) list_entry((list), struct buffer_head, b_assoc_buffers)61 62inline void touch_buffer(struct buffer_head *bh)63{64 trace_block_touch_buffer(bh);65 folio_mark_accessed(bh->b_folio);66}67EXPORT_SYMBOL(touch_buffer);68 69void __lock_buffer(struct buffer_head *bh)70{71 wait_on_bit_lock_io(&bh->b_state, BH_Lock, TASK_UNINTERRUPTIBLE);72}73EXPORT_SYMBOL(__lock_buffer);74 75void unlock_buffer(struct buffer_head *bh)76{77 clear_bit_unlock(BH_Lock, &bh->b_state);78 smp_mb__after_atomic();79 wake_up_bit(&bh->b_state, BH_Lock);80}81EXPORT_SYMBOL(unlock_buffer);82 83/*84 * Returns if the folio has dirty or writeback buffers. If all the buffers85 * are unlocked and clean then the folio_test_dirty information is stale. If86 * any of the buffers are locked, it is assumed they are locked for IO.87 */88void buffer_check_dirty_writeback(struct folio *folio,89 bool *dirty, bool *writeback)90{91 struct buffer_head *head, *bh;92 *dirty = false;93 *writeback = false;94 95 BUG_ON(!folio_test_locked(folio));96 97 head = folio_buffers(folio);98 if (!head)99 return;100 101 if (folio_test_writeback(folio))102 *writeback = true;103 104 bh = head;105 do {106 if (buffer_locked(bh))107 *writeback = true;108 109 if (buffer_dirty(bh))110 *dirty = true;111 112 bh = bh->b_this_page;113 } while (bh != head);114}115 116/*117 * Block until a buffer comes unlocked. This doesn't stop it118 * from becoming locked again - you have to lock it yourself119 * if you want to preserve its state.120 */121void __wait_on_buffer(struct buffer_head * bh)122{123 wait_on_bit_io(&bh->b_state, BH_Lock, TASK_UNINTERRUPTIBLE);124}125EXPORT_SYMBOL(__wait_on_buffer);126 127static void buffer_io_error(struct buffer_head *bh, char *msg)128{129 if (!test_bit(BH_Quiet, &bh->b_state))130 printk_ratelimited(KERN_ERR131 "Buffer I/O error on dev %pg, logical block %llu%s\n",132 bh->b_bdev, (unsigned long long)bh->b_blocknr, msg);133}134 135/*136 * End-of-IO handler helper function which does not touch the bh after137 * unlocking it.138 * Note: unlock_buffer() sort-of does touch the bh after unlocking it, but139 * a race there is benign: unlock_buffer() only use the bh's address for140 * hashing after unlocking the buffer, so it doesn't actually touch the bh141 * itself.142 */143static void __end_buffer_read_notouch(struct buffer_head *bh, int uptodate)144{145 if (uptodate) {146 set_buffer_uptodate(bh);147 } else {148 /* This happens, due to failed read-ahead attempts. */149 clear_buffer_uptodate(bh);150 }151 unlock_buffer(bh);152}153 154/*155 * Default synchronous end-of-IO handler.. Just mark it up-to-date and156 * unlock the buffer.157 */158void end_buffer_read_sync(struct buffer_head *bh, int uptodate)159{160 __end_buffer_read_notouch(bh, uptodate);161 put_bh(bh);162}163EXPORT_SYMBOL(end_buffer_read_sync);164 165void end_buffer_write_sync(struct buffer_head *bh, int uptodate)166{167 if (uptodate) {168 set_buffer_uptodate(bh);169 } else {170 buffer_io_error(bh, ", lost sync page write");171 mark_buffer_write_io_error(bh);172 clear_buffer_uptodate(bh);173 }174 unlock_buffer(bh);175 put_bh(bh);176}177EXPORT_SYMBOL(end_buffer_write_sync);178 179/*180 * Various filesystems appear to want __find_get_block to be non-blocking.181 * But it's the page lock which protects the buffers. To get around this,182 * we get exclusion from try_to_free_buffers with the blockdev mapping's183 * i_private_lock.184 *185 * Hack idea: for the blockdev mapping, i_private_lock contention186 * may be quite high. This code could TryLock the page, and if that187 * succeeds, there is no need to take i_private_lock.188 */189static struct buffer_head *190__find_get_block_slow(struct block_device *bdev, sector_t block)191{192 struct address_space *bd_mapping = bdev->bd_mapping;193 const int blkbits = bd_mapping->host->i_blkbits;194 struct buffer_head *ret = NULL;195 pgoff_t index;196 struct buffer_head *bh;197 struct buffer_head *head;198 struct folio *folio;199 int all_mapped = 1;200 static DEFINE_RATELIMIT_STATE(last_warned, HZ, 1);201 202 index = ((loff_t)block << blkbits) / PAGE_SIZE;203 folio = __filemap_get_folio(bd_mapping, index, FGP_ACCESSED, 0);204 if (IS_ERR(folio))205 goto out;206 207 spin_lock(&bd_mapping->i_private_lock);208 head = folio_buffers(folio);209 if (!head)210 goto out_unlock;211 bh = head;212 do {213 if (!buffer_mapped(bh))214 all_mapped = 0;215 else if (bh->b_blocknr == block) {216 ret = bh;217 get_bh(bh);218 goto out_unlock;219 }220 bh = bh->b_this_page;221 } while (bh != head);222 223 /* we might be here because some of the buffers on this page are224 * not mapped. This is due to various races between225 * file io on the block device and getblk. It gets dealt with226 * elsewhere, don't buffer_error if we had some unmapped buffers227 */228 ratelimit_set_flags(&last_warned, RATELIMIT_MSG_ON_RELEASE);229 if (all_mapped && __ratelimit(&last_warned)) {230 printk("__find_get_block_slow() failed. block=%llu, "231 "b_blocknr=%llu, b_state=0x%08lx, b_size=%zu, "232 "device %pg blocksize: %d\n",233 (unsigned long long)block,234 (unsigned long long)bh->b_blocknr,235 bh->b_state, bh->b_size, bdev,236 1 << blkbits);237 }238out_unlock:239 spin_unlock(&bd_mapping->i_private_lock);240 folio_put(folio);241out:242 return ret;243}244 245static void end_buffer_async_read(struct buffer_head *bh, int uptodate)246{247 unsigned long flags;248 struct buffer_head *first;249 struct buffer_head *tmp;250 struct folio *folio;251 int folio_uptodate = 1;252 253 BUG_ON(!buffer_async_read(bh));254 255 folio = bh->b_folio;256 if (uptodate) {257 set_buffer_uptodate(bh);258 } else {259 clear_buffer_uptodate(bh);260 buffer_io_error(bh, ", async page read");261 }262 263 /*264 * Be _very_ careful from here on. Bad things can happen if265 * two buffer heads end IO at almost the same time and both266 * decide that the page is now completely done.267 */268 first = folio_buffers(folio);269 spin_lock_irqsave(&first->b_uptodate_lock, flags);270 clear_buffer_async_read(bh);271 unlock_buffer(bh);272 tmp = bh;273 do {274 if (!buffer_uptodate(tmp))275 folio_uptodate = 0;276 if (buffer_async_read(tmp)) {277 BUG_ON(!buffer_locked(tmp));278 goto still_busy;279 }280 tmp = tmp->b_this_page;281 } while (tmp != bh);282 spin_unlock_irqrestore(&first->b_uptodate_lock, flags);283 284 folio_end_read(folio, folio_uptodate);285 return;286 287still_busy:288 spin_unlock_irqrestore(&first->b_uptodate_lock, flags);289 return;290}291 292struct postprocess_bh_ctx {293 struct work_struct work;294 struct buffer_head *bh;295};296 297static void verify_bh(struct work_struct *work)298{299 struct postprocess_bh_ctx *ctx =300 container_of(work, struct postprocess_bh_ctx, work);301 struct buffer_head *bh = ctx->bh;302 bool valid;303 304 valid = fsverity_verify_blocks(bh->b_folio, bh->b_size, bh_offset(bh));305 end_buffer_async_read(bh, valid);306 kfree(ctx);307}308 309static bool need_fsverity(struct buffer_head *bh)310{311 struct folio *folio = bh->b_folio;312 struct inode *inode = folio->mapping->host;313 314 return fsverity_active(inode) &&315 /* needed by ext4 */316 folio->index < DIV_ROUND_UP(inode->i_size, PAGE_SIZE);317}318 319static void decrypt_bh(struct work_struct *work)320{321 struct postprocess_bh_ctx *ctx =322 container_of(work, struct postprocess_bh_ctx, work);323 struct buffer_head *bh = ctx->bh;324 int err;325 326 err = fscrypt_decrypt_pagecache_blocks(bh->b_folio, bh->b_size,327 bh_offset(bh));328 if (err == 0 && need_fsverity(bh)) {329 /*330 * We use different work queues for decryption and for verity331 * because verity may require reading metadata pages that need332 * decryption, and we shouldn't recurse to the same workqueue.333 */334 INIT_WORK(&ctx->work, verify_bh);335 fsverity_enqueue_verify_work(&ctx->work);336 return;337 }338 end_buffer_async_read(bh, err == 0);339 kfree(ctx);340}341 342/*343 * I/O completion handler for block_read_full_folio() - pages344 * which come unlocked at the end of I/O.345 */346static void end_buffer_async_read_io(struct buffer_head *bh, int uptodate)347{348 struct inode *inode = bh->b_folio->mapping->host;349 bool decrypt = fscrypt_inode_uses_fs_layer_crypto(inode);350 bool verify = need_fsverity(bh);351 352 /* Decrypt (with fscrypt) and/or verify (with fsverity) if needed. */353 if (uptodate && (decrypt || verify)) {354 struct postprocess_bh_ctx *ctx =355 kmalloc(sizeof(*ctx), GFP_ATOMIC);356 357 if (ctx) {358 ctx->bh = bh;359 if (decrypt) {360 INIT_WORK(&ctx->work, decrypt_bh);361 fscrypt_enqueue_decrypt_work(&ctx->work);362 } else {363 INIT_WORK(&ctx->work, verify_bh);364 fsverity_enqueue_verify_work(&ctx->work);365 }366 return;367 }368 uptodate = 0;369 }370 end_buffer_async_read(bh, uptodate);371}372 373/*374 * Completion handler for block_write_full_folio() - folios which are unlocked375 * during I/O, and which have the writeback flag cleared upon I/O completion.376 */377static void end_buffer_async_write(struct buffer_head *bh, int uptodate)378{379 unsigned long flags;380 struct buffer_head *first;381 struct buffer_head *tmp;382 struct folio *folio;383 384 BUG_ON(!buffer_async_write(bh));385 386 folio = bh->b_folio;387 if (uptodate) {388 set_buffer_uptodate(bh);389 } else {390 buffer_io_error(bh, ", lost async page write");391 mark_buffer_write_io_error(bh);392 clear_buffer_uptodate(bh);393 }394 395 first = folio_buffers(folio);396 spin_lock_irqsave(&first->b_uptodate_lock, flags);397 398 clear_buffer_async_write(bh);399 unlock_buffer(bh);400 tmp = bh->b_this_page;401 while (tmp != bh) {402 if (buffer_async_write(tmp)) {403 BUG_ON(!buffer_locked(tmp));404 goto still_busy;405 }406 tmp = tmp->b_this_page;407 }408 spin_unlock_irqrestore(&first->b_uptodate_lock, flags);409 folio_end_writeback(folio);410 return;411 412still_busy:413 spin_unlock_irqrestore(&first->b_uptodate_lock, flags);414 return;415}416 417/*418 * If a page's buffers are under async readin (end_buffer_async_read419 * completion) then there is a possibility that another thread of420 * control could lock one of the buffers after it has completed421 * but while some of the other buffers have not completed. This422 * locked buffer would confuse end_buffer_async_read() into not unlocking423 * the page. So the absence of BH_Async_Read tells end_buffer_async_read()424 * that this buffer is not under async I/O.425 *426 * The page comes unlocked when it has no locked buffer_async buffers427 * left.428 *429 * PageLocked prevents anyone starting new async I/O reads any of430 * the buffers.431 *432 * PageWriteback is used to prevent simultaneous writeout of the same433 * page.434 *435 * PageLocked prevents anyone from starting writeback of a page which is436 * under read I/O (PageWriteback is only ever set against a locked page).437 */438static void mark_buffer_async_read(struct buffer_head *bh)439{440 bh->b_end_io = end_buffer_async_read_io;441 set_buffer_async_read(bh);442}443 444static void mark_buffer_async_write_endio(struct buffer_head *bh,445 bh_end_io_t *handler)446{447 bh->b_end_io = handler;448 set_buffer_async_write(bh);449}450 451void mark_buffer_async_write(struct buffer_head *bh)452{453 mark_buffer_async_write_endio(bh, end_buffer_async_write);454}455EXPORT_SYMBOL(mark_buffer_async_write);456 457 458/*459 * fs/buffer.c contains helper functions for buffer-backed address space's460 * fsync functions. A common requirement for buffer-based filesystems is461 * that certain data from the backing blockdev needs to be written out for462 * a successful fsync(). For example, ext2 indirect blocks need to be463 * written back and waited upon before fsync() returns.464 *465 * The functions mark_buffer_dirty_inode(), fsync_inode_buffers(),466 * inode_has_buffers() and invalidate_inode_buffers() are provided for the467 * management of a list of dependent buffers at ->i_mapping->i_private_list.468 *469 * Locking is a little subtle: try_to_free_buffers() will remove buffers470 * from their controlling inode's queue when they are being freed. But471 * try_to_free_buffers() will be operating against the *blockdev* mapping472 * at the time, not against the S_ISREG file which depends on those buffers.473 * So the locking for i_private_list is via the i_private_lock in the address_space474 * which backs the buffers. Which is different from the address_space 475 * against which the buffers are listed. So for a particular address_space,476 * mapping->i_private_lock does *not* protect mapping->i_private_list! In fact,477 * mapping->i_private_list will always be protected by the backing blockdev's478 * ->i_private_lock.479 *480 * Which introduces a requirement: all buffers on an address_space's481 * ->i_private_list must be from the same address_space: the blockdev's.482 *483 * address_spaces which do not place buffers at ->i_private_list via these484 * utility functions are free to use i_private_lock and i_private_list for485 * whatever they want. The only requirement is that list_empty(i_private_list)486 * be true at clear_inode() time.487 *488 * FIXME: clear_inode should not call invalidate_inode_buffers(). The489 * filesystems should do that. invalidate_inode_buffers() should just go490 * BUG_ON(!list_empty).491 *492 * FIXME: mark_buffer_dirty_inode() is a data-plane operation. It should493 * take an address_space, not an inode. And it should be called494 * mark_buffer_dirty_fsync() to clearly define why those buffers are being495 * queued up.496 *497 * FIXME: mark_buffer_dirty_inode() doesn't need to add the buffer to the498 * list if it is already on a list. Because if the buffer is on a list,499 * it *must* already be on the right one. If not, the filesystem is being500 * silly. This will save a ton of locking. But first we have to ensure501 * that buffers are taken *off* the old inode's list when they are freed502 * (presumably in truncate). That requires careful auditing of all503 * filesystems (do it inside bforget()). It could also be done by bringing504 * b_inode back.505 */506 507/*508 * The buffer's backing address_space's i_private_lock must be held509 */510static void __remove_assoc_queue(struct buffer_head *bh)511{512 list_del_init(&bh->b_assoc_buffers);513 WARN_ON(!bh->b_assoc_map);514 bh->b_assoc_map = NULL;515}516 517int inode_has_buffers(struct inode *inode)518{519 return !list_empty(&inode->i_data.i_private_list);520}521 522/*523 * osync is designed to support O_SYNC io. It waits synchronously for524 * all already-submitted IO to complete, but does not queue any new525 * writes to the disk.526 *527 * To do O_SYNC writes, just queue the buffer writes with write_dirty_buffer528 * as you dirty the buffers, and then use osync_inode_buffers to wait for529 * completion. Any other dirty buffers which are not yet queued for530 * write will not be flushed to disk by the osync.531 */532static int osync_buffers_list(spinlock_t *lock, struct list_head *list)533{534 struct buffer_head *bh;535 struct list_head *p;536 int err = 0;537 538 spin_lock(lock);539repeat:540 list_for_each_prev(p, list) {541 bh = BH_ENTRY(p);542 if (buffer_locked(bh)) {543 get_bh(bh);544 spin_unlock(lock);545 wait_on_buffer(bh);546 if (!buffer_uptodate(bh))547 err = -EIO;548 brelse(bh);549 spin_lock(lock);550 goto repeat;551 }552 }553 spin_unlock(lock);554 return err;555}556 557/**558 * sync_mapping_buffers - write out & wait upon a mapping's "associated" buffers559 * @mapping: the mapping which wants those buffers written560 *561 * Starts I/O against the buffers at mapping->i_private_list, and waits upon562 * that I/O.563 *564 * Basically, this is a convenience function for fsync().565 * @mapping is a file or directory which needs those buffers to be written for566 * a successful fsync().567 */568int sync_mapping_buffers(struct address_space *mapping)569{570 struct address_space *buffer_mapping = mapping->i_private_data;571 572 if (buffer_mapping == NULL || list_empty(&mapping->i_private_list))573 return 0;574 575 return fsync_buffers_list(&buffer_mapping->i_private_lock,576 &mapping->i_private_list);577}578EXPORT_SYMBOL(sync_mapping_buffers);579 580/**581 * generic_buffers_fsync_noflush - generic buffer fsync implementation582 * for simple filesystems with no inode lock583 *584 * @file: file to synchronize585 * @start: start offset in bytes586 * @end: end offset in bytes (inclusive)587 * @datasync: only synchronize essential metadata if true588 *589 * This is a generic implementation of the fsync method for simple590 * filesystems which track all non-inode metadata in the buffers list591 * hanging off the address_space structure.592 */593int generic_buffers_fsync_noflush(struct file *file, loff_t start, loff_t end,594 bool datasync)595{596 struct inode *inode = file->f_mapping->host;597 int err;598 int ret;599 600 err = file_write_and_wait_range(file, start, end);601 if (err)602 return err;603 604 ret = sync_mapping_buffers(inode->i_mapping);605 if (!(inode->i_state & I_DIRTY_ALL))606 goto out;607 if (datasync && !(inode->i_state & I_DIRTY_DATASYNC))608 goto out;609 610 err = sync_inode_metadata(inode, 1);611 if (ret == 0)612 ret = err;613 614out:615 /* check and advance again to catch errors after syncing out buffers */616 err = file_check_and_advance_wb_err(file);617 if (ret == 0)618 ret = err;619 return ret;620}621EXPORT_SYMBOL(generic_buffers_fsync_noflush);622 623/**624 * generic_buffers_fsync - generic buffer fsync implementation625 * for simple filesystems with no inode lock626 *627 * @file: file to synchronize628 * @start: start offset in bytes629 * @end: end offset in bytes (inclusive)630 * @datasync: only synchronize essential metadata if true631 *632 * This is a generic implementation of the fsync method for simple633 * filesystems which track all non-inode metadata in the buffers list634 * hanging off the address_space structure. This also makes sure that635 * a device cache flush operation is called at the end.636 */637int generic_buffers_fsync(struct file *file, loff_t start, loff_t end,638 bool datasync)639{640 struct inode *inode = file->f_mapping->host;641 int ret;642 643 ret = generic_buffers_fsync_noflush(file, start, end, datasync);644 if (!ret)645 ret = blkdev_issue_flush(inode->i_sb->s_bdev);646 return ret;647}648EXPORT_SYMBOL(generic_buffers_fsync);649 650/*651 * Called when we've recently written block `bblock', and it is known that652 * `bblock' was for a buffer_boundary() buffer. This means that the block at653 * `bblock + 1' is probably a dirty indirect block. Hunt it down and, if it's654 * dirty, schedule it for IO. So that indirects merge nicely with their data.655 */656void write_boundary_block(struct block_device *bdev,657 sector_t bblock, unsigned blocksize)658{659 struct buffer_head *bh = __find_get_block(bdev, bblock + 1, blocksize);660 if (bh) {661 if (buffer_dirty(bh))662 write_dirty_buffer(bh, 0);663 put_bh(bh);664 }665}666 667void mark_buffer_dirty_inode(struct buffer_head *bh, struct inode *inode)668{669 struct address_space *mapping = inode->i_mapping;670 struct address_space *buffer_mapping = bh->b_folio->mapping;671 672 mark_buffer_dirty(bh);673 if (!mapping->i_private_data) {674 mapping->i_private_data = buffer_mapping;675 } else {676 BUG_ON(mapping->i_private_data != buffer_mapping);677 }678 if (!bh->b_assoc_map) {679 spin_lock(&buffer_mapping->i_private_lock);680 list_move_tail(&bh->b_assoc_buffers,681 &mapping->i_private_list);682 bh->b_assoc_map = mapping;683 spin_unlock(&buffer_mapping->i_private_lock);684 }685}686EXPORT_SYMBOL(mark_buffer_dirty_inode);687 688/**689 * block_dirty_folio - Mark a folio as dirty.690 * @mapping: The address space containing this folio.691 * @folio: The folio to mark dirty.692 *693 * Filesystems which use buffer_heads can use this function as their694 * ->dirty_folio implementation. Some filesystems need to do a little695 * work before calling this function. Filesystems which do not use696 * buffer_heads should call filemap_dirty_folio() instead.697 *698 * If the folio has buffers, the uptodate buffers are set dirty, to699 * preserve dirty-state coherency between the folio and the buffers.700 * Buffers added to a dirty folio are created dirty.701 *702 * The buffers are dirtied before the folio is dirtied. There's a small703 * race window in which writeback may see the folio cleanness but not the704 * buffer dirtiness. That's fine. If this code were to set the folio705 * dirty before the buffers, writeback could clear the folio dirty flag,706 * see a bunch of clean buffers and we'd end up with dirty buffers/clean707 * folio on the dirty folio list.708 *709 * We use i_private_lock to lock against try_to_free_buffers() while710 * using the folio's buffer list. This also prevents clean buffers711 * being added to the folio after it was set dirty.712 *713 * Context: May only be called from process context. Does not sleep.714 * Caller must ensure that @folio cannot be truncated during this call,715 * typically by holding the folio lock or having a page in the folio716 * mapped and holding the page table lock.717 *718 * Return: True if the folio was dirtied; false if it was already dirtied.719 */720bool block_dirty_folio(struct address_space *mapping, struct folio *folio)721{722 struct buffer_head *head;723 bool newly_dirty;724 725 spin_lock(&mapping->i_private_lock);726 head = folio_buffers(folio);727 if (head) {728 struct buffer_head *bh = head;729 730 do {731 set_buffer_dirty(bh);732 bh = bh->b_this_page;733 } while (bh != head);734 }735 /*736 * Lock out page's memcg migration to keep PageDirty737 * synchronized with per-memcg dirty page counters.738 */739 folio_memcg_lock(folio);740 newly_dirty = !folio_test_set_dirty(folio);741 spin_unlock(&mapping->i_private_lock);742 743 if (newly_dirty)744 __folio_mark_dirty(folio, mapping, 1);745 746 folio_memcg_unlock(folio);747 748 if (newly_dirty)749 __mark_inode_dirty(mapping->host, I_DIRTY_PAGES);750 751 return newly_dirty;752}753EXPORT_SYMBOL(block_dirty_folio);754 755/*756 * Write out and wait upon a list of buffers.757 *758 * We have conflicting pressures: we want to make sure that all759 * initially dirty buffers get waited on, but that any subsequently760 * dirtied buffers don't. After all, we don't want fsync to last761 * forever if somebody is actively writing to the file.762 *763 * Do this in two main stages: first we copy dirty buffers to a764 * temporary inode list, queueing the writes as we go. Then we clean765 * up, waiting for those writes to complete.766 * 767 * During this second stage, any subsequent updates to the file may end768 * up refiling the buffer on the original inode's dirty list again, so769 * there is a chance we will end up with a buffer queued for write but770 * not yet completed on that list. So, as a final cleanup we go through771 * the osync code to catch these locked, dirty buffers without requeuing772 * any newly dirty buffers for write.773 */774static int fsync_buffers_list(spinlock_t *lock, struct list_head *list)775{776 struct buffer_head *bh;777 struct address_space *mapping;778 int err = 0, err2;779 struct blk_plug plug;780 LIST_HEAD(tmp);781 782 blk_start_plug(&plug);783 784 spin_lock(lock);785 while (!list_empty(list)) {786 bh = BH_ENTRY(list->next);787 mapping = bh->b_assoc_map;788 __remove_assoc_queue(bh);789 /* Avoid race with mark_buffer_dirty_inode() which does790 * a lockless check and we rely on seeing the dirty bit */791 smp_mb();792 if (buffer_dirty(bh) || buffer_locked(bh)) {793 list_add(&bh->b_assoc_buffers, &tmp);794 bh->b_assoc_map = mapping;795 if (buffer_dirty(bh)) {796 get_bh(bh);797 spin_unlock(lock);798 /*799 * Ensure any pending I/O completes so that800 * write_dirty_buffer() actually writes the801 * current contents - it is a noop if I/O is802 * still in flight on potentially older803 * contents.804 */805 write_dirty_buffer(bh, REQ_SYNC);806 807 /*808 * Kick off IO for the previous mapping. Note809 * that we will not run the very last mapping,810 * wait_on_buffer() will do that for us811 * through sync_buffer().812 */813 brelse(bh);814 spin_lock(lock);815 }816 }817 }818 819 spin_unlock(lock);820 blk_finish_plug(&plug);821 spin_lock(lock);822 823 while (!list_empty(&tmp)) {824 bh = BH_ENTRY(tmp.prev);825 get_bh(bh);826 mapping = bh->b_assoc_map;827 __remove_assoc_queue(bh);828 /* Avoid race with mark_buffer_dirty_inode() which does829 * a lockless check and we rely on seeing the dirty bit */830 smp_mb();831 if (buffer_dirty(bh)) {832 list_add(&bh->b_assoc_buffers,833 &mapping->i_private_list);834 bh->b_assoc_map = mapping;835 }836 spin_unlock(lock);837 wait_on_buffer(bh);838 if (!buffer_uptodate(bh))839 err = -EIO;840 brelse(bh);841 spin_lock(lock);842 }843 844 spin_unlock(lock);845 err2 = osync_buffers_list(lock, list);846 if (err)847 return err;848 else849 return err2;850}851 852/*853 * Invalidate any and all dirty buffers on a given inode. We are854 * probably unmounting the fs, but that doesn't mean we have already855 * done a sync(). Just drop the buffers from the inode list.856 *857 * NOTE: we take the inode's blockdev's mapping's i_private_lock. Which858 * assumes that all the buffers are against the blockdev. Not true859 * for reiserfs.860 */861void invalidate_inode_buffers(struct inode *inode)862{863 if (inode_has_buffers(inode)) {864 struct address_space *mapping = &inode->i_data;865 struct list_head *list = &mapping->i_private_list;866 struct address_space *buffer_mapping = mapping->i_private_data;867 868 spin_lock(&buffer_mapping->i_private_lock);869 while (!list_empty(list))870 __remove_assoc_queue(BH_ENTRY(list->next));871 spin_unlock(&buffer_mapping->i_private_lock);872 }873}874EXPORT_SYMBOL(invalidate_inode_buffers);875 876/*877 * Remove any clean buffers from the inode's buffer list. This is called878 * when we're trying to free the inode itself. Those buffers can pin it.879 *880 * Returns true if all buffers were removed.881 */882int remove_inode_buffers(struct inode *inode)883{884 int ret = 1;885 886 if (inode_has_buffers(inode)) {887 struct address_space *mapping = &inode->i_data;888 struct list_head *list = &mapping->i_private_list;889 struct address_space *buffer_mapping = mapping->i_private_data;890 891 spin_lock(&buffer_mapping->i_private_lock);892 while (!list_empty(list)) {893 struct buffer_head *bh = BH_ENTRY(list->next);894 if (buffer_dirty(bh)) {895 ret = 0;896 break;897 }898 __remove_assoc_queue(bh);899 }900 spin_unlock(&buffer_mapping->i_private_lock);901 }902 return ret;903}904 905/*906 * Create the appropriate buffers when given a folio for data area and907 * the size of each buffer.. Use the bh->b_this_page linked list to908 * follow the buffers created. Return NULL if unable to create more909 * buffers.910 *911 * The retry flag is used to differentiate async IO (paging, swapping)912 * which may not fail from ordinary buffer allocations.913 */914struct buffer_head *folio_alloc_buffers(struct folio *folio, unsigned long size,915 gfp_t gfp)916{917 struct buffer_head *bh, *head;918 long offset;919 struct mem_cgroup *memcg, *old_memcg;920 921 /* The folio lock pins the memcg */922 memcg = folio_memcg(folio);923 old_memcg = set_active_memcg(memcg);924 925 head = NULL;926 offset = folio_size(folio);927 while ((offset -= size) >= 0) {928 bh = alloc_buffer_head(gfp);929 if (!bh)930 goto no_grow;931 932 bh->b_this_page = head;933 bh->b_blocknr = -1;934 head = bh;935 936 bh->b_size = size;937 938 /* Link the buffer to its folio */939 folio_set_bh(bh, folio, offset);940 }941out:942 set_active_memcg(old_memcg);943 return head;944/*945 * In case anything failed, we just free everything we got.946 */947no_grow:948 if (head) {949 do {950 bh = head;951 head = head->b_this_page;952 free_buffer_head(bh);953 } while (head);954 }955 956 goto out;957}958EXPORT_SYMBOL_GPL(folio_alloc_buffers);959 960struct buffer_head *alloc_page_buffers(struct page *page, unsigned long size)961{962 gfp_t gfp = GFP_NOFS | __GFP_ACCOUNT;963 964 return folio_alloc_buffers(page_folio(page), size, gfp);965}966EXPORT_SYMBOL_GPL(alloc_page_buffers);967 968static inline void link_dev_buffers(struct folio *folio,969 struct buffer_head *head)970{971 struct buffer_head *bh, *tail;972 973 bh = head;974 do {975 tail = bh;976 bh = bh->b_this_page;977 } while (bh);978 tail->b_this_page = head;979 folio_attach_private(folio, head);980}981 982static sector_t blkdev_max_block(struct block_device *bdev, unsigned int size)983{984 sector_t retval = ~((sector_t)0);985 loff_t sz = bdev_nr_bytes(bdev);986 987 if (sz) {988 unsigned int sizebits = blksize_bits(size);989 retval = (sz >> sizebits);990 }991 return retval;992}993 994/*995 * Initialise the state of a blockdev folio's buffers.996 */ 997static sector_t folio_init_buffers(struct folio *folio,998 struct block_device *bdev, unsigned size)999{1000 struct buffer_head *head = folio_buffers(folio);1001 struct buffer_head *bh = head;1002 bool uptodate = folio_test_uptodate(folio);1003 sector_t block = div_u64(folio_pos(folio), size);1004 sector_t end_block = blkdev_max_block(bdev, size);1005 1006 do {1007 if (!buffer_mapped(bh)) {1008 bh->b_end_io = NULL;1009 bh->b_private = NULL;1010 bh->b_bdev = bdev;1011 bh->b_blocknr = block;1012 if (uptodate)1013 set_buffer_uptodate(bh);1014 if (block < end_block)1015 set_buffer_mapped(bh);1016 }1017 block++;1018 bh = bh->b_this_page;1019 } while (bh != head);1020 1021 /*1022 * Caller needs to validate requested block against end of device.1023 */1024 return end_block;1025}1026 1027/*1028 * Create the page-cache folio that contains the requested block.1029 *1030 * This is used purely for blockdev mappings.1031 *1032 * Returns false if we have a failure which cannot be cured by retrying1033 * without sleeping. Returns true if we succeeded, or the caller should retry.1034 */1035static bool grow_dev_folio(struct block_device *bdev, sector_t block,1036 pgoff_t index, unsigned size, gfp_t gfp)1037{1038 struct address_space *mapping = bdev->bd_mapping;1039 struct folio *folio;1040 struct buffer_head *bh;1041 sector_t end_block = 0;1042 1043 folio = __filemap_get_folio(mapping, index,1044 FGP_LOCK | FGP_ACCESSED | FGP_CREAT, gfp);1045 if (IS_ERR(folio))1046 return false;1047 1048 bh = folio_buffers(folio);1049 if (bh) {1050 if (bh->b_size == size) {1051 end_block = folio_init_buffers(folio, bdev, size);1052 goto unlock;1053 }1054 1055 /*1056 * Retrying may succeed; for example the folio may finish1057 * writeback, or buffers may be cleaned. This should not1058 * happen very often; maybe we have old buffers attached to1059 * this blockdev's page cache and we're trying to change1060 * the block size?1061 */1062 if (!try_to_free_buffers(folio)) {1063 end_block = ~0ULL;1064 goto unlock;1065 }1066 }1067 1068 bh = folio_alloc_buffers(folio, size, gfp | __GFP_ACCOUNT);1069 if (!bh)1070 goto unlock;1071 1072 /*1073 * Link the folio to the buffers and initialise them. Take the1074 * lock to be atomic wrt __find_get_block(), which does not1075 * run under the folio lock.1076 */1077 spin_lock(&mapping->i_private_lock);1078 link_dev_buffers(folio, bh);1079 end_block = folio_init_buffers(folio, bdev, size);1080 spin_unlock(&mapping->i_private_lock);1081unlock:1082 folio_unlock(folio);1083 folio_put(folio);1084 return block < end_block;1085}1086 1087/*1088 * Create buffers for the specified block device block's folio. If1089 * that folio was dirty, the buffers are set dirty also. Returns false1090 * if we've hit a permanent error.1091 */1092static bool grow_buffers(struct block_device *bdev, sector_t block,1093 unsigned size, gfp_t gfp)1094{1095 loff_t pos;1096 1097 /*1098 * Check for a block which lies outside our maximum possible1099 * pagecache index.1100 */1101 if (check_mul_overflow(block, (sector_t)size, &pos) || pos > MAX_LFS_FILESIZE) {1102 printk(KERN_ERR "%s: requested out-of-range block %llu for device %pg\n",1103 __func__, (unsigned long long)block,1104 bdev);1105 return false;1106 }1107 1108 /* Create a folio with the proper size buffers */1109 return grow_dev_folio(bdev, block, pos / PAGE_SIZE, size, gfp);1110}1111 1112static struct buffer_head *1113__getblk_slow(struct block_device *bdev, sector_t block,1114 unsigned size, gfp_t gfp)1115{1116 /* Size must be multiple of hard sectorsize */1117 if (unlikely(size & (bdev_logical_block_size(bdev)-1) ||1118 (size < 512 || size > PAGE_SIZE))) {1119 printk(KERN_ERR "getblk(): invalid block size %d requested\n",1120 size);1121 printk(KERN_ERR "logical block size: %d\n",1122 bdev_logical_block_size(bdev));1123 1124 dump_stack();1125 return NULL;1126 }1127 1128 for (;;) {1129 struct buffer_head *bh;1130 1131 bh = __find_get_block(bdev, block, size);1132 if (bh)1133 return bh;1134 1135 if (!grow_buffers(bdev, block, size, gfp))1136 return NULL;1137 }1138}1139 1140/*1141 * The relationship between dirty buffers and dirty pages:1142 *1143 * Whenever a page has any dirty buffers, the page's dirty bit is set, and1144 * the page is tagged dirty in the page cache.1145 *1146 * At all times, the dirtiness of the buffers represents the dirtiness of1147 * subsections of the page. If the page has buffers, the page dirty bit is1148 * merely a hint about the true dirty state.1149 *1150 * When a page is set dirty in its entirety, all its buffers are marked dirty1151 * (if the page has buffers).1152 *1153 * When a buffer is marked dirty, its page is dirtied, but the page's other1154 * buffers are not.1155 *1156 * Also. When blockdev buffers are explicitly read with bread(), they1157 * individually become uptodate. But their backing page remains not1158 * uptodate - even if all of its buffers are uptodate. A subsequent1159 * block_read_full_folio() against that folio will discover all the uptodate1160 * buffers, will set the folio uptodate and will perform no I/O.1161 */1162 1163/**1164 * mark_buffer_dirty - mark a buffer_head as needing writeout1165 * @bh: the buffer_head to mark dirty1166 *1167 * mark_buffer_dirty() will set the dirty bit against the buffer, then set1168 * its backing page dirty, then tag the page as dirty in the page cache1169 * and then attach the address_space's inode to its superblock's dirty1170 * inode list.1171 *1172 * mark_buffer_dirty() is atomic. It takes bh->b_folio->mapping->i_private_lock,1173 * i_pages lock and mapping->host->i_lock.1174 */1175void mark_buffer_dirty(struct buffer_head *bh)1176{1177 WARN_ON_ONCE(!buffer_uptodate(bh));1178 1179 trace_block_dirty_buffer(bh);1180 1181 /*1182 * Very *carefully* optimize the it-is-already-dirty case.1183 *1184 * Don't let the final "is it dirty" escape to before we1185 * perhaps modified the buffer.1186 */1187 if (buffer_dirty(bh)) {1188 smp_mb();1189 if (buffer_dirty(bh))1190 return;1191 }1192 1193 if (!test_set_buffer_dirty(bh)) {1194 struct folio *folio = bh->b_folio;1195 struct address_space *mapping = NULL;1196 1197 folio_memcg_lock(folio);1198 if (!folio_test_set_dirty(folio)) {1199 mapping = folio->mapping;1200 if (mapping)1201 __folio_mark_dirty(folio, mapping, 0);1202 }1203 folio_memcg_unlock(folio);1204 if (mapping)1205 __mark_inode_dirty(mapping->host, I_DIRTY_PAGES);1206 }1207}1208EXPORT_SYMBOL(mark_buffer_dirty);1209 1210void mark_buffer_write_io_error(struct buffer_head *bh)1211{1212 set_buffer_write_io_error(bh);1213 /* FIXME: do we need to set this in both places? */1214 if (bh->b_folio && bh->b_folio->mapping)1215 mapping_set_error(bh->b_folio->mapping, -EIO);1216 if (bh->b_assoc_map) {1217 mapping_set_error(bh->b_assoc_map, -EIO);1218 errseq_set(&bh->b_assoc_map->host->i_sb->s_wb_err, -EIO);1219 }1220}1221EXPORT_SYMBOL(mark_buffer_write_io_error);1222 1223/**1224 * __brelse - Release a buffer.1225 * @bh: The buffer to release.1226 *1227 * This variant of brelse() can be called if @bh is guaranteed to not be NULL.1228 */1229void __brelse(struct buffer_head *bh)1230{1231 if (atomic_read(&bh->b_count)) {1232 put_bh(bh);1233 return;1234 }1235 WARN(1, KERN_ERR "VFS: brelse: Trying to free free buffer\n");1236}1237EXPORT_SYMBOL(__brelse);1238 1239/**1240 * __bforget - Discard any dirty data in a buffer.1241 * @bh: The buffer to forget.1242 *1243 * This variant of bforget() can be called if @bh is guaranteed to not1244 * be NULL.1245 */1246void __bforget(struct buffer_head *bh)1247{1248 clear_buffer_dirty(bh);1249 if (bh->b_assoc_map) {1250 struct address_space *buffer_mapping = bh->b_folio->mapping;1251 1252 spin_lock(&buffer_mapping->i_private_lock);1253 list_del_init(&bh->b_assoc_buffers);1254 bh->b_assoc_map = NULL;1255 spin_unlock(&buffer_mapping->i_private_lock);1256 }1257 __brelse(bh);1258}1259EXPORT_SYMBOL(__bforget);1260 1261static struct buffer_head *__bread_slow(struct buffer_head *bh)1262{1263 lock_buffer(bh);1264 if (buffer_uptodate(bh)) {1265 unlock_buffer(bh);1266 return bh;1267 } else {1268 get_bh(bh);1269 bh->b_end_io = end_buffer_read_sync;1270 submit_bh(REQ_OP_READ, bh);1271 wait_on_buffer(bh);1272 if (buffer_uptodate(bh))1273 return bh;1274 }1275 brelse(bh);1276 return NULL;1277}1278 1279/*1280 * Per-cpu buffer LRU implementation. To reduce the cost of __find_get_block().1281 * The bhs[] array is sorted - newest buffer is at bhs[0]. Buffers have their1282 * refcount elevated by one when they're in an LRU. A buffer can only appear1283 * once in a particular CPU's LRU. A single buffer can be present in multiple1284 * CPU's LRUs at the same time.1285 *1286 * This is a transparent caching front-end to sb_bread(), sb_getblk() and1287 * sb_find_get_block().1288 *1289 * The LRUs themselves only need locking against invalidate_bh_lrus. We use1290 * a local interrupt disable for that.1291 */1292 1293#define BH_LRU_SIZE 161294 1295struct bh_lru {1296 struct buffer_head *bhs[BH_LRU_SIZE];1297};1298 1299static DEFINE_PER_CPU(struct bh_lru, bh_lrus) = {{ NULL }};1300 1301#ifdef CONFIG_SMP1302#define bh_lru_lock() local_irq_disable()1303#define bh_lru_unlock() local_irq_enable()1304#else1305#define bh_lru_lock() preempt_disable()1306#define bh_lru_unlock() preempt_enable()1307#endif1308 1309static inline void check_irqs_on(void)1310{1311#ifdef irqs_disabled1312 BUG_ON(irqs_disabled());1313#endif1314}1315 1316/*1317 * Install a buffer_head into this cpu's LRU. If not already in the LRU, it is1318 * inserted at the front, and the buffer_head at the back if any is evicted.1319 * Or, if already in the LRU it is moved to the front.1320 */1321static void bh_lru_install(struct buffer_head *bh)1322{1323 struct buffer_head *evictee = bh;1324 struct bh_lru *b;1325 int i;1326 1327 check_irqs_on();1328 bh_lru_lock();1329 1330 /*1331 * the refcount of buffer_head in bh_lru prevents dropping the1332 * attached page(i.e., try_to_free_buffers) so it could cause1333 * failing page migration.1334 * Skip putting upcoming bh into bh_lru until migration is done.1335 */1336 if (lru_cache_disabled() || cpu_is_isolated(smp_processor_id())) {1337 bh_lru_unlock();1338 return;1339 }1340 1341 b = this_cpu_ptr(&bh_lrus);1342 for (i = 0; i < BH_LRU_SIZE; i++) {1343 swap(evictee, b->bhs[i]);1344 if (evictee == bh) {1345 bh_lru_unlock();1346 return;1347 }1348 }1349 1350 get_bh(bh);1351 bh_lru_unlock();1352 brelse(evictee);1353}1354 1355/*1356 * Look up the bh in this cpu's LRU. If it's there, move it to the head.1357 */1358static struct buffer_head *1359lookup_bh_lru(struct block_device *bdev, sector_t block, unsigned size)1360{1361 struct buffer_head *ret = NULL;1362 unsigned int i;1363 1364 check_irqs_on();1365 bh_lru_lock();1366 if (cpu_is_isolated(smp_processor_id())) {1367 bh_lru_unlock();1368 return NULL;1369 }1370 for (i = 0; i < BH_LRU_SIZE; i++) {1371 struct buffer_head *bh = __this_cpu_read(bh_lrus.bhs[i]);1372 1373 if (bh && bh->b_blocknr == block && bh->b_bdev == bdev &&1374 bh->b_size == size) {1375 if (i) {1376 while (i) {1377 __this_cpu_write(bh_lrus.bhs[i],1378 __this_cpu_read(bh_lrus.bhs[i - 1]));1379 i--;1380 }1381 __this_cpu_write(bh_lrus.bhs[0], bh);1382 }1383 get_bh(bh);1384 ret = bh;1385 break;1386 }1387 }1388 bh_lru_unlock();1389 return ret;1390}1391 1392/*1393 * Perform a pagecache lookup for the matching buffer. If it's there, refresh1394 * it in the LRU and mark it as accessed. If it is not present then return1395 * NULL1396 */1397struct buffer_head *1398__find_get_block(struct block_device *bdev, sector_t block, unsigned size)1399{1400 struct buffer_head *bh = lookup_bh_lru(bdev, block, size);1401 1402 if (bh == NULL) {1403 /* __find_get_block_slow will mark the page accessed */1404 bh = __find_get_block_slow(bdev, block);1405 if (bh)1406 bh_lru_install(bh);1407 } else1408 touch_buffer(bh);1409 1410 return bh;1411}1412EXPORT_SYMBOL(__find_get_block);1413 1414/**1415 * bdev_getblk - Get a buffer_head in a block device's buffer cache.1416 * @bdev: The block device.1417 * @block: The block number.1418 * @size: The size of buffer_heads for this @bdev.1419 * @gfp: The memory allocation flags to use.1420 *1421 * The returned buffer head has its reference count incremented, but is1422 * not locked. The caller should call brelse() when it has finished1423 * with the buffer. The buffer may not be uptodate. If needed, the1424 * caller can bring it uptodate either by reading it or overwriting it.1425 *1426 * Return: The buffer head, or NULL if memory could not be allocated.1427 */1428struct buffer_head *bdev_getblk(struct block_device *bdev, sector_t block,1429 unsigned size, gfp_t gfp)1430{1431 struct buffer_head *bh = __find_get_block(bdev, block, size);1432 1433 might_alloc(gfp);1434 if (bh)1435 return bh;1436 1437 return __getblk_slow(bdev, block, size, gfp);1438}1439EXPORT_SYMBOL(bdev_getblk);1440 1441/*1442 * Do async read-ahead on a buffer..1443 */1444void __breadahead(struct block_device *bdev, sector_t block, unsigned size)1445{1446 struct buffer_head *bh = bdev_getblk(bdev, block, size,1447 GFP_NOWAIT | __GFP_MOVABLE);1448 1449 if (likely(bh)) {1450 bh_readahead(bh, REQ_RAHEAD);1451 brelse(bh);1452 }1453}1454EXPORT_SYMBOL(__breadahead);1455 1456/**1457 * __bread_gfp() - Read a block.1458 * @bdev: The block device to read from.1459 * @block: Block number in units of block size.1460 * @size: The block size of this device in bytes.1461 * @gfp: Not page allocation flags; see below.1462 *1463 * You are not expected to call this function. You should use one of1464 * sb_bread(), sb_bread_unmovable() or __bread().1465 *1466 * Read a specified block, and return the buffer head that refers to it.1467 * If @gfp is 0, the memory will be allocated using the block device's1468 * default GFP flags. If @gfp is __GFP_MOVABLE, the memory may be1469 * allocated from a movable area. Do not pass in a complete set of1470 * GFP flags.1471 *1472 * The returned buffer head has its refcount increased. The caller should1473 * call brelse() when it has finished with the buffer.1474 *1475 * Context: May sleep waiting for I/O.1476 * Return: NULL if the block was unreadable.1477 */1478struct buffer_head *__bread_gfp(struct block_device *bdev, sector_t block,1479 unsigned size, gfp_t gfp)1480{1481 struct buffer_head *bh;1482 1483 gfp |= mapping_gfp_constraint(bdev->bd_mapping, ~__GFP_FS);1484 1485 /*1486 * Prefer looping in the allocator rather than here, at least that1487 * code knows what it's doing.1488 */1489 gfp |= __GFP_NOFAIL;1490 1491 bh = bdev_getblk(bdev, block, size, gfp);1492 1493 if (likely(bh) && !buffer_uptodate(bh))1494 bh = __bread_slow(bh);1495 return bh;1496}1497EXPORT_SYMBOL(__bread_gfp);1498 1499static void __invalidate_bh_lrus(struct bh_lru *b)1500{1501 int i;1502 1503 for (i = 0; i < BH_LRU_SIZE; i++) {1504 brelse(b->bhs[i]);1505 b->bhs[i] = NULL;1506 }1507}1508/*1509 * invalidate_bh_lrus() is called rarely - but not only at unmount.1510 * This doesn't race because it runs in each cpu either in irq1511 * or with preempt disabled.1512 */1513static void invalidate_bh_lru(void *arg)1514{1515 struct bh_lru *b = &get_cpu_var(bh_lrus);1516 1517 __invalidate_bh_lrus(b);1518 put_cpu_var(bh_lrus);1519}1520 1521bool has_bh_in_lru(int cpu, void *dummy)1522{1523 struct bh_lru *b = per_cpu_ptr(&bh_lrus, cpu);1524 int i;1525 1526 for (i = 0; i < BH_LRU_SIZE; i++) {1527 if (b->bhs[i])1528 return true;1529 }1530 1531 return false;1532}1533 1534void invalidate_bh_lrus(void)1535{1536 on_each_cpu_cond(has_bh_in_lru, invalidate_bh_lru, NULL, 1);1537}1538EXPORT_SYMBOL_GPL(invalidate_bh_lrus);1539 1540/*1541 * It's called from workqueue context so we need a bh_lru_lock to close1542 * the race with preemption/irq.1543 */1544void invalidate_bh_lrus_cpu(void)1545{1546 struct bh_lru *b;1547 1548 bh_lru_lock();1549 b = this_cpu_ptr(&bh_lrus);1550 __invalidate_bh_lrus(b);1551 bh_lru_unlock();1552}1553 1554void folio_set_bh(struct buffer_head *bh, struct folio *folio,1555 unsigned long offset)1556{1557 bh->b_folio = folio;1558 BUG_ON(offset >= folio_size(folio));1559 if (folio_test_highmem(folio))1560 /*1561 * This catches illegal uses and preserves the offset:1562 */1563 bh->b_data = (char *)(0 + offset);1564 else1565 bh->b_data = folio_address(folio) + offset;1566}1567EXPORT_SYMBOL(folio_set_bh);1568 1569/*1570 * Called when truncating a buffer on a page completely.1571 */1572 1573/* Bits that are cleared during an invalidate */1574#define BUFFER_FLAGS_DISCARD \1575 (1 << BH_Mapped | 1 << BH_New | 1 << BH_Req | \1576 1 << BH_Delay | 1 << BH_Unwritten)1577 1578static void discard_buffer(struct buffer_head * bh)1579{1580 unsigned long b_state;1581 1582 lock_buffer(bh);1583 clear_buffer_dirty(bh);1584 bh->b_bdev = NULL;1585 b_state = READ_ONCE(bh->b_state);1586 do {1587 } while (!try_cmpxchg(&bh->b_state, &b_state,1588 b_state & ~BUFFER_FLAGS_DISCARD));1589 unlock_buffer(bh);1590}1591 1592/**1593 * block_invalidate_folio - Invalidate part or all of a buffer-backed folio.1594 * @folio: The folio which is affected.1595 * @offset: start of the range to invalidate1596 * @length: length of the range to invalidate1597 *1598 * block_invalidate_folio() is called when all or part of the folio has been1599 * invalidated by a truncate operation.1600 *1601 * block_invalidate_folio() does not have to release all buffers, but it must1602 * ensure that no dirty buffer is left outside @offset and that no I/O1603 * is underway against any of the blocks which are outside the truncation1604 * point. Because the caller is about to free (and possibly reuse) those1605 * blocks on-disk.1606 */1607void block_invalidate_folio(struct folio *folio, size_t offset, size_t length)1608{1609 struct buffer_head *head, *bh, *next;1610 size_t curr_off = 0;1611 size_t stop = length + offset;1612 1613 BUG_ON(!folio_test_locked(folio));1614 1615 /*1616 * Check for overflow1617 */1618 BUG_ON(stop > folio_size(folio) || stop < length);1619 1620 head = folio_buffers(folio);1621 if (!head)1622 return;1623 1624 bh = head;1625 do {1626 size_t next_off = curr_off + bh->b_size;1627 next = bh->b_this_page;1628 1629 /*1630 * Are we still fully in range ?1631 */1632 if (next_off > stop)1633 goto out;1634 1635 /*1636 * is this block fully invalidated?1637 */1638 if (offset <= curr_off)1639 discard_buffer(bh);1640 curr_off = next_off;1641 bh = next;1642 } while (bh != head);1643 1644 /*1645 * We release buffers only if the entire folio is being invalidated.1646 * The get_block cached value has been unconditionally invalidated,1647 * so real IO is not possible anymore.1648 */1649 if (length == folio_size(folio))1650 filemap_release_folio(folio, 0);1651out:1652 return;1653}1654EXPORT_SYMBOL(block_invalidate_folio);1655 1656/*1657 * We attach and possibly dirty the buffers atomically wrt1658 * block_dirty_folio() via i_private_lock. try_to_free_buffers1659 * is already excluded via the folio lock.1660 */1661struct buffer_head *create_empty_buffers(struct folio *folio,1662 unsigned long blocksize, unsigned long b_state)1663{1664 struct buffer_head *bh, *head, *tail;1665 gfp_t gfp = GFP_NOFS | __GFP_ACCOUNT | __GFP_NOFAIL;1666 1667 head = folio_alloc_buffers(folio, blocksize, gfp);1668 bh = head;1669 do {1670 bh->b_state |= b_state;1671 tail = bh;1672 bh = bh->b_this_page;1673 } while (bh);1674 tail->b_this_page = head;1675 1676 spin_lock(&folio->mapping->i_private_lock);1677 if (folio_test_uptodate(folio) || folio_test_dirty(folio)) {1678 bh = head;1679 do {1680 if (folio_test_dirty(folio))1681 set_buffer_dirty(bh);1682 if (folio_test_uptodate(folio))1683 set_buffer_uptodate(bh);1684 bh = bh->b_this_page;1685 } while (bh != head);1686 }1687 folio_attach_private(folio, head);1688 spin_unlock(&folio->mapping->i_private_lock);1689 1690 return head;1691}1692EXPORT_SYMBOL(create_empty_buffers);1693 1694/**1695 * clean_bdev_aliases: clean a range of buffers in block device1696 * @bdev: Block device to clean buffers in1697 * @block: Start of a range of blocks to clean1698 * @len: Number of blocks to clean1699 *1700 * We are taking a range of blocks for data and we don't want writeback of any1701 * buffer-cache aliases starting from return from this function and until the1702 * moment when something will explicitly mark the buffer dirty (hopefully that1703 * will not happen until we will free that block ;-) We don't even need to mark1704 * it not-uptodate - nobody can expect anything from a newly allocated buffer1705 * anyway. We used to use unmap_buffer() for such invalidation, but that was1706 * wrong. We definitely don't want to mark the alias unmapped, for example - it1707 * would confuse anyone who might pick it with bread() afterwards...1708 *1709 * Also.. Note that bforget() doesn't lock the buffer. So there can be1710 * writeout I/O going on against recently-freed buffers. We don't wait on that1711 * I/O in bforget() - it's more efficient to wait on the I/O only if we really1712 * need to. That happens here.1713 */1714void clean_bdev_aliases(struct block_device *bdev, sector_t block, sector_t len)1715{1716 struct address_space *bd_mapping = bdev->bd_mapping;1717 const int blkbits = bd_mapping->host->i_blkbits;1718 struct folio_batch fbatch;1719 pgoff_t index = ((loff_t)block << blkbits) / PAGE_SIZE;1720 pgoff_t end;1721 int i, count;1722 struct buffer_head *bh;1723 struct buffer_head *head;1724 1725 end = ((loff_t)(block + len - 1) << blkbits) / PAGE_SIZE;1726 folio_batch_init(&fbatch);1727 while (filemap_get_folios(bd_mapping, &index, end, &fbatch)) {1728 count = folio_batch_count(&fbatch);1729 for (i = 0; i < count; i++) {1730 struct folio *folio = fbatch.folios[i];1731 1732 if (!folio_buffers(folio))1733 continue;1734 /*1735 * We use folio lock instead of bd_mapping->i_private_lock1736 * to pin buffers here since we can afford to sleep and1737 * it scales better than a global spinlock lock.1738 */1739 folio_lock(folio);1740 /* Recheck when the folio is locked which pins bhs */1741 head = folio_buffers(folio);1742 if (!head)1743 goto unlock_page;1744 bh = head;1745 do {1746 if (!buffer_mapped(bh) || (bh->b_blocknr < block))1747 goto next;1748 if (bh->b_blocknr >= block + len)1749 break;1750 clear_buffer_dirty(bh);1751 wait_on_buffer(bh);1752 clear_buffer_req(bh);1753next:1754 bh = bh->b_this_page;1755 } while (bh != head);1756unlock_page:1757 folio_unlock(folio);1758 }1759 folio_batch_release(&fbatch);1760 cond_resched();1761 /* End of range already reached? */1762 if (index > end || !index)1763 break;1764 }1765}1766EXPORT_SYMBOL(clean_bdev_aliases);1767 1768static struct buffer_head *folio_create_buffers(struct folio *folio,1769 struct inode *inode,1770 unsigned int b_state)1771{1772 struct buffer_head *bh;1773 1774 BUG_ON(!folio_test_locked(folio));1775 1776 bh = folio_buffers(folio);1777 if (!bh)1778 bh = create_empty_buffers(folio,1779 1 << READ_ONCE(inode->i_blkbits), b_state);1780 return bh;1781}1782 1783/*1784 * NOTE! All mapped/uptodate combinations are valid:1785 *1786 * Mapped Uptodate Meaning1787 *1788 * No No "unknown" - must do get_block()1789 * No Yes "hole" - zero-filled1790 * Yes No "allocated" - allocated on disk, not read in1791 * Yes Yes "valid" - allocated and up-to-date in memory.1792 *1793 * "Dirty" is valid only with the last case (mapped+uptodate).1794 */1795 1796/*1797 * While block_write_full_folio is writing back the dirty buffers under1798 * the page lock, whoever dirtied the buffers may decide to clean them1799 * again at any time. We handle that by only looking at the buffer1800 * state inside lock_buffer().1801 *1802 * If block_write_full_folio() is called for regular writeback1803 * (wbc->sync_mode == WB_SYNC_NONE) then it will redirty a page which has a1804 * locked buffer. This only can happen if someone has written the buffer1805 * directly, with submit_bh(). At the address_space level PageWriteback1806 * prevents this contention from occurring.1807 *1808 * If block_write_full_folio() is called with wbc->sync_mode ==1809 * WB_SYNC_ALL, the writes are posted using REQ_SYNC; this1810 * causes the writes to be flagged as synchronous writes.1811 */1812int __block_write_full_folio(struct inode *inode, struct folio *folio,1813 get_block_t *get_block, struct writeback_control *wbc)1814{1815 int err;1816 sector_t block;1817 sector_t last_block;1818 struct buffer_head *bh, *head;1819 size_t blocksize;1820 int nr_underway = 0;1821 blk_opf_t write_flags = wbc_to_write_flags(wbc);1822 1823 head = folio_create_buffers(folio, inode,1824 (1 << BH_Dirty) | (1 << BH_Uptodate));1825 1826 /*1827 * Be very careful. We have no exclusion from block_dirty_folio1828 * here, and the (potentially unmapped) buffers may become dirty at1829 * any time. If a buffer becomes dirty here after we've inspected it1830 * then we just miss that fact, and the folio stays dirty.1831 *1832 * Buffers outside i_size may be dirtied by block_dirty_folio;1833 * handle that here by just cleaning them.1834 */1835 1836 bh = head;1837 blocksize = bh->b_size;1838 1839 block = div_u64(folio_pos(folio), blocksize);1840 last_block = div_u64(i_size_read(inode) - 1, blocksize);1841 1842 /*1843 * Get all the dirty buffers mapped to disk addresses and1844 * handle any aliases from the underlying blockdev's mapping.1845 */1846 do {1847 if (block > last_block) {1848 /*1849 * mapped buffers outside i_size will occur, because1850 * this folio can be outside i_size when there is a1851 * truncate in progress.1852 */1853 /*1854 * The buffer was zeroed by block_write_full_folio()1855 */1856 clear_buffer_dirty(bh);1857 set_buffer_uptodate(bh);1858 } else if ((!buffer_mapped(bh) || buffer_delay(bh)) &&1859 buffer_dirty(bh)) {1860 WARN_ON(bh->b_size != blocksize);1861 err = get_block(inode, block, bh, 1);1862 if (err)1863 goto recover;1864 clear_buffer_delay(bh);1865 if (buffer_new(bh)) {1866 /* blockdev mappings never come here */1867 clear_buffer_new(bh);1868 clean_bdev_bh_alias(bh);1869 }1870 }1871 bh = bh->b_this_page;1872 block++;1873 } while (bh != head);1874 1875 do {1876 if (!buffer_mapped(bh))1877 continue;1878 /*1879 * If it's a fully non-blocking write attempt and we cannot1880 * lock the buffer then redirty the folio. Note that this can1881 * potentially cause a busy-wait loop from writeback threads1882 * and kswapd activity, but those code paths have their own1883 * higher-level throttling.1884 */1885 if (wbc->sync_mode != WB_SYNC_NONE) {1886 lock_buffer(bh);1887 } else if (!trylock_buffer(bh)) {1888 folio_redirty_for_writepage(wbc, folio);1889 continue;1890 }1891 if (test_clear_buffer_dirty(bh)) {1892 mark_buffer_async_write_endio(bh,1893 end_buffer_async_write);1894 } else {1895 unlock_buffer(bh);1896 }1897 } while ((bh = bh->b_this_page) != head);1898 1899 /*1900 * The folio and its buffers are protected by the writeback flag,1901 * so we can drop the bh refcounts early.1902 */1903 BUG_ON(folio_test_writeback(folio));1904 folio_start_writeback(folio);1905 1906 do {1907 struct buffer_head *next = bh->b_this_page;1908 if (buffer_async_write(bh)) {1909 submit_bh_wbc(REQ_OP_WRITE | write_flags, bh,1910 inode->i_write_hint, wbc);1911 nr_underway++;1912 }1913 bh = next;1914 } while (bh != head);1915 folio_unlock(folio);1916 1917 err = 0;1918done:1919 if (nr_underway == 0) {1920 /*1921 * The folio was marked dirty, but the buffers were1922 * clean. Someone wrote them back by hand with1923 * write_dirty_buffer/submit_bh. A rare case.1924 */1925 folio_end_writeback(folio);1926 1927 /*1928 * The folio and buffer_heads can be released at any time from1929 * here on.1930 */1931 }1932 return err;1933 1934recover:1935 /*1936 * ENOSPC, or some other error. We may already have added some1937 * blocks to the file, so we need to write these out to avoid1938 * exposing stale data.1939 * The folio is currently locked and not marked for writeback1940 */1941 bh = head;1942 /* Recovery: lock and submit the mapped buffers */1943 do {1944 if (buffer_mapped(bh) && buffer_dirty(bh) &&1945 !buffer_delay(bh)) {1946 lock_buffer(bh);1947 mark_buffer_async_write_endio(bh,1948 end_buffer_async_write);1949 } else {1950 /*1951 * The buffer may have been set dirty during1952 * attachment to a dirty folio.1953 */1954 clear_buffer_dirty(bh);1955 }1956 } while ((bh = bh->b_this_page) != head);1957 BUG_ON(folio_test_writeback(folio));1958 mapping_set_error(folio->mapping, err);1959 folio_start_writeback(folio);1960 do {1961 struct buffer_head *next = bh->b_this_page;1962 if (buffer_async_write(bh)) {1963 clear_buffer_dirty(bh);1964 submit_bh_wbc(REQ_OP_WRITE | write_flags, bh,1965 inode->i_write_hint, wbc);1966 nr_underway++;1967 }1968 bh = next;1969 } while (bh != head);1970 folio_unlock(folio);1971 goto done;1972}1973EXPORT_SYMBOL(__block_write_full_folio);1974 1975/*1976 * If a folio has any new buffers, zero them out here, and mark them uptodate1977 * and dirty so they'll be written out (in order to prevent uninitialised1978 * block data from leaking). And clear the new bit.1979 */1980void folio_zero_new_buffers(struct folio *folio, size_t from, size_t to)1981{1982 size_t block_start, block_end;1983 struct buffer_head *head, *bh;1984 1985 BUG_ON(!folio_test_locked(folio));1986 head = folio_buffers(folio);1987 if (!head)1988 return;1989 1990 bh = head;1991 block_start = 0;1992 do {1993 block_end = block_start + bh->b_size;1994 1995 if (buffer_new(bh)) {1996 if (block_end > from && block_start < to) {1997 if (!folio_test_uptodate(folio)) {1998 size_t start, xend;1999 2000 start = max(from, block_start);2001 xend = min(to, block_end);2002 2003 folio_zero_segment(folio, start, xend);2004 set_buffer_uptodate(bh);2005 }2006 2007 clear_buffer_new(bh);2008 mark_buffer_dirty(bh);2009 }2010 }2011 2012 block_start = block_end;2013 bh = bh->b_this_page;2014 } while (bh != head);2015}2016EXPORT_SYMBOL(folio_zero_new_buffers);2017 2018static int2019iomap_to_bh(struct inode *inode, sector_t block, struct buffer_head *bh,2020 const struct iomap *iomap)2021{2022 loff_t offset = (loff_t)block << inode->i_blkbits;2023 2024 bh->b_bdev = iomap->bdev;2025 2026 /*2027 * Block points to offset in file we need to map, iomap contains2028 * the offset at which the map starts. If the map ends before the2029 * current block, then do not map the buffer and let the caller2030 * handle it.2031 */2032 if (offset >= iomap->offset + iomap->length)2033 return -EIO;2034 2035 switch (iomap->type) {2036 case IOMAP_HOLE:2037 /*2038 * If the buffer is not up to date or beyond the current EOF,2039 * we need to mark it as new to ensure sub-block zeroing is2040 * executed if necessary.2041 */2042 if (!buffer_uptodate(bh) ||2043 (offset >= i_size_read(inode)))2044 set_buffer_new(bh);2045 return 0;2046 case IOMAP_DELALLOC:2047 if (!buffer_uptodate(bh) ||2048 (offset >= i_size_read(inode)))2049 set_buffer_new(bh);2050 set_buffer_uptodate(bh);2051 set_buffer_mapped(bh);2052 set_buffer_delay(bh);2053 return 0;2054 case IOMAP_UNWRITTEN:2055 /*2056 * For unwritten regions, we always need to ensure that regions2057 * in the block we are not writing to are zeroed. Mark the2058 * buffer as new to ensure this.2059 */2060 set_buffer_new(bh);2061 set_buffer_unwritten(bh);2062 fallthrough;2063 case IOMAP_MAPPED:2064 if ((iomap->flags & IOMAP_F_NEW) ||2065 offset >= i_size_read(inode)) {2066 /*2067 * This can happen if truncating the block device races2068 * with the check in the caller as i_size updates on2069 * block devices aren't synchronized by i_rwsem for2070 * block devices.2071 */2072 if (S_ISBLK(inode->i_mode))2073 return -EIO;2074 set_buffer_new(bh);2075 }2076 bh->b_blocknr = (iomap->addr + offset - iomap->offset) >>2077 inode->i_blkbits;2078 set_buffer_mapped(bh);2079 return 0;2080 default:2081 WARN_ON_ONCE(1);2082 return -EIO;2083 }2084}2085 2086int __block_write_begin_int(struct folio *folio, loff_t pos, unsigned len,2087 get_block_t *get_block, const struct iomap *iomap)2088{2089 size_t from = offset_in_folio(folio, pos);2090 size_t to = from + len;2091 struct inode *inode = folio->mapping->host;2092 size_t block_start, block_end;2093 sector_t block;2094 int err = 0;2095 size_t blocksize;2096 struct buffer_head *bh, *head, *wait[2], **wait_bh=wait;2097 2098 BUG_ON(!folio_test_locked(folio));2099 BUG_ON(to > folio_size(folio));2100 BUG_ON(from > to);2101 2102 head = folio_create_buffers(folio, inode, 0);2103 blocksize = head->b_size;2104 block = div_u64(folio_pos(folio), blocksize);2105 2106 for (bh = head, block_start = 0; bh != head || !block_start;2107 block++, block_start=block_end, bh = bh->b_this_page) {2108 block_end = block_start + blocksize;2109 if (block_end <= from || block_start >= to) {2110 if (folio_test_uptodate(folio)) {2111 if (!buffer_uptodate(bh))2112 set_buffer_uptodate(bh);2113 }2114 continue;2115 }2116 if (buffer_new(bh))2117 clear_buffer_new(bh);2118 if (!buffer_mapped(bh)) {2119 WARN_ON(bh->b_size != blocksize);2120 if (get_block)2121 err = get_block(inode, block, bh, 1);2122 else2123 err = iomap_to_bh(inode, block, bh, iomap);2124 if (err)2125 break;2126 2127 if (buffer_new(bh)) {2128 clean_bdev_bh_alias(bh);2129 if (folio_test_uptodate(folio)) {2130 clear_buffer_new(bh);2131 set_buffer_uptodate(bh);2132 mark_buffer_dirty(bh);2133 continue;2134 }2135 if (block_end > to || block_start < from)2136 folio_zero_segments(folio,2137 to, block_end,2138 block_start, from);2139 continue;2140 }2141 }2142 if (folio_test_uptodate(folio)) {2143 if (!buffer_uptodate(bh))2144 set_buffer_uptodate(bh);2145 continue; 2146 }2147 if (!buffer_uptodate(bh) && !buffer_delay(bh) &&2148 !buffer_unwritten(bh) &&2149 (block_start < from || block_end > to)) {2150 bh_read_nowait(bh, 0);2151 *wait_bh++=bh;2152 }2153 }2154 /*2155 * If we issued read requests - let them complete.2156 */2157 while(wait_bh > wait) {2158 wait_on_buffer(*--wait_bh);2159 if (!buffer_uptodate(*wait_bh))2160 err = -EIO;2161 }2162 if (unlikely(err))2163 folio_zero_new_buffers(folio, from, to);2164 return err;2165}2166 2167int __block_write_begin(struct folio *folio, loff_t pos, unsigned len,2168 get_block_t *get_block)2169{2170 return __block_write_begin_int(folio, pos, len, get_block, NULL);2171}2172EXPORT_SYMBOL(__block_write_begin);2173 2174static void __block_commit_write(struct folio *folio, size_t from, size_t to)2175{2176 size_t block_start, block_end;2177 bool partial = false;2178 unsigned blocksize;2179 struct buffer_head *bh, *head;2180 2181 bh = head = folio_buffers(folio);2182 if (!bh)2183 return;2184 blocksize = bh->b_size;2185 2186 block_start = 0;2187 do {2188 block_end = block_start + blocksize;2189 if (block_end <= from || block_start >= to) {2190 if (!buffer_uptodate(bh))2191 partial = true;2192 } else {2193 set_buffer_uptodate(bh);2194 mark_buffer_dirty(bh);2195 }2196 if (buffer_new(bh))2197 clear_buffer_new(bh);2198 2199 block_start = block_end;2200 bh = bh->b_this_page;2201 } while (bh != head);2202 2203 /*2204 * If this is a partial write which happened to make all buffers2205 * uptodate then we can optimize away a bogus read_folio() for2206 * the next read(). Here we 'discover' whether the folio went2207 * uptodate as a result of this (potentially partial) write.2208 */2209 if (!partial)2210 folio_mark_uptodate(folio);2211}2212 2213/*2214 * block_write_begin takes care of the basic task of block allocation and2215 * bringing partial write blocks uptodate first.2216 *2217 * The filesystem needs to handle block truncation upon failure.2218 */2219int block_write_begin(struct address_space *mapping, loff_t pos, unsigned len,2220 struct folio **foliop, get_block_t *get_block)2221{2222 pgoff_t index = pos >> PAGE_SHIFT;2223 struct folio *folio;2224 int status;2225 2226 folio = __filemap_get_folio(mapping, index, FGP_WRITEBEGIN,2227 mapping_gfp_mask(mapping));2228 if (IS_ERR(folio))2229 return PTR_ERR(folio);2230 2231 status = __block_write_begin_int(folio, pos, len, get_block, NULL);2232 if (unlikely(status)) {2233 folio_unlock(folio);2234 folio_put(folio);2235 folio = NULL;2236 }2237 2238 *foliop = folio;2239 return status;2240}2241EXPORT_SYMBOL(block_write_begin);2242 2243int block_write_end(struct file *file, struct address_space *mapping,2244 loff_t pos, unsigned len, unsigned copied,2245 struct folio *folio, void *fsdata)2246{2247 size_t start = pos - folio_pos(folio);2248 2249 if (unlikely(copied < len)) {2250 /*2251 * The buffers that were written will now be uptodate, so2252 * we don't have to worry about a read_folio reading them2253 * and overwriting a partial write. However if we have2254 * encountered a short write and only partially written2255 * into a buffer, it will not be marked uptodate, so a2256 * read_folio might come in and destroy our partial write.2257 *2258 * Do the simplest thing, and just treat any short write to a2259 * non uptodate folio as a zero-length write, and force the2260 * caller to redo the whole thing.2261 */2262 if (!folio_test_uptodate(folio))2263 copied = 0;2264 2265 folio_zero_new_buffers(folio, start+copied, start+len);2266 }2267 flush_dcache_folio(folio);2268 2269 /* This could be a short (even 0-length) commit */2270 __block_commit_write(folio, start, start + copied);2271 2272 return copied;2273}2274EXPORT_SYMBOL(block_write_end);2275 2276int generic_write_end(struct file *file, struct address_space *mapping,2277 loff_t pos, unsigned len, unsigned copied,2278 struct folio *folio, void *fsdata)2279{2280 struct inode *inode = mapping->host;2281 loff_t old_size = inode->i_size;2282 bool i_size_changed = false;2283 2284 copied = block_write_end(file, mapping, pos, len, copied, folio, fsdata);2285 2286 /*2287 * No need to use i_size_read() here, the i_size cannot change under us2288 * because we hold i_rwsem.2289 *2290 * But it's important to update i_size while still holding folio lock:2291 * page writeout could otherwise come in and zero beyond i_size.2292 */2293 if (pos + copied > inode->i_size) {2294 i_size_write(inode, pos + copied);2295 i_size_changed = true;2296 }2297 2298 folio_unlock(folio);2299 folio_put(folio);2300 2301 if (old_size < pos)2302 pagecache_isize_extended(inode, old_size, pos);2303 /*2304 * Don't mark the inode dirty under page lock. First, it unnecessarily2305 * makes the holding time of page lock longer. Second, it forces lock2306 * ordering of page lock and transaction start for journaling2307 * filesystems.2308 */2309 if (i_size_changed)2310 mark_inode_dirty(inode);2311 return copied;2312}2313EXPORT_SYMBOL(generic_write_end);2314 2315/*2316 * block_is_partially_uptodate checks whether buffers within a folio are2317 * uptodate or not.2318 *2319 * Returns true if all buffers which correspond to the specified part2320 * of the folio are uptodate.2321 */2322bool block_is_partially_uptodate(struct folio *folio, size_t from, size_t count)2323{2324 unsigned block_start, block_end, blocksize;2325 unsigned to;2326 struct buffer_head *bh, *head;2327 bool ret = true;2328 2329 head = folio_buffers(folio);2330 if (!head)2331 return false;2332 blocksize = head->b_size;2333 to = min_t(unsigned, folio_size(folio) - from, count);2334 to = from + to;2335 if (from < blocksize && to > folio_size(folio) - blocksize)2336 return false;2337 2338 bh = head;2339 block_start = 0;2340 do {2341 block_end = block_start + blocksize;2342 if (block_end > from && block_start < to) {2343 if (!buffer_uptodate(bh)) {2344 ret = false;2345 break;2346 }2347 if (block_end >= to)2348 break;2349 }2350 block_start = block_end;2351 bh = bh->b_this_page;2352 } while (bh != head);2353 2354 return ret;2355}2356EXPORT_SYMBOL(block_is_partially_uptodate);2357 2358/*2359 * Generic "read_folio" function for block devices that have the normal2360 * get_block functionality. This is most of the block device filesystems.2361 * Reads the folio asynchronously --- the unlock_buffer() and2362 * set/clear_buffer_uptodate() functions propagate buffer state into the2363 * folio once IO has completed.2364 */2365int block_read_full_folio(struct folio *folio, get_block_t *get_block)2366{2367 struct inode *inode = folio->mapping->host;2368 sector_t iblock, lblock;2369 struct buffer_head *bh, *head, *arr[MAX_BUF_PER_PAGE];2370 size_t blocksize;2371 int nr, i;2372 int fully_mapped = 1;2373 bool page_error = false;2374 loff_t limit = i_size_read(inode);2375 2376 /* This is needed for ext4. */2377 if (IS_ENABLED(CONFIG_FS_VERITY) && IS_VERITY(inode))2378 limit = inode->i_sb->s_maxbytes;2379 2380 VM_BUG_ON_FOLIO(folio_test_large(folio), folio);2381 2382 head = folio_create_buffers(folio, inode, 0);2383 blocksize = head->b_size;2384 2385 iblock = div_u64(folio_pos(folio), blocksize);2386 lblock = div_u64(limit + blocksize - 1, blocksize);2387 bh = head;2388 nr = 0;2389 i = 0;2390 2391 do {2392 if (buffer_uptodate(bh))2393 continue;2394 2395 if (!buffer_mapped(bh)) {2396 int err = 0;2397 2398 fully_mapped = 0;2399 if (iblock < lblock) {2400 WARN_ON(bh->b_size != blocksize);2401 err = get_block(inode, iblock, bh, 0);2402 if (err)2403 page_error = true;2404 }2405 if (!buffer_mapped(bh)) {2406 folio_zero_range(folio, i * blocksize,2407 blocksize);2408 if (!err)2409 set_buffer_uptodate(bh);2410 continue;2411 }2412 /*2413 * get_block() might have updated the buffer2414 * synchronously2415 */2416 if (buffer_uptodate(bh))2417 continue;2418 }2419 arr[nr++] = bh;2420 } while (i++, iblock++, (bh = bh->b_this_page) != head);2421 2422 if (fully_mapped)2423 folio_set_mappedtodisk(folio);2424 2425 if (!nr) {2426 /*2427 * All buffers are uptodate or get_block() returned an2428 * error when trying to map them - we can finish the read.2429 */2430 folio_end_read(folio, !page_error);2431 return 0;2432 }2433 2434 /* Stage two: lock the buffers */2435 for (i = 0; i < nr; i++) {2436 bh = arr[i];2437 lock_buffer(bh);2438 mark_buffer_async_read(bh);2439 }2440 2441 /*2442 * Stage 3: start the IO. Check for uptodateness2443 * inside the buffer lock in case another process reading2444 * the underlying blockdev brought it uptodate (the sct fix).2445 */2446 for (i = 0; i < nr; i++) {2447 bh = arr[i];2448 if (buffer_uptodate(bh))2449 end_buffer_async_read(bh, 1);2450 else2451 submit_bh(REQ_OP_READ, bh);2452 }2453 return 0;2454}2455EXPORT_SYMBOL(block_read_full_folio);2456 2457/* utility function for filesystems that need to do work on expanding2458 * truncates. Uses filesystem pagecache writes to allow the filesystem to2459 * deal with the hole. 2460 */2461int generic_cont_expand_simple(struct inode *inode, loff_t size)2462{2463 struct address_space *mapping = inode->i_mapping;2464 const struct address_space_operations *aops = mapping->a_ops;2465 struct folio *folio;2466 void *fsdata = NULL;2467 int err;2468 2469 err = inode_newsize_ok(inode, size);2470 if (err)2471 goto out;2472 2473 err = aops->write_begin(NULL, mapping, size, 0, &folio, &fsdata);2474 if (err)2475 goto out;2476 2477 err = aops->write_end(NULL, mapping, size, 0, 0, folio, fsdata);2478 BUG_ON(err > 0);2479 2480out:2481 return err;2482}2483EXPORT_SYMBOL(generic_cont_expand_simple);2484 2485static int cont_expand_zero(struct file *file, struct address_space *mapping,2486 loff_t pos, loff_t *bytes)2487{2488 struct inode *inode = mapping->host;2489 const struct address_space_operations *aops = mapping->a_ops;2490 unsigned int blocksize = i_blocksize(inode);2491 struct folio *folio;2492 void *fsdata = NULL;2493 pgoff_t index, curidx;2494 loff_t curpos;2495 unsigned zerofrom, offset, len;2496 int err = 0;2497 2498 index = pos >> PAGE_SHIFT;2499 offset = pos & ~PAGE_MASK;2500 2501 while (index > (curidx = (curpos = *bytes)>>PAGE_SHIFT)) {2502 zerofrom = curpos & ~PAGE_MASK;2503 if (zerofrom & (blocksize-1)) {2504 *bytes |= (blocksize-1);2505 (*bytes)++;2506 }2507 len = PAGE_SIZE - zerofrom;2508 2509 err = aops->write_begin(file, mapping, curpos, len,2510 &folio, &fsdata);2511 if (err)2512 goto out;2513 folio_zero_range(folio, offset_in_folio(folio, curpos), len);2514 err = aops->write_end(file, mapping, curpos, len, len,2515 folio, fsdata);2516 if (err < 0)2517 goto out;2518 BUG_ON(err != len);2519 err = 0;2520 2521 balance_dirty_pages_ratelimited(mapping);2522 2523 if (fatal_signal_pending(current)) {2524 err = -EINTR;2525 goto out;2526 }2527 }2528 2529 /* page covers the boundary, find the boundary offset */2530 if (index == curidx) {2531 zerofrom = curpos & ~PAGE_MASK;2532 /* if we will expand the thing last block will be filled */2533 if (offset <= zerofrom) {2534 goto out;2535 }2536 if (zerofrom & (blocksize-1)) {2537 *bytes |= (blocksize-1);2538 (*bytes)++;2539 }2540 len = offset - zerofrom;2541 2542 err = aops->write_begin(file, mapping, curpos, len,2543 &folio, &fsdata);2544 if (err)2545 goto out;2546 folio_zero_range(folio, offset_in_folio(folio, curpos), len);2547 err = aops->write_end(file, mapping, curpos, len, len,2548 folio, fsdata);2549 if (err < 0)2550 goto out;2551 BUG_ON(err != len);2552 err = 0;2553 }2554out:2555 return err;2556}2557 2558/*2559 * For moronic filesystems that do not allow holes in file.2560 * We may have to extend the file.2561 */2562int cont_write_begin(struct file *file, struct address_space *mapping,2563 loff_t pos, unsigned len,2564 struct folio **foliop, void **fsdata,2565 get_block_t *get_block, loff_t *bytes)2566{2567 struct inode *inode = mapping->host;2568 unsigned int blocksize = i_blocksize(inode);2569 unsigned int zerofrom;2570 int err;2571 2572 err = cont_expand_zero(file, mapping, pos, bytes);2573 if (err)2574 return err;2575 2576 zerofrom = *bytes & ~PAGE_MASK;2577 if (pos+len > *bytes && zerofrom & (blocksize-1)) {2578 *bytes |= (blocksize-1);2579 (*bytes)++;2580 }2581 2582 return block_write_begin(mapping, pos, len, foliop, get_block);2583}2584EXPORT_SYMBOL(cont_write_begin);2585 2586void block_commit_write(struct page *page, unsigned from, unsigned to)2587{2588 struct folio *folio = page_folio(page);2589 __block_commit_write(folio, from, to);2590}2591EXPORT_SYMBOL(block_commit_write);2592 2593/*2594 * block_page_mkwrite() is not allowed to change the file size as it gets2595 * called from a page fault handler when a page is first dirtied. Hence we must2596 * be careful to check for EOF conditions here. We set the page up correctly2597 * for a written page which means we get ENOSPC checking when writing into2598 * holes and correct delalloc and unwritten extent mapping on filesystems that2599 * support these features.2600 *2601 * We are not allowed to take the i_mutex here so we have to play games to2602 * protect against truncate races as the page could now be beyond EOF. Because2603 * truncate writes the inode size before removing pages, once we have the2604 * page lock we can determine safely if the page is beyond EOF. If it is not2605 * beyond EOF, then the page is guaranteed safe against truncation until we2606 * unlock the page.2607 *2608 * Direct callers of this function should protect against filesystem freezing2609 * using sb_start_pagefault() - sb_end_pagefault() functions.2610 */2611int block_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf,2612 get_block_t get_block)2613{2614 struct folio *folio = page_folio(vmf->page);2615 struct inode *inode = file_inode(vma->vm_file);2616 unsigned long end;2617 loff_t size;2618 int ret;2619 2620 folio_lock(folio);2621 size = i_size_read(inode);2622 if ((folio->mapping != inode->i_mapping) ||2623 (folio_pos(folio) >= size)) {2624 /* We overload EFAULT to mean page got truncated */2625 ret = -EFAULT;2626 goto out_unlock;2627 }2628 2629 end = folio_size(folio);2630 /* folio is wholly or partially inside EOF */2631 if (folio_pos(folio) + end > size)2632 end = size - folio_pos(folio);2633 2634 ret = __block_write_begin_int(folio, 0, end, get_block, NULL);2635 if (unlikely(ret))2636 goto out_unlock;2637 2638 __block_commit_write(folio, 0, end);2639 2640 folio_mark_dirty(folio);2641 folio_wait_stable(folio);2642 return 0;2643out_unlock:2644 folio_unlock(folio);2645 return ret;2646}2647EXPORT_SYMBOL(block_page_mkwrite);2648 2649int block_truncate_page(struct address_space *mapping,2650 loff_t from, get_block_t *get_block)2651{2652 pgoff_t index = from >> PAGE_SHIFT;2653 unsigned blocksize;2654 sector_t iblock;2655 size_t offset, length, pos;2656 struct inode *inode = mapping->host;2657 struct folio *folio;2658 struct buffer_head *bh;2659 int err = 0;2660 2661 blocksize = i_blocksize(inode);2662 length = from & (blocksize - 1);2663 2664 /* Block boundary? Nothing to do */2665 if (!length)2666 return 0;2667 2668 length = blocksize - length;2669 iblock = ((loff_t)index * PAGE_SIZE) >> inode->i_blkbits;2670 2671 folio = filemap_grab_folio(mapping, index);2672 if (IS_ERR(folio))2673 return PTR_ERR(folio);2674 2675 bh = folio_buffers(folio);2676 if (!bh)2677 bh = create_empty_buffers(folio, blocksize, 0);2678 2679 /* Find the buffer that contains "offset" */2680 offset = offset_in_folio(folio, from);2681 pos = blocksize;2682 while (offset >= pos) {2683 bh = bh->b_this_page;2684 iblock++;2685 pos += blocksize;2686 }2687 2688 if (!buffer_mapped(bh)) {2689 WARN_ON(bh->b_size != blocksize);2690 err = get_block(inode, iblock, bh, 0);2691 if (err)2692 goto unlock;2693 /* unmapped? It's a hole - nothing to do */2694 if (!buffer_mapped(bh))2695 goto unlock;2696 }2697 2698 /* Ok, it's mapped. Make sure it's up-to-date */2699 if (folio_test_uptodate(folio))2700 set_buffer_uptodate(bh);2701 2702 if (!buffer_uptodate(bh) && !buffer_delay(bh) && !buffer_unwritten(bh)) {2703 err = bh_read(bh, 0);2704 /* Uhhuh. Read error. Complain and punt. */2705 if (err < 0)2706 goto unlock;2707 }2708 2709 folio_zero_range(folio, offset, length);2710 mark_buffer_dirty(bh);2711 2712unlock:2713 folio_unlock(folio);2714 folio_put(folio);2715 2716 return err;2717}2718EXPORT_SYMBOL(block_truncate_page);2719 2720/*2721 * The generic ->writepage function for buffer-backed address_spaces2722 */2723int block_write_full_folio(struct folio *folio, struct writeback_control *wbc,2724 void *get_block)2725{2726 struct inode * const inode = folio->mapping->host;2727 loff_t i_size = i_size_read(inode);2728 2729 /* Is the folio fully inside i_size? */2730 if (folio_pos(folio) + folio_size(folio) <= i_size)2731 return __block_write_full_folio(inode, folio, get_block, wbc);2732 2733 /* Is the folio fully outside i_size? (truncate in progress) */2734 if (folio_pos(folio) >= i_size) {2735 folio_unlock(folio);2736 return 0; /* don't care */2737 }2738 2739 /*2740 * The folio straddles i_size. It must be zeroed out on each and every2741 * writepage invocation because it may be mmapped. "A file is mapped2742 * in multiples of the page size. For a file that is not a multiple of2743 * the page size, the remaining memory is zeroed when mapped, and2744 * writes to that region are not written out to the file."2745 */2746 folio_zero_segment(folio, offset_in_folio(folio, i_size),2747 folio_size(folio));2748 return __block_write_full_folio(inode, folio, get_block, wbc);2749}2750 2751sector_t generic_block_bmap(struct address_space *mapping, sector_t block,2752 get_block_t *get_block)2753{2754 struct inode *inode = mapping->host;2755 struct buffer_head tmp = {2756 .b_size = i_blocksize(inode),2757 };2758 2759 get_block(inode, block, &tmp, 0);2760 return tmp.b_blocknr;2761}2762EXPORT_SYMBOL(generic_block_bmap);2763 2764static void end_bio_bh_io_sync(struct bio *bio)2765{2766 struct buffer_head *bh = bio->bi_private;2767 2768 if (unlikely(bio_flagged(bio, BIO_QUIET)))2769 set_bit(BH_Quiet, &bh->b_state);2770 2771 bh->b_end_io(bh, !bio->bi_status);2772 bio_put(bio);2773}2774 2775static void submit_bh_wbc(blk_opf_t opf, struct buffer_head *bh,2776 enum rw_hint write_hint,2777 struct writeback_control *wbc)2778{2779 const enum req_op op = opf & REQ_OP_MASK;2780 struct bio *bio;2781 2782 BUG_ON(!buffer_locked(bh));2783 BUG_ON(!buffer_mapped(bh));2784 BUG_ON(!bh->b_end_io);2785 BUG_ON(buffer_delay(bh));2786 BUG_ON(buffer_unwritten(bh));2787 2788 /*2789 * Only clear out a write error when rewriting2790 */2791 if (test_set_buffer_req(bh) && (op == REQ_OP_WRITE))2792 clear_buffer_write_io_error(bh);2793 2794 if (buffer_meta(bh))2795 opf |= REQ_META;2796 if (buffer_prio(bh))2797 opf |= REQ_PRIO;2798 2799 bio = bio_alloc(bh->b_bdev, 1, opf, GFP_NOIO);2800 2801 fscrypt_set_bio_crypt_ctx_bh(bio, bh, GFP_NOIO);2802 2803 bio->bi_iter.bi_sector = bh->b_blocknr * (bh->b_size >> 9);2804 bio->bi_write_hint = write_hint;2805 2806 __bio_add_page(bio, bh->b_page, bh->b_size, bh_offset(bh));2807 2808 bio->bi_end_io = end_bio_bh_io_sync;2809 bio->bi_private = bh;2810 2811 /* Take care of bh's that straddle the end of the device */2812 guard_bio_eod(bio);2813 2814 if (wbc) {2815 wbc_init_bio(wbc, bio);2816 wbc_account_cgroup_owner(wbc, bh->b_page, bh->b_size);2817 }2818 2819 submit_bio(bio);2820}2821 2822void submit_bh(blk_opf_t opf, struct buffer_head *bh)2823{2824 submit_bh_wbc(opf, bh, WRITE_LIFE_NOT_SET, NULL);2825}2826EXPORT_SYMBOL(submit_bh);2827 2828void write_dirty_buffer(struct buffer_head *bh, blk_opf_t op_flags)2829{2830 lock_buffer(bh);2831 if (!test_clear_buffer_dirty(bh)) {2832 unlock_buffer(bh);2833 return;2834 }2835 bh->b_end_io = end_buffer_write_sync;2836 get_bh(bh);2837 submit_bh(REQ_OP_WRITE | op_flags, bh);2838}2839EXPORT_SYMBOL(write_dirty_buffer);2840 2841/*2842 * For a data-integrity writeout, we need to wait upon any in-progress I/O2843 * and then start new I/O and then wait upon it. The caller must have a ref on2844 * the buffer_head.2845 */2846int __sync_dirty_buffer(struct buffer_head *bh, blk_opf_t op_flags)2847{2848 WARN_ON(atomic_read(&bh->b_count) < 1);2849 lock_buffer(bh);2850 if (test_clear_buffer_dirty(bh)) {2851 /*2852 * The bh should be mapped, but it might not be if the2853 * device was hot-removed. Not much we can do but fail the I/O.2854 */2855 if (!buffer_mapped(bh)) {2856 unlock_buffer(bh);2857 return -EIO;2858 }2859 2860 get_bh(bh);2861 bh->b_end_io = end_buffer_write_sync;2862 submit_bh(REQ_OP_WRITE | op_flags, bh);2863 wait_on_buffer(bh);2864 if (!buffer_uptodate(bh))2865 return -EIO;2866 } else {2867 unlock_buffer(bh);2868 }2869 return 0;2870}2871EXPORT_SYMBOL(__sync_dirty_buffer);2872 2873int sync_dirty_buffer(struct buffer_head *bh)2874{2875 return __sync_dirty_buffer(bh, REQ_SYNC);2876}2877EXPORT_SYMBOL(sync_dirty_buffer);2878 2879static inline int buffer_busy(struct buffer_head *bh)2880{2881 return atomic_read(&bh->b_count) |2882 (bh->b_state & ((1 << BH_Dirty) | (1 << BH_Lock)));2883}2884 2885static bool2886drop_buffers(struct folio *folio, struct buffer_head **buffers_to_free)2887{2888 struct buffer_head *head = folio_buffers(folio);2889 struct buffer_head *bh;2890 2891 bh = head;2892 do {2893 if (buffer_busy(bh))2894 goto failed;2895 bh = bh->b_this_page;2896 } while (bh != head);2897 2898 do {2899 struct buffer_head *next = bh->b_this_page;2900 2901 if (bh->b_assoc_map)2902 __remove_assoc_queue(bh);2903 bh = next;2904 } while (bh != head);2905 *buffers_to_free = head;2906 folio_detach_private(folio);2907 return true;2908failed:2909 return false;2910}2911 2912/**2913 * try_to_free_buffers - Release buffers attached to this folio.2914 * @folio: The folio.2915 *2916 * If any buffers are in use (dirty, under writeback, elevated refcount),2917 * no buffers will be freed.2918 *2919 * If the folio is dirty but all the buffers are clean then we need to2920 * be sure to mark the folio clean as well. This is because the folio2921 * may be against a block device, and a later reattachment of buffers2922 * to a dirty folio will set *all* buffers dirty. Which would corrupt2923 * filesystem data on the same device.2924 *2925 * The same applies to regular filesystem folios: if all the buffers are2926 * clean then we set the folio clean and proceed. To do that, we require2927 * total exclusion from block_dirty_folio(). That is obtained with2928 * i_private_lock.2929 *2930 * Exclusion against try_to_free_buffers may be obtained by either2931 * locking the folio or by holding its mapping's i_private_lock.2932 *2933 * Context: Process context. @folio must be locked. Will not sleep.2934 * Return: true if all buffers attached to this folio were freed.2935 */2936bool try_to_free_buffers(struct folio *folio)2937{2938 struct address_space * const mapping = folio->mapping;2939 struct buffer_head *buffers_to_free = NULL;2940 bool ret = 0;2941 2942 BUG_ON(!folio_test_locked(folio));2943 if (folio_test_writeback(folio))2944 return false;2945 2946 if (mapping == NULL) { /* can this still happen? */2947 ret = drop_buffers(folio, &buffers_to_free);2948 goto out;2949 }2950 2951 spin_lock(&mapping->i_private_lock);2952 ret = drop_buffers(folio, &buffers_to_free);2953 2954 /*2955 * If the filesystem writes its buffers by hand (eg ext3)2956 * then we can have clean buffers against a dirty folio. We2957 * clean the folio here; otherwise the VM will never notice2958 * that the filesystem did any IO at all.2959 *2960 * Also, during truncate, discard_buffer will have marked all2961 * the folio's buffers clean. We discover that here and clean2962 * the folio also.2963 *2964 * i_private_lock must be held over this entire operation in order2965 * to synchronise against block_dirty_folio and prevent the2966 * dirty bit from being lost.2967 */2968 if (ret)2969 folio_cancel_dirty(folio);2970 spin_unlock(&mapping->i_private_lock);2971out:2972 if (buffers_to_free) {2973 struct buffer_head *bh = buffers_to_free;2974 2975 do {2976 struct buffer_head *next = bh->b_this_page;2977 free_buffer_head(bh);2978 bh = next;2979 } while (bh != buffers_to_free);2980 }2981 return ret;2982}2983EXPORT_SYMBOL(try_to_free_buffers);2984 2985/*2986 * Buffer-head allocation2987 */2988static struct kmem_cache *bh_cachep __ro_after_init;2989 2990/*2991 * Once the number of bh's in the machine exceeds this level, we start2992 * stripping them in writeback.2993 */2994static unsigned long max_buffer_heads __ro_after_init;2995 2996int buffer_heads_over_limit;2997 2998struct bh_accounting {2999 int nr; /* Number of live bh's */3000 int ratelimit; /* Limit cacheline bouncing */3001};3002 3003static DEFINE_PER_CPU(struct bh_accounting, bh_accounting) = {0, 0};3004 3005static void recalc_bh_state(void)3006{3007 int i;3008 int tot = 0;3009 3010 if (__this_cpu_inc_return(bh_accounting.ratelimit) - 1 < 4096)3011 return;3012 __this_cpu_write(bh_accounting.ratelimit, 0);3013 for_each_online_cpu(i)3014 tot += per_cpu(bh_accounting, i).nr;3015 buffer_heads_over_limit = (tot > max_buffer_heads);3016}3017 3018struct buffer_head *alloc_buffer_head(gfp_t gfp_flags)3019{3020 struct buffer_head *ret = kmem_cache_zalloc(bh_cachep, gfp_flags);3021 if (ret) {3022 INIT_LIST_HEAD(&ret->b_assoc_buffers);3023 spin_lock_init(&ret->b_uptodate_lock);3024 preempt_disable();3025 __this_cpu_inc(bh_accounting.nr);3026 recalc_bh_state();3027 preempt_enable();3028 }3029 return ret;3030}3031EXPORT_SYMBOL(alloc_buffer_head);3032 3033void free_buffer_head(struct buffer_head *bh)3034{3035 BUG_ON(!list_empty(&bh->b_assoc_buffers));3036 kmem_cache_free(bh_cachep, bh);3037 preempt_disable();3038 __this_cpu_dec(bh_accounting.nr);3039 recalc_bh_state();3040 preempt_enable();3041}3042EXPORT_SYMBOL(free_buffer_head);3043 3044static int buffer_exit_cpu_dead(unsigned int cpu)3045{3046 int i;3047 struct bh_lru *b = &per_cpu(bh_lrus, cpu);3048 3049 for (i = 0; i < BH_LRU_SIZE; i++) {3050 brelse(b->bhs[i]);3051 b->bhs[i] = NULL;3052 }3053 this_cpu_add(bh_accounting.nr, per_cpu(bh_accounting, cpu).nr);3054 per_cpu(bh_accounting, cpu).nr = 0;3055 return 0;3056}3057 3058/**3059 * bh_uptodate_or_lock - Test whether the buffer is uptodate3060 * @bh: struct buffer_head3061 *3062 * Return true if the buffer is up-to-date and false,3063 * with the buffer locked, if not.3064 */3065int bh_uptodate_or_lock(struct buffer_head *bh)3066{3067 if (!buffer_uptodate(bh)) {3068 lock_buffer(bh);3069 if (!buffer_uptodate(bh))3070 return 0;3071 unlock_buffer(bh);3072 }3073 return 1;3074}3075EXPORT_SYMBOL(bh_uptodate_or_lock);3076 3077/**3078 * __bh_read - Submit read for a locked buffer3079 * @bh: struct buffer_head3080 * @op_flags: appending REQ_OP_* flags besides REQ_OP_READ3081 * @wait: wait until reading finish3082 *3083 * Returns zero on success or don't wait, and -EIO on error.3084 */3085int __bh_read(struct buffer_head *bh, blk_opf_t op_flags, bool wait)3086{3087 int ret = 0;3088 3089 BUG_ON(!buffer_locked(bh));3090 3091 get_bh(bh);3092 bh->b_end_io = end_buffer_read_sync;3093 submit_bh(REQ_OP_READ | op_flags, bh);3094 if (wait) {3095 wait_on_buffer(bh);3096 if (!buffer_uptodate(bh))3097 ret = -EIO;3098 }3099 return ret;3100}3101EXPORT_SYMBOL(__bh_read);3102 3103/**3104 * __bh_read_batch - Submit read for a batch of unlocked buffers3105 * @nr: entry number of the buffer batch3106 * @bhs: a batch of struct buffer_head3107 * @op_flags: appending REQ_OP_* flags besides REQ_OP_READ3108 * @force_lock: force to get a lock on the buffer if set, otherwise drops any3109 * buffer that cannot lock.3110 *3111 * Returns zero on success or don't wait, and -EIO on error.3112 */3113void __bh_read_batch(int nr, struct buffer_head *bhs[],3114 blk_opf_t op_flags, bool force_lock)3115{3116 int i;3117 3118 for (i = 0; i < nr; i++) {3119 struct buffer_head *bh = bhs[i];3120 3121 if (buffer_uptodate(bh))3122 continue;3123 3124 if (force_lock)3125 lock_buffer(bh);3126 else3127 if (!trylock_buffer(bh))3128 continue;3129 3130 if (buffer_uptodate(bh)) {3131 unlock_buffer(bh);3132 continue;3133 }3134 3135 bh->b_end_io = end_buffer_read_sync;3136 get_bh(bh);3137 submit_bh(REQ_OP_READ | op_flags, bh);3138 }3139}3140EXPORT_SYMBOL(__bh_read_batch);3141 3142void __init buffer_init(void)3143{3144 unsigned long nrpages;3145 int ret;3146 3147 bh_cachep = KMEM_CACHE(buffer_head,3148 SLAB_RECLAIM_ACCOUNT|SLAB_PANIC);3149 /*3150 * Limit the bh occupancy to 10% of ZONE_NORMAL3151 */3152 nrpages = (nr_free_buffer_pages() * 10) / 100;3153 max_buffer_heads = nrpages * (PAGE_SIZE / sizeof(struct buffer_head));3154 ret = cpuhp_setup_state_nocalls(CPUHP_FS_BUFF_DEAD, "fs/buffer:dead",3155 NULL, buffer_exit_cpu_dead);3156 WARN_ON(ret < 0);3157}3158