2852 lines · c
1// SPDX-License-Identifier: GPL-2.0-only2/*3 * fs/fs-writeback.c4 *5 * Copyright (C) 2002, Linus Torvalds.6 *7 * Contains all the functions related to writing back and waiting8 * upon dirty inodes against superblocks, and writing back dirty9 * pages against inodes. ie: data writeback. Writeout of the10 * inode itself is not handled here.11 *12 * 10Apr2002 Andrew Morton13 * Split out of fs/inode.c14 * Additions for address_space-based writeback15 */16 17#include <linux/kernel.h>18#include <linux/export.h>19#include <linux/spinlock.h>20#include <linux/slab.h>21#include <linux/sched.h>22#include <linux/fs.h>23#include <linux/mm.h>24#include <linux/pagemap.h>25#include <linux/kthread.h>26#include <linux/writeback.h>27#include <linux/blkdev.h>28#include <linux/backing-dev.h>29#include <linux/tracepoint.h>30#include <linux/device.h>31#include <linux/memcontrol.h>32#include "internal.h"33 34/*35 * 4MB minimal write chunk size36 */37#define MIN_WRITEBACK_PAGES (4096UL >> (PAGE_SHIFT - 10))38 39/*40 * Passed into wb_writeback(), essentially a subset of writeback_control41 */42struct wb_writeback_work {43 long nr_pages;44 struct super_block *sb;45 enum writeback_sync_modes sync_mode;46 unsigned int tagged_writepages:1;47 unsigned int for_kupdate:1;48 unsigned int range_cyclic:1;49 unsigned int for_background:1;50 unsigned int for_sync:1; /* sync(2) WB_SYNC_ALL writeback */51 unsigned int auto_free:1; /* free on completion */52 enum wb_reason reason; /* why was writeback initiated? */53 54 struct list_head list; /* pending work list */55 struct wb_completion *done; /* set if the caller waits */56};57 58/*59 * If an inode is constantly having its pages dirtied, but then the60 * updates stop dirtytime_expire_interval seconds in the past, it's61 * possible for the worst case time between when an inode has its62 * timestamps updated and when they finally get written out to be two63 * dirtytime_expire_intervals. We set the default to 12 hours (in64 * seconds), which means most of the time inodes will have their65 * timestamps written to disk after 12 hours, but in the worst case a66 * few inodes might not their timestamps updated for 24 hours.67 */68unsigned int dirtytime_expire_interval = 12 * 60 * 60;69 70static inline struct inode *wb_inode(struct list_head *head)71{72 return list_entry(head, struct inode, i_io_list);73}74 75/*76 * Include the creation of the trace points after defining the77 * wb_writeback_work structure and inline functions so that the definition78 * remains local to this file.79 */80#define CREATE_TRACE_POINTS81#include <trace/events/writeback.h>82 83EXPORT_TRACEPOINT_SYMBOL_GPL(wbc_writepage);84 85static bool wb_io_lists_populated(struct bdi_writeback *wb)86{87 if (wb_has_dirty_io(wb)) {88 return false;89 } else {90 set_bit(WB_has_dirty_io, &wb->state);91 WARN_ON_ONCE(!wb->avg_write_bandwidth);92 atomic_long_add(wb->avg_write_bandwidth,93 &wb->bdi->tot_write_bandwidth);94 return true;95 }96}97 98static void wb_io_lists_depopulated(struct bdi_writeback *wb)99{100 if (wb_has_dirty_io(wb) && list_empty(&wb->b_dirty) &&101 list_empty(&wb->b_io) && list_empty(&wb->b_more_io)) {102 clear_bit(WB_has_dirty_io, &wb->state);103 WARN_ON_ONCE(atomic_long_sub_return(wb->avg_write_bandwidth,104 &wb->bdi->tot_write_bandwidth) < 0);105 }106}107 108/**109 * inode_io_list_move_locked - move an inode onto a bdi_writeback IO list110 * @inode: inode to be moved111 * @wb: target bdi_writeback112 * @head: one of @wb->b_{dirty|io|more_io|dirty_time}113 *114 * Move @inode->i_io_list to @list of @wb and set %WB_has_dirty_io.115 * Returns %true if @inode is the first occupant of the !dirty_time IO116 * lists; otherwise, %false.117 */118static bool inode_io_list_move_locked(struct inode *inode,119 struct bdi_writeback *wb,120 struct list_head *head)121{122 assert_spin_locked(&wb->list_lock);123 assert_spin_locked(&inode->i_lock);124 WARN_ON_ONCE(inode->i_state & I_FREEING);125 126 list_move(&inode->i_io_list, head);127 128 /* dirty_time doesn't count as dirty_io until expiration */129 if (head != &wb->b_dirty_time)130 return wb_io_lists_populated(wb);131 132 wb_io_lists_depopulated(wb);133 return false;134}135 136static HWJS_SUSPENDS void wb_wakeup(struct bdi_writeback *wb)137{138 spin_lock_irq(&wb->work_lock);139 if (test_bit(WB_registered, &wb->state))140 mod_delayed_work(bdi_wq, &wb->dwork, 0);141 spin_unlock_irq(&wb->work_lock);142}143 144/*145 * This function is used when the first inode for this wb is marked dirty. It146 * wakes-up the corresponding bdi thread which should then take care of the147 * periodic background write-out of dirty inodes. Since the write-out would148 * starts only 'dirty_writeback_interval' centisecs from now anyway, we just149 * set up a timer which wakes the bdi thread up later.150 *151 * Note, we wouldn't bother setting up the timer, but this function is on the152 * fast-path (used by '__mark_inode_dirty()'), so we save few context switches153 * by delaying the wake-up.154 *155 * We have to be careful not to postpone flush work if it is scheduled for156 * earlier. Thus we use queue_delayed_work().157 */158static HWJS_SUSPENDS void wb_wakeup_delayed(struct bdi_writeback *wb)159{160 unsigned long timeout;161 162 timeout = msecs_to_jiffies(dirty_writeback_interval * 10);163 spin_lock_irq(&wb->work_lock);164 if (test_bit(WB_registered, &wb->state))165 queue_delayed_work(bdi_wq, &wb->dwork, timeout);166 spin_unlock_irq(&wb->work_lock);167}168 169static HWJS_SUSPENDS void finish_writeback_work(struct wb_writeback_work *work)170{171 struct wb_completion *done = work->done;172 173 if (work->auto_free)174 kfree(work);175 if (done) {176 wait_queue_head_t *waitq = done->waitq;177 178 /* @done can't be accessed after the following dec */179 if (atomic_dec_and_test(&done->cnt))180 wake_up_all(waitq);181 }182}183 184static HWJS_SUSPENDS void wb_queue_work(struct bdi_writeback *wb,185 struct wb_writeback_work *work)186{187 trace_writeback_queue(wb, work);188 189 if (work->done)190 atomic_inc(&work->done->cnt);191 192 spin_lock_irq(&wb->work_lock);193 194 if (test_bit(WB_registered, &wb->state)) {195 list_add_tail(&work->list, &wb->work_list);196 mod_delayed_work(bdi_wq, &wb->dwork, 0);197 } else198 finish_writeback_work(work);199 200 spin_unlock_irq(&wb->work_lock);201}202 203/**204 * wb_wait_for_completion - wait for completion of bdi_writeback_works205 * @done: target wb_completion206 *207 * Wait for one or more work items issued to @bdi with their ->done field208 * set to @done, which should have been initialized with209 * DEFINE_WB_COMPLETION(). This function returns after all such work items210 * are completed. Work items which are waited upon aren't freed211 * automatically on completion.212 */213void wb_wait_for_completion(struct wb_completion *done)214{215 atomic_dec(&done->cnt); /* put down the initial count */216 wait_event(*done->waitq, !atomic_read(&done->cnt));217}218 219#ifdef CONFIG_CGROUP_WRITEBACK220 221/*222 * Parameters for foreign inode detection, see wbc_detach_inode() to see223 * how they're used.224 *225 * These paramters are inherently heuristical as the detection target226 * itself is fuzzy. All we want to do is detaching an inode from the227 * current owner if it's being written to by some other cgroups too much.228 *229 * The current cgroup writeback is built on the assumption that multiple230 * cgroups writing to the same inode concurrently is very rare and a mode231 * of operation which isn't well supported. As such, the goal is not232 * taking too long when a different cgroup takes over an inode while233 * avoiding too aggressive flip-flops from occasional foreign writes.234 *235 * We record, very roughly, 2s worth of IO time history and if more than236 * half of that is foreign, trigger the switch. The recording is quantized237 * to 16 slots. To avoid tiny writes from swinging the decision too much,238 * writes smaller than 1/8 of avg size are ignored.239 */240#define WB_FRN_TIME_SHIFT 13 /* 1s = 2^13, upto 8 secs w/ 16bit */241#define WB_FRN_TIME_AVG_SHIFT 3 /* avg = avg * 7/8 + new * 1/8 */242#define WB_FRN_TIME_CUT_DIV 8 /* ignore rounds < avg / 8 */243#define WB_FRN_TIME_PERIOD (2 * (1 << WB_FRN_TIME_SHIFT)) /* 2s */244 245#define WB_FRN_HIST_SLOTS 16 /* inode->i_wb_frn_history is 16bit */246#define WB_FRN_HIST_UNIT (WB_FRN_TIME_PERIOD / WB_FRN_HIST_SLOTS)247 /* each slot's duration is 2s / 16 */248#define WB_FRN_HIST_THR_SLOTS (WB_FRN_HIST_SLOTS / 2)249 /* if foreign slots >= 8, switch */250#define WB_FRN_HIST_MAX_SLOTS (WB_FRN_HIST_THR_SLOTS / 2 + 1)251 /* one round can affect upto 5 slots */252#define WB_FRN_MAX_IN_FLIGHT 1024 /* don't queue too many concurrently */253 254/*255 * Maximum inodes per isw. A specific value has been chosen to make256 * struct inode_switch_wbs_context fit into 1024 bytes kmalloc.257 */258#define WB_MAX_INODES_PER_ISW ((1024UL - sizeof(struct inode_switch_wbs_context)) \259 / sizeof(struct inode *))260 261static atomic_t isw_nr_in_flight = ATOMIC_INIT(0);262static struct workqueue_struct *isw_wq;263 264void __inode_attach_wb(struct inode *inode, struct folio *folio)265{266 struct backing_dev_info *bdi = inode_to_bdi(inode);267 struct bdi_writeback *wb = NULL;268 269 if (inode_cgwb_enabled(inode)) {270 struct cgroup_subsys_state *memcg_css;271 272 if (folio) {273 memcg_css = mem_cgroup_css_from_folio(folio);274 wb = wb_get_create(bdi, memcg_css, GFP_ATOMIC);275 } else {276 /* must pin memcg_css, see wb_get_create() */277 memcg_css = task_get_css(current, memory_cgrp_id);278 wb = wb_get_create(bdi, memcg_css, GFP_ATOMIC);279 css_put(memcg_css);280 }281 }282 283 if (!wb)284 wb = &bdi->wb;285 286 /*287 * There may be multiple instances of this function racing to288 * update the same inode. Use cmpxchg() to tell the winner.289 */290 if (unlikely(cmpxchg(&inode->i_wb, NULL, wb)))291 wb_put(wb);292}293EXPORT_SYMBOL_GPL(__inode_attach_wb);294 295/**296 * inode_cgwb_move_to_attached - put the inode onto wb->b_attached list297 * @inode: inode of interest with i_lock held298 * @wb: target bdi_writeback299 *300 * Remove the inode from wb's io lists and if necessarily put onto b_attached301 * list. Only inodes attached to cgwb's are kept on this list.302 */303static void inode_cgwb_move_to_attached(struct inode *inode,304 struct bdi_writeback *wb)305{306 assert_spin_locked(&wb->list_lock);307 assert_spin_locked(&inode->i_lock);308 WARN_ON_ONCE(inode->i_state & I_FREEING);309 310 inode->i_state &= ~I_SYNC_QUEUED;311 if (wb != &wb->bdi->wb)312 list_move(&inode->i_io_list, &wb->b_attached);313 else314 list_del_init(&inode->i_io_list);315 wb_io_lists_depopulated(wb);316}317 318/**319 * locked_inode_to_wb_and_lock_list - determine a locked inode's wb and lock it320 * @inode: inode of interest with i_lock held321 *322 * Returns @inode's wb with its list_lock held. @inode->i_lock must be323 * held on entry and is released on return. The returned wb is guaranteed324 * to stay @inode's associated wb until its list_lock is released.325 */326static struct bdi_writeback *327locked_inode_to_wb_and_lock_list(struct inode *inode)328 __releases(&inode->i_lock)329 __acquires(&wb->list_lock)330{331 while (true) {332 struct bdi_writeback *wb = inode_to_wb(inode);333 334 /*335 * inode_to_wb() association is protected by both336 * @inode->i_lock and @wb->list_lock but list_lock nests337 * outside i_lock. Drop i_lock and verify that the338 * association hasn't changed after acquiring list_lock.339 */340 wb_get(wb);341 spin_unlock(&inode->i_lock);342 spin_lock(&wb->list_lock);343 344 /* i_wb may have changed inbetween, can't use inode_to_wb() */345 if (likely(wb == inode->i_wb)) {346 wb_put(wb); /* @inode already has ref */347 return wb;348 }349 350 spin_unlock(&wb->list_lock);351 wb_put(wb);352 cpu_relax();353 spin_lock(&inode->i_lock);354 }355}356 357/**358 * inode_to_wb_and_lock_list - determine an inode's wb and lock it359 * @inode: inode of interest360 *361 * Same as locked_inode_to_wb_and_lock_list() but @inode->i_lock isn't held362 * on entry.363 */364static struct bdi_writeback *inode_to_wb_and_lock_list(struct inode *inode)365 __acquires(&wb->list_lock)366{367 spin_lock(&inode->i_lock);368 return locked_inode_to_wb_and_lock_list(inode);369}370 371struct inode_switch_wbs_context {372 struct rcu_work work;373 374 /*375 * Multiple inodes can be switched at once. The switching procedure376 * consists of two parts, separated by a RCU grace period. To make377 * sure that the second part is executed for each inode gone through378 * the first part, all inode pointers are placed into a NULL-terminated379 * array embedded into struct inode_switch_wbs_context. Otherwise380 * an inode could be left in a non-consistent state.381 */382 struct bdi_writeback *new_wb;383 struct inode *inodes[];384};385 386static void bdi_down_write_wb_switch_rwsem(struct backing_dev_info *bdi)387{388 down_write(&bdi->wb_switch_rwsem);389}390 391static void bdi_up_write_wb_switch_rwsem(struct backing_dev_info *bdi)392{393 up_write(&bdi->wb_switch_rwsem);394}395 396static bool inode_do_switch_wbs(struct inode *inode,397 struct bdi_writeback *old_wb,398 struct bdi_writeback *new_wb)399{400 struct address_space *mapping = inode->i_mapping;401 XA_STATE(xas, &mapping->i_pages, 0);402 struct folio *folio;403 bool switched = false;404 405 spin_lock(&inode->i_lock);406 xa_lock_irq(&mapping->i_pages);407 408 /*409 * Once I_FREEING or I_WILL_FREE are visible under i_lock, the eviction410 * path owns the inode and we shouldn't modify ->i_io_list.411 */412 if (unlikely(inode->i_state & (I_FREEING | I_WILL_FREE)))413 goto skip_switch;414 415 trace_inode_switch_wbs(inode, old_wb, new_wb);416 417 /*418 * Count and transfer stats. Note that PAGECACHE_TAG_DIRTY points419 * to possibly dirty folios while PAGECACHE_TAG_WRITEBACK points to420 * folios actually under writeback.421 */422 xas_for_each_marked(&xas, folio, ULONG_MAX, PAGECACHE_TAG_DIRTY) {423 if (folio_test_dirty(folio)) {424 long nr = folio_nr_pages(folio);425 wb_stat_mod(old_wb, WB_RECLAIMABLE, -nr);426 wb_stat_mod(new_wb, WB_RECLAIMABLE, nr);427 }428 }429 430 xas_set(&xas, 0);431 xas_for_each_marked(&xas, folio, ULONG_MAX, PAGECACHE_TAG_WRITEBACK) {432 long nr = folio_nr_pages(folio);433 WARN_ON_ONCE(!folio_test_writeback(folio));434 wb_stat_mod(old_wb, WB_WRITEBACK, -nr);435 wb_stat_mod(new_wb, WB_WRITEBACK, nr);436 }437 438 if (mapping_tagged(mapping, PAGECACHE_TAG_WRITEBACK)) {439 atomic_dec(&old_wb->writeback_inodes);440 atomic_inc(&new_wb->writeback_inodes);441 }442 443 wb_get(new_wb);444 445 /*446 * Transfer to @new_wb's IO list if necessary. If the @inode is dirty,447 * the specific list @inode was on is ignored and the @inode is put on448 * ->b_dirty which is always correct including from ->b_dirty_time.449 * The transfer preserves @inode->dirtied_when ordering. If the @inode450 * was clean, it means it was on the b_attached list, so move it onto451 * the b_attached list of @new_wb.452 */453 if (!list_empty(&inode->i_io_list)) {454 inode->i_wb = new_wb;455 456 if (inode->i_state & I_DIRTY_ALL) {457 struct inode *pos;458 459 list_for_each_entry(pos, &new_wb->b_dirty, i_io_list)460 if (time_after_eq(inode->dirtied_when,461 pos->dirtied_when))462 break;463 inode_io_list_move_locked(inode, new_wb,464 pos->i_io_list.prev);465 } else {466 inode_cgwb_move_to_attached(inode, new_wb);467 }468 } else {469 inode->i_wb = new_wb;470 }471 472 /* ->i_wb_frn updates may race wbc_detach_inode() but doesn't matter */473 inode->i_wb_frn_winner = 0;474 inode->i_wb_frn_avg_time = 0;475 inode->i_wb_frn_history = 0;476 switched = true;477skip_switch:478 /*479 * Paired with load_acquire in unlocked_inode_to_wb_begin() and480 * ensures that the new wb is visible if they see !I_WB_SWITCH.481 */482 smp_store_release(&inode->i_state, inode->i_state & ~I_WB_SWITCH);483 484 xa_unlock_irq(&mapping->i_pages);485 spin_unlock(&inode->i_lock);486 487 return switched;488}489 490static void inode_switch_wbs_work_fn(struct work_struct *work)491{492 struct inode_switch_wbs_context *isw =493 container_of(to_rcu_work(work), struct inode_switch_wbs_context, work);494 struct backing_dev_info *bdi = inode_to_bdi(isw->inodes[0]);495 struct bdi_writeback *old_wb = isw->inodes[0]->i_wb;496 struct bdi_writeback *new_wb = isw->new_wb;497 unsigned long nr_switched = 0;498 struct inode **inodep;499 500 /*501 * If @inode switches cgwb membership while sync_inodes_sb() is502 * being issued, sync_inodes_sb() might miss it. Synchronize.503 */504 down_read(&bdi->wb_switch_rwsem);505 506 /*507 * By the time control reaches here, RCU grace period has passed508 * since I_WB_SWITCH assertion and all wb stat update transactions509 * between unlocked_inode_to_wb_begin/end() are guaranteed to be510 * synchronizing against the i_pages lock.511 *512 * Grabbing old_wb->list_lock, inode->i_lock and the i_pages lock513 * gives us exclusion against all wb related operations on @inode514 * including IO list manipulations and stat updates.515 */516 if (old_wb < new_wb) {517 spin_lock(&old_wb->list_lock);518 spin_lock_nested(&new_wb->list_lock, SINGLE_DEPTH_NESTING);519 } else {520 spin_lock(&new_wb->list_lock);521 spin_lock_nested(&old_wb->list_lock, SINGLE_DEPTH_NESTING);522 }523 524 for (inodep = isw->inodes; *inodep; inodep++) {525 WARN_ON_ONCE((*inodep)->i_wb != old_wb);526 if (inode_do_switch_wbs(*inodep, old_wb, new_wb))527 nr_switched++;528 }529 530 spin_unlock(&new_wb->list_lock);531 spin_unlock(&old_wb->list_lock);532 533 up_read(&bdi->wb_switch_rwsem);534 535 if (nr_switched) {536 wb_wakeup(new_wb);537 wb_put_many(old_wb, nr_switched);538 }539 540 for (inodep = isw->inodes; *inodep; inodep++)541 iput(*inodep);542 wb_put(new_wb);543 kfree(isw);544 atomic_dec(&isw_nr_in_flight);545}546 547static bool inode_prepare_wbs_switch(struct inode *inode,548 struct bdi_writeback *new_wb)549{550 /*551 * Paired with smp_mb() in cgroup_writeback_umount().552 * isw_nr_in_flight must be increased before checking SB_ACTIVE and553 * grabbing an inode, otherwise isw_nr_in_flight can be observed as 0554 * in cgroup_writeback_umount() and the isw_wq will be not flushed.555 */556 smp_mb();557 558 if (IS_DAX(inode))559 return false;560 561 /* while holding I_WB_SWITCH, no one else can update the association */562 spin_lock(&inode->i_lock);563 if (!(inode->i_sb->s_flags & SB_ACTIVE) ||564 inode->i_state & (I_WB_SWITCH | I_FREEING | I_WILL_FREE) ||565 inode_to_wb(inode) == new_wb) {566 spin_unlock(&inode->i_lock);567 return false;568 }569 inode->i_state |= I_WB_SWITCH;570 __iget(inode);571 spin_unlock(&inode->i_lock);572 573 return true;574}575 576/**577 * inode_switch_wbs - change the wb association of an inode578 * @inode: target inode579 * @new_wb_id: ID of the new wb580 *581 * Switch @inode's wb association to the wb identified by @new_wb_id. The582 * switching is performed asynchronously and may fail silently.583 */584static void inode_switch_wbs(struct inode *inode, int new_wb_id)585{586 struct backing_dev_info *bdi = inode_to_bdi(inode);587 struct cgroup_subsys_state *memcg_css;588 struct inode_switch_wbs_context *isw;589 590 /* noop if seems to be already in progress */591 if (inode->i_state & I_WB_SWITCH)592 return;593 594 /* avoid queueing a new switch if too many are already in flight */595 if (atomic_read(&isw_nr_in_flight) > WB_FRN_MAX_IN_FLIGHT)596 return;597 598 isw = kzalloc(struct_size(isw, inodes, 2), GFP_ATOMIC);599 if (!isw)600 return;601 602 atomic_inc(&isw_nr_in_flight);603 604 /* find and pin the new wb */605 rcu_read_lock();606 memcg_css = css_from_id(new_wb_id, &memory_cgrp_subsys);607 if (memcg_css && !css_tryget(memcg_css))608 memcg_css = NULL;609 rcu_read_unlock();610 if (!memcg_css)611 goto out_free;612 613 isw->new_wb = wb_get_create(bdi, memcg_css, GFP_ATOMIC);614 css_put(memcg_css);615 if (!isw->new_wb)616 goto out_free;617 618 if (!inode_prepare_wbs_switch(inode, isw->new_wb))619 goto out_free;620 621 isw->inodes[0] = inode;622 623 /*624 * In addition to synchronizing among switchers, I_WB_SWITCH tells625 * the RCU protected stat update paths to grab the i_page626 * lock so that stat transfer can synchronize against them.627 * Let's continue after I_WB_SWITCH is guaranteed to be visible.628 */629 INIT_RCU_WORK(&isw->work, inode_switch_wbs_work_fn);630 queue_rcu_work(isw_wq, &isw->work);631 return;632 633out_free:634 atomic_dec(&isw_nr_in_flight);635 if (isw->new_wb)636 wb_put(isw->new_wb);637 kfree(isw);638}639 640static bool isw_prepare_wbs_switch(struct inode_switch_wbs_context *isw,641 struct list_head *list, int *nr)642{643 struct inode *inode;644 645 list_for_each_entry(inode, list, i_io_list) {646 if (!inode_prepare_wbs_switch(inode, isw->new_wb))647 continue;648 649 isw->inodes[*nr] = inode;650 (*nr)++;651 652 if (*nr >= WB_MAX_INODES_PER_ISW - 1)653 return true;654 }655 return false;656}657 658/**659 * cleanup_offline_cgwb - detach associated inodes660 * @wb: target wb661 *662 * Switch all inodes attached to @wb to a nearest living ancestor's wb in order663 * to eventually release the dying @wb. Returns %true if not all inodes were664 * switched and the function has to be restarted.665 */666bool cleanup_offline_cgwb(struct bdi_writeback *wb)667{668 struct cgroup_subsys_state *memcg_css;669 struct inode_switch_wbs_context *isw;670 int nr;671 bool restart = false;672 673 isw = kzalloc(struct_size(isw, inodes, WB_MAX_INODES_PER_ISW),674 GFP_KERNEL);675 if (!isw)676 return restart;677 678 atomic_inc(&isw_nr_in_flight);679 680 for (memcg_css = wb->memcg_css->parent; memcg_css;681 memcg_css = memcg_css->parent) {682 isw->new_wb = wb_get_create(wb->bdi, memcg_css, GFP_KERNEL);683 if (isw->new_wb)684 break;685 }686 if (unlikely(!isw->new_wb))687 isw->new_wb = &wb->bdi->wb; /* wb_get() is noop for bdi's wb */688 689 nr = 0;690 spin_lock(&wb->list_lock);691 /*692 * In addition to the inodes that have completed writeback, also switch693 * cgwbs for those inodes only with dirty timestamps. Otherwise, those694 * inodes won't be written back for a long time when lazytime is695 * enabled, and thus pinning the dying cgwbs. It won't break the696 * bandwidth restrictions, as writeback of inode metadata is not697 * accounted for.698 */699 restart = isw_prepare_wbs_switch(isw, &wb->b_attached, &nr);700 if (!restart)701 restart = isw_prepare_wbs_switch(isw, &wb->b_dirty_time, &nr);702 spin_unlock(&wb->list_lock);703 704 /* no attached inodes? bail out */705 if (nr == 0) {706 atomic_dec(&isw_nr_in_flight);707 wb_put(isw->new_wb);708 kfree(isw);709 return restart;710 }711 712 /*713 * In addition to synchronizing among switchers, I_WB_SWITCH tells714 * the RCU protected stat update paths to grab the i_page715 * lock so that stat transfer can synchronize against them.716 * Let's continue after I_WB_SWITCH is guaranteed to be visible.717 */718 INIT_RCU_WORK(&isw->work, inode_switch_wbs_work_fn);719 queue_rcu_work(isw_wq, &isw->work);720 721 return restart;722}723 724/**725 * wbc_attach_and_unlock_inode - associate wbc with target inode and unlock it726 * @wbc: writeback_control of interest727 * @inode: target inode728 *729 * @inode is locked and about to be written back under the control of @wbc.730 * Record @inode's writeback context into @wbc and unlock the i_lock. On731 * writeback completion, wbc_detach_inode() should be called. This is used732 * to track the cgroup writeback context.733 */734void wbc_attach_and_unlock_inode(struct writeback_control *wbc,735 struct inode *inode)736{737 if (!inode_cgwb_enabled(inode)) {738 spin_unlock(&inode->i_lock);739 return;740 }741 742 wbc->wb = inode_to_wb(inode);743 wbc->inode = inode;744 745 wbc->wb_id = wbc->wb->memcg_css->id;746 wbc->wb_lcand_id = inode->i_wb_frn_winner;747 wbc->wb_tcand_id = 0;748 wbc->wb_bytes = 0;749 wbc->wb_lcand_bytes = 0;750 wbc->wb_tcand_bytes = 0;751 752 wb_get(wbc->wb);753 spin_unlock(&inode->i_lock);754 755 /*756 * A dying wb indicates that either the blkcg associated with the757 * memcg changed or the associated memcg is dying. In the first758 * case, a replacement wb should already be available and we should759 * refresh the wb immediately. In the second case, trying to760 * refresh will keep failing.761 */762 if (unlikely(wb_dying(wbc->wb) && !css_is_dying(wbc->wb->memcg_css)))763 inode_switch_wbs(inode, wbc->wb_id);764}765EXPORT_SYMBOL_GPL(wbc_attach_and_unlock_inode);766 767/**768 * wbc_detach_inode - disassociate wbc from inode and perform foreign detection769 * @wbc: writeback_control of the just finished writeback770 *771 * To be called after a writeback attempt of an inode finishes and undoes772 * wbc_attach_and_unlock_inode(). Can be called under any context.773 *774 * As concurrent write sharing of an inode is expected to be very rare and775 * memcg only tracks page ownership on first-use basis severely confining776 * the usefulness of such sharing, cgroup writeback tracks ownership777 * per-inode. While the support for concurrent write sharing of an inode778 * is deemed unnecessary, an inode being written to by different cgroups at779 * different points in time is a lot more common, and, more importantly,780 * charging only by first-use can too readily lead to grossly incorrect781 * behaviors (single foreign page can lead to gigabytes of writeback to be782 * incorrectly attributed).783 *784 * To resolve this issue, cgroup writeback detects the majority dirtier of785 * an inode and transfers the ownership to it. To avoid unnecessary786 * oscillation, the detection mechanism keeps track of history and gives787 * out the switch verdict only if the foreign usage pattern is stable over788 * a certain amount of time and/or writeback attempts.789 *790 * On each writeback attempt, @wbc tries to detect the majority writer791 * using Boyer-Moore majority vote algorithm. In addition to the byte792 * count from the majority voting, it also counts the bytes written for the793 * current wb and the last round's winner wb (max of last round's current794 * wb, the winner from two rounds ago, and the last round's majority795 * candidate). Keeping track of the historical winner helps the algorithm796 * to semi-reliably detect the most active writer even when it's not the797 * absolute majority.798 *799 * Once the winner of the round is determined, whether the winner is800 * foreign or not and how much IO time the round consumed is recorded in801 * inode->i_wb_frn_history. If the amount of recorded foreign IO time is802 * over a certain threshold, the switch verdict is given.803 */804void wbc_detach_inode(struct writeback_control *wbc)805{806 struct bdi_writeback *wb = wbc->wb;807 struct inode *inode = wbc->inode;808 unsigned long avg_time, max_bytes, max_time;809 u16 history;810 int max_id;811 812 if (!wb)813 return;814 815 history = inode->i_wb_frn_history;816 avg_time = inode->i_wb_frn_avg_time;817 818 /* pick the winner of this round */819 if (wbc->wb_bytes >= wbc->wb_lcand_bytes &&820 wbc->wb_bytes >= wbc->wb_tcand_bytes) {821 max_id = wbc->wb_id;822 max_bytes = wbc->wb_bytes;823 } else if (wbc->wb_lcand_bytes >= wbc->wb_tcand_bytes) {824 max_id = wbc->wb_lcand_id;825 max_bytes = wbc->wb_lcand_bytes;826 } else {827 max_id = wbc->wb_tcand_id;828 max_bytes = wbc->wb_tcand_bytes;829 }830 831 /*832 * Calculate the amount of IO time the winner consumed and fold it833 * into the running average kept per inode. If the consumed IO834 * time is lower than avag / WB_FRN_TIME_CUT_DIV, ignore it for835 * deciding whether to switch or not. This is to prevent one-off836 * small dirtiers from skewing the verdict.837 */838 max_time = DIV_ROUND_UP((max_bytes >> PAGE_SHIFT) << WB_FRN_TIME_SHIFT,839 wb->avg_write_bandwidth);840 if (avg_time)841 avg_time += (max_time >> WB_FRN_TIME_AVG_SHIFT) -842 (avg_time >> WB_FRN_TIME_AVG_SHIFT);843 else844 avg_time = max_time; /* immediate catch up on first run */845 846 if (max_time >= avg_time / WB_FRN_TIME_CUT_DIV) {847 int slots;848 849 /*850 * The switch verdict is reached if foreign wb's consume851 * more than a certain proportion of IO time in a852 * WB_FRN_TIME_PERIOD. This is loosely tracked by 16 slot853 * history mask where each bit represents one sixteenth of854 * the period. Determine the number of slots to shift into855 * history from @max_time.856 */857 slots = min(DIV_ROUND_UP(max_time, WB_FRN_HIST_UNIT),858 (unsigned long)WB_FRN_HIST_MAX_SLOTS);859 history <<= slots;860 if (wbc->wb_id != max_id)861 history |= (1U << slots) - 1;862 863 if (history)864 trace_inode_foreign_history(inode, wbc, history);865 866 /*867 * Switch if the current wb isn't the consistent winner.868 * If there are multiple closely competing dirtiers, the869 * inode may switch across them repeatedly over time, which870 * is okay. The main goal is avoiding keeping an inode on871 * the wrong wb for an extended period of time.872 */873 if (hweight16(history) > WB_FRN_HIST_THR_SLOTS)874 inode_switch_wbs(inode, max_id);875 }876 877 /*878 * Multiple instances of this function may race to update the879 * following fields but we don't mind occassional inaccuracies.880 */881 inode->i_wb_frn_winner = max_id;882 inode->i_wb_frn_avg_time = min(avg_time, (unsigned long)U16_MAX);883 inode->i_wb_frn_history = history;884 885 wb_put(wbc->wb);886 wbc->wb = NULL;887}888EXPORT_SYMBOL_GPL(wbc_detach_inode);889 890/**891 * wbc_account_cgroup_owner - account writeback to update inode cgroup ownership892 * @wbc: writeback_control of the writeback in progress893 * @page: page being written out894 * @bytes: number of bytes being written out895 *896 * @bytes from @page are about to written out during the writeback897 * controlled by @wbc. Keep the book for foreign inode detection. See898 * wbc_detach_inode().899 */900void wbc_account_cgroup_owner(struct writeback_control *wbc, struct page *page,901 size_t bytes)902{903 struct folio *folio;904 struct cgroup_subsys_state *css;905 int id;906 907 /*908 * pageout() path doesn't attach @wbc to the inode being written909 * out. This is intentional as we don't want the function to block910 * behind a slow cgroup. Ultimately, we want pageout() to kick off911 * regular writeback instead of writing things out itself.912 */913 if (!wbc->wb || wbc->no_cgroup_owner)914 return;915 916 folio = page_folio(page);917 css = mem_cgroup_css_from_folio(folio);918 /* dead cgroups shouldn't contribute to inode ownership arbitration */919 if (!(css->flags & CSS_ONLINE))920 return;921 922 id = css->id;923 924 if (id == wbc->wb_id) {925 wbc->wb_bytes += bytes;926 return;927 }928 929 if (id == wbc->wb_lcand_id)930 wbc->wb_lcand_bytes += bytes;931 932 /* Boyer-Moore majority vote algorithm */933 if (!wbc->wb_tcand_bytes)934 wbc->wb_tcand_id = id;935 if (id == wbc->wb_tcand_id)936 wbc->wb_tcand_bytes += bytes;937 else938 wbc->wb_tcand_bytes -= min(bytes, wbc->wb_tcand_bytes);939}940EXPORT_SYMBOL_GPL(wbc_account_cgroup_owner);941 942/**943 * wb_split_bdi_pages - split nr_pages to write according to bandwidth944 * @wb: target bdi_writeback to split @nr_pages to945 * @nr_pages: number of pages to write for the whole bdi946 *947 * Split @wb's portion of @nr_pages according to @wb's write bandwidth in948 * relation to the total write bandwidth of all wb's w/ dirty inodes on949 * @wb->bdi.950 */951static long wb_split_bdi_pages(struct bdi_writeback *wb, long nr_pages)952{953 unsigned long this_bw = wb->avg_write_bandwidth;954 unsigned long tot_bw = atomic_long_read(&wb->bdi->tot_write_bandwidth);955 956 if (nr_pages == LONG_MAX)957 return LONG_MAX;958 959 /*960 * This may be called on clean wb's and proportional distribution961 * may not make sense, just use the original @nr_pages in those962 * cases. In general, we wanna err on the side of writing more.963 */964 if (!tot_bw || this_bw >= tot_bw)965 return nr_pages;966 else967 return DIV_ROUND_UP_ULL((u64)nr_pages * this_bw, tot_bw);968}969 970/**971 * bdi_split_work_to_wbs - split a wb_writeback_work to all wb's of a bdi972 * @bdi: target backing_dev_info973 * @base_work: wb_writeback_work to issue974 * @skip_if_busy: skip wb's which already have writeback in progress975 *976 * Split and issue @base_work to all wb's (bdi_writeback's) of @bdi which977 * have dirty inodes. If @base_work->nr_page isn't %LONG_MAX, it's978 * distributed to the busy wbs according to each wb's proportion in the979 * total active write bandwidth of @bdi.980 */981static HWJS_SUSPENDS void bdi_split_work_to_wbs(struct backing_dev_info *bdi,982 struct wb_writeback_work *base_work,983 bool skip_if_busy)984{985 struct bdi_writeback *last_wb = NULL;986 struct bdi_writeback *wb = list_entry(&bdi->wb_list,987 struct bdi_writeback, bdi_node);988 989 might_sleep();990restart:991 rcu_read_lock();992 list_for_each_entry_continue_rcu(wb, &bdi->wb_list, bdi_node) {993 DEFINE_WB_COMPLETION(fallback_work_done, bdi);994 struct wb_writeback_work fallback_work;995 struct wb_writeback_work *work;996 long nr_pages;997 998 if (last_wb) {999 wb_put(last_wb);1000 last_wb = NULL;1001 }1002 1003 /* SYNC_ALL writes out I_DIRTY_TIME too */1004 if (!wb_has_dirty_io(wb) &&1005 (base_work->sync_mode == WB_SYNC_NONE ||1006 list_empty(&wb->b_dirty_time)))1007 continue;1008 if (skip_if_busy && writeback_in_progress(wb))1009 continue;1010 1011 nr_pages = wb_split_bdi_pages(wb, base_work->nr_pages);1012 1013 work = kmalloc(sizeof(*work), GFP_ATOMIC);1014 if (work) {1015 *work = *base_work;1016 work->nr_pages = nr_pages;1017 work->auto_free = 1;1018 wb_queue_work(wb, work);1019 continue;1020 }1021 1022 /*1023 * If wb_tryget fails, the wb has been shutdown, skip it.1024 *1025 * Pin @wb so that it stays on @bdi->wb_list. This allows1026 * continuing iteration from @wb after dropping and1027 * regrabbing rcu read lock.1028 */1029 if (!wb_tryget(wb))1030 continue;1031 1032 /* alloc failed, execute synchronously using on-stack fallback */1033 work = &fallback_work;1034 *work = *base_work;1035 work->nr_pages = nr_pages;1036 work->auto_free = 0;1037 work->done = &fallback_work_done;1038 1039 wb_queue_work(wb, work);1040 last_wb = wb;1041 1042 rcu_read_unlock();1043 wb_wait_for_completion(&fallback_work_done);1044 goto restart;1045 }1046 rcu_read_unlock();1047 1048 if (last_wb)1049 wb_put(last_wb);1050}1051 1052/**1053 * cgroup_writeback_by_id - initiate cgroup writeback from bdi and memcg IDs1054 * @bdi_id: target bdi id1055 * @memcg_id: target memcg css id1056 * @reason: reason why some writeback work initiated1057 * @done: target wb_completion1058 *1059 * Initiate flush of the bdi_writeback identified by @bdi_id and @memcg_id1060 * with the specified parameters.1061 */1062int cgroup_writeback_by_id(u64 bdi_id, int memcg_id,1063 enum wb_reason reason, struct wb_completion *done)1064{1065 struct backing_dev_info *bdi;1066 struct cgroup_subsys_state *memcg_css;1067 struct bdi_writeback *wb;1068 struct wb_writeback_work *work;1069 unsigned long dirty;1070 int ret;1071 1072 /* lookup bdi and memcg */1073 bdi = bdi_get_by_id(bdi_id);1074 if (!bdi)1075 return -ENOENT;1076 1077 rcu_read_lock();1078 memcg_css = css_from_id(memcg_id, &memory_cgrp_subsys);1079 if (memcg_css && !css_tryget(memcg_css))1080 memcg_css = NULL;1081 rcu_read_unlock();1082 if (!memcg_css) {1083 ret = -ENOENT;1084 goto out_bdi_put;1085 }1086 1087 /*1088 * And find the associated wb. If the wb isn't there already1089 * there's nothing to flush, don't create one.1090 */1091 wb = wb_get_lookup(bdi, memcg_css);1092 if (!wb) {1093 ret = -ENOENT;1094 goto out_css_put;1095 }1096 1097 /*1098 * The caller is attempting to write out most of1099 * the currently dirty pages. Let's take the current dirty page1100 * count and inflate it by 25% which should be large enough to1101 * flush out most dirty pages while avoiding getting livelocked by1102 * concurrent dirtiers.1103 *1104 * BTW the memcg stats are flushed periodically and this is best-effort1105 * estimation, so some potential error is ok.1106 */1107 dirty = memcg_page_state(mem_cgroup_from_css(memcg_css), NR_FILE_DIRTY);1108 dirty = dirty * 10 / 8;1109 1110 /* issue the writeback work */1111 work = kzalloc(sizeof(*work), GFP_NOWAIT | __GFP_NOWARN);1112 if (work) {1113 work->nr_pages = dirty;1114 work->sync_mode = WB_SYNC_NONE;1115 work->range_cyclic = 1;1116 work->reason = reason;1117 work->done = done;1118 work->auto_free = 1;1119 wb_queue_work(wb, work);1120 ret = 0;1121 } else {1122 ret = -ENOMEM;1123 }1124 1125 wb_put(wb);1126out_css_put:1127 css_put(memcg_css);1128out_bdi_put:1129 bdi_put(bdi);1130 return ret;1131}1132 1133/**1134 * cgroup_writeback_umount - flush inode wb switches for umount1135 * @sb: target super_block1136 *1137 * This function is called when a super_block is about to be destroyed and1138 * flushes in-flight inode wb switches. An inode wb switch goes through1139 * RCU and then workqueue, so the two need to be flushed in order to ensure1140 * that all previously scheduled switches are finished. As wb switches are1141 * rare occurrences and synchronize_rcu() can take a while, perform1142 * flushing iff wb switches are in flight.1143 */1144void cgroup_writeback_umount(struct super_block *sb)1145{1146 1147 if (!(sb->s_bdi->capabilities & BDI_CAP_WRITEBACK))1148 return;1149 1150 /*1151 * SB_ACTIVE should be reliably cleared before checking1152 * isw_nr_in_flight, see generic_shutdown_super().1153 */1154 smp_mb();1155 1156 if (atomic_read(&isw_nr_in_flight)) {1157 /*1158 * Use rcu_barrier() to wait for all pending callbacks to1159 * ensure that all in-flight wb switches are in the workqueue.1160 */1161 rcu_barrier();1162 flush_workqueue(isw_wq);1163 }1164}1165 1166static int __init cgroup_writeback_init(void)1167{1168 isw_wq = alloc_workqueue("inode_switch_wbs", 0, 0);1169 if (!isw_wq)1170 return -ENOMEM;1171 return 0;1172}1173fs_initcall(cgroup_writeback_init);1174 1175#else /* CONFIG_CGROUP_WRITEBACK */1176 1177static void bdi_down_write_wb_switch_rwsem(struct backing_dev_info *bdi) { }1178static void bdi_up_write_wb_switch_rwsem(struct backing_dev_info *bdi) { }1179 1180static void inode_cgwb_move_to_attached(struct inode *inode,1181 struct bdi_writeback *wb)1182{1183 assert_spin_locked(&wb->list_lock);1184 assert_spin_locked(&inode->i_lock);1185 WARN_ON_ONCE(inode->i_state & I_FREEING);1186 1187 inode->i_state &= ~I_SYNC_QUEUED;1188 list_del_init(&inode->i_io_list);1189 wb_io_lists_depopulated(wb);1190}1191 1192static struct bdi_writeback *1193locked_inode_to_wb_and_lock_list(struct inode *inode)1194 __releases(&inode->i_lock)1195 __acquires(&wb->list_lock)1196{1197 struct bdi_writeback *wb = inode_to_wb(inode);1198 1199 spin_unlock(&inode->i_lock);1200 spin_lock(&wb->list_lock);1201 return wb;1202}1203 1204static struct bdi_writeback *inode_to_wb_and_lock_list(struct inode *inode)1205 __acquires(&wb->list_lock)1206{1207 struct bdi_writeback *wb = inode_to_wb(inode);1208 1209 spin_lock(&wb->list_lock);1210 return wb;1211}1212 1213static long wb_split_bdi_pages(struct bdi_writeback *wb, long nr_pages)1214{1215 return nr_pages;1216}1217 1218static HWJS_SUSPENDS void bdi_split_work_to_wbs(struct backing_dev_info *bdi,1219 struct wb_writeback_work *base_work,1220 bool skip_if_busy)1221{1222 might_sleep();1223 1224 if (!skip_if_busy || !writeback_in_progress(&bdi->wb)) {1225 base_work->auto_free = 0;1226 wb_queue_work(&bdi->wb, base_work);1227 }1228}1229 1230#endif /* CONFIG_CGROUP_WRITEBACK */1231 1232/*1233 * Add in the number of potentially dirty inodes, because each inode1234 * write can dirty pagecache in the underlying blockdev.1235 */1236static unsigned long get_nr_dirty_pages(void)1237{1238 return global_node_page_state(NR_FILE_DIRTY) +1239 get_nr_dirty_inodes();1240}1241 1242static HWJS_SUSPENDS void wb_start_writeback(struct bdi_writeback *wb, enum wb_reason reason)1243{1244 if (!wb_has_dirty_io(wb))1245 return;1246 1247 /*1248 * All callers of this function want to start writeback of all1249 * dirty pages. Places like vmscan can call this at a very1250 * high frequency, causing pointless allocations of tons of1251 * work items and keeping the flusher threads busy retrieving1252 * that work. Ensure that we only allow one of them pending and1253 * inflight at the time.1254 */1255 if (test_bit(WB_start_all, &wb->state) ||1256 test_and_set_bit(WB_start_all, &wb->state))1257 return;1258 1259 wb->start_all_reason = reason;1260 wb_wakeup(wb);1261}1262 1263/**1264 * wb_start_background_writeback - start background writeback1265 * @wb: bdi_writback to write from1266 *1267 * Description:1268 * This makes sure WB_SYNC_NONE background writeback happens. When1269 * this function returns, it is only guaranteed that for given wb1270 * some IO is happening if we are over background dirty threshold.1271 * Caller need not hold sb s_umount semaphore.1272 */1273void wb_start_background_writeback(struct bdi_writeback *wb)1274{1275 /*1276 * We just wake up the flusher thread. It will perform background1277 * writeback as soon as there is no other work to do.1278 */1279 trace_writeback_wake_background(wb);1280 wb_wakeup(wb);1281}1282 1283/*1284 * Remove the inode from the writeback list it is on.1285 */1286void inode_io_list_del(struct inode *inode)1287{1288 struct bdi_writeback *wb;1289 1290 wb = inode_to_wb_and_lock_list(inode);1291 spin_lock(&inode->i_lock);1292 1293 inode->i_state &= ~I_SYNC_QUEUED;1294 list_del_init(&inode->i_io_list);1295 wb_io_lists_depopulated(wb);1296 1297 spin_unlock(&inode->i_lock);1298 spin_unlock(&wb->list_lock);1299}1300EXPORT_SYMBOL(inode_io_list_del);1301 1302/*1303 * mark an inode as under writeback on the sb1304 */1305void sb_mark_inode_writeback(struct inode *inode)1306{1307 struct super_block *sb = inode->i_sb;1308 unsigned long flags;1309 1310 if (list_empty(&inode->i_wb_list)) {1311 spin_lock_irqsave(&sb->s_inode_wblist_lock, flags);1312 if (list_empty(&inode->i_wb_list)) {1313 list_add_tail(&inode->i_wb_list, &sb->s_inodes_wb);1314 trace_sb_mark_inode_writeback(inode);1315 }1316 spin_unlock_irqrestore(&sb->s_inode_wblist_lock, flags);1317 }1318}1319 1320/*1321 * clear an inode as under writeback on the sb1322 */1323void sb_clear_inode_writeback(struct inode *inode)1324{1325 struct super_block *sb = inode->i_sb;1326 unsigned long flags;1327 1328 if (!list_empty(&inode->i_wb_list)) {1329 spin_lock_irqsave(&sb->s_inode_wblist_lock, flags);1330 if (!list_empty(&inode->i_wb_list)) {1331 list_del_init(&inode->i_wb_list);1332 trace_sb_clear_inode_writeback(inode);1333 }1334 spin_unlock_irqrestore(&sb->s_inode_wblist_lock, flags);1335 }1336}1337 1338/*1339 * Redirty an inode: set its when-it-was dirtied timestamp and move it to the1340 * furthest end of its superblock's dirty-inode list.1341 *1342 * Before stamping the inode's ->dirtied_when, we check to see whether it is1343 * already the most-recently-dirtied inode on the b_dirty list. If that is1344 * the case then the inode must have been redirtied while it was being written1345 * out and we don't reset its dirtied_when.1346 */1347static void redirty_tail_locked(struct inode *inode, struct bdi_writeback *wb)1348{1349 assert_spin_locked(&inode->i_lock);1350 1351 inode->i_state &= ~I_SYNC_QUEUED;1352 /*1353 * When the inode is being freed just don't bother with dirty list1354 * tracking. Flush worker will ignore this inode anyway and it will1355 * trigger assertions in inode_io_list_move_locked().1356 */1357 if (inode->i_state & I_FREEING) {1358 list_del_init(&inode->i_io_list);1359 wb_io_lists_depopulated(wb);1360 return;1361 }1362 if (!list_empty(&wb->b_dirty)) {1363 struct inode *tail;1364 1365 tail = wb_inode(wb->b_dirty.next);1366 if (time_before(inode->dirtied_when, tail->dirtied_when))1367 inode->dirtied_when = jiffies;1368 }1369 inode_io_list_move_locked(inode, wb, &wb->b_dirty);1370}1371 1372static void redirty_tail(struct inode *inode, struct bdi_writeback *wb)1373{1374 spin_lock(&inode->i_lock);1375 redirty_tail_locked(inode, wb);1376 spin_unlock(&inode->i_lock);1377}1378 1379/*1380 * requeue inode for re-scanning after bdi->b_io list is exhausted.1381 */1382static void requeue_io(struct inode *inode, struct bdi_writeback *wb)1383{1384 inode_io_list_move_locked(inode, wb, &wb->b_more_io);1385}1386 1387static HWJS_SUSPENDS void inode_sync_complete(struct inode *inode)1388{1389 assert_spin_locked(&inode->i_lock);1390 1391 inode->i_state &= ~I_SYNC;1392 /* If inode is clean an unused, put it into LRU now... */1393 inode_add_lru(inode);1394 /* Called with inode->i_lock which ensures memory ordering. */1395 inode_wake_up_bit(inode, __I_SYNC);1396}1397 1398static bool inode_dirtied_after(struct inode *inode, unsigned long t)1399{1400 bool ret = time_after(inode->dirtied_when, t);1401#ifndef CONFIG_64BIT1402 /*1403 * For inodes being constantly redirtied, dirtied_when can get stuck.1404 * It _appears_ to be in the future, but is actually in distant past.1405 * This test is necessary to prevent such wrapped-around relative times1406 * from permanently stopping the whole bdi writeback.1407 */1408 ret = ret && time_before_eq(inode->dirtied_when, jiffies);1409#endif1410 return ret;1411}1412 1413/*1414 * Move expired (dirtied before dirtied_before) dirty inodes from1415 * @delaying_queue to @dispatch_queue.1416 */1417static int move_expired_inodes(struct list_head *delaying_queue,1418 struct list_head *dispatch_queue,1419 unsigned long dirtied_before)1420{1421 LIST_HEAD(tmp);1422 struct list_head *pos, *node;1423 struct super_block *sb = NULL;1424 struct inode *inode;1425 int do_sb_sort = 0;1426 int moved = 0;1427 1428 while (!list_empty(delaying_queue)) {1429 inode = wb_inode(delaying_queue->prev);1430 if (inode_dirtied_after(inode, dirtied_before))1431 break;1432 spin_lock(&inode->i_lock);1433 list_move(&inode->i_io_list, &tmp);1434 moved++;1435 inode->i_state |= I_SYNC_QUEUED;1436 spin_unlock(&inode->i_lock);1437 if (sb_is_blkdev_sb(inode->i_sb))1438 continue;1439 if (sb && sb != inode->i_sb)1440 do_sb_sort = 1;1441 sb = inode->i_sb;1442 }1443 1444 /* just one sb in list, splice to dispatch_queue and we're done */1445 if (!do_sb_sort) {1446 list_splice(&tmp, dispatch_queue);1447 goto out;1448 }1449 1450 /*1451 * Although inode's i_io_list is moved from 'tmp' to 'dispatch_queue',1452 * we don't take inode->i_lock here because it is just a pointless overhead.1453 * Inode is already marked as I_SYNC_QUEUED so writeback list handling is1454 * fully under our control.1455 */1456 while (!list_empty(&tmp)) {1457 sb = wb_inode(tmp.prev)->i_sb;1458 list_for_each_prev_safe(pos, node, &tmp) {1459 inode = wb_inode(pos);1460 if (inode->i_sb == sb)1461 list_move(&inode->i_io_list, dispatch_queue);1462 }1463 }1464out:1465 return moved;1466}1467 1468/*1469 * Queue all expired dirty inodes for io, eldest first.1470 * Before1471 * newly dirtied b_dirty b_io b_more_io1472 * =============> gf edc BA1473 * After1474 * newly dirtied b_dirty b_io b_more_io1475 * =============> g fBAedc1476 * |1477 * +--> dequeue for IO1478 */1479static void queue_io(struct bdi_writeback *wb, struct wb_writeback_work *work,1480 unsigned long dirtied_before)1481{1482 int moved;1483 unsigned long time_expire_jif = dirtied_before;1484 1485 assert_spin_locked(&wb->list_lock);1486 list_splice_init(&wb->b_more_io, &wb->b_io);1487 moved = move_expired_inodes(&wb->b_dirty, &wb->b_io, dirtied_before);1488 if (!work->for_sync)1489 time_expire_jif = jiffies - dirtytime_expire_interval * HZ;1490 moved += move_expired_inodes(&wb->b_dirty_time, &wb->b_io,1491 time_expire_jif);1492 if (moved)1493 wb_io_lists_populated(wb);1494 trace_writeback_queue_io(wb, work, dirtied_before, moved);1495}1496 1497static HWJS_SUSPENDS int write_inode(struct inode *inode, struct writeback_control *wbc)1498{1499 int ret;1500 1501 if (inode->i_sb->s_op->write_inode && !is_bad_inode(inode)) {1502 trace_writeback_write_inode_start(inode, wbc);1503 ret = inode->i_sb->s_op->write_inode(inode, wbc);1504 trace_writeback_write_inode(inode, wbc);1505 return ret;1506 }1507 return 0;1508}1509 1510/*1511 * Wait for writeback on an inode to complete. Called with i_lock held.1512 * Caller must make sure inode cannot go away when we drop i_lock.1513 */1514void inode_wait_for_writeback(struct inode *inode)1515{1516 struct wait_bit_queue_entry wqe;1517 struct wait_queue_head *wq_head;1518 1519 assert_spin_locked(&inode->i_lock);1520 1521 if (!(inode->i_state & I_SYNC))1522 return;1523 1524 wq_head = inode_bit_waitqueue(&wqe, inode, __I_SYNC);1525 for (;;) {1526 prepare_to_wait_event(wq_head, &wqe.wq_entry, TASK_UNINTERRUPTIBLE);1527 /* Checking I_SYNC with inode->i_lock guarantees memory ordering. */1528 if (!(inode->i_state & I_SYNC))1529 break;1530 spin_unlock(&inode->i_lock);1531 schedule();1532 spin_lock(&inode->i_lock);1533 }1534 finish_wait(wq_head, &wqe.wq_entry);1535}1536 1537/*1538 * Sleep until I_SYNC is cleared. This function must be called with i_lock1539 * held and drops it. It is aimed for callers not holding any inode reference1540 * so once i_lock is dropped, inode can go away.1541 */1542static HWJS_SUSPENDS void inode_sleep_on_writeback(struct inode *inode)1543 __releases(inode->i_lock)1544{1545 struct wait_bit_queue_entry wqe;1546 struct wait_queue_head *wq_head;1547 bool sleep;1548 1549 assert_spin_locked(&inode->i_lock);1550 1551 wq_head = inode_bit_waitqueue(&wqe, inode, __I_SYNC);1552 prepare_to_wait_event(wq_head, &wqe.wq_entry, TASK_UNINTERRUPTIBLE);1553 /* Checking I_SYNC with inode->i_lock guarantees memory ordering. */1554 sleep = !!(inode->i_state & I_SYNC);1555 spin_unlock(&inode->i_lock);1556 if (sleep)1557 schedule();1558 finish_wait(wq_head, &wqe.wq_entry);1559}1560 1561/*1562 * Find proper writeback list for the inode depending on its current state and1563 * possibly also change of its state while we were doing writeback. Here we1564 * handle things such as livelock prevention or fairness of writeback among1565 * inodes. This function can be called only by flusher thread - noone else1566 * processes all inodes in writeback lists and requeueing inodes behind flusher1567 * thread's back can have unexpected consequences.1568 */1569static void requeue_inode(struct inode *inode, struct bdi_writeback *wb,1570 struct writeback_control *wbc,1571 unsigned long dirtied_before)1572{1573 if (inode->i_state & I_FREEING)1574 return;1575 1576 /*1577 * Sync livelock prevention. Each inode is tagged and synced in one1578 * shot. If still dirty, it will be redirty_tail()'ed below. Update1579 * the dirty time to prevent enqueue and sync it again.1580 */1581 if ((inode->i_state & I_DIRTY) &&1582 (wbc->sync_mode == WB_SYNC_ALL || wbc->tagged_writepages))1583 inode->dirtied_when = jiffies;1584 1585 if (wbc->pages_skipped) {1586 /*1587 * Writeback is not making progress due to locked buffers.1588 * Skip this inode for now. Although having skipped pages1589 * is odd for clean inodes, it can happen for some1590 * filesystems so handle that gracefully.1591 */1592 if (inode->i_state & I_DIRTY_ALL)1593 redirty_tail_locked(inode, wb);1594 else1595 inode_cgwb_move_to_attached(inode, wb);1596 return;1597 }1598 1599 if (mapping_tagged(inode->i_mapping, PAGECACHE_TAG_DIRTY)) {1600 /*1601 * We didn't write back all the pages. nfs_writepages()1602 * sometimes bales out without doing anything.1603 */1604 if (wbc->nr_to_write <= 0 &&1605 !inode_dirtied_after(inode, dirtied_before)) {1606 /* Slice used up. Queue for next turn. */1607 requeue_io(inode, wb);1608 } else {1609 /*1610 * Writeback blocked by something other than1611 * congestion. Delay the inode for some time to1612 * avoid spinning on the CPU (100% iowait)1613 * retrying writeback of the dirty page/inode1614 * that cannot be performed immediately.1615 */1616 redirty_tail_locked(inode, wb);1617 }1618 } else if (inode->i_state & I_DIRTY) {1619 /*1620 * Filesystems can dirty the inode during writeback operations,1621 * such as delayed allocation during submission or metadata1622 * updates after data IO completion.1623 */1624 redirty_tail_locked(inode, wb);1625 } else if (inode->i_state & I_DIRTY_TIME) {1626 inode->dirtied_when = jiffies;1627 inode_io_list_move_locked(inode, wb, &wb->b_dirty_time);1628 inode->i_state &= ~I_SYNC_QUEUED;1629 } else {1630 /* The inode is clean. Remove from writeback lists. */1631 inode_cgwb_move_to_attached(inode, wb);1632 }1633}1634 1635/*1636 * Write out an inode and its dirty pages (or some of its dirty pages, depending1637 * on @wbc->nr_to_write), and clear the relevant dirty flags from i_state.1638 *1639 * This doesn't remove the inode from the writeback list it is on, except1640 * potentially to move it from b_dirty_time to b_dirty due to timestamp1641 * expiration. The caller is otherwise responsible for writeback list handling.1642 *1643 * The caller is also responsible for setting the I_SYNC flag beforehand and1644 * calling inode_sync_complete() to clear it afterwards.1645 */1646static HWJS_SUSPENDS int1647__writeback_single_inode(struct inode *inode, struct writeback_control *wbc)1648{1649 struct address_space *mapping = inode->i_mapping;1650 long nr_to_write = wbc->nr_to_write;1651 unsigned dirty;1652 int ret;1653 1654 WARN_ON(!(inode->i_state & I_SYNC));1655 1656 trace_writeback_single_inode_start(inode, wbc, nr_to_write);1657 1658 ret = do_writepages(mapping, wbc);1659 1660 /*1661 * Make sure to wait on the data before writing out the metadata.1662 * This is important for filesystems that modify metadata on data1663 * I/O completion. We don't do it for sync(2) writeback because it has a1664 * separate, external IO completion path and ->sync_fs for guaranteeing1665 * inode metadata is written back correctly.1666 */1667 if (wbc->sync_mode == WB_SYNC_ALL && !wbc->for_sync) {1668 int err = filemap_fdatawait(mapping);1669 if (ret == 0)1670 ret = err;1671 }1672 1673 /*1674 * If the inode has dirty timestamps and we need to write them, call1675 * mark_inode_dirty_sync() to notify the filesystem about it and to1676 * change I_DIRTY_TIME into I_DIRTY_SYNC.1677 */1678 if ((inode->i_state & I_DIRTY_TIME) &&1679 (wbc->sync_mode == WB_SYNC_ALL ||1680 time_after(jiffies, inode->dirtied_time_when +1681 dirtytime_expire_interval * HZ))) {1682 trace_writeback_lazytime(inode);1683 mark_inode_dirty_sync(inode);1684 }1685 1686 /*1687 * Get and clear the dirty flags from i_state. This needs to be done1688 * after calling writepages because some filesystems may redirty the1689 * inode during writepages due to delalloc. It also needs to be done1690 * after handling timestamp expiration, as that may dirty the inode too.1691 */1692 spin_lock(&inode->i_lock);1693 dirty = inode->i_state & I_DIRTY;1694 inode->i_state &= ~dirty;1695 1696 /*1697 * Paired with smp_mb() in __mark_inode_dirty(). This allows1698 * __mark_inode_dirty() to test i_state without grabbing i_lock -1699 * either they see the I_DIRTY bits cleared or we see the dirtied1700 * inode.1701 *1702 * I_DIRTY_PAGES is always cleared together above even if @mapping1703 * still has dirty pages. The flag is reinstated after smp_mb() if1704 * necessary. This guarantees that either __mark_inode_dirty()1705 * sees clear I_DIRTY_PAGES or we see PAGECACHE_TAG_DIRTY.1706 */1707 smp_mb();1708 1709 if (mapping_tagged(mapping, PAGECACHE_TAG_DIRTY))1710 inode->i_state |= I_DIRTY_PAGES;1711 else if (unlikely(inode->i_state & I_PINNING_NETFS_WB)) {1712 if (!(inode->i_state & I_DIRTY_PAGES)) {1713 inode->i_state &= ~I_PINNING_NETFS_WB;1714 wbc->unpinned_netfs_wb = true;1715 dirty |= I_PINNING_NETFS_WB; /* Cause write_inode */1716 }1717 }1718 1719 spin_unlock(&inode->i_lock);1720 1721 /* Don't write the inode if only I_DIRTY_PAGES was set */1722 if (dirty & ~I_DIRTY_PAGES) {1723 int err = write_inode(inode, wbc);1724 if (ret == 0)1725 ret = err;1726 }1727 wbc->unpinned_netfs_wb = false;1728 trace_writeback_single_inode(inode, wbc, nr_to_write);1729 return ret;1730}1731 1732/*1733 * Write out an inode's dirty data and metadata on-demand, i.e. separately from1734 * the regular batched writeback done by the flusher threads in1735 * writeback_sb_inodes(). @wbc controls various aspects of the write, such as1736 * whether it is a data-integrity sync (%WB_SYNC_ALL) or not (%WB_SYNC_NONE).1737 *1738 * To prevent the inode from going away, either the caller must have a reference1739 * to the inode, or the inode must have I_WILL_FREE or I_FREEING set.1740 */1741static HWJS_SUSPENDS int writeback_single_inode(struct inode *inode,1742 struct writeback_control *wbc)1743{1744 struct bdi_writeback *wb;1745 int ret = 0;1746 1747 spin_lock(&inode->i_lock);1748 if (!atomic_read(&inode->i_count))1749 WARN_ON(!(inode->i_state & (I_WILL_FREE|I_FREEING)));1750 else1751 WARN_ON(inode->i_state & I_WILL_FREE);1752 1753 if (inode->i_state & I_SYNC) {1754 /*1755 * Writeback is already running on the inode. For WB_SYNC_NONE,1756 * that's enough and we can just return. For WB_SYNC_ALL, we1757 * must wait for the existing writeback to complete, then do1758 * writeback again if there's anything left.1759 */1760 if (wbc->sync_mode != WB_SYNC_ALL)1761 goto out;1762 inode_wait_for_writeback(inode);1763 }1764 WARN_ON(inode->i_state & I_SYNC);1765 /*1766 * If the inode is already fully clean, then there's nothing to do.1767 *1768 * For data-integrity syncs we also need to check whether any pages are1769 * still under writeback, e.g. due to prior WB_SYNC_NONE writeback. If1770 * there are any such pages, we'll need to wait for them.1771 */1772 if (!(inode->i_state & I_DIRTY_ALL) &&1773 (wbc->sync_mode != WB_SYNC_ALL ||1774 !mapping_tagged(inode->i_mapping, PAGECACHE_TAG_WRITEBACK)))1775 goto out;1776 inode->i_state |= I_SYNC;1777 wbc_attach_and_unlock_inode(wbc, inode);1778 1779 ret = __writeback_single_inode(inode, wbc);1780 1781 wbc_detach_inode(wbc);1782 1783 wb = inode_to_wb_and_lock_list(inode);1784 spin_lock(&inode->i_lock);1785 /*1786 * If the inode is freeing, its i_io_list shoudn't be updated1787 * as it can be finally deleted at this moment.1788 */1789 if (!(inode->i_state & I_FREEING)) {1790 /*1791 * If the inode is now fully clean, then it can be safely1792 * removed from its writeback list (if any). Otherwise the1793 * flusher threads are responsible for the writeback lists.1794 */1795 if (!(inode->i_state & I_DIRTY_ALL))1796 inode_cgwb_move_to_attached(inode, wb);1797 else if (!(inode->i_state & I_SYNC_QUEUED)) {1798 if ((inode->i_state & I_DIRTY))1799 redirty_tail_locked(inode, wb);1800 else if (inode->i_state & I_DIRTY_TIME) {1801 inode->dirtied_when = jiffies;1802 inode_io_list_move_locked(inode,1803 wb,1804 &wb->b_dirty_time);1805 }1806 }1807 }1808 1809 spin_unlock(&wb->list_lock);1810 inode_sync_complete(inode);1811out:1812 spin_unlock(&inode->i_lock);1813 return ret;1814}1815 1816static long writeback_chunk_size(struct bdi_writeback *wb,1817 struct wb_writeback_work *work)1818{1819 long pages;1820 1821 /*1822 * WB_SYNC_ALL mode does livelock avoidance by syncing dirty1823 * inodes/pages in one big loop. Setting wbc.nr_to_write=LONG_MAX1824 * here avoids calling into writeback_inodes_wb() more than once.1825 *1826 * The intended call sequence for WB_SYNC_ALL writeback is:1827 *1828 * wb_writeback()1829 * writeback_sb_inodes() <== called only once1830 * write_cache_pages() <== called once for each inode1831 * (quickly) tag currently dirty pages1832 * (maybe slowly) sync all tagged pages1833 */1834 if (work->sync_mode == WB_SYNC_ALL || work->tagged_writepages)1835 pages = LONG_MAX;1836 else {1837 pages = min(wb->avg_write_bandwidth / 2,1838 global_wb_domain.dirty_limit / DIRTY_SCOPE);1839 pages = min(pages, work->nr_pages);1840 pages = round_down(pages + MIN_WRITEBACK_PAGES,1841 MIN_WRITEBACK_PAGES);1842 }1843 1844 return pages;1845}1846 1847/*1848 * Write a portion of b_io inodes which belong to @sb.1849 *1850 * Return the number of pages and/or inodes written.1851 *1852 * NOTE! This is called with wb->list_lock held, and will1853 * unlock and relock that for each inode it ends up doing1854 * IO for.1855 */1856static HWJS_SUSPENDS long writeback_sb_inodes(struct super_block *sb,1857 struct bdi_writeback *wb,1858 struct wb_writeback_work *work)1859{1860 struct writeback_control wbc = {1861 .sync_mode = work->sync_mode,1862 .tagged_writepages = work->tagged_writepages,1863 .for_kupdate = work->for_kupdate,1864 .for_background = work->for_background,1865 .for_sync = work->for_sync,1866 .range_cyclic = work->range_cyclic,1867 .range_start = 0,1868 .range_end = LLONG_MAX,1869 };1870 unsigned long start_time = jiffies;1871 long write_chunk;1872 long total_wrote = 0; /* count both pages and inodes */1873 unsigned long dirtied_before = jiffies;1874 1875 if (work->for_kupdate)1876 dirtied_before = jiffies -1877 msecs_to_jiffies(dirty_expire_interval * 10);1878 1879 while (!list_empty(&wb->b_io)) {1880 struct inode *inode = wb_inode(wb->b_io.prev);1881 struct bdi_writeback *tmp_wb;1882 long wrote;1883 1884 if (inode->i_sb != sb) {1885 if (work->sb) {1886 /*1887 * We only want to write back data for this1888 * superblock, move all inodes not belonging1889 * to it back onto the dirty list.1890 */1891 redirty_tail(inode, wb);1892 continue;1893 }1894 1895 /*1896 * The inode belongs to a different superblock.1897 * Bounce back to the caller to unpin this and1898 * pin the next superblock.1899 */1900 break;1901 }1902 1903 /*1904 * Don't bother with new inodes or inodes being freed, first1905 * kind does not need periodic writeout yet, and for the latter1906 * kind writeout is handled by the freer.1907 */1908 spin_lock(&inode->i_lock);1909 if (inode->i_state & (I_NEW | I_FREEING | I_WILL_FREE)) {1910 redirty_tail_locked(inode, wb);1911 spin_unlock(&inode->i_lock);1912 continue;1913 }1914 if ((inode->i_state & I_SYNC) && wbc.sync_mode != WB_SYNC_ALL) {1915 /*1916 * If this inode is locked for writeback and we are not1917 * doing writeback-for-data-integrity, move it to1918 * b_more_io so that writeback can proceed with the1919 * other inodes on s_io.1920 *1921 * We'll have another go at writing back this inode1922 * when we completed a full scan of b_io.1923 */1924 requeue_io(inode, wb);1925 spin_unlock(&inode->i_lock);1926 trace_writeback_sb_inodes_requeue(inode);1927 continue;1928 }1929 spin_unlock(&wb->list_lock);1930 1931 /*1932 * We already requeued the inode if it had I_SYNC set and we1933 * are doing WB_SYNC_NONE writeback. So this catches only the1934 * WB_SYNC_ALL case.1935 */1936 if (inode->i_state & I_SYNC) {1937 /* Wait for I_SYNC. This function drops i_lock... */1938 inode_sleep_on_writeback(inode);1939 /* Inode may be gone, start again */1940 spin_lock(&wb->list_lock);1941 continue;1942 }1943 inode->i_state |= I_SYNC;1944 wbc_attach_and_unlock_inode(&wbc, inode);1945 1946 write_chunk = writeback_chunk_size(wb, work);1947 wbc.nr_to_write = write_chunk;1948 wbc.pages_skipped = 0;1949 1950 /*1951 * We use I_SYNC to pin the inode in memory. While it is set1952 * evict_inode() will wait so the inode cannot be freed.1953 */1954 __writeback_single_inode(inode, &wbc);1955 1956 wbc_detach_inode(&wbc);1957 work->nr_pages -= write_chunk - wbc.nr_to_write;1958 wrote = write_chunk - wbc.nr_to_write - wbc.pages_skipped;1959 wrote = wrote < 0 ? 0 : wrote;1960 total_wrote += wrote;1961 1962 if (need_resched()) {1963 /*1964 * We're trying to balance between building up a nice1965 * long list of IOs to improve our merge rate, and1966 * getting those IOs out quickly for anyone throttling1967 * in balance_dirty_pages(). cond_resched() doesn't1968 * unplug, so get our IOs out the door before we1969 * give up the CPU.1970 */1971 blk_flush_plug(current->plug, false);1972 cond_resched();1973 }1974 1975 /*1976 * Requeue @inode if still dirty. Be careful as @inode may1977 * have been switched to another wb in the meantime.1978 */1979 tmp_wb = inode_to_wb_and_lock_list(inode);1980 spin_lock(&inode->i_lock);1981 if (!(inode->i_state & I_DIRTY_ALL))1982 total_wrote++;1983 requeue_inode(inode, tmp_wb, &wbc, dirtied_before);1984 inode_sync_complete(inode);1985 spin_unlock(&inode->i_lock);1986 1987 if (unlikely(tmp_wb != wb)) {1988 spin_unlock(&tmp_wb->list_lock);1989 spin_lock(&wb->list_lock);1990 }1991 1992 /*1993 * bail out to wb_writeback() often enough to check1994 * background threshold and other termination conditions.1995 */1996 if (total_wrote) {1997 if (time_is_before_jiffies(start_time + HZ / 10UL))1998 break;1999 if (work->nr_pages <= 0)2000 break;2001 }2002 }2003 return total_wrote;2004}2005 2006static HWJS_SUSPENDS long __writeback_inodes_wb(struct bdi_writeback *wb,2007 struct wb_writeback_work *work)2008{2009 unsigned long start_time = jiffies;2010 long wrote = 0;2011 2012 while (!list_empty(&wb->b_io)) {2013 struct inode *inode = wb_inode(wb->b_io.prev);2014 struct super_block *sb = inode->i_sb;2015 2016 if (!super_trylock_shared(sb)) {2017 /*2018 * super_trylock_shared() may fail consistently due to2019 * s_umount being grabbed by someone else. Don't use2020 * requeue_io() to avoid busy retrying the inode/sb.2021 */2022 redirty_tail(inode, wb);2023 continue;2024 }2025 wrote += writeback_sb_inodes(sb, wb, work);2026 up_read(&sb->s_umount);2027 2028 /* refer to the same tests at the end of writeback_sb_inodes */2029 if (wrote) {2030 if (time_is_before_jiffies(start_time + HZ / 10UL))2031 break;2032 if (work->nr_pages <= 0)2033 break;2034 }2035 }2036 /* Leave any unwritten inodes on b_io */2037 return wrote;2038}2039 2040static HWJS_SUSPENDS long writeback_inodes_wb(struct bdi_writeback *wb, long nr_pages,2041 enum wb_reason reason)2042{2043 struct wb_writeback_work work = {2044 .nr_pages = nr_pages,2045 .sync_mode = WB_SYNC_NONE,2046 .range_cyclic = 1,2047 .reason = reason,2048 };2049 struct blk_plug plug;2050 2051 blk_start_plug(&plug);2052 spin_lock(&wb->list_lock);2053 if (list_empty(&wb->b_io))2054 queue_io(wb, &work, jiffies);2055 __writeback_inodes_wb(wb, &work);2056 spin_unlock(&wb->list_lock);2057 blk_finish_plug(&plug);2058 2059 return nr_pages - work.nr_pages;2060}2061 2062/*2063 * Explicit flushing or periodic writeback of "old" data.2064 *2065 * Define "old": the first time one of an inode's pages is dirtied, we mark the2066 * dirtying-time in the inode's address_space. So this periodic writeback code2067 * just walks the superblock inode list, writing back any inodes which are2068 * older than a specific point in time.2069 *2070 * Try to run once per dirty_writeback_interval. But if a writeback event2071 * takes longer than a dirty_writeback_interval interval, then leave a2072 * one-second gap.2073 *2074 * dirtied_before takes precedence over nr_to_write. So we'll only write back2075 * all dirty pages if they are all attached to "old" mappings.2076 */2077static HWJS_SUSPENDS long wb_writeback(struct bdi_writeback *wb,2078 struct wb_writeback_work *work)2079{2080 long nr_pages = work->nr_pages;2081 unsigned long dirtied_before = jiffies;2082 struct inode *inode;2083 long progress;2084 struct blk_plug plug;2085 bool queued = false;2086 2087 blk_start_plug(&plug);2088 for (;;) {2089 /*2090 * Stop writeback when nr_pages has been consumed2091 */2092 if (work->nr_pages <= 0)2093 break;2094 2095 /*2096 * Background writeout and kupdate-style writeback may2097 * run forever. Stop them if there is other work to do2098 * so that e.g. sync can proceed. They'll be restarted2099 * after the other works are all done.2100 */2101 if ((work->for_background || work->for_kupdate) &&2102 !list_empty(&wb->work_list))2103 break;2104 2105 /*2106 * For background writeout, stop when we are below the2107 * background dirty threshold2108 */2109 if (work->for_background && !wb_over_bg_thresh(wb))2110 break;2111 2112 2113 spin_lock(&wb->list_lock);2114 2115 trace_writeback_start(wb, work);2116 if (list_empty(&wb->b_io)) {2117 /*2118 * Kupdate and background works are special and we want2119 * to include all inodes that need writing. Livelock2120 * avoidance is handled by these works yielding to any2121 * other work so we are safe.2122 */2123 if (work->for_kupdate) {2124 dirtied_before = jiffies -2125 msecs_to_jiffies(dirty_expire_interval *2126 10);2127 } else if (work->for_background)2128 dirtied_before = jiffies;2129 2130 queue_io(wb, work, dirtied_before);2131 queued = true;2132 }2133 if (work->sb)2134 progress = writeback_sb_inodes(work->sb, wb, work);2135 else2136 progress = __writeback_inodes_wb(wb, work);2137 trace_writeback_written(wb, work);2138 2139 /*2140 * Did we write something? Try for more2141 *2142 * Dirty inodes are moved to b_io for writeback in batches.2143 * The completion of the current batch does not necessarily2144 * mean the overall work is done. So we keep looping as long2145 * as made some progress on cleaning pages or inodes.2146 */2147 if (progress || !queued) {2148 spin_unlock(&wb->list_lock);2149 continue;2150 }2151 2152 /*2153 * No more inodes for IO, bail2154 */2155 if (list_empty(&wb->b_more_io)) {2156 spin_unlock(&wb->list_lock);2157 break;2158 }2159 2160 /*2161 * Nothing written. Wait for some inode to2162 * become available for writeback. Otherwise2163 * we'll just busyloop.2164 */2165 trace_writeback_wait(wb, work);2166 inode = wb_inode(wb->b_more_io.prev);2167 spin_lock(&inode->i_lock);2168 spin_unlock(&wb->list_lock);2169 /* This function drops i_lock... */2170 inode_sleep_on_writeback(inode);2171 }2172 blk_finish_plug(&plug);2173 2174 return nr_pages - work->nr_pages;2175}2176 2177/*2178 * Return the next wb_writeback_work struct that hasn't been processed yet.2179 */2180static struct wb_writeback_work *get_next_work_item(struct bdi_writeback *wb)2181{2182 struct wb_writeback_work *work = NULL;2183 2184 spin_lock_irq(&wb->work_lock);2185 if (!list_empty(&wb->work_list)) {2186 work = list_entry(wb->work_list.next,2187 struct wb_writeback_work, list);2188 list_del_init(&work->list);2189 }2190 spin_unlock_irq(&wb->work_lock);2191 return work;2192}2193 2194static HWJS_SUSPENDS long wb_check_background_flush(struct bdi_writeback *wb)2195{2196 if (wb_over_bg_thresh(wb)) {2197 2198 struct wb_writeback_work work = {2199 .nr_pages = LONG_MAX,2200 .sync_mode = WB_SYNC_NONE,2201 .for_background = 1,2202 .range_cyclic = 1,2203 .reason = WB_REASON_BACKGROUND,2204 };2205 2206 return wb_writeback(wb, &work);2207 }2208 2209 return 0;2210}2211 2212static HWJS_SUSPENDS long wb_check_old_data_flush(struct bdi_writeback *wb)2213{2214 unsigned long expired;2215 long nr_pages;2216 2217 /*2218 * When set to zero, disable periodic writeback2219 */2220 if (!dirty_writeback_interval)2221 return 0;2222 2223 expired = wb->last_old_flush +2224 msecs_to_jiffies(dirty_writeback_interval * 10);2225 if (time_before(jiffies, expired))2226 return 0;2227 2228 wb->last_old_flush = jiffies;2229 nr_pages = get_nr_dirty_pages();2230 2231 if (nr_pages) {2232 struct wb_writeback_work work = {2233 .nr_pages = nr_pages,2234 .sync_mode = WB_SYNC_NONE,2235 .for_kupdate = 1,2236 .range_cyclic = 1,2237 .reason = WB_REASON_PERIODIC,2238 };2239 2240 return wb_writeback(wb, &work);2241 }2242 2243 return 0;2244}2245 2246static HWJS_SUSPENDS long wb_check_start_all(struct bdi_writeback *wb)2247{2248 long nr_pages;2249 2250 if (!test_bit(WB_start_all, &wb->state))2251 return 0;2252 2253 nr_pages = get_nr_dirty_pages();2254 if (nr_pages) {2255 struct wb_writeback_work work = {2256 .nr_pages = wb_split_bdi_pages(wb, nr_pages),2257 .sync_mode = WB_SYNC_NONE,2258 .range_cyclic = 1,2259 .reason = wb->start_all_reason,2260 };2261 2262 nr_pages = wb_writeback(wb, &work);2263 }2264 2265 clear_bit(WB_start_all, &wb->state);2266 return nr_pages;2267}2268 2269 2270/*2271 * Retrieve work items and do the writeback they describe2272 */2273static HWJS_SUSPENDS long wb_do_writeback(struct bdi_writeback *wb)2274{2275 struct wb_writeback_work *work;2276 long wrote = 0;2277 2278 set_bit(WB_writeback_running, &wb->state);2279 while ((work = get_next_work_item(wb)) != NULL) {2280 trace_writeback_exec(wb, work);2281 wrote += wb_writeback(wb, work);2282 finish_writeback_work(work);2283 }2284 2285 /*2286 * Check for a flush-everything request2287 */2288 wrote += wb_check_start_all(wb);2289 2290 /*2291 * Check for periodic writeback, kupdated() style2292 */2293 wrote += wb_check_old_data_flush(wb);2294 wrote += wb_check_background_flush(wb);2295 clear_bit(WB_writeback_running, &wb->state);2296 2297 return wrote;2298}2299 2300/*2301 * Handle writeback of dirty data for the device backed by this bdi. Also2302 * reschedules periodically and does kupdated style flushing.2303 */2304void wb_workfn(struct work_struct *work)2305{2306 struct bdi_writeback *wb = container_of(to_delayed_work(work),2307 struct bdi_writeback, dwork);2308 long pages_written;2309 2310 set_worker_desc("flush-%s", bdi_dev_name(wb->bdi));2311 2312 if (likely(!current_is_workqueue_rescuer() ||2313 !test_bit(WB_registered, &wb->state))) {2314 /*2315 * The normal path. Keep writing back @wb until its2316 * work_list is empty. Note that this path is also taken2317 * if @wb is shutting down even when we're running off the2318 * rescuer as work_list needs to be drained.2319 */2320 do {2321 pages_written = wb_do_writeback(wb);2322 trace_writeback_pages_written(pages_written);2323 } while (!list_empty(&wb->work_list));2324 } else {2325 /*2326 * bdi_wq can't get enough workers and we're running off2327 * the emergency worker. Don't hog it. Hopefully, 1024 is2328 * enough for efficient IO.2329 */2330 pages_written = writeback_inodes_wb(wb, 1024,2331 WB_REASON_FORKER_THREAD);2332 trace_writeback_pages_written(pages_written);2333 }2334 2335 if (!list_empty(&wb->work_list))2336 wb_wakeup(wb);2337 else if (wb_has_dirty_io(wb) && dirty_writeback_interval)2338 wb_wakeup_delayed(wb);2339}2340 2341/*2342 * Start writeback of all dirty pages on this bdi.2343 */2344static HWJS_SUSPENDS void __wakeup_flusher_threads_bdi(struct backing_dev_info *bdi,2345 enum wb_reason reason)2346{2347 struct bdi_writeback *wb;2348 2349 if (!bdi_has_dirty_io(bdi))2350 return;2351 2352 list_for_each_entry_rcu(wb, &bdi->wb_list, bdi_node)2353 wb_start_writeback(wb, reason);2354}2355 2356void wakeup_flusher_threads_bdi(struct backing_dev_info *bdi,2357 enum wb_reason reason)2358{2359 rcu_read_lock();2360 __wakeup_flusher_threads_bdi(bdi, reason);2361 rcu_read_unlock();2362}2363 2364/*2365 * Wakeup the flusher threads to start writeback of all currently dirty pages2366 */2367void wakeup_flusher_threads(enum wb_reason reason)2368{2369 struct backing_dev_info *bdi;2370 2371 /*2372 * If we are expecting writeback progress we must submit plugged IO.2373 */2374 blk_flush_plug(current->plug, true);2375 2376 rcu_read_lock();2377 list_for_each_entry_rcu(bdi, &bdi_list, bdi_list)2378 __wakeup_flusher_threads_bdi(bdi, reason);2379 rcu_read_unlock();2380}2381 2382/*2383 * Wake up bdi's periodically to make sure dirtytime inodes gets2384 * written back periodically. We deliberately do *not* check the2385 * b_dirtytime list in wb_has_dirty_io(), since this would cause the2386 * kernel to be constantly waking up once there are any dirtytime2387 * inodes on the system. So instead we define a separate delayed work2388 * function which gets called much more rarely. (By default, only2389 * once every 12 hours.)2390 *2391 * If there is any other write activity going on in the file system,2392 * this function won't be necessary. But if the only thing that has2393 * happened on the file system is a dirtytime inode caused by an atime2394 * update, we need this infrastructure below to make sure that inode2395 * eventually gets pushed out to disk.2396 */2397static HWJS_SUSPENDS void wakeup_dirtytime_writeback(struct work_struct *w);2398static DECLARE_DELAYED_WORK(dirtytime_work, wakeup_dirtytime_writeback);2399 2400static HWJS_SUSPENDS void wakeup_dirtytime_writeback(struct work_struct *w)2401{2402 struct backing_dev_info *bdi;2403 2404 rcu_read_lock();2405 list_for_each_entry_rcu(bdi, &bdi_list, bdi_list) {2406 struct bdi_writeback *wb;2407 2408 list_for_each_entry_rcu(wb, &bdi->wb_list, bdi_node)2409 if (!list_empty(&wb->b_dirty_time))2410 wb_wakeup(wb);2411 }2412 rcu_read_unlock();2413 schedule_delayed_work(&dirtytime_work, dirtytime_expire_interval * HZ);2414}2415 2416static HWJS_SUSPENDS int __init start_dirtytime_writeback(void)2417{2418 schedule_delayed_work(&dirtytime_work, dirtytime_expire_interval * HZ);2419 return 0;2420}2421__initcall(start_dirtytime_writeback);2422 2423int dirtytime_interval_handler(const struct ctl_table *table, int write,2424 void *buffer, size_t *lenp, loff_t *ppos)2425{2426 int ret;2427 2428 ret = proc_dointvec_minmax(table, write, buffer, lenp, ppos);2429 if (ret == 0 && write)2430 mod_delayed_work(system_wq, &dirtytime_work, 0);2431 return ret;2432}2433 2434/**2435 * __mark_inode_dirty - internal function to mark an inode dirty2436 *2437 * @inode: inode to mark2438 * @flags: what kind of dirty, e.g. I_DIRTY_SYNC. This can be a combination of2439 * multiple I_DIRTY_* flags, except that I_DIRTY_TIME can't be combined2440 * with I_DIRTY_PAGES.2441 *2442 * Mark an inode as dirty. We notify the filesystem, then update the inode's2443 * dirty flags. Then, if needed we add the inode to the appropriate dirty list.2444 *2445 * Most callers should use mark_inode_dirty() or mark_inode_dirty_sync()2446 * instead of calling this directly.2447 *2448 * CAREFUL! We only add the inode to the dirty list if it is hashed or if it2449 * refers to a blockdev. Unhashed inodes will never be added to the dirty list2450 * even if they are later hashed, as they will have been marked dirty already.2451 *2452 * In short, ensure you hash any inodes _before_ you start marking them dirty.2453 *2454 * Note that for blockdevs, inode->dirtied_when represents the dirtying time of2455 * the block-special inode (/dev/hda1) itself. And the ->dirtied_when field of2456 * the kernel-internal blockdev inode represents the dirtying time of the2457 * blockdev's pages. This is why for I_DIRTY_PAGES we always use2458 * page->mapping->host, so the page-dirtying time is recorded in the internal2459 * blockdev inode.2460 */2461void __mark_inode_dirty(struct inode *inode, int flags)2462{2463 struct super_block *sb = inode->i_sb;2464 int dirtytime = 0;2465 struct bdi_writeback *wb = NULL;2466 2467 trace_writeback_mark_inode_dirty(inode, flags);2468 2469 if (flags & I_DIRTY_INODE) {2470 /*2471 * Inode timestamp update will piggback on this dirtying.2472 * We tell ->dirty_inode callback that timestamps need to2473 * be updated by setting I_DIRTY_TIME in flags.2474 */2475 if (inode->i_state & I_DIRTY_TIME) {2476 spin_lock(&inode->i_lock);2477 if (inode->i_state & I_DIRTY_TIME) {2478 inode->i_state &= ~I_DIRTY_TIME;2479 flags |= I_DIRTY_TIME;2480 }2481 spin_unlock(&inode->i_lock);2482 }2483 2484 /*2485 * Notify the filesystem about the inode being dirtied, so that2486 * (if needed) it can update on-disk fields and journal the2487 * inode. This is only needed when the inode itself is being2488 * dirtied now. I.e. it's only needed for I_DIRTY_INODE, not2489 * for just I_DIRTY_PAGES or I_DIRTY_TIME.2490 */2491 trace_writeback_dirty_inode_start(inode, flags);2492 if (sb->s_op->dirty_inode)2493 sb->s_op->dirty_inode(inode,2494 flags & (I_DIRTY_INODE | I_DIRTY_TIME));2495 trace_writeback_dirty_inode(inode, flags);2496 2497 /* I_DIRTY_INODE supersedes I_DIRTY_TIME. */2498 flags &= ~I_DIRTY_TIME;2499 } else {2500 /*2501 * Else it's either I_DIRTY_PAGES, I_DIRTY_TIME, or nothing.2502 * (We don't support setting both I_DIRTY_PAGES and I_DIRTY_TIME2503 * in one call to __mark_inode_dirty().)2504 */2505 dirtytime = flags & I_DIRTY_TIME;2506 WARN_ON_ONCE(dirtytime && flags != I_DIRTY_TIME);2507 }2508 2509 /*2510 * Paired with smp_mb() in __writeback_single_inode() for the2511 * following lockless i_state test. See there for details.2512 */2513 smp_mb();2514 2515 if ((inode->i_state & flags) == flags)2516 return;2517 2518 spin_lock(&inode->i_lock);2519 if ((inode->i_state & flags) != flags) {2520 const int was_dirty = inode->i_state & I_DIRTY;2521 2522 inode_attach_wb(inode, NULL);2523 2524 inode->i_state |= flags;2525 2526 /*2527 * Grab inode's wb early because it requires dropping i_lock and we2528 * need to make sure following checks happen atomically with dirty2529 * list handling so that we don't move inodes under flush worker's2530 * hands.2531 */2532 if (!was_dirty) {2533 wb = locked_inode_to_wb_and_lock_list(inode);2534 spin_lock(&inode->i_lock);2535 }2536 2537 /*2538 * If the inode is queued for writeback by flush worker, just2539 * update its dirty state. Once the flush worker is done with2540 * the inode it will place it on the appropriate superblock2541 * list, based upon its state.2542 */2543 if (inode->i_state & I_SYNC_QUEUED)2544 goto out_unlock;2545 2546 /*2547 * Only add valid (hashed) inodes to the superblock's2548 * dirty list. Add blockdev inodes as well.2549 */2550 if (!S_ISBLK(inode->i_mode)) {2551 if (inode_unhashed(inode))2552 goto out_unlock;2553 }2554 if (inode->i_state & I_FREEING)2555 goto out_unlock;2556 2557 /*2558 * If the inode was already on b_dirty/b_io/b_more_io, don't2559 * reposition it (that would break b_dirty time-ordering).2560 */2561 if (!was_dirty) {2562 struct list_head *dirty_list;2563 bool wakeup_bdi = false;2564 2565 inode->dirtied_when = jiffies;2566 if (dirtytime)2567 inode->dirtied_time_when = jiffies;2568 2569 if (inode->i_state & I_DIRTY)2570 dirty_list = &wb->b_dirty;2571 else2572 dirty_list = &wb->b_dirty_time;2573 2574 wakeup_bdi = inode_io_list_move_locked(inode, wb,2575 dirty_list);2576 2577 spin_unlock(&wb->list_lock);2578 spin_unlock(&inode->i_lock);2579 trace_writeback_dirty_inode_enqueue(inode);2580 2581 /*2582 * If this is the first dirty inode for this bdi,2583 * we have to wake-up the corresponding bdi thread2584 * to make sure background write-back happens2585 * later.2586 */2587 if (wakeup_bdi &&2588 (wb->bdi->capabilities & BDI_CAP_WRITEBACK))2589 wb_wakeup_delayed(wb);2590 return;2591 }2592 }2593out_unlock:2594 if (wb)2595 spin_unlock(&wb->list_lock);2596 spin_unlock(&inode->i_lock);2597}2598EXPORT_SYMBOL(__mark_inode_dirty);2599 2600/*2601 * The @s_sync_lock is used to serialise concurrent sync operations2602 * to avoid lock contention problems with concurrent wait_sb_inodes() calls.2603 * Concurrent callers will block on the s_sync_lock rather than doing contending2604 * walks. The queueing maintains sync(2) required behaviour as all the IO that2605 * has been issued up to the time this function is enter is guaranteed to be2606 * completed by the time we have gained the lock and waited for all IO that is2607 * in progress regardless of the order callers are granted the lock.2608 */2609static HWJS_SUSPENDS void wait_sb_inodes(struct super_block *sb)2610{2611 LIST_HEAD(sync_list);2612 2613 /*2614 * We need to be protected against the filesystem going from2615 * r/o to r/w or vice versa.2616 */2617 WARN_ON(!rwsem_is_locked(&sb->s_umount));2618 2619 mutex_lock(&sb->s_sync_lock);2620 2621 /*2622 * Splice the writeback list onto a temporary list to avoid waiting on2623 * inodes that have started writeback after this point.2624 *2625 * Use rcu_read_lock() to keep the inodes around until we have a2626 * reference. s_inode_wblist_lock protects sb->s_inodes_wb as well as2627 * the local list because inodes can be dropped from either by writeback2628 * completion.2629 */2630 rcu_read_lock();2631 spin_lock_irq(&sb->s_inode_wblist_lock);2632 list_splice_init(&sb->s_inodes_wb, &sync_list);2633 2634 /*2635 * Data integrity sync. Must wait for all pages under writeback, because2636 * there may have been pages dirtied before our sync call, but which had2637 * writeout started before we write it out. In which case, the inode2638 * may not be on the dirty list, but we still have to wait for that2639 * writeout.2640 */2641 while (!list_empty(&sync_list)) {2642 struct inode *inode = list_first_entry(&sync_list, struct inode,2643 i_wb_list);2644 struct address_space *mapping = inode->i_mapping;2645 2646 /*2647 * Move each inode back to the wb list before we drop the lock2648 * to preserve consistency between i_wb_list and the mapping2649 * writeback tag. Writeback completion is responsible to remove2650 * the inode from either list once the writeback tag is cleared.2651 */2652 list_move_tail(&inode->i_wb_list, &sb->s_inodes_wb);2653 2654 /*2655 * The mapping can appear untagged while still on-list since we2656 * do not have the mapping lock. Skip it here, wb completion2657 * will remove it.2658 */2659 if (!mapping_tagged(mapping, PAGECACHE_TAG_WRITEBACK))2660 continue;2661 2662 spin_unlock_irq(&sb->s_inode_wblist_lock);2663 2664 spin_lock(&inode->i_lock);2665 if (inode->i_state & (I_FREEING|I_WILL_FREE|I_NEW)) {2666 spin_unlock(&inode->i_lock);2667 2668 spin_lock_irq(&sb->s_inode_wblist_lock);2669 continue;2670 }2671 __iget(inode);2672 spin_unlock(&inode->i_lock);2673 rcu_read_unlock();2674 2675 /*2676 * We keep the error status of individual mapping so that2677 * applications can catch the writeback error using fsync(2).2678 * See filemap_fdatawait_keep_errors() for details.2679 */2680 filemap_fdatawait_keep_errors(mapping);2681 2682 cond_resched();2683 2684 iput(inode);2685 2686 rcu_read_lock();2687 spin_lock_irq(&sb->s_inode_wblist_lock);2688 }2689 spin_unlock_irq(&sb->s_inode_wblist_lock);2690 rcu_read_unlock();2691 mutex_unlock(&sb->s_sync_lock);2692}2693 2694static HWJS_SUSPENDS void __writeback_inodes_sb_nr(struct super_block *sb, unsigned long nr,2695 enum wb_reason reason, bool skip_if_busy)2696{2697 struct backing_dev_info *bdi = sb->s_bdi;2698 DEFINE_WB_COMPLETION(done, bdi);2699 struct wb_writeback_work work = {2700 .sb = sb,2701 .sync_mode = WB_SYNC_NONE,2702 .tagged_writepages = 1,2703 .done = &done,2704 .nr_pages = nr,2705 .reason = reason,2706 };2707 2708 if (!bdi_has_dirty_io(bdi) || bdi == &noop_backing_dev_info)2709 return;2710 WARN_ON(!rwsem_is_locked(&sb->s_umount));2711 2712 bdi_split_work_to_wbs(sb->s_bdi, &work, skip_if_busy);2713 wb_wait_for_completion(&done);2714}2715 2716/**2717 * writeback_inodes_sb_nr - writeback dirty inodes from given super_block2718 * @sb: the superblock2719 * @nr: the number of pages to write2720 * @reason: reason why some writeback work initiated2721 *2722 * Start writeback on some inodes on this super_block. No guarantees are made2723 * on how many (if any) will be written, and this function does not wait2724 * for IO completion of submitted IO.2725 */2726void writeback_inodes_sb_nr(struct super_block *sb,2727 unsigned long nr,2728 enum wb_reason reason)2729{2730 __writeback_inodes_sb_nr(sb, nr, reason, false);2731}2732EXPORT_SYMBOL(writeback_inodes_sb_nr);2733 2734/**2735 * writeback_inodes_sb - writeback dirty inodes from given super_block2736 * @sb: the superblock2737 * @reason: reason why some writeback work was initiated2738 *2739 * Start writeback on some inodes on this super_block. No guarantees are made2740 * on how many (if any) will be written, and this function does not wait2741 * for IO completion of submitted IO.2742 */2743void writeback_inodes_sb(struct super_block *sb, enum wb_reason reason)2744{2745 writeback_inodes_sb_nr(sb, get_nr_dirty_pages(), reason);2746}2747EXPORT_SYMBOL(writeback_inodes_sb);2748 2749/**2750 * try_to_writeback_inodes_sb - try to start writeback if none underway2751 * @sb: the superblock2752 * @reason: reason why some writeback work was initiated2753 *2754 * Invoke __writeback_inodes_sb_nr if no writeback is currently underway.2755 */2756void try_to_writeback_inodes_sb(struct super_block *sb, enum wb_reason reason)2757{2758 if (!down_read_trylock(&sb->s_umount))2759 return;2760 2761 __writeback_inodes_sb_nr(sb, get_nr_dirty_pages(), reason, true);2762 up_read(&sb->s_umount);2763}2764EXPORT_SYMBOL(try_to_writeback_inodes_sb);2765 2766/**2767 * sync_inodes_sb - sync sb inode pages2768 * @sb: the superblock2769 *2770 * This function writes and waits on any dirty inode belonging to this2771 * super_block.2772 */2773void sync_inodes_sb(struct super_block *sb)2774{2775 struct backing_dev_info *bdi = sb->s_bdi;2776 DEFINE_WB_COMPLETION(done, bdi);2777 struct wb_writeback_work work = {2778 .sb = sb,2779 .sync_mode = WB_SYNC_ALL,2780 .nr_pages = LONG_MAX,2781 .range_cyclic = 0,2782 .done = &done,2783 .reason = WB_REASON_SYNC,2784 .for_sync = 1,2785 };2786 2787 /*2788 * Can't skip on !bdi_has_dirty() because we should wait for !dirty2789 * inodes under writeback and I_DIRTY_TIME inodes ignored by2790 * bdi_has_dirty() need to be written out too.2791 */2792 if (bdi == &noop_backing_dev_info)2793 return;2794 WARN_ON(!rwsem_is_locked(&sb->s_umount));2795 2796 /* protect against inode wb switch, see inode_switch_wbs_work_fn() */2797 bdi_down_write_wb_switch_rwsem(bdi);2798 bdi_split_work_to_wbs(bdi, &work, false);2799 wb_wait_for_completion(&done);2800 bdi_up_write_wb_switch_rwsem(bdi);2801 2802 wait_sb_inodes(sb);2803}2804EXPORT_SYMBOL(sync_inodes_sb);2805 2806/**2807 * write_inode_now - write an inode to disk2808 * @inode: inode to write to disk2809 * @sync: whether the write should be synchronous or not2810 *2811 * This function commits an inode to disk immediately if it is dirty. This is2812 * primarily needed by knfsd.2813 *2814 * The caller must either have a ref on the inode or must have set I_WILL_FREE.2815 */2816int write_inode_now(struct inode *inode, int sync)2817{2818 struct writeback_control wbc = {2819 .nr_to_write = LONG_MAX,2820 .sync_mode = sync ? WB_SYNC_ALL : WB_SYNC_NONE,2821 .range_start = 0,2822 .range_end = LLONG_MAX,2823 };2824 2825 if (!mapping_can_writeback(inode->i_mapping))2826 wbc.nr_to_write = 0;2827 2828 might_sleep();2829 return writeback_single_inode(inode, &wbc);2830}2831EXPORT_SYMBOL(write_inode_now);2832 2833/**2834 * sync_inode_metadata - write an inode to disk2835 * @inode: the inode to sync2836 * @wait: wait for I/O to complete.2837 *2838 * Write an inode to disk and adjust its dirty state after completion.2839 *2840 * Note: only writes the actual inode, no associated data or other metadata.2841 */2842int sync_inode_metadata(struct inode *inode, int wait)2843{2844 struct writeback_control wbc = {2845 .sync_mode = wait ? WB_SYNC_ALL : WB_SYNC_NONE,2846 .nr_to_write = 0, /* metadata-only */2847 };2848 2849 return writeback_single_inode(inode, &wbc);2850}2851EXPORT_SYMBOL(sync_inode_metadata);2852