LCOV - code coverage report
Current view: top level - fs - fs-writeback.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 30 597 5.0 %
Date: 2023-08-24 13:40:31 Functions: 6 50 12.0 %

          Line data    Source code
       1             : // SPDX-License-Identifier: GPL-2.0-only
       2             : /*
       3             :  * fs/fs-writeback.c
       4             :  *
       5             :  * Copyright (C) 2002, Linus Torvalds.
       6             :  *
       7             :  * Contains all the functions related to writing back and waiting
       8             :  * upon dirty inodes against superblocks, and writing back dirty
       9             :  * pages against inodes.  ie: data writeback.  Writeout of the
      10             :  * inode itself is not handled here.
      11             :  *
      12             :  * 10Apr2002    Andrew Morton
      13             :  *              Split out of fs/inode.c
      14             :  *              Additions for address_space-based writeback
      15             :  */
      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 size
      36             :  */
      37             : #define MIN_WRITEBACK_PAGES     (4096UL >> (PAGE_SHIFT - 10))
      38             : 
      39             : /*
      40             :  * Passed into wb_writeback(), essentially a subset of writeback_control
      41             :  */
      42             : struct 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 the
      60             :  * updates stop dirtytime_expire_interval seconds in the past, it's
      61             :  * possible for the worst case time between when an inode has its
      62             :  * timestamps updated and when they finally get written out to be two
      63             :  * dirtytime_expire_intervals.  We set the default to 12 hours (in
      64             :  * seconds), which means most of the time inodes will have their
      65             :  * timestamps written to disk after 12 hours, but in the worst case a
      66             :  * few inodes might not their timestamps updated for 24 hours.
      67             :  */
      68             : unsigned int dirtytime_expire_interval = 12 * 60 * 60;
      69             : 
      70             : static inline struct inode *wb_inode(struct list_head *head)
      71             : {
      72           0 :         return list_entry(head, struct inode, i_io_list);
      73             : }
      74             : 
      75             : /*
      76             :  * Include the creation of the trace points after defining the
      77             :  * wb_writeback_work structure and inline functions so that the definition
      78             :  * remains local to this file.
      79             :  */
      80             : #define CREATE_TRACE_POINTS
      81             : #include <trace/events/writeback.h>
      82             : 
      83             : EXPORT_TRACEPOINT_SYMBOL_GPL(wbc_writepage);
      84             : 
      85           0 : static bool wb_io_lists_populated(struct bdi_writeback *wb)
      86             : {
      87           0 :         if (wb_has_dirty_io(wb)) {
      88             :                 return false;
      89             :         } else {
      90           0 :                 set_bit(WB_has_dirty_io, &wb->state);
      91           0 :                 WARN_ON_ONCE(!wb->avg_write_bandwidth);
      92           0 :                 atomic_long_add(wb->avg_write_bandwidth,
      93           0 :                                 &wb->bdi->tot_write_bandwidth);
      94           0 :                 return true;
      95             :         }
      96             : }
      97             : 
      98           0 : static void wb_io_lists_depopulated(struct bdi_writeback *wb)
      99             : {
     100           0 :         if (wb_has_dirty_io(wb) && list_empty(&wb->b_dirty) &&
     101           0 :             list_empty(&wb->b_io) && list_empty(&wb->b_more_io)) {
     102           0 :                 clear_bit(WB_has_dirty_io, &wb->state);
     103           0 :                 WARN_ON_ONCE(atomic_long_sub_return(wb->avg_write_bandwidth,
     104             :                                         &wb->bdi->tot_write_bandwidth) < 0);
     105             :         }
     106           0 : }
     107             : 
     108             : /**
     109             :  * inode_io_list_move_locked - move an inode onto a bdi_writeback IO list
     110             :  * @inode: inode to be moved
     111             :  * @wb: target bdi_writeback
     112             :  * @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 IO
     116             :  * lists; otherwise, %false.
     117             :  */
     118           0 : static 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           0 :         WARN_ON_ONCE(inode->i_state & I_FREEING);
     125             : 
     126           0 :         list_move(&inode->i_io_list, head);
     127             : 
     128             :         /* dirty_time doesn't count as dirty_io until expiration */
     129           0 :         if (head != &wb->b_dirty_time)
     130           0 :                 return wb_io_lists_populated(wb);
     131             : 
     132           0 :         wb_io_lists_depopulated(wb);
     133           0 :         return false;
     134             : }
     135             : 
     136           0 : static void wb_wakeup(struct bdi_writeback *wb)
     137             : {
     138           0 :         spin_lock_irq(&wb->work_lock);
     139           0 :         if (test_bit(WB_registered, &wb->state))
     140           0 :                 mod_delayed_work(bdi_wq, &wb->dwork, 0);
     141           0 :         spin_unlock_irq(&wb->work_lock);
     142           0 : }
     143             : 
     144           0 : static void finish_writeback_work(struct bdi_writeback *wb,
     145             :                                   struct wb_writeback_work *work)
     146             : {
     147           0 :         struct wb_completion *done = work->done;
     148             : 
     149           0 :         if (work->auto_free)
     150           0 :                 kfree(work);
     151           0 :         if (done) {
     152           0 :                 wait_queue_head_t *waitq = done->waitq;
     153             : 
     154             :                 /* @done can't be accessed after the following dec */
     155           0 :                 if (atomic_dec_and_test(&done->cnt))
     156           0 :                         wake_up_all(waitq);
     157             :         }
     158           0 : }
     159             : 
     160           0 : static void wb_queue_work(struct bdi_writeback *wb,
     161             :                           struct wb_writeback_work *work)
     162             : {
     163           0 :         trace_writeback_queue(wb, work);
     164             : 
     165           0 :         if (work->done)
     166           0 :                 atomic_inc(&work->done->cnt);
     167             : 
     168           0 :         spin_lock_irq(&wb->work_lock);
     169             : 
     170           0 :         if (test_bit(WB_registered, &wb->state)) {
     171           0 :                 list_add_tail(&work->list, &wb->work_list);
     172           0 :                 mod_delayed_work(bdi_wq, &wb->dwork, 0);
     173             :         } else
     174           0 :                 finish_writeback_work(wb, work);
     175             : 
     176           0 :         spin_unlock_irq(&wb->work_lock);
     177           0 : }
     178             : 
     179             : /**
     180             :  * wb_wait_for_completion - wait for completion of bdi_writeback_works
     181             :  * @done: target wb_completion
     182             :  *
     183             :  * Wait for one or more work items issued to @bdi with their ->done field
     184             :  * set to @done, which should have been initialized with
     185             :  * DEFINE_WB_COMPLETION().  This function returns after all such work items
     186             :  * are completed.  Work items which are waited upon aren't freed
     187             :  * automatically on completion.
     188             :  */
     189           0 : void wb_wait_for_completion(struct wb_completion *done)
     190             : {
     191           0 :         atomic_dec(&done->cnt);          /* put down the initial count */
     192           0 :         wait_event(*done->waitq, !atomic_read(&done->cnt));
     193           0 : }
     194             : 
     195             : #ifdef CONFIG_CGROUP_WRITEBACK
     196             : 
     197             : /*
     198             :  * Parameters for foreign inode detection, see wbc_detach_inode() to see
     199             :  * how they're used.
     200             :  *
     201             :  * These paramters are inherently heuristical as the detection target
     202             :  * itself is fuzzy.  All we want to do is detaching an inode from the
     203             :  * current owner if it's being written to by some other cgroups too much.
     204             :  *
     205             :  * The current cgroup writeback is built on the assumption that multiple
     206             :  * cgroups writing to the same inode concurrently is very rare and a mode
     207             :  * of operation which isn't well supported.  As such, the goal is not
     208             :  * taking too long when a different cgroup takes over an inode while
     209             :  * avoiding too aggressive flip-flops from occasional foreign writes.
     210             :  *
     211             :  * We record, very roughly, 2s worth of IO time history and if more than
     212             :  * half of that is foreign, trigger the switch.  The recording is quantized
     213             :  * to 16 slots.  To avoid tiny writes from swinging the decision too much,
     214             :  * writes smaller than 1/8 of avg size are ignored.
     215             :  */
     216             : #define WB_FRN_TIME_SHIFT       13      /* 1s = 2^13, upto 8 secs w/ 16bit */
     217             : #define WB_FRN_TIME_AVG_SHIFT   3       /* avg = avg * 7/8 + new * 1/8 */
     218             : #define WB_FRN_TIME_CUT_DIV     8       /* ignore rounds < avg / 8 */
     219             : #define WB_FRN_TIME_PERIOD      (2 * (1 << WB_FRN_TIME_SHIFT))    /* 2s */
     220             : 
     221             : #define WB_FRN_HIST_SLOTS       16      /* inode->i_wb_frn_history is 16bit */
     222             : #define WB_FRN_HIST_UNIT        (WB_FRN_TIME_PERIOD / WB_FRN_HIST_SLOTS)
     223             :                                         /* each slot's duration is 2s / 16 */
     224             : #define WB_FRN_HIST_THR_SLOTS   (WB_FRN_HIST_SLOTS / 2)
     225             :                                         /* if foreign slots >= 8, switch */
     226             : #define WB_FRN_HIST_MAX_SLOTS   (WB_FRN_HIST_THR_SLOTS / 2 + 1)
     227             :                                         /* one round can affect upto 5 slots */
     228             : #define WB_FRN_MAX_IN_FLIGHT    1024    /* don't queue too many concurrently */
     229             : 
     230             : /*
     231             :  * Maximum inodes per isw.  A specific value has been chosen to make
     232             :  * struct inode_switch_wbs_context fit into 1024 bytes kmalloc.
     233             :  */
     234             : #define WB_MAX_INODES_PER_ISW  ((1024UL - sizeof(struct inode_switch_wbs_context)) \
     235             :                                 / sizeof(struct inode *))
     236             : 
     237             : static atomic_t isw_nr_in_flight = ATOMIC_INIT(0);
     238             : static struct workqueue_struct *isw_wq;
     239             : 
     240             : void __inode_attach_wb(struct inode *inode, struct folio *folio)
     241             : {
     242             :         struct backing_dev_info *bdi = inode_to_bdi(inode);
     243             :         struct bdi_writeback *wb = NULL;
     244             : 
     245             :         if (inode_cgwb_enabled(inode)) {
     246             :                 struct cgroup_subsys_state *memcg_css;
     247             : 
     248             :                 if (folio) {
     249             :                         memcg_css = mem_cgroup_css_from_folio(folio);
     250             :                         wb = wb_get_create(bdi, memcg_css, GFP_ATOMIC);
     251             :                 } else {
     252             :                         /* must pin memcg_css, see wb_get_create() */
     253             :                         memcg_css = task_get_css(current, memory_cgrp_id);
     254             :                         wb = wb_get_create(bdi, memcg_css, GFP_ATOMIC);
     255             :                         css_put(memcg_css);
     256             :                 }
     257             :         }
     258             : 
     259             :         if (!wb)
     260             :                 wb = &bdi->wb;
     261             : 
     262             :         /*
     263             :          * There may be multiple instances of this function racing to
     264             :          * update the same inode.  Use cmpxchg() to tell the winner.
     265             :          */
     266             :         if (unlikely(cmpxchg(&inode->i_wb, NULL, wb)))
     267             :                 wb_put(wb);
     268             : }
     269             : EXPORT_SYMBOL_GPL(__inode_attach_wb);
     270             : 
     271             : /**
     272             :  * inode_cgwb_move_to_attached - put the inode onto wb->b_attached list
     273             :  * @inode: inode of interest with i_lock held
     274             :  * @wb: target bdi_writeback
     275             :  *
     276             :  * Remove the inode from wb's io lists and if necessarily put onto b_attached
     277             :  * list.  Only inodes attached to cgwb's are kept on this list.
     278             :  */
     279             : static void inode_cgwb_move_to_attached(struct inode *inode,
     280             :                                         struct bdi_writeback *wb)
     281             : {
     282             :         assert_spin_locked(&wb->list_lock);
     283             :         assert_spin_locked(&inode->i_lock);
     284             :         WARN_ON_ONCE(inode->i_state & I_FREEING);
     285             : 
     286             :         inode->i_state &= ~I_SYNC_QUEUED;
     287             :         if (wb != &wb->bdi->wb)
     288             :                 list_move(&inode->i_io_list, &wb->b_attached);
     289             :         else
     290             :                 list_del_init(&inode->i_io_list);
     291             :         wb_io_lists_depopulated(wb);
     292             : }
     293             : 
     294             : /**
     295             :  * locked_inode_to_wb_and_lock_list - determine a locked inode's wb and lock it
     296             :  * @inode: inode of interest with i_lock held
     297             :  *
     298             :  * Returns @inode's wb with its list_lock held.  @inode->i_lock must be
     299             :  * held on entry and is released on return.  The returned wb is guaranteed
     300             :  * to stay @inode's associated wb until its list_lock is released.
     301             :  */
     302             : static struct bdi_writeback *
     303             : locked_inode_to_wb_and_lock_list(struct inode *inode)
     304             :         __releases(&inode->i_lock)
     305             :         __acquires(&wb->list_lock)
     306             : {
     307             :         while (true) {
     308             :                 struct bdi_writeback *wb = inode_to_wb(inode);
     309             : 
     310             :                 /*
     311             :                  * inode_to_wb() association is protected by both
     312             :                  * @inode->i_lock and @wb->list_lock but list_lock nests
     313             :                  * outside i_lock.  Drop i_lock and verify that the
     314             :                  * association hasn't changed after acquiring list_lock.
     315             :                  */
     316             :                 wb_get(wb);
     317             :                 spin_unlock(&inode->i_lock);
     318             :                 spin_lock(&wb->list_lock);
     319             : 
     320             :                 /* i_wb may have changed inbetween, can't use inode_to_wb() */
     321             :                 if (likely(wb == inode->i_wb)) {
     322             :                         wb_put(wb);     /* @inode already has ref */
     323             :                         return wb;
     324             :                 }
     325             : 
     326             :                 spin_unlock(&wb->list_lock);
     327             :                 wb_put(wb);
     328             :                 cpu_relax();
     329             :                 spin_lock(&inode->i_lock);
     330             :         }
     331             : }
     332             : 
     333             : /**
     334             :  * inode_to_wb_and_lock_list - determine an inode's wb and lock it
     335             :  * @inode: inode of interest
     336             :  *
     337             :  * Same as locked_inode_to_wb_and_lock_list() but @inode->i_lock isn't held
     338             :  * on entry.
     339             :  */
     340             : static struct bdi_writeback *inode_to_wb_and_lock_list(struct inode *inode)
     341             :         __acquires(&wb->list_lock)
     342             : {
     343             :         spin_lock(&inode->i_lock);
     344             :         return locked_inode_to_wb_and_lock_list(inode);
     345             : }
     346             : 
     347             : struct inode_switch_wbs_context {
     348             :         struct rcu_work         work;
     349             : 
     350             :         /*
     351             :          * Multiple inodes can be switched at once.  The switching procedure
     352             :          * consists of two parts, separated by a RCU grace period.  To make
     353             :          * sure that the second part is executed for each inode gone through
     354             :          * the first part, all inode pointers are placed into a NULL-terminated
     355             :          * array embedded into struct inode_switch_wbs_context.  Otherwise
     356             :          * an inode could be left in a non-consistent state.
     357             :          */
     358             :         struct bdi_writeback    *new_wb;
     359             :         struct inode            *inodes[];
     360             : };
     361             : 
     362             : static void bdi_down_write_wb_switch_rwsem(struct backing_dev_info *bdi)
     363             : {
     364             :         down_write(&bdi->wb_switch_rwsem);
     365             : }
     366             : 
     367             : static void bdi_up_write_wb_switch_rwsem(struct backing_dev_info *bdi)
     368             : {
     369             :         up_write(&bdi->wb_switch_rwsem);
     370             : }
     371             : 
     372             : static bool inode_do_switch_wbs(struct inode *inode,
     373             :                                 struct bdi_writeback *old_wb,
     374             :                                 struct bdi_writeback *new_wb)
     375             : {
     376             :         struct address_space *mapping = inode->i_mapping;
     377             :         XA_STATE(xas, &mapping->i_pages, 0);
     378             :         struct folio *folio;
     379             :         bool switched = false;
     380             : 
     381             :         spin_lock(&inode->i_lock);
     382             :         xa_lock_irq(&mapping->i_pages);
     383             : 
     384             :         /*
     385             :          * Once I_FREEING or I_WILL_FREE are visible under i_lock, the eviction
     386             :          * path owns the inode and we shouldn't modify ->i_io_list.
     387             :          */
     388             :         if (unlikely(inode->i_state & (I_FREEING | I_WILL_FREE)))
     389             :                 goto skip_switch;
     390             : 
     391             :         trace_inode_switch_wbs(inode, old_wb, new_wb);
     392             : 
     393             :         /*
     394             :          * Count and transfer stats.  Note that PAGECACHE_TAG_DIRTY points
     395             :          * to possibly dirty folios while PAGECACHE_TAG_WRITEBACK points to
     396             :          * folios actually under writeback.
     397             :          */
     398             :         xas_for_each_marked(&xas, folio, ULONG_MAX, PAGECACHE_TAG_DIRTY) {
     399             :                 if (folio_test_dirty(folio)) {
     400             :                         long nr = folio_nr_pages(folio);
     401             :                         wb_stat_mod(old_wb, WB_RECLAIMABLE, -nr);
     402             :                         wb_stat_mod(new_wb, WB_RECLAIMABLE, nr);
     403             :                 }
     404             :         }
     405             : 
     406             :         xas_set(&xas, 0);
     407             :         xas_for_each_marked(&xas, folio, ULONG_MAX, PAGECACHE_TAG_WRITEBACK) {
     408             :                 long nr = folio_nr_pages(folio);
     409             :                 WARN_ON_ONCE(!folio_test_writeback(folio));
     410             :                 wb_stat_mod(old_wb, WB_WRITEBACK, -nr);
     411             :                 wb_stat_mod(new_wb, WB_WRITEBACK, nr);
     412             :         }
     413             : 
     414             :         if (mapping_tagged(mapping, PAGECACHE_TAG_WRITEBACK)) {
     415             :                 atomic_dec(&old_wb->writeback_inodes);
     416             :                 atomic_inc(&new_wb->writeback_inodes);
     417             :         }
     418             : 
     419             :         wb_get(new_wb);
     420             : 
     421             :         /*
     422             :          * Transfer to @new_wb's IO list if necessary.  If the @inode is dirty,
     423             :          * the specific list @inode was on is ignored and the @inode is put on
     424             :          * ->b_dirty which is always correct including from ->b_dirty_time.
     425             :          * The transfer preserves @inode->dirtied_when ordering.  If the @inode
     426             :          * was clean, it means it was on the b_attached list, so move it onto
     427             :          * the b_attached list of @new_wb.
     428             :          */
     429             :         if (!list_empty(&inode->i_io_list)) {
     430             :                 inode->i_wb = new_wb;
     431             : 
     432             :                 if (inode->i_state & I_DIRTY_ALL) {
     433             :                         struct inode *pos;
     434             : 
     435             :                         list_for_each_entry(pos, &new_wb->b_dirty, i_io_list)
     436             :                                 if (time_after_eq(inode->dirtied_when,
     437             :                                                   pos->dirtied_when))
     438             :                                         break;
     439             :                         inode_io_list_move_locked(inode, new_wb,
     440             :                                                   pos->i_io_list.prev);
     441             :                 } else {
     442             :                         inode_cgwb_move_to_attached(inode, new_wb);
     443             :                 }
     444             :         } else {
     445             :                 inode->i_wb = new_wb;
     446             :         }
     447             : 
     448             :         /* ->i_wb_frn updates may race wbc_detach_inode() but doesn't matter */
     449             :         inode->i_wb_frn_winner = 0;
     450             :         inode->i_wb_frn_avg_time = 0;
     451             :         inode->i_wb_frn_history = 0;
     452             :         switched = true;
     453             : skip_switch:
     454             :         /*
     455             :          * Paired with load_acquire in unlocked_inode_to_wb_begin() and
     456             :          * ensures that the new wb is visible if they see !I_WB_SWITCH.
     457             :          */
     458             :         smp_store_release(&inode->i_state, inode->i_state & ~I_WB_SWITCH);
     459             : 
     460             :         xa_unlock_irq(&mapping->i_pages);
     461             :         spin_unlock(&inode->i_lock);
     462             : 
     463             :         return switched;
     464             : }
     465             : 
     466             : static void inode_switch_wbs_work_fn(struct work_struct *work)
     467             : {
     468             :         struct inode_switch_wbs_context *isw =
     469             :                 container_of(to_rcu_work(work), struct inode_switch_wbs_context, work);
     470             :         struct backing_dev_info *bdi = inode_to_bdi(isw->inodes[0]);
     471             :         struct bdi_writeback *old_wb = isw->inodes[0]->i_wb;
     472             :         struct bdi_writeback *new_wb = isw->new_wb;
     473             :         unsigned long nr_switched = 0;
     474             :         struct inode **inodep;
     475             : 
     476             :         /*
     477             :          * If @inode switches cgwb membership while sync_inodes_sb() is
     478             :          * being issued, sync_inodes_sb() might miss it.  Synchronize.
     479             :          */
     480             :         down_read(&bdi->wb_switch_rwsem);
     481             : 
     482             :         /*
     483             :          * By the time control reaches here, RCU grace period has passed
     484             :          * since I_WB_SWITCH assertion and all wb stat update transactions
     485             :          * between unlocked_inode_to_wb_begin/end() are guaranteed to be
     486             :          * synchronizing against the i_pages lock.
     487             :          *
     488             :          * Grabbing old_wb->list_lock, inode->i_lock and the i_pages lock
     489             :          * gives us exclusion against all wb related operations on @inode
     490             :          * including IO list manipulations and stat updates.
     491             :          */
     492             :         if (old_wb < new_wb) {
     493             :                 spin_lock(&old_wb->list_lock);
     494             :                 spin_lock_nested(&new_wb->list_lock, SINGLE_DEPTH_NESTING);
     495             :         } else {
     496             :                 spin_lock(&new_wb->list_lock);
     497             :                 spin_lock_nested(&old_wb->list_lock, SINGLE_DEPTH_NESTING);
     498             :         }
     499             : 
     500             :         for (inodep = isw->inodes; *inodep; inodep++) {
     501             :                 WARN_ON_ONCE((*inodep)->i_wb != old_wb);
     502             :                 if (inode_do_switch_wbs(*inodep, old_wb, new_wb))
     503             :                         nr_switched++;
     504             :         }
     505             : 
     506             :         spin_unlock(&new_wb->list_lock);
     507             :         spin_unlock(&old_wb->list_lock);
     508             : 
     509             :         up_read(&bdi->wb_switch_rwsem);
     510             : 
     511             :         if (nr_switched) {
     512             :                 wb_wakeup(new_wb);
     513             :                 wb_put_many(old_wb, nr_switched);
     514             :         }
     515             : 
     516             :         for (inodep = isw->inodes; *inodep; inodep++)
     517             :                 iput(*inodep);
     518             :         wb_put(new_wb);
     519             :         kfree(isw);
     520             :         atomic_dec(&isw_nr_in_flight);
     521             : }
     522             : 
     523             : static bool inode_prepare_wbs_switch(struct inode *inode,
     524             :                                      struct bdi_writeback *new_wb)
     525             : {
     526             :         /*
     527             :          * Paired with smp_mb() in cgroup_writeback_umount().
     528             :          * isw_nr_in_flight must be increased before checking SB_ACTIVE and
     529             :          * grabbing an inode, otherwise isw_nr_in_flight can be observed as 0
     530             :          * in cgroup_writeback_umount() and the isw_wq will be not flushed.
     531             :          */
     532             :         smp_mb();
     533             : 
     534             :         if (IS_DAX(inode))
     535             :                 return false;
     536             : 
     537             :         /* while holding I_WB_SWITCH, no one else can update the association */
     538             :         spin_lock(&inode->i_lock);
     539             :         if (!(inode->i_sb->s_flags & SB_ACTIVE) ||
     540             :             inode->i_state & (I_WB_SWITCH | I_FREEING | I_WILL_FREE) ||
     541             :             inode_to_wb(inode) == new_wb) {
     542             :                 spin_unlock(&inode->i_lock);
     543             :                 return false;
     544             :         }
     545             :         inode->i_state |= I_WB_SWITCH;
     546             :         __iget(inode);
     547             :         spin_unlock(&inode->i_lock);
     548             : 
     549             :         return true;
     550             : }
     551             : 
     552             : /**
     553             :  * inode_switch_wbs - change the wb association of an inode
     554             :  * @inode: target inode
     555             :  * @new_wb_id: ID of the new wb
     556             :  *
     557             :  * Switch @inode's wb association to the wb identified by @new_wb_id.  The
     558             :  * switching is performed asynchronously and may fail silently.
     559             :  */
     560             : static void inode_switch_wbs(struct inode *inode, int new_wb_id)
     561             : {
     562             :         struct backing_dev_info *bdi = inode_to_bdi(inode);
     563             :         struct cgroup_subsys_state *memcg_css;
     564             :         struct inode_switch_wbs_context *isw;
     565             : 
     566             :         /* noop if seems to be already in progress */
     567             :         if (inode->i_state & I_WB_SWITCH)
     568             :                 return;
     569             : 
     570             :         /* avoid queueing a new switch if too many are already in flight */
     571             :         if (atomic_read(&isw_nr_in_flight) > WB_FRN_MAX_IN_FLIGHT)
     572             :                 return;
     573             : 
     574             :         isw = kzalloc(struct_size(isw, inodes, 2), GFP_ATOMIC);
     575             :         if (!isw)
     576             :                 return;
     577             : 
     578             :         atomic_inc(&isw_nr_in_flight);
     579             : 
     580             :         /* find and pin the new wb */
     581             :         rcu_read_lock();
     582             :         memcg_css = css_from_id(new_wb_id, &memory_cgrp_subsys);
     583             :         if (memcg_css && !css_tryget(memcg_css))
     584             :                 memcg_css = NULL;
     585             :         rcu_read_unlock();
     586             :         if (!memcg_css)
     587             :                 goto out_free;
     588             : 
     589             :         isw->new_wb = wb_get_create(bdi, memcg_css, GFP_ATOMIC);
     590             :         css_put(memcg_css);
     591             :         if (!isw->new_wb)
     592             :                 goto out_free;
     593             : 
     594             :         if (!inode_prepare_wbs_switch(inode, isw->new_wb))
     595             :                 goto out_free;
     596             : 
     597             :         isw->inodes[0] = inode;
     598             : 
     599             :         /*
     600             :          * In addition to synchronizing among switchers, I_WB_SWITCH tells
     601             :          * the RCU protected stat update paths to grab the i_page
     602             :          * lock so that stat transfer can synchronize against them.
     603             :          * Let's continue after I_WB_SWITCH is guaranteed to be visible.
     604             :          */
     605             :         INIT_RCU_WORK(&isw->work, inode_switch_wbs_work_fn);
     606             :         queue_rcu_work(isw_wq, &isw->work);
     607             :         return;
     608             : 
     609             : out_free:
     610             :         atomic_dec(&isw_nr_in_flight);
     611             :         if (isw->new_wb)
     612             :                 wb_put(isw->new_wb);
     613             :         kfree(isw);
     614             : }
     615             : 
     616             : /**
     617             :  * cleanup_offline_cgwb - detach associated inodes
     618             :  * @wb: target wb
     619             :  *
     620             :  * Switch all inodes attached to @wb to a nearest living ancestor's wb in order
     621             :  * to eventually release the dying @wb.  Returns %true if not all inodes were
     622             :  * switched and the function has to be restarted.
     623             :  */
     624             : bool cleanup_offline_cgwb(struct bdi_writeback *wb)
     625             : {
     626             :         struct cgroup_subsys_state *memcg_css;
     627             :         struct inode_switch_wbs_context *isw;
     628             :         struct inode *inode;
     629             :         int nr;
     630             :         bool restart = false;
     631             : 
     632             :         isw = kzalloc(struct_size(isw, inodes, WB_MAX_INODES_PER_ISW),
     633             :                       GFP_KERNEL);
     634             :         if (!isw)
     635             :                 return restart;
     636             : 
     637             :         atomic_inc(&isw_nr_in_flight);
     638             : 
     639             :         for (memcg_css = wb->memcg_css->parent; memcg_css;
     640             :              memcg_css = memcg_css->parent) {
     641             :                 isw->new_wb = wb_get_create(wb->bdi, memcg_css, GFP_KERNEL);
     642             :                 if (isw->new_wb)
     643             :                         break;
     644             :         }
     645             :         if (unlikely(!isw->new_wb))
     646             :                 isw->new_wb = &wb->bdi->wb; /* wb_get() is noop for bdi's wb */
     647             : 
     648             :         nr = 0;
     649             :         spin_lock(&wb->list_lock);
     650             :         list_for_each_entry(inode, &wb->b_attached, i_io_list) {
     651             :                 if (!inode_prepare_wbs_switch(inode, isw->new_wb))
     652             :                         continue;
     653             : 
     654             :                 isw->inodes[nr++] = inode;
     655             : 
     656             :                 if (nr >= WB_MAX_INODES_PER_ISW - 1) {
     657             :                         restart = true;
     658             :                         break;
     659             :                 }
     660             :         }
     661             :         spin_unlock(&wb->list_lock);
     662             : 
     663             :         /* no attached inodes? bail out */
     664             :         if (nr == 0) {
     665             :                 atomic_dec(&isw_nr_in_flight);
     666             :                 wb_put(isw->new_wb);
     667             :                 kfree(isw);
     668             :                 return restart;
     669             :         }
     670             : 
     671             :         /*
     672             :          * In addition to synchronizing among switchers, I_WB_SWITCH tells
     673             :          * the RCU protected stat update paths to grab the i_page
     674             :          * lock so that stat transfer can synchronize against them.
     675             :          * Let's continue after I_WB_SWITCH is guaranteed to be visible.
     676             :          */
     677             :         INIT_RCU_WORK(&isw->work, inode_switch_wbs_work_fn);
     678             :         queue_rcu_work(isw_wq, &isw->work);
     679             : 
     680             :         return restart;
     681             : }
     682             : 
     683             : /**
     684             :  * wbc_attach_and_unlock_inode - associate wbc with target inode and unlock it
     685             :  * @wbc: writeback_control of interest
     686             :  * @inode: target inode
     687             :  *
     688             :  * @inode is locked and about to be written back under the control of @wbc.
     689             :  * Record @inode's writeback context into @wbc and unlock the i_lock.  On
     690             :  * writeback completion, wbc_detach_inode() should be called.  This is used
     691             :  * to track the cgroup writeback context.
     692             :  */
     693             : void wbc_attach_and_unlock_inode(struct writeback_control *wbc,
     694             :                                  struct inode *inode)
     695             : {
     696             :         if (!inode_cgwb_enabled(inode)) {
     697             :                 spin_unlock(&inode->i_lock);
     698             :                 return;
     699             :         }
     700             : 
     701             :         wbc->wb = inode_to_wb(inode);
     702             :         wbc->inode = inode;
     703             : 
     704             :         wbc->wb_id = wbc->wb->memcg_css->id;
     705             :         wbc->wb_lcand_id = inode->i_wb_frn_winner;
     706             :         wbc->wb_tcand_id = 0;
     707             :         wbc->wb_bytes = 0;
     708             :         wbc->wb_lcand_bytes = 0;
     709             :         wbc->wb_tcand_bytes = 0;
     710             : 
     711             :         wb_get(wbc->wb);
     712             :         spin_unlock(&inode->i_lock);
     713             : 
     714             :         /*
     715             :          * A dying wb indicates that either the blkcg associated with the
     716             :          * memcg changed or the associated memcg is dying.  In the first
     717             :          * case, a replacement wb should already be available and we should
     718             :          * refresh the wb immediately.  In the second case, trying to
     719             :          * refresh will keep failing.
     720             :          */
     721             :         if (unlikely(wb_dying(wbc->wb) && !css_is_dying(wbc->wb->memcg_css)))
     722             :                 inode_switch_wbs(inode, wbc->wb_id);
     723             : }
     724             : EXPORT_SYMBOL_GPL(wbc_attach_and_unlock_inode);
     725             : 
     726             : /**
     727             :  * wbc_detach_inode - disassociate wbc from inode and perform foreign detection
     728             :  * @wbc: writeback_control of the just finished writeback
     729             :  *
     730             :  * To be called after a writeback attempt of an inode finishes and undoes
     731             :  * wbc_attach_and_unlock_inode().  Can be called under any context.
     732             :  *
     733             :  * As concurrent write sharing of an inode is expected to be very rare and
     734             :  * memcg only tracks page ownership on first-use basis severely confining
     735             :  * the usefulness of such sharing, cgroup writeback tracks ownership
     736             :  * per-inode.  While the support for concurrent write sharing of an inode
     737             :  * is deemed unnecessary, an inode being written to by different cgroups at
     738             :  * different points in time is a lot more common, and, more importantly,
     739             :  * charging only by first-use can too readily lead to grossly incorrect
     740             :  * behaviors (single foreign page can lead to gigabytes of writeback to be
     741             :  * incorrectly attributed).
     742             :  *
     743             :  * To resolve this issue, cgroup writeback detects the majority dirtier of
     744             :  * an inode and transfers the ownership to it.  To avoid unnecessary
     745             :  * oscillation, the detection mechanism keeps track of history and gives
     746             :  * out the switch verdict only if the foreign usage pattern is stable over
     747             :  * a certain amount of time and/or writeback attempts.
     748             :  *
     749             :  * On each writeback attempt, @wbc tries to detect the majority writer
     750             :  * using Boyer-Moore majority vote algorithm.  In addition to the byte
     751             :  * count from the majority voting, it also counts the bytes written for the
     752             :  * current wb and the last round's winner wb (max of last round's current
     753             :  * wb, the winner from two rounds ago, and the last round's majority
     754             :  * candidate).  Keeping track of the historical winner helps the algorithm
     755             :  * to semi-reliably detect the most active writer even when it's not the
     756             :  * absolute majority.
     757             :  *
     758             :  * Once the winner of the round is determined, whether the winner is
     759             :  * foreign or not and how much IO time the round consumed is recorded in
     760             :  * inode->i_wb_frn_history.  If the amount of recorded foreign IO time is
     761             :  * over a certain threshold, the switch verdict is given.
     762             :  */
     763             : void wbc_detach_inode(struct writeback_control *wbc)
     764             : {
     765             :         struct bdi_writeback *wb = wbc->wb;
     766             :         struct inode *inode = wbc->inode;
     767             :         unsigned long avg_time, max_bytes, max_time;
     768             :         u16 history;
     769             :         int max_id;
     770             : 
     771             :         if (!wb)
     772             :                 return;
     773             : 
     774             :         history = inode->i_wb_frn_history;
     775             :         avg_time = inode->i_wb_frn_avg_time;
     776             : 
     777             :         /* pick the winner of this round */
     778             :         if (wbc->wb_bytes >= wbc->wb_lcand_bytes &&
     779             :             wbc->wb_bytes >= wbc->wb_tcand_bytes) {
     780             :                 max_id = wbc->wb_id;
     781             :                 max_bytes = wbc->wb_bytes;
     782             :         } else if (wbc->wb_lcand_bytes >= wbc->wb_tcand_bytes) {
     783             :                 max_id = wbc->wb_lcand_id;
     784             :                 max_bytes = wbc->wb_lcand_bytes;
     785             :         } else {
     786             :                 max_id = wbc->wb_tcand_id;
     787             :                 max_bytes = wbc->wb_tcand_bytes;
     788             :         }
     789             : 
     790             :         /*
     791             :          * Calculate the amount of IO time the winner consumed and fold it
     792             :          * into the running average kept per inode.  If the consumed IO
     793             :          * time is lower than avag / WB_FRN_TIME_CUT_DIV, ignore it for
     794             :          * deciding whether to switch or not.  This is to prevent one-off
     795             :          * small dirtiers from skewing the verdict.
     796             :          */
     797             :         max_time = DIV_ROUND_UP((max_bytes >> PAGE_SHIFT) << WB_FRN_TIME_SHIFT,
     798             :                                 wb->avg_write_bandwidth);
     799             :         if (avg_time)
     800             :                 avg_time += (max_time >> WB_FRN_TIME_AVG_SHIFT) -
     801             :                             (avg_time >> WB_FRN_TIME_AVG_SHIFT);
     802             :         else
     803             :                 avg_time = max_time;    /* immediate catch up on first run */
     804             : 
     805             :         if (max_time >= avg_time / WB_FRN_TIME_CUT_DIV) {
     806             :                 int slots;
     807             : 
     808             :                 /*
     809             :                  * The switch verdict is reached if foreign wb's consume
     810             :                  * more than a certain proportion of IO time in a
     811             :                  * WB_FRN_TIME_PERIOD.  This is loosely tracked by 16 slot
     812             :                  * history mask where each bit represents one sixteenth of
     813             :                  * the period.  Determine the number of slots to shift into
     814             :                  * history from @max_time.
     815             :                  */
     816             :                 slots = min(DIV_ROUND_UP(max_time, WB_FRN_HIST_UNIT),
     817             :                             (unsigned long)WB_FRN_HIST_MAX_SLOTS);
     818             :                 history <<= slots;
     819             :                 if (wbc->wb_id != max_id)
     820             :                         history |= (1U << slots) - 1;
     821             : 
     822             :                 if (history)
     823             :                         trace_inode_foreign_history(inode, wbc, history);
     824             : 
     825             :                 /*
     826             :                  * Switch if the current wb isn't the consistent winner.
     827             :                  * If there are multiple closely competing dirtiers, the
     828             :                  * inode may switch across them repeatedly over time, which
     829             :                  * is okay.  The main goal is avoiding keeping an inode on
     830             :                  * the wrong wb for an extended period of time.
     831             :                  */
     832             :                 if (hweight16(history) > WB_FRN_HIST_THR_SLOTS)
     833             :                         inode_switch_wbs(inode, max_id);
     834             :         }
     835             : 
     836             :         /*
     837             :          * Multiple instances of this function may race to update the
     838             :          * following fields but we don't mind occassional inaccuracies.
     839             :          */
     840             :         inode->i_wb_frn_winner = max_id;
     841             :         inode->i_wb_frn_avg_time = min(avg_time, (unsigned long)U16_MAX);
     842             :         inode->i_wb_frn_history = history;
     843             : 
     844             :         wb_put(wbc->wb);
     845             :         wbc->wb = NULL;
     846             : }
     847             : EXPORT_SYMBOL_GPL(wbc_detach_inode);
     848             : 
     849             : /**
     850             :  * wbc_account_cgroup_owner - account writeback to update inode cgroup ownership
     851             :  * @wbc: writeback_control of the writeback in progress
     852             :  * @page: page being written out
     853             :  * @bytes: number of bytes being written out
     854             :  *
     855             :  * @bytes from @page are about to written out during the writeback
     856             :  * controlled by @wbc.  Keep the book for foreign inode detection.  See
     857             :  * wbc_detach_inode().
     858             :  */
     859             : void wbc_account_cgroup_owner(struct writeback_control *wbc, struct page *page,
     860             :                               size_t bytes)
     861             : {
     862             :         struct folio *folio;
     863             :         struct cgroup_subsys_state *css;
     864             :         int id;
     865             : 
     866             :         /*
     867             :          * pageout() path doesn't attach @wbc to the inode being written
     868             :          * out.  This is intentional as we don't want the function to block
     869             :          * behind a slow cgroup.  Ultimately, we want pageout() to kick off
     870             :          * regular writeback instead of writing things out itself.
     871             :          */
     872             :         if (!wbc->wb || wbc->no_cgroup_owner)
     873             :                 return;
     874             : 
     875             :         folio = page_folio(page);
     876             :         css = mem_cgroup_css_from_folio(folio);
     877             :         /* dead cgroups shouldn't contribute to inode ownership arbitration */
     878             :         if (!(css->flags & CSS_ONLINE))
     879             :                 return;
     880             : 
     881             :         id = css->id;
     882             : 
     883             :         if (id == wbc->wb_id) {
     884             :                 wbc->wb_bytes += bytes;
     885             :                 return;
     886             :         }
     887             : 
     888             :         if (id == wbc->wb_lcand_id)
     889             :                 wbc->wb_lcand_bytes += bytes;
     890             : 
     891             :         /* Boyer-Moore majority vote algorithm */
     892             :         if (!wbc->wb_tcand_bytes)
     893             :                 wbc->wb_tcand_id = id;
     894             :         if (id == wbc->wb_tcand_id)
     895             :                 wbc->wb_tcand_bytes += bytes;
     896             :         else
     897             :                 wbc->wb_tcand_bytes -= min(bytes, wbc->wb_tcand_bytes);
     898             : }
     899             : EXPORT_SYMBOL_GPL(wbc_account_cgroup_owner);
     900             : 
     901             : /**
     902             :  * wb_split_bdi_pages - split nr_pages to write according to bandwidth
     903             :  * @wb: target bdi_writeback to split @nr_pages to
     904             :  * @nr_pages: number of pages to write for the whole bdi
     905             :  *
     906             :  * Split @wb's portion of @nr_pages according to @wb's write bandwidth in
     907             :  * relation to the total write bandwidth of all wb's w/ dirty inodes on
     908             :  * @wb->bdi.
     909             :  */
     910             : static long wb_split_bdi_pages(struct bdi_writeback *wb, long nr_pages)
     911             : {
     912             :         unsigned long this_bw = wb->avg_write_bandwidth;
     913             :         unsigned long tot_bw = atomic_long_read(&wb->bdi->tot_write_bandwidth);
     914             : 
     915             :         if (nr_pages == LONG_MAX)
     916             :                 return LONG_MAX;
     917             : 
     918             :         /*
     919             :          * This may be called on clean wb's and proportional distribution
     920             :          * may not make sense, just use the original @nr_pages in those
     921             :          * cases.  In general, we wanna err on the side of writing more.
     922             :          */
     923             :         if (!tot_bw || this_bw >= tot_bw)
     924             :                 return nr_pages;
     925             :         else
     926             :                 return DIV_ROUND_UP_ULL((u64)nr_pages * this_bw, tot_bw);
     927             : }
     928             : 
     929             : /**
     930             :  * bdi_split_work_to_wbs - split a wb_writeback_work to all wb's of a bdi
     931             :  * @bdi: target backing_dev_info
     932             :  * @base_work: wb_writeback_work to issue
     933             :  * @skip_if_busy: skip wb's which already have writeback in progress
     934             :  *
     935             :  * Split and issue @base_work to all wb's (bdi_writeback's) of @bdi which
     936             :  * have dirty inodes.  If @base_work->nr_page isn't %LONG_MAX, it's
     937             :  * distributed to the busy wbs according to each wb's proportion in the
     938             :  * total active write bandwidth of @bdi.
     939             :  */
     940             : static void bdi_split_work_to_wbs(struct backing_dev_info *bdi,
     941             :                                   struct wb_writeback_work *base_work,
     942             :                                   bool skip_if_busy)
     943             : {
     944             :         struct bdi_writeback *last_wb = NULL;
     945             :         struct bdi_writeback *wb = list_entry(&bdi->wb_list,
     946             :                                               struct bdi_writeback, bdi_node);
     947             : 
     948             :         might_sleep();
     949             : restart:
     950             :         rcu_read_lock();
     951             :         list_for_each_entry_continue_rcu(wb, &bdi->wb_list, bdi_node) {
     952             :                 DEFINE_WB_COMPLETION(fallback_work_done, bdi);
     953             :                 struct wb_writeback_work fallback_work;
     954             :                 struct wb_writeback_work *work;
     955             :                 long nr_pages;
     956             : 
     957             :                 if (last_wb) {
     958             :                         wb_put(last_wb);
     959             :                         last_wb = NULL;
     960             :                 }
     961             : 
     962             :                 /* SYNC_ALL writes out I_DIRTY_TIME too */
     963             :                 if (!wb_has_dirty_io(wb) &&
     964             :                     (base_work->sync_mode == WB_SYNC_NONE ||
     965             :                      list_empty(&wb->b_dirty_time)))
     966             :                         continue;
     967             :                 if (skip_if_busy && writeback_in_progress(wb))
     968             :                         continue;
     969             : 
     970             :                 nr_pages = wb_split_bdi_pages(wb, base_work->nr_pages);
     971             : 
     972             :                 work = kmalloc(sizeof(*work), GFP_ATOMIC);
     973             :                 if (work) {
     974             :                         *work = *base_work;
     975             :                         work->nr_pages = nr_pages;
     976             :                         work->auto_free = 1;
     977             :                         wb_queue_work(wb, work);
     978             :                         continue;
     979             :                 }
     980             : 
     981             :                 /*
     982             :                  * If wb_tryget fails, the wb has been shutdown, skip it.
     983             :                  *
     984             :                  * Pin @wb so that it stays on @bdi->wb_list.  This allows
     985             :                  * continuing iteration from @wb after dropping and
     986             :                  * regrabbing rcu read lock.
     987             :                  */
     988             :                 if (!wb_tryget(wb))
     989             :                         continue;
     990             : 
     991             :                 /* alloc failed, execute synchronously using on-stack fallback */
     992             :                 work = &fallback_work;
     993             :                 *work = *base_work;
     994             :                 work->nr_pages = nr_pages;
     995             :                 work->auto_free = 0;
     996             :                 work->done = &fallback_work_done;
     997             : 
     998             :                 wb_queue_work(wb, work);
     999             :                 last_wb = wb;
    1000             : 
    1001             :                 rcu_read_unlock();
    1002             :                 wb_wait_for_completion(&fallback_work_done);
    1003             :                 goto restart;
    1004             :         }
    1005             :         rcu_read_unlock();
    1006             : 
    1007             :         if (last_wb)
    1008             :                 wb_put(last_wb);
    1009             : }
    1010             : 
    1011             : /**
    1012             :  * cgroup_writeback_by_id - initiate cgroup writeback from bdi and memcg IDs
    1013             :  * @bdi_id: target bdi id
    1014             :  * @memcg_id: target memcg css id
    1015             :  * @reason: reason why some writeback work initiated
    1016             :  * @done: target wb_completion
    1017             :  *
    1018             :  * Initiate flush of the bdi_writeback identified by @bdi_id and @memcg_id
    1019             :  * with the specified parameters.
    1020             :  */
    1021             : int cgroup_writeback_by_id(u64 bdi_id, int memcg_id,
    1022             :                            enum wb_reason reason, struct wb_completion *done)
    1023             : {
    1024             :         struct backing_dev_info *bdi;
    1025             :         struct cgroup_subsys_state *memcg_css;
    1026             :         struct bdi_writeback *wb;
    1027             :         struct wb_writeback_work *work;
    1028             :         unsigned long dirty;
    1029             :         int ret;
    1030             : 
    1031             :         /* lookup bdi and memcg */
    1032             :         bdi = bdi_get_by_id(bdi_id);
    1033             :         if (!bdi)
    1034             :                 return -ENOENT;
    1035             : 
    1036             :         rcu_read_lock();
    1037             :         memcg_css = css_from_id(memcg_id, &memory_cgrp_subsys);
    1038             :         if (memcg_css && !css_tryget(memcg_css))
    1039             :                 memcg_css = NULL;
    1040             :         rcu_read_unlock();
    1041             :         if (!memcg_css) {
    1042             :                 ret = -ENOENT;
    1043             :                 goto out_bdi_put;
    1044             :         }
    1045             : 
    1046             :         /*
    1047             :          * And find the associated wb.  If the wb isn't there already
    1048             :          * there's nothing to flush, don't create one.
    1049             :          */
    1050             :         wb = wb_get_lookup(bdi, memcg_css);
    1051             :         if (!wb) {
    1052             :                 ret = -ENOENT;
    1053             :                 goto out_css_put;
    1054             :         }
    1055             : 
    1056             :         /*
    1057             :          * The caller is attempting to write out most of
    1058             :          * the currently dirty pages.  Let's take the current dirty page
    1059             :          * count and inflate it by 25% which should be large enough to
    1060             :          * flush out most dirty pages while avoiding getting livelocked by
    1061             :          * concurrent dirtiers.
    1062             :          *
    1063             :          * BTW the memcg stats are flushed periodically and this is best-effort
    1064             :          * estimation, so some potential error is ok.
    1065             :          */
    1066             :         dirty = memcg_page_state(mem_cgroup_from_css(memcg_css), NR_FILE_DIRTY);
    1067             :         dirty = dirty * 10 / 8;
    1068             : 
    1069             :         /* issue the writeback work */
    1070             :         work = kzalloc(sizeof(*work), GFP_NOWAIT | __GFP_NOWARN);
    1071             :         if (work) {
    1072             :                 work->nr_pages = dirty;
    1073             :                 work->sync_mode = WB_SYNC_NONE;
    1074             :                 work->range_cyclic = 1;
    1075             :                 work->reason = reason;
    1076             :                 work->done = done;
    1077             :                 work->auto_free = 1;
    1078             :                 wb_queue_work(wb, work);
    1079             :                 ret = 0;
    1080             :         } else {
    1081             :                 ret = -ENOMEM;
    1082             :         }
    1083             : 
    1084             :         wb_put(wb);
    1085             : out_css_put:
    1086             :         css_put(memcg_css);
    1087             : out_bdi_put:
    1088             :         bdi_put(bdi);
    1089             :         return ret;
    1090             : }
    1091             : 
    1092             : /**
    1093             :  * cgroup_writeback_umount - flush inode wb switches for umount
    1094             :  *
    1095             :  * This function is called when a super_block is about to be destroyed and
    1096             :  * flushes in-flight inode wb switches.  An inode wb switch goes through
    1097             :  * RCU and then workqueue, so the two need to be flushed in order to ensure
    1098             :  * that all previously scheduled switches are finished.  As wb switches are
    1099             :  * rare occurrences and synchronize_rcu() can take a while, perform
    1100             :  * flushing iff wb switches are in flight.
    1101             :  */
    1102             : void cgroup_writeback_umount(void)
    1103             : {
    1104             :         /*
    1105             :          * SB_ACTIVE should be reliably cleared before checking
    1106             :          * isw_nr_in_flight, see generic_shutdown_super().
    1107             :          */
    1108             :         smp_mb();
    1109             : 
    1110             :         if (atomic_read(&isw_nr_in_flight)) {
    1111             :                 /*
    1112             :                  * Use rcu_barrier() to wait for all pending callbacks to
    1113             :                  * ensure that all in-flight wb switches are in the workqueue.
    1114             :                  */
    1115             :                 rcu_barrier();
    1116             :                 flush_workqueue(isw_wq);
    1117             :         }
    1118             : }
    1119             : 
    1120             : static int __init cgroup_writeback_init(void)
    1121             : {
    1122             :         isw_wq = alloc_workqueue("inode_switch_wbs", 0, 0);
    1123             :         if (!isw_wq)
    1124             :                 return -ENOMEM;
    1125             :         return 0;
    1126             : }
    1127             : fs_initcall(cgroup_writeback_init);
    1128             : 
    1129             : #else   /* CONFIG_CGROUP_WRITEBACK */
    1130             : 
    1131             : static void bdi_down_write_wb_switch_rwsem(struct backing_dev_info *bdi) { }
    1132             : static void bdi_up_write_wb_switch_rwsem(struct backing_dev_info *bdi) { }
    1133             : 
    1134           0 : static void inode_cgwb_move_to_attached(struct inode *inode,
    1135             :                                         struct bdi_writeback *wb)
    1136             : {
    1137             :         assert_spin_locked(&wb->list_lock);
    1138             :         assert_spin_locked(&inode->i_lock);
    1139           0 :         WARN_ON_ONCE(inode->i_state & I_FREEING);
    1140             : 
    1141           0 :         inode->i_state &= ~I_SYNC_QUEUED;
    1142           0 :         list_del_init(&inode->i_io_list);
    1143           0 :         wb_io_lists_depopulated(wb);
    1144           0 : }
    1145             : 
    1146             : static struct bdi_writeback *
    1147             : locked_inode_to_wb_and_lock_list(struct inode *inode)
    1148             :         __releases(&inode->i_lock)
    1149             :         __acquires(&wb->list_lock)
    1150             : {
    1151           0 :         struct bdi_writeback *wb = inode_to_wb(inode);
    1152             : 
    1153           0 :         spin_unlock(&inode->i_lock);
    1154           0 :         spin_lock(&wb->list_lock);
    1155             :         return wb;
    1156             : }
    1157             : 
    1158             : static struct bdi_writeback *inode_to_wb_and_lock_list(struct inode *inode)
    1159             :         __acquires(&wb->list_lock)
    1160             : {
    1161           0 :         struct bdi_writeback *wb = inode_to_wb(inode);
    1162             : 
    1163           0 :         spin_lock(&wb->list_lock);
    1164             :         return wb;
    1165             : }
    1166             : 
    1167             : static long wb_split_bdi_pages(struct bdi_writeback *wb, long nr_pages)
    1168             : {
    1169             :         return nr_pages;
    1170             : }
    1171             : 
    1172           0 : static void bdi_split_work_to_wbs(struct backing_dev_info *bdi,
    1173             :                                   struct wb_writeback_work *base_work,
    1174             :                                   bool skip_if_busy)
    1175             : {
    1176             :         might_sleep();
    1177             : 
    1178           0 :         if (!skip_if_busy || !writeback_in_progress(&bdi->wb)) {
    1179           0 :                 base_work->auto_free = 0;
    1180           0 :                 wb_queue_work(&bdi->wb, base_work);
    1181             :         }
    1182           0 : }
    1183             : 
    1184             : #endif  /* CONFIG_CGROUP_WRITEBACK */
    1185             : 
    1186             : /*
    1187             :  * Add in the number of potentially dirty inodes, because each inode
    1188             :  * write can dirty pagecache in the underlying blockdev.
    1189             :  */
    1190             : static unsigned long get_nr_dirty_pages(void)
    1191             : {
    1192          10 :         return global_node_page_state(NR_FILE_DIRTY) +
    1193           5 :                 get_nr_dirty_inodes();
    1194             : }
    1195             : 
    1196           0 : static void wb_start_writeback(struct bdi_writeback *wb, enum wb_reason reason)
    1197             : {
    1198           0 :         if (!wb_has_dirty_io(wb))
    1199             :                 return;
    1200             : 
    1201             :         /*
    1202             :          * All callers of this function want to start writeback of all
    1203             :          * dirty pages. Places like vmscan can call this at a very
    1204             :          * high frequency, causing pointless allocations of tons of
    1205             :          * work items and keeping the flusher threads busy retrieving
    1206             :          * that work. Ensure that we only allow one of them pending and
    1207             :          * inflight at the time.
    1208             :          */
    1209           0 :         if (test_bit(WB_start_all, &wb->state) ||
    1210           0 :             test_and_set_bit(WB_start_all, &wb->state))
    1211             :                 return;
    1212             : 
    1213           0 :         wb->start_all_reason = reason;
    1214           0 :         wb_wakeup(wb);
    1215             : }
    1216             : 
    1217             : /**
    1218             :  * wb_start_background_writeback - start background writeback
    1219             :  * @wb: bdi_writback to write from
    1220             :  *
    1221             :  * Description:
    1222             :  *   This makes sure WB_SYNC_NONE background writeback happens. When
    1223             :  *   this function returns, it is only guaranteed that for given wb
    1224             :  *   some IO is happening if we are over background dirty threshold.
    1225             :  *   Caller need not hold sb s_umount semaphore.
    1226             :  */
    1227           0 : void wb_start_background_writeback(struct bdi_writeback *wb)
    1228             : {
    1229             :         /*
    1230             :          * We just wake up the flusher thread. It will perform background
    1231             :          * writeback as soon as there is no other work to do.
    1232             :          */
    1233           0 :         trace_writeback_wake_background(wb);
    1234           0 :         wb_wakeup(wb);
    1235           0 : }
    1236             : 
    1237             : /*
    1238             :  * Remove the inode from the writeback list it is on.
    1239             :  */
    1240           0 : void inode_io_list_del(struct inode *inode)
    1241             : {
    1242             :         struct bdi_writeback *wb;
    1243             : 
    1244           0 :         wb = inode_to_wb_and_lock_list(inode);
    1245           0 :         spin_lock(&inode->i_lock);
    1246             : 
    1247           0 :         inode->i_state &= ~I_SYNC_QUEUED;
    1248           0 :         list_del_init(&inode->i_io_list);
    1249           0 :         wb_io_lists_depopulated(wb);
    1250             : 
    1251           0 :         spin_unlock(&inode->i_lock);
    1252           0 :         spin_unlock(&wb->list_lock);
    1253           0 : }
    1254             : EXPORT_SYMBOL(inode_io_list_del);
    1255             : 
    1256             : /*
    1257             :  * mark an inode as under writeback on the sb
    1258             :  */
    1259           0 : void sb_mark_inode_writeback(struct inode *inode)
    1260             : {
    1261           0 :         struct super_block *sb = inode->i_sb;
    1262             :         unsigned long flags;
    1263             : 
    1264           0 :         if (list_empty(&inode->i_wb_list)) {
    1265           0 :                 spin_lock_irqsave(&sb->s_inode_wblist_lock, flags);
    1266           0 :                 if (list_empty(&inode->i_wb_list)) {
    1267           0 :                         list_add_tail(&inode->i_wb_list, &sb->s_inodes_wb);
    1268             :                         trace_sb_mark_inode_writeback(inode);
    1269             :                 }
    1270           0 :                 spin_unlock_irqrestore(&sb->s_inode_wblist_lock, flags);
    1271             :         }
    1272           0 : }
    1273             : 
    1274             : /*
    1275             :  * clear an inode as under writeback on the sb
    1276             :  */
    1277           0 : void sb_clear_inode_writeback(struct inode *inode)
    1278             : {
    1279           0 :         struct super_block *sb = inode->i_sb;
    1280             :         unsigned long flags;
    1281             : 
    1282           0 :         if (!list_empty(&inode->i_wb_list)) {
    1283           0 :                 spin_lock_irqsave(&sb->s_inode_wblist_lock, flags);
    1284           0 :                 if (!list_empty(&inode->i_wb_list)) {
    1285           0 :                         list_del_init(&inode->i_wb_list);
    1286             :                         trace_sb_clear_inode_writeback(inode);
    1287             :                 }
    1288           0 :                 spin_unlock_irqrestore(&sb->s_inode_wblist_lock, flags);
    1289             :         }
    1290           0 : }
    1291             : 
    1292             : /*
    1293             :  * Redirty an inode: set its when-it-was dirtied timestamp and move it to the
    1294             :  * furthest end of its superblock's dirty-inode list.
    1295             :  *
    1296             :  * Before stamping the inode's ->dirtied_when, we check to see whether it is
    1297             :  * already the most-recently-dirtied inode on the b_dirty list.  If that is
    1298             :  * the case then the inode must have been redirtied while it was being written
    1299             :  * out and we don't reset its dirtied_when.
    1300             :  */
    1301           0 : static void redirty_tail_locked(struct inode *inode, struct bdi_writeback *wb)
    1302             : {
    1303             :         assert_spin_locked(&inode->i_lock);
    1304             : 
    1305           0 :         inode->i_state &= ~I_SYNC_QUEUED;
    1306             :         /*
    1307             :          * When the inode is being freed just don't bother with dirty list
    1308             :          * tracking. Flush worker will ignore this inode anyway and it will
    1309             :          * trigger assertions in inode_io_list_move_locked().
    1310             :          */
    1311           0 :         if (inode->i_state & I_FREEING) {
    1312           0 :                 list_del_init(&inode->i_io_list);
    1313           0 :                 wb_io_lists_depopulated(wb);
    1314           0 :                 return;
    1315             :         }
    1316           0 :         if (!list_empty(&wb->b_dirty)) {
    1317             :                 struct inode *tail;
    1318             : 
    1319           0 :                 tail = wb_inode(wb->b_dirty.next);
    1320           0 :                 if (time_before(inode->dirtied_when, tail->dirtied_when))
    1321           0 :                         inode->dirtied_when = jiffies;
    1322             :         }
    1323           0 :         inode_io_list_move_locked(inode, wb, &wb->b_dirty);
    1324             : }
    1325             : 
    1326             : static void redirty_tail(struct inode *inode, struct bdi_writeback *wb)
    1327             : {
    1328           0 :         spin_lock(&inode->i_lock);
    1329           0 :         redirty_tail_locked(inode, wb);
    1330           0 :         spin_unlock(&inode->i_lock);
    1331             : }
    1332             : 
    1333             : /*
    1334             :  * requeue inode for re-scanning after bdi->b_io list is exhausted.
    1335             :  */
    1336             : static void requeue_io(struct inode *inode, struct bdi_writeback *wb)
    1337             : {
    1338           0 :         inode_io_list_move_locked(inode, wb, &wb->b_more_io);
    1339             : }
    1340             : 
    1341           0 : static void inode_sync_complete(struct inode *inode)
    1342             : {
    1343           0 :         inode->i_state &= ~I_SYNC;
    1344             :         /* If inode is clean an unused, put it into LRU now... */
    1345           0 :         inode_add_lru(inode);
    1346             :         /* Waiters must see I_SYNC cleared before being woken up */
    1347           0 :         smp_mb();
    1348           0 :         wake_up_bit(&inode->i_state, __I_SYNC);
    1349           0 : }
    1350             : 
    1351             : static bool inode_dirtied_after(struct inode *inode, unsigned long t)
    1352             : {
    1353           0 :         bool ret = time_after(inode->dirtied_when, t);
    1354             : #ifndef CONFIG_64BIT
    1355             :         /*
    1356             :          * For inodes being constantly redirtied, dirtied_when can get stuck.
    1357             :          * It _appears_ to be in the future, but is actually in distant past.
    1358             :          * This test is necessary to prevent such wrapped-around relative times
    1359             :          * from permanently stopping the whole bdi writeback.
    1360             :          */
    1361             :         ret = ret && time_before_eq(inode->dirtied_when, jiffies);
    1362             : #endif
    1363             :         return ret;
    1364             : }
    1365             : 
    1366             : /*
    1367             :  * Move expired (dirtied before dirtied_before) dirty inodes from
    1368             :  * @delaying_queue to @dispatch_queue.
    1369             :  */
    1370           0 : static int move_expired_inodes(struct list_head *delaying_queue,
    1371             :                                struct list_head *dispatch_queue,
    1372             :                                unsigned long dirtied_before)
    1373             : {
    1374           0 :         LIST_HEAD(tmp);
    1375             :         struct list_head *pos, *node;
    1376           0 :         struct super_block *sb = NULL;
    1377             :         struct inode *inode;
    1378           0 :         int do_sb_sort = 0;
    1379           0 :         int moved = 0;
    1380             : 
    1381           0 :         while (!list_empty(delaying_queue)) {
    1382           0 :                 inode = wb_inode(delaying_queue->prev);
    1383           0 :                 if (inode_dirtied_after(inode, dirtied_before))
    1384             :                         break;
    1385           0 :                 spin_lock(&inode->i_lock);
    1386           0 :                 list_move(&inode->i_io_list, &tmp);
    1387           0 :                 moved++;
    1388           0 :                 inode->i_state |= I_SYNC_QUEUED;
    1389           0 :                 spin_unlock(&inode->i_lock);
    1390           0 :                 if (sb_is_blkdev_sb(inode->i_sb))
    1391           0 :                         continue;
    1392           0 :                 if (sb && sb != inode->i_sb)
    1393           0 :                         do_sb_sort = 1;
    1394             :                 sb = inode->i_sb;
    1395             :         }
    1396             : 
    1397             :         /* just one sb in list, splice to dispatch_queue and we're done */
    1398           0 :         if (!do_sb_sort) {
    1399             :                 list_splice(&tmp, dispatch_queue);
    1400             :                 goto out;
    1401             :         }
    1402             : 
    1403             :         /*
    1404             :          * Although inode's i_io_list is moved from 'tmp' to 'dispatch_queue',
    1405             :          * we don't take inode->i_lock here because it is just a pointless overhead.
    1406             :          * Inode is already marked as I_SYNC_QUEUED so writeback list handling is
    1407             :          * fully under our control.
    1408             :          */
    1409           0 :         while (!list_empty(&tmp)) {
    1410           0 :                 sb = wb_inode(tmp.prev)->i_sb;
    1411           0 :                 list_for_each_prev_safe(pos, node, &tmp) {
    1412           0 :                         inode = wb_inode(pos);
    1413           0 :                         if (inode->i_sb == sb)
    1414           0 :                                 list_move(&inode->i_io_list, dispatch_queue);
    1415             :                 }
    1416             :         }
    1417             : out:
    1418           0 :         return moved;
    1419             : }
    1420             : 
    1421             : /*
    1422             :  * Queue all expired dirty inodes for io, eldest first.
    1423             :  * Before
    1424             :  *         newly dirtied     b_dirty    b_io    b_more_io
    1425             :  *         =============>    gf         edc     BA
    1426             :  * After
    1427             :  *         newly dirtied     b_dirty    b_io    b_more_io
    1428             :  *         =============>    g          fBAedc
    1429             :  *                                           |
    1430             :  *                                           +--> dequeue for IO
    1431             :  */
    1432           0 : static void queue_io(struct bdi_writeback *wb, struct wb_writeback_work *work,
    1433             :                      unsigned long dirtied_before)
    1434             : {
    1435             :         int moved;
    1436           0 :         unsigned long time_expire_jif = dirtied_before;
    1437             : 
    1438             :         assert_spin_locked(&wb->list_lock);
    1439           0 :         list_splice_init(&wb->b_more_io, &wb->b_io);
    1440           0 :         moved = move_expired_inodes(&wb->b_dirty, &wb->b_io, dirtied_before);
    1441           0 :         if (!work->for_sync)
    1442           0 :                 time_expire_jif = jiffies - dirtytime_expire_interval * HZ;
    1443           0 :         moved += move_expired_inodes(&wb->b_dirty_time, &wb->b_io,
    1444             :                                      time_expire_jif);
    1445           0 :         if (moved)
    1446           0 :                 wb_io_lists_populated(wb);
    1447           0 :         trace_writeback_queue_io(wb, work, dirtied_before, moved);
    1448           0 : }
    1449             : 
    1450           0 : static int write_inode(struct inode *inode, struct writeback_control *wbc)
    1451             : {
    1452             :         int ret;
    1453             : 
    1454           0 :         if (inode->i_sb->s_op->write_inode && !is_bad_inode(inode)) {
    1455           0 :                 trace_writeback_write_inode_start(inode, wbc);
    1456           0 :                 ret = inode->i_sb->s_op->write_inode(inode, wbc);
    1457           0 :                 trace_writeback_write_inode(inode, wbc);
    1458           0 :                 return ret;
    1459             :         }
    1460             :         return 0;
    1461             : }
    1462             : 
    1463             : /*
    1464             :  * Wait for writeback on an inode to complete. Called with i_lock held.
    1465             :  * Caller must make sure inode cannot go away when we drop i_lock.
    1466             :  */
    1467          10 : static void __inode_wait_for_writeback(struct inode *inode)
    1468             :         __releases(inode->i_lock)
    1469             :         __acquires(inode->i_lock)
    1470             : {
    1471          20 :         DEFINE_WAIT_BIT(wq, &inode->i_state, __I_SYNC);
    1472             :         wait_queue_head_t *wqh;
    1473             : 
    1474          10 :         wqh = bit_waitqueue(&inode->i_state, __I_SYNC);
    1475          20 :         while (inode->i_state & I_SYNC) {
    1476           0 :                 spin_unlock(&inode->i_lock);
    1477           0 :                 __wait_on_bit(wqh, &wq, bit_wait,
    1478             :                               TASK_UNINTERRUPTIBLE);
    1479           0 :                 spin_lock(&inode->i_lock);
    1480             :         }
    1481          10 : }
    1482             : 
    1483             : /*
    1484             :  * Wait for writeback on an inode to complete. Caller must have inode pinned.
    1485             :  */
    1486          10 : void inode_wait_for_writeback(struct inode *inode)
    1487             : {
    1488          20 :         spin_lock(&inode->i_lock);
    1489          10 :         __inode_wait_for_writeback(inode);
    1490          20 :         spin_unlock(&inode->i_lock);
    1491          10 : }
    1492             : 
    1493             : /*
    1494             :  * Sleep until I_SYNC is cleared. This function must be called with i_lock
    1495             :  * held and drops it. It is aimed for callers not holding any inode reference
    1496             :  * so once i_lock is dropped, inode can go away.
    1497             :  */
    1498           0 : static void inode_sleep_on_writeback(struct inode *inode)
    1499             :         __releases(inode->i_lock)
    1500             : {
    1501           0 :         DEFINE_WAIT(wait);
    1502           0 :         wait_queue_head_t *wqh = bit_waitqueue(&inode->i_state, __I_SYNC);
    1503             :         int sleep;
    1504             : 
    1505           0 :         prepare_to_wait(wqh, &wait, TASK_UNINTERRUPTIBLE);
    1506           0 :         sleep = inode->i_state & I_SYNC;
    1507           0 :         spin_unlock(&inode->i_lock);
    1508           0 :         if (sleep)
    1509           0 :                 schedule();
    1510           0 :         finish_wait(wqh, &wait);
    1511           0 : }
    1512             : 
    1513             : /*
    1514             :  * Find proper writeback list for the inode depending on its current state and
    1515             :  * possibly also change of its state while we were doing writeback.  Here we
    1516             :  * handle things such as livelock prevention or fairness of writeback among
    1517             :  * inodes. This function can be called only by flusher thread - noone else
    1518             :  * processes all inodes in writeback lists and requeueing inodes behind flusher
    1519             :  * thread's back can have unexpected consequences.
    1520             :  */
    1521           0 : static void requeue_inode(struct inode *inode, struct bdi_writeback *wb,
    1522             :                           struct writeback_control *wbc)
    1523             : {
    1524           0 :         if (inode->i_state & I_FREEING)
    1525             :                 return;
    1526             : 
    1527             :         /*
    1528             :          * Sync livelock prevention. Each inode is tagged and synced in one
    1529             :          * shot. If still dirty, it will be redirty_tail()'ed below.  Update
    1530             :          * the dirty time to prevent enqueue and sync it again.
    1531             :          */
    1532           0 :         if ((inode->i_state & I_DIRTY) &&
    1533           0 :             (wbc->sync_mode == WB_SYNC_ALL || wbc->tagged_writepages))
    1534           0 :                 inode->dirtied_when = jiffies;
    1535             : 
    1536           0 :         if (wbc->pages_skipped) {
    1537             :                 /*
    1538             :                  * writeback is not making progress due to locked
    1539             :                  * buffers. Skip this inode for now.
    1540             :                  */
    1541           0 :                 redirty_tail_locked(inode, wb);
    1542           0 :                 return;
    1543             :         }
    1544             : 
    1545           0 :         if (mapping_tagged(inode->i_mapping, PAGECACHE_TAG_DIRTY)) {
    1546             :                 /*
    1547             :                  * We didn't write back all the pages.  nfs_writepages()
    1548             :                  * sometimes bales out without doing anything.
    1549             :                  */
    1550           0 :                 if (wbc->nr_to_write <= 0) {
    1551             :                         /* Slice used up. Queue for next turn. */
    1552             :                         requeue_io(inode, wb);
    1553             :                 } else {
    1554             :                         /*
    1555             :                          * Writeback blocked by something other than
    1556             :                          * congestion. Delay the inode for some time to
    1557             :                          * avoid spinning on the CPU (100% iowait)
    1558             :                          * retrying writeback of the dirty page/inode
    1559             :                          * that cannot be performed immediately.
    1560             :                          */
    1561           0 :                         redirty_tail_locked(inode, wb);
    1562             :                 }
    1563           0 :         } else if (inode->i_state & I_DIRTY) {
    1564             :                 /*
    1565             :                  * Filesystems can dirty the inode during writeback operations,
    1566             :                  * such as delayed allocation during submission or metadata
    1567             :                  * updates after data IO completion.
    1568             :                  */
    1569           0 :                 redirty_tail_locked(inode, wb);
    1570           0 :         } else if (inode->i_state & I_DIRTY_TIME) {
    1571           0 :                 inode->dirtied_when = jiffies;
    1572           0 :                 inode_io_list_move_locked(inode, wb, &wb->b_dirty_time);
    1573           0 :                 inode->i_state &= ~I_SYNC_QUEUED;
    1574             :         } else {
    1575             :                 /* The inode is clean. Remove from writeback lists. */
    1576           0 :                 inode_cgwb_move_to_attached(inode, wb);
    1577             :         }
    1578             : }
    1579             : 
    1580             : /*
    1581             :  * Write out an inode and its dirty pages (or some of its dirty pages, depending
    1582             :  * on @wbc->nr_to_write), and clear the relevant dirty flags from i_state.
    1583             :  *
    1584             :  * This doesn't remove the inode from the writeback list it is on, except
    1585             :  * potentially to move it from b_dirty_time to b_dirty due to timestamp
    1586             :  * expiration.  The caller is otherwise responsible for writeback list handling.
    1587             :  *
    1588             :  * The caller is also responsible for setting the I_SYNC flag beforehand and
    1589             :  * calling inode_sync_complete() to clear it afterwards.
    1590             :  */
    1591             : static int
    1592           0 : __writeback_single_inode(struct inode *inode, struct writeback_control *wbc)
    1593             : {
    1594           0 :         struct address_space *mapping = inode->i_mapping;
    1595           0 :         long nr_to_write = wbc->nr_to_write;
    1596             :         unsigned dirty;
    1597             :         int ret;
    1598             : 
    1599           0 :         WARN_ON(!(inode->i_state & I_SYNC));
    1600             : 
    1601           0 :         trace_writeback_single_inode_start(inode, wbc, nr_to_write);
    1602             : 
    1603           0 :         ret = do_writepages(mapping, wbc);
    1604             : 
    1605             :         /*
    1606             :          * Make sure to wait on the data before writing out the metadata.
    1607             :          * This is important for filesystems that modify metadata on data
    1608             :          * I/O completion. We don't do it for sync(2) writeback because it has a
    1609             :          * separate, external IO completion path and ->sync_fs for guaranteeing
    1610             :          * inode metadata is written back correctly.
    1611             :          */
    1612           0 :         if (wbc->sync_mode == WB_SYNC_ALL && !wbc->for_sync) {
    1613           0 :                 int err = filemap_fdatawait(mapping);
    1614           0 :                 if (ret == 0)
    1615           0 :                         ret = err;
    1616             :         }
    1617             : 
    1618             :         /*
    1619             :          * If the inode has dirty timestamps and we need to write them, call
    1620             :          * mark_inode_dirty_sync() to notify the filesystem about it and to
    1621             :          * change I_DIRTY_TIME into I_DIRTY_SYNC.
    1622             :          */
    1623           0 :         if ((inode->i_state & I_DIRTY_TIME) &&
    1624           0 :             (wbc->sync_mode == WB_SYNC_ALL ||
    1625           0 :              time_after(jiffies, inode->dirtied_time_when +
    1626             :                         dirtytime_expire_interval * HZ))) {
    1627           0 :                 trace_writeback_lazytime(inode);
    1628             :                 mark_inode_dirty_sync(inode);
    1629             :         }
    1630             : 
    1631             :         /*
    1632             :          * Get and clear the dirty flags from i_state.  This needs to be done
    1633             :          * after calling writepages because some filesystems may redirty the
    1634             :          * inode during writepages due to delalloc.  It also needs to be done
    1635             :          * after handling timestamp expiration, as that may dirty the inode too.
    1636             :          */
    1637           0 :         spin_lock(&inode->i_lock);
    1638           0 :         dirty = inode->i_state & I_DIRTY;
    1639           0 :         inode->i_state &= ~dirty;
    1640             : 
    1641             :         /*
    1642             :          * Paired with smp_mb() in __mark_inode_dirty().  This allows
    1643             :          * __mark_inode_dirty() to test i_state without grabbing i_lock -
    1644             :          * either they see the I_DIRTY bits cleared or we see the dirtied
    1645             :          * inode.
    1646             :          *
    1647             :          * I_DIRTY_PAGES is always cleared together above even if @mapping
    1648             :          * still has dirty pages.  The flag is reinstated after smp_mb() if
    1649             :          * necessary.  This guarantees that either __mark_inode_dirty()
    1650             :          * sees clear I_DIRTY_PAGES or we see PAGECACHE_TAG_DIRTY.
    1651             :          */
    1652           0 :         smp_mb();
    1653             : 
    1654           0 :         if (mapping_tagged(mapping, PAGECACHE_TAG_DIRTY))
    1655           0 :                 inode->i_state |= I_DIRTY_PAGES;
    1656           0 :         else if (unlikely(inode->i_state & I_PINNING_FSCACHE_WB)) {
    1657           0 :                 if (!(inode->i_state & I_DIRTY_PAGES)) {
    1658           0 :                         inode->i_state &= ~I_PINNING_FSCACHE_WB;
    1659           0 :                         wbc->unpinned_fscache_wb = true;
    1660           0 :                         dirty |= I_PINNING_FSCACHE_WB; /* Cause write_inode */
    1661             :                 }
    1662             :         }
    1663             : 
    1664           0 :         spin_unlock(&inode->i_lock);
    1665             : 
    1666             :         /* Don't write the inode if only I_DIRTY_PAGES was set */
    1667           0 :         if (dirty & ~I_DIRTY_PAGES) {
    1668           0 :                 int err = write_inode(inode, wbc);
    1669           0 :                 if (ret == 0)
    1670           0 :                         ret = err;
    1671             :         }
    1672           0 :         wbc->unpinned_fscache_wb = false;
    1673           0 :         trace_writeback_single_inode(inode, wbc, nr_to_write);
    1674           0 :         return ret;
    1675             : }
    1676             : 
    1677             : /*
    1678             :  * Write out an inode's dirty data and metadata on-demand, i.e. separately from
    1679             :  * the regular batched writeback done by the flusher threads in
    1680             :  * writeback_sb_inodes().  @wbc controls various aspects of the write, such as
    1681             :  * whether it is a data-integrity sync (%WB_SYNC_ALL) or not (%WB_SYNC_NONE).
    1682             :  *
    1683             :  * To prevent the inode from going away, either the caller must have a reference
    1684             :  * to the inode, or the inode must have I_WILL_FREE or I_FREEING set.
    1685             :  */
    1686           0 : static int writeback_single_inode(struct inode *inode,
    1687             :                                   struct writeback_control *wbc)
    1688             : {
    1689             :         struct bdi_writeback *wb;
    1690           0 :         int ret = 0;
    1691             : 
    1692           0 :         spin_lock(&inode->i_lock);
    1693           0 :         if (!atomic_read(&inode->i_count))
    1694           0 :                 WARN_ON(!(inode->i_state & (I_WILL_FREE|I_FREEING)));
    1695             :         else
    1696           0 :                 WARN_ON(inode->i_state & I_WILL_FREE);
    1697             : 
    1698           0 :         if (inode->i_state & I_SYNC) {
    1699             :                 /*
    1700             :                  * Writeback is already running on the inode.  For WB_SYNC_NONE,
    1701             :                  * that's enough and we can just return.  For WB_SYNC_ALL, we
    1702             :                  * must wait for the existing writeback to complete, then do
    1703             :                  * writeback again if there's anything left.
    1704             :                  */
    1705           0 :                 if (wbc->sync_mode != WB_SYNC_ALL)
    1706             :                         goto out;
    1707           0 :                 __inode_wait_for_writeback(inode);
    1708             :         }
    1709           0 :         WARN_ON(inode->i_state & I_SYNC);
    1710             :         /*
    1711             :          * If the inode is already fully clean, then there's nothing to do.
    1712             :          *
    1713             :          * For data-integrity syncs we also need to check whether any pages are
    1714             :          * still under writeback, e.g. due to prior WB_SYNC_NONE writeback.  If
    1715             :          * there are any such pages, we'll need to wait for them.
    1716             :          */
    1717           0 :         if (!(inode->i_state & I_DIRTY_ALL) &&
    1718           0 :             (wbc->sync_mode != WB_SYNC_ALL ||
    1719           0 :              !mapping_tagged(inode->i_mapping, PAGECACHE_TAG_WRITEBACK)))
    1720             :                 goto out;
    1721           0 :         inode->i_state |= I_SYNC;
    1722           0 :         wbc_attach_and_unlock_inode(wbc, inode);
    1723             : 
    1724           0 :         ret = __writeback_single_inode(inode, wbc);
    1725             : 
    1726           0 :         wbc_detach_inode(wbc);
    1727             : 
    1728           0 :         wb = inode_to_wb_and_lock_list(inode);
    1729           0 :         spin_lock(&inode->i_lock);
    1730             :         /*
    1731             :          * If the inode is freeing, its i_io_list shoudn't be updated
    1732             :          * as it can be finally deleted at this moment.
    1733             :          */
    1734           0 :         if (!(inode->i_state & I_FREEING)) {
    1735             :                 /*
    1736             :                  * If the inode is now fully clean, then it can be safely
    1737             :                  * removed from its writeback list (if any). Otherwise the
    1738             :                  * flusher threads are responsible for the writeback lists.
    1739             :                  */
    1740           0 :                 if (!(inode->i_state & I_DIRTY_ALL))
    1741           0 :                         inode_cgwb_move_to_attached(inode, wb);
    1742           0 :                 else if (!(inode->i_state & I_SYNC_QUEUED)) {
    1743           0 :                         if ((inode->i_state & I_DIRTY))
    1744           0 :                                 redirty_tail_locked(inode, wb);
    1745           0 :                         else if (inode->i_state & I_DIRTY_TIME) {
    1746           0 :                                 inode->dirtied_when = jiffies;
    1747           0 :                                 inode_io_list_move_locked(inode,
    1748             :                                                           wb,
    1749             :                                                           &wb->b_dirty_time);
    1750             :                         }
    1751             :                 }
    1752             :         }
    1753             : 
    1754           0 :         spin_unlock(&wb->list_lock);
    1755           0 :         inode_sync_complete(inode);
    1756             : out:
    1757           0 :         spin_unlock(&inode->i_lock);
    1758           0 :         return ret;
    1759             : }
    1760             : 
    1761             : static long writeback_chunk_size(struct bdi_writeback *wb,
    1762             :                                  struct wb_writeback_work *work)
    1763             : {
    1764             :         long pages;
    1765             : 
    1766             :         /*
    1767             :          * WB_SYNC_ALL mode does livelock avoidance by syncing dirty
    1768             :          * inodes/pages in one big loop. Setting wbc.nr_to_write=LONG_MAX
    1769             :          * here avoids calling into writeback_inodes_wb() more than once.
    1770             :          *
    1771             :          * The intended call sequence for WB_SYNC_ALL writeback is:
    1772             :          *
    1773             :          *      wb_writeback()
    1774             :          *          writeback_sb_inodes()       <== called only once
    1775             :          *              write_cache_pages()     <== called once for each inode
    1776             :          *                   (quickly) tag currently dirty pages
    1777             :          *                   (maybe slowly) sync all tagged pages
    1778             :          */
    1779           0 :         if (work->sync_mode == WB_SYNC_ALL || work->tagged_writepages)
    1780             :                 pages = LONG_MAX;
    1781             :         else {
    1782           0 :                 pages = min(wb->avg_write_bandwidth / 2,
    1783             :                             global_wb_domain.dirty_limit / DIRTY_SCOPE);
    1784           0 :                 pages = min(pages, work->nr_pages);
    1785           0 :                 pages = round_down(pages + MIN_WRITEBACK_PAGES,
    1786             :                                    MIN_WRITEBACK_PAGES);
    1787             :         }
    1788             : 
    1789             :         return pages;
    1790             : }
    1791             : 
    1792             : /*
    1793             :  * Write a portion of b_io inodes which belong to @sb.
    1794             :  *
    1795             :  * Return the number of pages and/or inodes written.
    1796             :  *
    1797             :  * NOTE! This is called with wb->list_lock held, and will
    1798             :  * unlock and relock that for each inode it ends up doing
    1799             :  * IO for.
    1800             :  */
    1801           0 : static long writeback_sb_inodes(struct super_block *sb,
    1802             :                                 struct bdi_writeback *wb,
    1803             :                                 struct wb_writeback_work *work)
    1804             : {
    1805           0 :         struct writeback_control wbc = {
    1806           0 :                 .sync_mode              = work->sync_mode,
    1807           0 :                 .tagged_writepages      = work->tagged_writepages,
    1808           0 :                 .for_kupdate            = work->for_kupdate,
    1809           0 :                 .for_background         = work->for_background,
    1810           0 :                 .for_sync               = work->for_sync,
    1811           0 :                 .range_cyclic           = work->range_cyclic,
    1812             :                 .range_start            = 0,
    1813             :                 .range_end              = LLONG_MAX,
    1814             :         };
    1815           0 :         unsigned long start_time = jiffies;
    1816             :         long write_chunk;
    1817           0 :         long total_wrote = 0;  /* count both pages and inodes */
    1818             : 
    1819           0 :         while (!list_empty(&wb->b_io)) {
    1820           0 :                 struct inode *inode = wb_inode(wb->b_io.prev);
    1821             :                 struct bdi_writeback *tmp_wb;
    1822             :                 long wrote;
    1823             : 
    1824           0 :                 if (inode->i_sb != sb) {
    1825           0 :                         if (work->sb) {
    1826             :                                 /*
    1827             :                                  * We only want to write back data for this
    1828             :                                  * superblock, move all inodes not belonging
    1829             :                                  * to it back onto the dirty list.
    1830             :                                  */
    1831           0 :                                 redirty_tail(inode, wb);
    1832           0 :                                 continue;
    1833             :                         }
    1834             : 
    1835             :                         /*
    1836             :                          * The inode belongs to a different superblock.
    1837             :                          * Bounce back to the caller to unpin this and
    1838             :                          * pin the next superblock.
    1839             :                          */
    1840             :                         break;
    1841             :                 }
    1842             : 
    1843             :                 /*
    1844             :                  * Don't bother with new inodes or inodes being freed, first
    1845             :                  * kind does not need periodic writeout yet, and for the latter
    1846             :                  * kind writeout is handled by the freer.
    1847             :                  */
    1848           0 :                 spin_lock(&inode->i_lock);
    1849           0 :                 if (inode->i_state & (I_NEW | I_FREEING | I_WILL_FREE)) {
    1850           0 :                         redirty_tail_locked(inode, wb);
    1851           0 :                         spin_unlock(&inode->i_lock);
    1852           0 :                         continue;
    1853             :                 }
    1854           0 :                 if ((inode->i_state & I_SYNC) && wbc.sync_mode != WB_SYNC_ALL) {
    1855             :                         /*
    1856             :                          * If this inode is locked for writeback and we are not
    1857             :                          * doing writeback-for-data-integrity, move it to
    1858             :                          * b_more_io so that writeback can proceed with the
    1859             :                          * other inodes on s_io.
    1860             :                          *
    1861             :                          * We'll have another go at writing back this inode
    1862             :                          * when we completed a full scan of b_io.
    1863             :                          */
    1864           0 :                         requeue_io(inode, wb);
    1865           0 :                         spin_unlock(&inode->i_lock);
    1866             :                         trace_writeback_sb_inodes_requeue(inode);
    1867           0 :                         continue;
    1868             :                 }
    1869           0 :                 spin_unlock(&wb->list_lock);
    1870             : 
    1871             :                 /*
    1872             :                  * We already requeued the inode if it had I_SYNC set and we
    1873             :                  * are doing WB_SYNC_NONE writeback. So this catches only the
    1874             :                  * WB_SYNC_ALL case.
    1875             :                  */
    1876           0 :                 if (inode->i_state & I_SYNC) {
    1877             :                         /* Wait for I_SYNC. This function drops i_lock... */
    1878           0 :                         inode_sleep_on_writeback(inode);
    1879             :                         /* Inode may be gone, start again */
    1880           0 :                         spin_lock(&wb->list_lock);
    1881           0 :                         continue;
    1882             :                 }
    1883           0 :                 inode->i_state |= I_SYNC;
    1884           0 :                 wbc_attach_and_unlock_inode(&wbc, inode);
    1885             : 
    1886           0 :                 write_chunk = writeback_chunk_size(wb, work);
    1887           0 :                 wbc.nr_to_write = write_chunk;
    1888           0 :                 wbc.pages_skipped = 0;
    1889             : 
    1890             :                 /*
    1891             :                  * We use I_SYNC to pin the inode in memory. While it is set
    1892             :                  * evict_inode() will wait so the inode cannot be freed.
    1893             :                  */
    1894           0 :                 __writeback_single_inode(inode, &wbc);
    1895             : 
    1896           0 :                 wbc_detach_inode(&wbc);
    1897           0 :                 work->nr_pages -= write_chunk - wbc.nr_to_write;
    1898           0 :                 wrote = write_chunk - wbc.nr_to_write - wbc.pages_skipped;
    1899           0 :                 wrote = wrote < 0 ? 0 : wrote;
    1900           0 :                 total_wrote += wrote;
    1901             : 
    1902           0 :                 if (need_resched()) {
    1903             :                         /*
    1904             :                          * We're trying to balance between building up a nice
    1905             :                          * long list of IOs to improve our merge rate, and
    1906             :                          * getting those IOs out quickly for anyone throttling
    1907             :                          * in balance_dirty_pages().  cond_resched() doesn't
    1908             :                          * unplug, so get our IOs out the door before we
    1909             :                          * give up the CPU.
    1910             :                          */
    1911           0 :                         blk_flush_plug(current->plug, false);
    1912           0 :                         cond_resched();
    1913             :                 }
    1914             : 
    1915             :                 /*
    1916             :                  * Requeue @inode if still dirty.  Be careful as @inode may
    1917             :                  * have been switched to another wb in the meantime.
    1918             :                  */
    1919           0 :                 tmp_wb = inode_to_wb_and_lock_list(inode);
    1920           0 :                 spin_lock(&inode->i_lock);
    1921           0 :                 if (!(inode->i_state & I_DIRTY_ALL))
    1922           0 :                         total_wrote++;
    1923           0 :                 requeue_inode(inode, tmp_wb, &wbc);
    1924           0 :                 inode_sync_complete(inode);
    1925           0 :                 spin_unlock(&inode->i_lock);
    1926             : 
    1927           0 :                 if (unlikely(tmp_wb != wb)) {
    1928           0 :                         spin_unlock(&tmp_wb->list_lock);
    1929           0 :                         spin_lock(&wb->list_lock);
    1930             :                 }
    1931             : 
    1932             :                 /*
    1933             :                  * bail out to wb_writeback() often enough to check
    1934             :                  * background threshold and other termination conditions.
    1935             :                  */
    1936           0 :                 if (total_wrote) {
    1937           0 :                         if (time_is_before_jiffies(start_time + HZ / 10UL))
    1938             :                                 break;
    1939           0 :                         if (work->nr_pages <= 0)
    1940             :                                 break;
    1941             :                 }
    1942             :         }
    1943           0 :         return total_wrote;
    1944             : }
    1945             : 
    1946           0 : static long __writeback_inodes_wb(struct bdi_writeback *wb,
    1947             :                                   struct wb_writeback_work *work)
    1948             : {
    1949           0 :         unsigned long start_time = jiffies;
    1950           0 :         long wrote = 0;
    1951             : 
    1952           0 :         while (!list_empty(&wb->b_io)) {
    1953           0 :                 struct inode *inode = wb_inode(wb->b_io.prev);
    1954           0 :                 struct super_block *sb = inode->i_sb;
    1955             : 
    1956           0 :                 if (!trylock_super(sb)) {
    1957             :                         /*
    1958             :                          * trylock_super() may fail consistently due to
    1959             :                          * s_umount being grabbed by someone else. Don't use
    1960             :                          * requeue_io() to avoid busy retrying the inode/sb.
    1961             :                          */
    1962           0 :                         redirty_tail(inode, wb);
    1963           0 :                         continue;
    1964             :                 }
    1965           0 :                 wrote += writeback_sb_inodes(sb, wb, work);
    1966           0 :                 up_read(&sb->s_umount);
    1967             : 
    1968             :                 /* refer to the same tests at the end of writeback_sb_inodes */
    1969           0 :                 if (wrote) {
    1970           0 :                         if (time_is_before_jiffies(start_time + HZ / 10UL))
    1971             :                                 break;
    1972           0 :                         if (work->nr_pages <= 0)
    1973             :                                 break;
    1974             :                 }
    1975             :         }
    1976             :         /* Leave any unwritten inodes on b_io */
    1977           0 :         return wrote;
    1978             : }
    1979             : 
    1980           0 : static long writeback_inodes_wb(struct bdi_writeback *wb, long nr_pages,
    1981             :                                 enum wb_reason reason)
    1982             : {
    1983           0 :         struct wb_writeback_work work = {
    1984             :                 .nr_pages       = nr_pages,
    1985             :                 .sync_mode      = WB_SYNC_NONE,
    1986             :                 .range_cyclic   = 1,
    1987             :                 .reason         = reason,
    1988             :         };
    1989             :         struct blk_plug plug;
    1990             : 
    1991           0 :         blk_start_plug(&plug);
    1992           0 :         spin_lock(&wb->list_lock);
    1993           0 :         if (list_empty(&wb->b_io))
    1994           0 :                 queue_io(wb, &work, jiffies);
    1995           0 :         __writeback_inodes_wb(wb, &work);
    1996           0 :         spin_unlock(&wb->list_lock);
    1997           0 :         blk_finish_plug(&plug);
    1998             : 
    1999           0 :         return nr_pages - work.nr_pages;
    2000             : }
    2001             : 
    2002             : /*
    2003             :  * Explicit flushing or periodic writeback of "old" data.
    2004             :  *
    2005             :  * Define "old": the first time one of an inode's pages is dirtied, we mark the
    2006             :  * dirtying-time in the inode's address_space.  So this periodic writeback code
    2007             :  * just walks the superblock inode list, writing back any inodes which are
    2008             :  * older than a specific point in time.
    2009             :  *
    2010             :  * Try to run once per dirty_writeback_interval.  But if a writeback event
    2011             :  * takes longer than a dirty_writeback_interval interval, then leave a
    2012             :  * one-second gap.
    2013             :  *
    2014             :  * dirtied_before takes precedence over nr_to_write.  So we'll only write back
    2015             :  * all dirty pages if they are all attached to "old" mappings.
    2016             :  */
    2017           0 : static long wb_writeback(struct bdi_writeback *wb,
    2018             :                          struct wb_writeback_work *work)
    2019             : {
    2020           0 :         long nr_pages = work->nr_pages;
    2021           0 :         unsigned long dirtied_before = jiffies;
    2022             :         struct inode *inode;
    2023             :         long progress;
    2024             :         struct blk_plug plug;
    2025             : 
    2026           0 :         blk_start_plug(&plug);
    2027             :         for (;;) {
    2028             :                 /*
    2029             :                  * Stop writeback when nr_pages has been consumed
    2030             :                  */
    2031           0 :                 if (work->nr_pages <= 0)
    2032             :                         break;
    2033             : 
    2034             :                 /*
    2035             :                  * Background writeout and kupdate-style writeback may
    2036             :                  * run forever. Stop them if there is other work to do
    2037             :                  * so that e.g. sync can proceed. They'll be restarted
    2038             :                  * after the other works are all done.
    2039             :                  */
    2040           0 :                 if ((work->for_background || work->for_kupdate) &&
    2041           0 :                     !list_empty(&wb->work_list))
    2042             :                         break;
    2043             : 
    2044             :                 /*
    2045             :                  * For background writeout, stop when we are below the
    2046             :                  * background dirty threshold
    2047             :                  */
    2048           0 :                 if (work->for_background && !wb_over_bg_thresh(wb))
    2049             :                         break;
    2050             : 
    2051             : 
    2052           0 :                 spin_lock(&wb->list_lock);
    2053             : 
    2054             :                 /*
    2055             :                  * Kupdate and background works are special and we want to
    2056             :                  * include all inodes that need writing. Livelock avoidance is
    2057             :                  * handled by these works yielding to any other work so we are
    2058             :                  * safe.
    2059             :                  */
    2060           0 :                 if (work->for_kupdate) {
    2061           0 :                         dirtied_before = jiffies -
    2062           0 :                                 msecs_to_jiffies(dirty_expire_interval * 10);
    2063           0 :                 } else if (work->for_background)
    2064           0 :                         dirtied_before = jiffies;
    2065             : 
    2066           0 :                 trace_writeback_start(wb, work);
    2067           0 :                 if (list_empty(&wb->b_io))
    2068           0 :                         queue_io(wb, work, dirtied_before);
    2069           0 :                 if (work->sb)
    2070           0 :                         progress = writeback_sb_inodes(work->sb, wb, work);
    2071             :                 else
    2072           0 :                         progress = __writeback_inodes_wb(wb, work);
    2073           0 :                 trace_writeback_written(wb, work);
    2074             : 
    2075             :                 /*
    2076             :                  * Did we write something? Try for more
    2077             :                  *
    2078             :                  * Dirty inodes are moved to b_io for writeback in batches.
    2079             :                  * The completion of the current batch does not necessarily
    2080             :                  * mean the overall work is done. So we keep looping as long
    2081             :                  * as made some progress on cleaning pages or inodes.
    2082             :                  */
    2083           0 :                 if (progress) {
    2084           0 :                         spin_unlock(&wb->list_lock);
    2085           0 :                         continue;
    2086             :                 }
    2087             : 
    2088             :                 /*
    2089             :                  * No more inodes for IO, bail
    2090             :                  */
    2091           0 :                 if (list_empty(&wb->b_more_io)) {
    2092           0 :                         spin_unlock(&wb->list_lock);
    2093             :                         break;
    2094             :                 }
    2095             : 
    2096             :                 /*
    2097             :                  * Nothing written. Wait for some inode to
    2098             :                  * become available for writeback. Otherwise
    2099             :                  * we'll just busyloop.
    2100             :                  */
    2101           0 :                 trace_writeback_wait(wb, work);
    2102           0 :                 inode = wb_inode(wb->b_more_io.prev);
    2103           0 :                 spin_lock(&inode->i_lock);
    2104           0 :                 spin_unlock(&wb->list_lock);
    2105             :                 /* This function drops i_lock... */
    2106           0 :                 inode_sleep_on_writeback(inode);
    2107             :         }
    2108           0 :         blk_finish_plug(&plug);
    2109             : 
    2110           0 :         return nr_pages - work->nr_pages;
    2111             : }
    2112             : 
    2113             : /*
    2114             :  * Return the next wb_writeback_work struct that hasn't been processed yet.
    2115             :  */
    2116           0 : static struct wb_writeback_work *get_next_work_item(struct bdi_writeback *wb)
    2117             : {
    2118           0 :         struct wb_writeback_work *work = NULL;
    2119             : 
    2120           0 :         spin_lock_irq(&wb->work_lock);
    2121           0 :         if (!list_empty(&wb->work_list)) {
    2122           0 :                 work = list_entry(wb->work_list.next,
    2123             :                                   struct wb_writeback_work, list);
    2124           0 :                 list_del_init(&work->list);
    2125             :         }
    2126           0 :         spin_unlock_irq(&wb->work_lock);
    2127           0 :         return work;
    2128             : }
    2129             : 
    2130           0 : static long wb_check_background_flush(struct bdi_writeback *wb)
    2131             : {
    2132           0 :         if (wb_over_bg_thresh(wb)) {
    2133             : 
    2134           0 :                 struct wb_writeback_work work = {
    2135             :                         .nr_pages       = LONG_MAX,
    2136             :                         .sync_mode      = WB_SYNC_NONE,
    2137             :                         .for_background = 1,
    2138             :                         .range_cyclic   = 1,
    2139             :                         .reason         = WB_REASON_BACKGROUND,
    2140             :                 };
    2141             : 
    2142           0 :                 return wb_writeback(wb, &work);
    2143             :         }
    2144             : 
    2145             :         return 0;
    2146             : }
    2147             : 
    2148           0 : static long wb_check_old_data_flush(struct bdi_writeback *wb)
    2149             : {
    2150             :         unsigned long expired;
    2151             :         long nr_pages;
    2152             : 
    2153             :         /*
    2154             :          * When set to zero, disable periodic writeback
    2155             :          */
    2156           0 :         if (!dirty_writeback_interval)
    2157             :                 return 0;
    2158             : 
    2159           0 :         expired = wb->last_old_flush +
    2160           0 :                         msecs_to_jiffies(dirty_writeback_interval * 10);
    2161           0 :         if (time_before(jiffies, expired))
    2162             :                 return 0;
    2163             : 
    2164           0 :         wb->last_old_flush = jiffies;
    2165           0 :         nr_pages = get_nr_dirty_pages();
    2166             : 
    2167           0 :         if (nr_pages) {
    2168           0 :                 struct wb_writeback_work work = {
    2169             :                         .nr_pages       = nr_pages,
    2170             :                         .sync_mode      = WB_SYNC_NONE,
    2171             :                         .for_kupdate    = 1,
    2172             :                         .range_cyclic   = 1,
    2173             :                         .reason         = WB_REASON_PERIODIC,
    2174             :                 };
    2175             : 
    2176           0 :                 return wb_writeback(wb, &work);
    2177             :         }
    2178             : 
    2179             :         return 0;
    2180             : }
    2181             : 
    2182           0 : static long wb_check_start_all(struct bdi_writeback *wb)
    2183             : {
    2184             :         long nr_pages;
    2185             : 
    2186           0 :         if (!test_bit(WB_start_all, &wb->state))
    2187             :                 return 0;
    2188             : 
    2189           0 :         nr_pages = get_nr_dirty_pages();
    2190           0 :         if (nr_pages) {
    2191           0 :                 struct wb_writeback_work work = {
    2192           0 :                         .nr_pages       = wb_split_bdi_pages(wb, nr_pages),
    2193             :                         .sync_mode      = WB_SYNC_NONE,
    2194             :                         .range_cyclic   = 1,
    2195           0 :                         .reason         = wb->start_all_reason,
    2196             :                 };
    2197             : 
    2198           0 :                 nr_pages = wb_writeback(wb, &work);
    2199             :         }
    2200             : 
    2201           0 :         clear_bit(WB_start_all, &wb->state);
    2202           0 :         return nr_pages;
    2203             : }
    2204             : 
    2205             : 
    2206             : /*
    2207             :  * Retrieve work items and do the writeback they describe
    2208             :  */
    2209           0 : static long wb_do_writeback(struct bdi_writeback *wb)
    2210             : {
    2211             :         struct wb_writeback_work *work;
    2212           0 :         long wrote = 0;
    2213             : 
    2214           0 :         set_bit(WB_writeback_running, &wb->state);
    2215           0 :         while ((work = get_next_work_item(wb)) != NULL) {
    2216           0 :                 trace_writeback_exec(wb, work);
    2217           0 :                 wrote += wb_writeback(wb, work);
    2218           0 :                 finish_writeback_work(wb, work);
    2219             :         }
    2220             : 
    2221             :         /*
    2222             :          * Check for a flush-everything request
    2223             :          */
    2224           0 :         wrote += wb_check_start_all(wb);
    2225             : 
    2226             :         /*
    2227             :          * Check for periodic writeback, kupdated() style
    2228             :          */
    2229           0 :         wrote += wb_check_old_data_flush(wb);
    2230           0 :         wrote += wb_check_background_flush(wb);
    2231           0 :         clear_bit(WB_writeback_running, &wb->state);
    2232             : 
    2233           0 :         return wrote;
    2234             : }
    2235             : 
    2236             : /*
    2237             :  * Handle writeback of dirty data for the device backed by this bdi. Also
    2238             :  * reschedules periodically and does kupdated style flushing.
    2239             :  */
    2240           0 : void wb_workfn(struct work_struct *work)
    2241             : {
    2242           0 :         struct bdi_writeback *wb = container_of(to_delayed_work(work),
    2243             :                                                 struct bdi_writeback, dwork);
    2244             :         long pages_written;
    2245             : 
    2246           0 :         set_worker_desc("flush-%s", bdi_dev_name(wb->bdi));
    2247             : 
    2248           0 :         if (likely(!current_is_workqueue_rescuer() ||
    2249             :                    !test_bit(WB_registered, &wb->state))) {
    2250             :                 /*
    2251             :                  * The normal path.  Keep writing back @wb until its
    2252             :                  * work_list is empty.  Note that this path is also taken
    2253             :                  * if @wb is shutting down even when we're running off the
    2254             :                  * rescuer as work_list needs to be drained.
    2255             :                  */
    2256             :                 do {
    2257           0 :                         pages_written = wb_do_writeback(wb);
    2258           0 :                         trace_writeback_pages_written(pages_written);
    2259           0 :                 } while (!list_empty(&wb->work_list));
    2260             :         } else {
    2261             :                 /*
    2262             :                  * bdi_wq can't get enough workers and we're running off
    2263             :                  * the emergency worker.  Don't hog it.  Hopefully, 1024 is
    2264             :                  * enough for efficient IO.
    2265             :                  */
    2266           0 :                 pages_written = writeback_inodes_wb(wb, 1024,
    2267             :                                                     WB_REASON_FORKER_THREAD);
    2268           0 :                 trace_writeback_pages_written(pages_written);
    2269             :         }
    2270             : 
    2271           0 :         if (!list_empty(&wb->work_list))
    2272           0 :                 wb_wakeup(wb);
    2273           0 :         else if (wb_has_dirty_io(wb) && dirty_writeback_interval)
    2274           0 :                 wb_wakeup_delayed(wb);
    2275           0 : }
    2276             : 
    2277             : /*
    2278             :  * Start writeback of `nr_pages' pages on this bdi. If `nr_pages' is zero,
    2279             :  * write back the whole world.
    2280             :  */
    2281           0 : static void __wakeup_flusher_threads_bdi(struct backing_dev_info *bdi,
    2282             :                                          enum wb_reason reason)
    2283             : {
    2284             :         struct bdi_writeback *wb;
    2285             : 
    2286           0 :         if (!bdi_has_dirty_io(bdi))
    2287             :                 return;
    2288             : 
    2289           0 :         list_for_each_entry_rcu(wb, &bdi->wb_list, bdi_node)
    2290           0 :                 wb_start_writeback(wb, reason);
    2291             : }
    2292             : 
    2293           0 : void wakeup_flusher_threads_bdi(struct backing_dev_info *bdi,
    2294             :                                 enum wb_reason reason)
    2295             : {
    2296             :         rcu_read_lock();
    2297           0 :         __wakeup_flusher_threads_bdi(bdi, reason);
    2298             :         rcu_read_unlock();
    2299           0 : }
    2300             : 
    2301             : /*
    2302             :  * Wakeup the flusher threads to start writeback of all currently dirty pages
    2303             :  */
    2304           0 : void wakeup_flusher_threads(enum wb_reason reason)
    2305             : {
    2306             :         struct backing_dev_info *bdi;
    2307             : 
    2308             :         /*
    2309             :          * If we are expecting writeback progress we must submit plugged IO.
    2310             :          */
    2311           0 :         blk_flush_plug(current->plug, true);
    2312             : 
    2313             :         rcu_read_lock();
    2314           0 :         list_for_each_entry_rcu(bdi, &bdi_list, bdi_list)
    2315           0 :                 __wakeup_flusher_threads_bdi(bdi, reason);
    2316             :         rcu_read_unlock();
    2317           0 : }
    2318             : 
    2319             : /*
    2320             :  * Wake up bdi's periodically to make sure dirtytime inodes gets
    2321             :  * written back periodically.  We deliberately do *not* check the
    2322             :  * b_dirtytime list in wb_has_dirty_io(), since this would cause the
    2323             :  * kernel to be constantly waking up once there are any dirtytime
    2324             :  * inodes on the system.  So instead we define a separate delayed work
    2325             :  * function which gets called much more rarely.  (By default, only
    2326             :  * once every 12 hours.)
    2327             :  *
    2328             :  * If there is any other write activity going on in the file system,
    2329             :  * this function won't be necessary.  But if the only thing that has
    2330             :  * happened on the file system is a dirtytime inode caused by an atime
    2331             :  * update, we need this infrastructure below to make sure that inode
    2332             :  * eventually gets pushed out to disk.
    2333             :  */
    2334             : static void wakeup_dirtytime_writeback(struct work_struct *w);
    2335             : static DECLARE_DELAYED_WORK(dirtytime_work, wakeup_dirtytime_writeback);
    2336             : 
    2337           0 : static void wakeup_dirtytime_writeback(struct work_struct *w)
    2338             : {
    2339             :         struct backing_dev_info *bdi;
    2340             : 
    2341             :         rcu_read_lock();
    2342           0 :         list_for_each_entry_rcu(bdi, &bdi_list, bdi_list) {
    2343             :                 struct bdi_writeback *wb;
    2344             : 
    2345           0 :                 list_for_each_entry_rcu(wb, &bdi->wb_list, bdi_node)
    2346           0 :                         if (!list_empty(&wb->b_dirty_time))
    2347           0 :                                 wb_wakeup(wb);
    2348             :         }
    2349             :         rcu_read_unlock();
    2350           0 :         schedule_delayed_work(&dirtytime_work, dirtytime_expire_interval * HZ);
    2351           0 : }
    2352             : 
    2353           1 : static int __init start_dirtytime_writeback(void)
    2354             : {
    2355           2 :         schedule_delayed_work(&dirtytime_work, dirtytime_expire_interval * HZ);
    2356           1 :         return 0;
    2357             : }
    2358             : __initcall(start_dirtytime_writeback);
    2359             : 
    2360           0 : int dirtytime_interval_handler(struct ctl_table *table, int write,
    2361             :                                void *buffer, size_t *lenp, loff_t *ppos)
    2362             : {
    2363             :         int ret;
    2364             : 
    2365           0 :         ret = proc_dointvec_minmax(table, write, buffer, lenp, ppos);
    2366           0 :         if (ret == 0 && write)
    2367           0 :                 mod_delayed_work(system_wq, &dirtytime_work, 0);
    2368           0 :         return ret;
    2369             : }
    2370             : 
    2371             : /**
    2372             :  * __mark_inode_dirty - internal function to mark an inode dirty
    2373             :  *
    2374             :  * @inode: inode to mark
    2375             :  * @flags: what kind of dirty, e.g. I_DIRTY_SYNC.  This can be a combination of
    2376             :  *         multiple I_DIRTY_* flags, except that I_DIRTY_TIME can't be combined
    2377             :  *         with I_DIRTY_PAGES.
    2378             :  *
    2379             :  * Mark an inode as dirty.  We notify the filesystem, then update the inode's
    2380             :  * dirty flags.  Then, if needed we add the inode to the appropriate dirty list.
    2381             :  *
    2382             :  * Most callers should use mark_inode_dirty() or mark_inode_dirty_sync()
    2383             :  * instead of calling this directly.
    2384             :  *
    2385             :  * CAREFUL!  We only add the inode to the dirty list if it is hashed or if it
    2386             :  * refers to a blockdev.  Unhashed inodes will never be added to the dirty list
    2387             :  * even if they are later hashed, as they will have been marked dirty already.
    2388             :  *
    2389             :  * In short, ensure you hash any inodes _before_ you start marking them dirty.
    2390             :  *
    2391             :  * Note that for blockdevs, inode->dirtied_when represents the dirtying time of
    2392             :  * the block-special inode (/dev/hda1) itself.  And the ->dirtied_when field of
    2393             :  * the kernel-internal blockdev inode represents the dirtying time of the
    2394             :  * blockdev's pages.  This is why for I_DIRTY_PAGES we always use
    2395             :  * page->mapping->host, so the page-dirtying time is recorded in the internal
    2396             :  * blockdev inode.
    2397             :  */
    2398           0 : void __mark_inode_dirty(struct inode *inode, int flags)
    2399             : {
    2400           0 :         struct super_block *sb = inode->i_sb;
    2401           0 :         int dirtytime = 0;
    2402           0 :         struct bdi_writeback *wb = NULL;
    2403             : 
    2404           0 :         trace_writeback_mark_inode_dirty(inode, flags);
    2405             : 
    2406           0 :         if (flags & I_DIRTY_INODE) {
    2407             :                 /*
    2408             :                  * Inode timestamp update will piggback on this dirtying.
    2409             :                  * We tell ->dirty_inode callback that timestamps need to
    2410             :                  * be updated by setting I_DIRTY_TIME in flags.
    2411             :                  */
    2412           0 :                 if (inode->i_state & I_DIRTY_TIME) {
    2413           0 :                         spin_lock(&inode->i_lock);
    2414           0 :                         if (inode->i_state & I_DIRTY_TIME) {
    2415           0 :                                 inode->i_state &= ~I_DIRTY_TIME;
    2416           0 :                                 flags |= I_DIRTY_TIME;
    2417             :                         }
    2418           0 :                         spin_unlock(&inode->i_lock);
    2419             :                 }
    2420             : 
    2421             :                 /*
    2422             :                  * Notify the filesystem about the inode being dirtied, so that
    2423             :                  * (if needed) it can update on-disk fields and journal the
    2424             :                  * inode.  This is only needed when the inode itself is being
    2425             :                  * dirtied now.  I.e. it's only needed for I_DIRTY_INODE, not
    2426             :                  * for just I_DIRTY_PAGES or I_DIRTY_TIME.
    2427             :                  */
    2428           0 :                 trace_writeback_dirty_inode_start(inode, flags);
    2429           0 :                 if (sb->s_op->dirty_inode)
    2430           0 :                         sb->s_op->dirty_inode(inode,
    2431             :                                 flags & (I_DIRTY_INODE | I_DIRTY_TIME));
    2432           0 :                 trace_writeback_dirty_inode(inode, flags);
    2433             : 
    2434             :                 /* I_DIRTY_INODE supersedes I_DIRTY_TIME. */
    2435           0 :                 flags &= ~I_DIRTY_TIME;
    2436             :         } else {
    2437             :                 /*
    2438             :                  * Else it's either I_DIRTY_PAGES, I_DIRTY_TIME, or nothing.
    2439             :                  * (We don't support setting both I_DIRTY_PAGES and I_DIRTY_TIME
    2440             :                  * in one call to __mark_inode_dirty().)
    2441             :                  */
    2442           0 :                 dirtytime = flags & I_DIRTY_TIME;
    2443           0 :                 WARN_ON_ONCE(dirtytime && flags != I_DIRTY_TIME);
    2444             :         }
    2445             : 
    2446             :         /*
    2447             :          * Paired with smp_mb() in __writeback_single_inode() for the
    2448             :          * following lockless i_state test.  See there for details.
    2449             :          */
    2450           0 :         smp_mb();
    2451             : 
    2452           0 :         if ((inode->i_state & flags) == flags)
    2453             :                 return;
    2454             : 
    2455           0 :         spin_lock(&inode->i_lock);
    2456           0 :         if ((inode->i_state & flags) != flags) {
    2457           0 :                 const int was_dirty = inode->i_state & I_DIRTY;
    2458             : 
    2459           0 :                 inode_attach_wb(inode, NULL);
    2460             : 
    2461           0 :                 inode->i_state |= flags;
    2462             : 
    2463             :                 /*
    2464             :                  * Grab inode's wb early because it requires dropping i_lock and we
    2465             :                  * need to make sure following checks happen atomically with dirty
    2466             :                  * list handling so that we don't move inodes under flush worker's
    2467             :                  * hands.
    2468             :                  */
    2469           0 :                 if (!was_dirty) {
    2470           0 :                         wb = locked_inode_to_wb_and_lock_list(inode);
    2471           0 :                         spin_lock(&inode->i_lock);
    2472             :                 }
    2473             : 
    2474             :                 /*
    2475             :                  * If the inode is queued for writeback by flush worker, just
    2476             :                  * update its dirty state. Once the flush worker is done with
    2477             :                  * the inode it will place it on the appropriate superblock
    2478             :                  * list, based upon its state.
    2479             :                  */
    2480           0 :                 if (inode->i_state & I_SYNC_QUEUED)
    2481             :                         goto out_unlock;
    2482             : 
    2483             :                 /*
    2484             :                  * Only add valid (hashed) inodes to the superblock's
    2485             :                  * dirty list.  Add blockdev inodes as well.
    2486             :                  */
    2487           0 :                 if (!S_ISBLK(inode->i_mode)) {
    2488           0 :                         if (inode_unhashed(inode))
    2489             :                                 goto out_unlock;
    2490             :                 }
    2491           0 :                 if (inode->i_state & I_FREEING)
    2492             :                         goto out_unlock;
    2493             : 
    2494             :                 /*
    2495             :                  * If the inode was already on b_dirty/b_io/b_more_io, don't
    2496             :                  * reposition it (that would break b_dirty time-ordering).
    2497             :                  */
    2498           0 :                 if (!was_dirty) {
    2499             :                         struct list_head *dirty_list;
    2500           0 :                         bool wakeup_bdi = false;
    2501             : 
    2502           0 :                         inode->dirtied_when = jiffies;
    2503           0 :                         if (dirtytime)
    2504           0 :                                 inode->dirtied_time_when = jiffies;
    2505             : 
    2506           0 :                         if (inode->i_state & I_DIRTY)
    2507           0 :                                 dirty_list = &wb->b_dirty;
    2508             :                         else
    2509           0 :                                 dirty_list = &wb->b_dirty_time;
    2510             : 
    2511           0 :                         wakeup_bdi = inode_io_list_move_locked(inode, wb,
    2512             :                                                                dirty_list);
    2513             : 
    2514           0 :                         spin_unlock(&wb->list_lock);
    2515           0 :                         spin_unlock(&inode->i_lock);
    2516           0 :                         trace_writeback_dirty_inode_enqueue(inode);
    2517             : 
    2518             :                         /*
    2519             :                          * If this is the first dirty inode for this bdi,
    2520             :                          * we have to wake-up the corresponding bdi thread
    2521             :                          * to make sure background write-back happens
    2522             :                          * later.
    2523             :                          */
    2524           0 :                         if (wakeup_bdi &&
    2525           0 :                             (wb->bdi->capabilities & BDI_CAP_WRITEBACK))
    2526           0 :                                 wb_wakeup_delayed(wb);
    2527             :                         return;
    2528             :                 }
    2529             :         }
    2530             : out_unlock:
    2531           0 :         if (wb)
    2532           0 :                 spin_unlock(&wb->list_lock);
    2533           0 :         spin_unlock(&inode->i_lock);
    2534             : }
    2535             : EXPORT_SYMBOL(__mark_inode_dirty);
    2536             : 
    2537             : /*
    2538             :  * The @s_sync_lock is used to serialise concurrent sync operations
    2539             :  * to avoid lock contention problems with concurrent wait_sb_inodes() calls.
    2540             :  * Concurrent callers will block on the s_sync_lock rather than doing contending
    2541             :  * walks. The queueing maintains sync(2) required behaviour as all the IO that
    2542             :  * has been issued up to the time this function is enter is guaranteed to be
    2543             :  * completed by the time we have gained the lock and waited for all IO that is
    2544             :  * in progress regardless of the order callers are granted the lock.
    2545             :  */
    2546           0 : static void wait_sb_inodes(struct super_block *sb)
    2547             : {
    2548           0 :         LIST_HEAD(sync_list);
    2549             : 
    2550             :         /*
    2551             :          * We need to be protected against the filesystem going from
    2552             :          * r/o to r/w or vice versa.
    2553             :          */
    2554           0 :         WARN_ON(!rwsem_is_locked(&sb->s_umount));
    2555             : 
    2556           0 :         mutex_lock(&sb->s_sync_lock);
    2557             : 
    2558             :         /*
    2559             :          * Splice the writeback list onto a temporary list to avoid waiting on
    2560             :          * inodes that have started writeback after this point.
    2561             :          *
    2562             :          * Use rcu_read_lock() to keep the inodes around until we have a
    2563             :          * reference. s_inode_wblist_lock protects sb->s_inodes_wb as well as
    2564             :          * the local list because inodes can be dropped from either by writeback
    2565             :          * completion.
    2566             :          */
    2567             :         rcu_read_lock();
    2568           0 :         spin_lock_irq(&sb->s_inode_wblist_lock);
    2569           0 :         list_splice_init(&sb->s_inodes_wb, &sync_list);
    2570             : 
    2571             :         /*
    2572             :          * Data integrity sync. Must wait for all pages under writeback, because
    2573             :          * there may have been pages dirtied before our sync call, but which had
    2574             :          * writeout started before we write it out.  In which case, the inode
    2575             :          * may not be on the dirty list, but we still have to wait for that
    2576             :          * writeout.
    2577             :          */
    2578           0 :         while (!list_empty(&sync_list)) {
    2579           0 :                 struct inode *inode = list_first_entry(&sync_list, struct inode,
    2580             :                                                        i_wb_list);
    2581           0 :                 struct address_space *mapping = inode->i_mapping;
    2582             : 
    2583             :                 /*
    2584             :                  * Move each inode back to the wb list before we drop the lock
    2585             :                  * to preserve consistency between i_wb_list and the mapping
    2586             :                  * writeback tag. Writeback completion is responsible to remove
    2587             :                  * the inode from either list once the writeback tag is cleared.
    2588             :                  */
    2589           0 :                 list_move_tail(&inode->i_wb_list, &sb->s_inodes_wb);
    2590             : 
    2591             :                 /*
    2592             :                  * The mapping can appear untagged while still on-list since we
    2593             :                  * do not have the mapping lock. Skip it here, wb completion
    2594             :                  * will remove it.
    2595             :                  */
    2596           0 :                 if (!mapping_tagged(mapping, PAGECACHE_TAG_WRITEBACK))
    2597           0 :                         continue;
    2598             : 
    2599           0 :                 spin_unlock_irq(&sb->s_inode_wblist_lock);
    2600             : 
    2601           0 :                 spin_lock(&inode->i_lock);
    2602           0 :                 if (inode->i_state & (I_FREEING|I_WILL_FREE|I_NEW)) {
    2603           0 :                         spin_unlock(&inode->i_lock);
    2604             : 
    2605           0 :                         spin_lock_irq(&sb->s_inode_wblist_lock);
    2606           0 :                         continue;
    2607             :                 }
    2608           0 :                 __iget(inode);
    2609           0 :                 spin_unlock(&inode->i_lock);
    2610             :                 rcu_read_unlock();
    2611             : 
    2612             :                 /*
    2613             :                  * We keep the error status of individual mapping so that
    2614             :                  * applications can catch the writeback error using fsync(2).
    2615             :                  * See filemap_fdatawait_keep_errors() for details.
    2616             :                  */
    2617           0 :                 filemap_fdatawait_keep_errors(mapping);
    2618             : 
    2619           0 :                 cond_resched();
    2620             : 
    2621           0 :                 iput(inode);
    2622             : 
    2623             :                 rcu_read_lock();
    2624           0 :                 spin_lock_irq(&sb->s_inode_wblist_lock);
    2625             :         }
    2626           0 :         spin_unlock_irq(&sb->s_inode_wblist_lock);
    2627             :         rcu_read_unlock();
    2628           0 :         mutex_unlock(&sb->s_sync_lock);
    2629           0 : }
    2630             : 
    2631           5 : static void __writeback_inodes_sb_nr(struct super_block *sb, unsigned long nr,
    2632             :                                      enum wb_reason reason, bool skip_if_busy)
    2633             : {
    2634           5 :         struct backing_dev_info *bdi = sb->s_bdi;
    2635           5 :         DEFINE_WB_COMPLETION(done, bdi);
    2636           5 :         struct wb_writeback_work work = {
    2637             :                 .sb                     = sb,
    2638             :                 .sync_mode              = WB_SYNC_NONE,
    2639             :                 .tagged_writepages      = 1,
    2640             :                 .done                   = &done,
    2641             :                 .nr_pages               = nr,
    2642             :                 .reason                 = reason,
    2643             :         };
    2644             : 
    2645           5 :         if (!bdi_has_dirty_io(bdi) || bdi == &noop_backing_dev_info)
    2646           5 :                 return;
    2647           0 :         WARN_ON(!rwsem_is_locked(&sb->s_umount));
    2648             : 
    2649           0 :         bdi_split_work_to_wbs(sb->s_bdi, &work, skip_if_busy);
    2650           0 :         wb_wait_for_completion(&done);
    2651             : }
    2652             : 
    2653             : /**
    2654             :  * writeback_inodes_sb_nr -     writeback dirty inodes from given super_block
    2655             :  * @sb: the superblock
    2656             :  * @nr: the number of pages to write
    2657             :  * @reason: reason why some writeback work initiated
    2658             :  *
    2659             :  * Start writeback on some inodes on this super_block. No guarantees are made
    2660             :  * on how many (if any) will be written, and this function does not wait
    2661             :  * for IO completion of submitted IO.
    2662             :  */
    2663           0 : void writeback_inodes_sb_nr(struct super_block *sb,
    2664             :                             unsigned long nr,
    2665             :                             enum wb_reason reason)
    2666             : {
    2667           5 :         __writeback_inodes_sb_nr(sb, nr, reason, false);
    2668           0 : }
    2669             : EXPORT_SYMBOL(writeback_inodes_sb_nr);
    2670             : 
    2671             : /**
    2672             :  * writeback_inodes_sb  -       writeback dirty inodes from given super_block
    2673             :  * @sb: the superblock
    2674             :  * @reason: reason why some writeback work was initiated
    2675             :  *
    2676             :  * Start writeback on some inodes on this super_block. No guarantees are made
    2677             :  * on how many (if any) will be written, and this function does not wait
    2678             :  * for IO completion of submitted IO.
    2679             :  */
    2680           5 : void writeback_inodes_sb(struct super_block *sb, enum wb_reason reason)
    2681             : {
    2682          10 :         return writeback_inodes_sb_nr(sb, get_nr_dirty_pages(), reason);
    2683             : }
    2684             : EXPORT_SYMBOL(writeback_inodes_sb);
    2685             : 
    2686             : /**
    2687             :  * try_to_writeback_inodes_sb - try to start writeback if none underway
    2688             :  * @sb: the superblock
    2689             :  * @reason: reason why some writeback work was initiated
    2690             :  *
    2691             :  * Invoke __writeback_inodes_sb_nr if no writeback is currently underway.
    2692             :  */
    2693           0 : void try_to_writeback_inodes_sb(struct super_block *sb, enum wb_reason reason)
    2694             : {
    2695           0 :         if (!down_read_trylock(&sb->s_umount))
    2696             :                 return;
    2697             : 
    2698           0 :         __writeback_inodes_sb_nr(sb, get_nr_dirty_pages(), reason, true);
    2699           0 :         up_read(&sb->s_umount);
    2700             : }
    2701             : EXPORT_SYMBOL(try_to_writeback_inodes_sb);
    2702             : 
    2703             : /**
    2704             :  * sync_inodes_sb       -       sync sb inode pages
    2705             :  * @sb: the superblock
    2706             :  *
    2707             :  * This function writes and waits on any dirty inode belonging to this
    2708             :  * super_block.
    2709             :  */
    2710           5 : void sync_inodes_sb(struct super_block *sb)
    2711             : {
    2712           5 :         struct backing_dev_info *bdi = sb->s_bdi;
    2713           5 :         DEFINE_WB_COMPLETION(done, bdi);
    2714           5 :         struct wb_writeback_work work = {
    2715             :                 .sb             = sb,
    2716             :                 .sync_mode      = WB_SYNC_ALL,
    2717             :                 .nr_pages       = LONG_MAX,
    2718             :                 .range_cyclic   = 0,
    2719             :                 .done           = &done,
    2720             :                 .reason         = WB_REASON_SYNC,
    2721             :                 .for_sync       = 1,
    2722             :         };
    2723             : 
    2724             :         /*
    2725             :          * Can't skip on !bdi_has_dirty() because we should wait for !dirty
    2726             :          * inodes under writeback and I_DIRTY_TIME inodes ignored by
    2727             :          * bdi_has_dirty() need to be written out too.
    2728             :          */
    2729           5 :         if (bdi == &noop_backing_dev_info)
    2730           5 :                 return;
    2731           0 :         WARN_ON(!rwsem_is_locked(&sb->s_umount));
    2732             : 
    2733             :         /* protect against inode wb switch, see inode_switch_wbs_work_fn() */
    2734           0 :         bdi_down_write_wb_switch_rwsem(bdi);
    2735           0 :         bdi_split_work_to_wbs(bdi, &work, false);
    2736           0 :         wb_wait_for_completion(&done);
    2737           0 :         bdi_up_write_wb_switch_rwsem(bdi);
    2738             : 
    2739           0 :         wait_sb_inodes(sb);
    2740             : }
    2741             : EXPORT_SYMBOL(sync_inodes_sb);
    2742             : 
    2743             : /**
    2744             :  * write_inode_now      -       write an inode to disk
    2745             :  * @inode: inode to write to disk
    2746             :  * @sync: whether the write should be synchronous or not
    2747             :  *
    2748             :  * This function commits an inode to disk immediately if it is dirty. This is
    2749             :  * primarily needed by knfsd.
    2750             :  *
    2751             :  * The caller must either have a ref on the inode or must have set I_WILL_FREE.
    2752             :  */
    2753           0 : int write_inode_now(struct inode *inode, int sync)
    2754             : {
    2755           0 :         struct writeback_control wbc = {
    2756             :                 .nr_to_write = LONG_MAX,
    2757           0 :                 .sync_mode = sync ? WB_SYNC_ALL : WB_SYNC_NONE,
    2758             :                 .range_start = 0,
    2759             :                 .range_end = LLONG_MAX,
    2760             :         };
    2761             : 
    2762           0 :         if (!mapping_can_writeback(inode->i_mapping))
    2763           0 :                 wbc.nr_to_write = 0;
    2764             : 
    2765             :         might_sleep();
    2766           0 :         return writeback_single_inode(inode, &wbc);
    2767             : }
    2768             : EXPORT_SYMBOL(write_inode_now);
    2769             : 
    2770             : /**
    2771             :  * sync_inode_metadata - write an inode to disk
    2772             :  * @inode: the inode to sync
    2773             :  * @wait: wait for I/O to complete.
    2774             :  *
    2775             :  * Write an inode to disk and adjust its dirty state after completion.
    2776             :  *
    2777             :  * Note: only writes the actual inode, no associated data or other metadata.
    2778             :  */
    2779           0 : int sync_inode_metadata(struct inode *inode, int wait)
    2780             : {
    2781           0 :         struct writeback_control wbc = {
    2782           0 :                 .sync_mode = wait ? WB_SYNC_ALL : WB_SYNC_NONE,
    2783             :                 .nr_to_write = 0, /* metadata-only */
    2784             :         };
    2785             : 
    2786           0 :         return writeback_single_inode(inode, &wbc);
    2787             : }
    2788             : EXPORT_SYMBOL(sync_inode_metadata);

Generated by: LCOV version 1.14