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-03-27 20:00:47 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 (hweight32(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             :                 /* alloc failed, execute synchronously using on-stack fallback */
     982             :                 work = &fallback_work;
     983             :                 *work = *base_work;
     984             :                 work->nr_pages = nr_pages;
     985             :                 work->auto_free = 0;
     986             :                 work->done = &fallback_work_done;
     987             : 
     988             :                 wb_queue_work(wb, work);
     989             : 
     990             :                 /*
     991             :                  * Pin @wb so that it stays on @bdi->wb_list.  This allows
     992             :                  * continuing iteration from @wb after dropping and
     993             :                  * regrabbing rcu read lock.
     994             :                  */
     995             :                 wb_get(wb);
     996             :                 last_wb = wb;
     997             : 
     998             :                 rcu_read_unlock();
     999             :                 wb_wait_for_completion(&fallback_work_done);
    1000             :                 goto restart;
    1001             :         }
    1002             :         rcu_read_unlock();
    1003             : 
    1004             :         if (last_wb)
    1005             :                 wb_put(last_wb);
    1006             : }
    1007             : 
    1008             : /**
    1009             :  * cgroup_writeback_by_id - initiate cgroup writeback from bdi and memcg IDs
    1010             :  * @bdi_id: target bdi id
    1011             :  * @memcg_id: target memcg css id
    1012             :  * @reason: reason why some writeback work initiated
    1013             :  * @done: target wb_completion
    1014             :  *
    1015             :  * Initiate flush of the bdi_writeback identified by @bdi_id and @memcg_id
    1016             :  * with the specified parameters.
    1017             :  */
    1018             : int cgroup_writeback_by_id(u64 bdi_id, int memcg_id,
    1019             :                            enum wb_reason reason, struct wb_completion *done)
    1020             : {
    1021             :         struct backing_dev_info *bdi;
    1022             :         struct cgroup_subsys_state *memcg_css;
    1023             :         struct bdi_writeback *wb;
    1024             :         struct wb_writeback_work *work;
    1025             :         unsigned long dirty;
    1026             :         int ret;
    1027             : 
    1028             :         /* lookup bdi and memcg */
    1029             :         bdi = bdi_get_by_id(bdi_id);
    1030             :         if (!bdi)
    1031             :                 return -ENOENT;
    1032             : 
    1033             :         rcu_read_lock();
    1034             :         memcg_css = css_from_id(memcg_id, &memory_cgrp_subsys);
    1035             :         if (memcg_css && !css_tryget(memcg_css))
    1036             :                 memcg_css = NULL;
    1037             :         rcu_read_unlock();
    1038             :         if (!memcg_css) {
    1039             :                 ret = -ENOENT;
    1040             :                 goto out_bdi_put;
    1041             :         }
    1042             : 
    1043             :         /*
    1044             :          * And find the associated wb.  If the wb isn't there already
    1045             :          * there's nothing to flush, don't create one.
    1046             :          */
    1047             :         wb = wb_get_lookup(bdi, memcg_css);
    1048             :         if (!wb) {
    1049             :                 ret = -ENOENT;
    1050             :                 goto out_css_put;
    1051             :         }
    1052             : 
    1053             :         /*
    1054             :          * The caller is attempting to write out most of
    1055             :          * the currently dirty pages.  Let's take the current dirty page
    1056             :          * count and inflate it by 25% which should be large enough to
    1057             :          * flush out most dirty pages while avoiding getting livelocked by
    1058             :          * concurrent dirtiers.
    1059             :          *
    1060             :          * BTW the memcg stats are flushed periodically and this is best-effort
    1061             :          * estimation, so some potential error is ok.
    1062             :          */
    1063             :         dirty = memcg_page_state(mem_cgroup_from_css(memcg_css), NR_FILE_DIRTY);
    1064             :         dirty = dirty * 10 / 8;
    1065             : 
    1066             :         /* issue the writeback work */
    1067             :         work = kzalloc(sizeof(*work), GFP_NOWAIT | __GFP_NOWARN);
    1068             :         if (work) {
    1069             :                 work->nr_pages = dirty;
    1070             :                 work->sync_mode = WB_SYNC_NONE;
    1071             :                 work->range_cyclic = 1;
    1072             :                 work->reason = reason;
    1073             :                 work->done = done;
    1074             :                 work->auto_free = 1;
    1075             :                 wb_queue_work(wb, work);
    1076             :                 ret = 0;
    1077             :         } else {
    1078             :                 ret = -ENOMEM;
    1079             :         }
    1080             : 
    1081             :         wb_put(wb);
    1082             : out_css_put:
    1083             :         css_put(memcg_css);
    1084             : out_bdi_put:
    1085             :         bdi_put(bdi);
    1086             :         return ret;
    1087             : }
    1088             : 
    1089             : /**
    1090             :  * cgroup_writeback_umount - flush inode wb switches for umount
    1091             :  *
    1092             :  * This function is called when a super_block is about to be destroyed and
    1093             :  * flushes in-flight inode wb switches.  An inode wb switch goes through
    1094             :  * RCU and then workqueue, so the two need to be flushed in order to ensure
    1095             :  * that all previously scheduled switches are finished.  As wb switches are
    1096             :  * rare occurrences and synchronize_rcu() can take a while, perform
    1097             :  * flushing iff wb switches are in flight.
    1098             :  */
    1099             : void cgroup_writeback_umount(void)
    1100             : {
    1101             :         /*
    1102             :          * SB_ACTIVE should be reliably cleared before checking
    1103             :          * isw_nr_in_flight, see generic_shutdown_super().
    1104             :          */
    1105             :         smp_mb();
    1106             : 
    1107             :         if (atomic_read(&isw_nr_in_flight)) {
    1108             :                 /*
    1109             :                  * Use rcu_barrier() to wait for all pending callbacks to
    1110             :                  * ensure that all in-flight wb switches are in the workqueue.
    1111             :                  */
    1112             :                 rcu_barrier();
    1113             :                 flush_workqueue(isw_wq);
    1114             :         }
    1115             : }
    1116             : 
    1117             : static int __init cgroup_writeback_init(void)
    1118             : {
    1119             :         isw_wq = alloc_workqueue("inode_switch_wbs", 0, 0);
    1120             :         if (!isw_wq)
    1121             :                 return -ENOMEM;
    1122             :         return 0;
    1123             : }
    1124             : fs_initcall(cgroup_writeback_init);
    1125             : 
    1126             : #else   /* CONFIG_CGROUP_WRITEBACK */
    1127             : 
    1128             : static void bdi_down_write_wb_switch_rwsem(struct backing_dev_info *bdi) { }
    1129             : static void bdi_up_write_wb_switch_rwsem(struct backing_dev_info *bdi) { }
    1130             : 
    1131           0 : static void inode_cgwb_move_to_attached(struct inode *inode,
    1132             :                                         struct bdi_writeback *wb)
    1133             : {
    1134             :         assert_spin_locked(&wb->list_lock);
    1135             :         assert_spin_locked(&inode->i_lock);
    1136           0 :         WARN_ON_ONCE(inode->i_state & I_FREEING);
    1137             : 
    1138           0 :         inode->i_state &= ~I_SYNC_QUEUED;
    1139           0 :         list_del_init(&inode->i_io_list);
    1140           0 :         wb_io_lists_depopulated(wb);
    1141           0 : }
    1142             : 
    1143             : static struct bdi_writeback *
    1144             : locked_inode_to_wb_and_lock_list(struct inode *inode)
    1145             :         __releases(&inode->i_lock)
    1146             :         __acquires(&wb->list_lock)
    1147             : {
    1148           0 :         struct bdi_writeback *wb = inode_to_wb(inode);
    1149             : 
    1150           0 :         spin_unlock(&inode->i_lock);
    1151           0 :         spin_lock(&wb->list_lock);
    1152             :         return wb;
    1153             : }
    1154             : 
    1155             : static struct bdi_writeback *inode_to_wb_and_lock_list(struct inode *inode)
    1156             :         __acquires(&wb->list_lock)
    1157             : {
    1158           0 :         struct bdi_writeback *wb = inode_to_wb(inode);
    1159             : 
    1160           0 :         spin_lock(&wb->list_lock);
    1161             :         return wb;
    1162             : }
    1163             : 
    1164             : static long wb_split_bdi_pages(struct bdi_writeback *wb, long nr_pages)
    1165             : {
    1166             :         return nr_pages;
    1167             : }
    1168             : 
    1169           0 : static void bdi_split_work_to_wbs(struct backing_dev_info *bdi,
    1170             :                                   struct wb_writeback_work *base_work,
    1171             :                                   bool skip_if_busy)
    1172             : {
    1173             :         might_sleep();
    1174             : 
    1175           0 :         if (!skip_if_busy || !writeback_in_progress(&bdi->wb)) {
    1176           0 :                 base_work->auto_free = 0;
    1177           0 :                 wb_queue_work(&bdi->wb, base_work);
    1178             :         }
    1179           0 : }
    1180             : 
    1181             : #endif  /* CONFIG_CGROUP_WRITEBACK */
    1182             : 
    1183             : /*
    1184             :  * Add in the number of potentially dirty inodes, because each inode
    1185             :  * write can dirty pagecache in the underlying blockdev.
    1186             :  */
    1187             : static unsigned long get_nr_dirty_pages(void)
    1188             : {
    1189          34 :         return global_node_page_state(NR_FILE_DIRTY) +
    1190          17 :                 get_nr_dirty_inodes();
    1191             : }
    1192             : 
    1193           0 : static void wb_start_writeback(struct bdi_writeback *wb, enum wb_reason reason)
    1194             : {
    1195           0 :         if (!wb_has_dirty_io(wb))
    1196             :                 return;
    1197             : 
    1198             :         /*
    1199             :          * All callers of this function want to start writeback of all
    1200             :          * dirty pages. Places like vmscan can call this at a very
    1201             :          * high frequency, causing pointless allocations of tons of
    1202             :          * work items and keeping the flusher threads busy retrieving
    1203             :          * that work. Ensure that we only allow one of them pending and
    1204             :          * inflight at the time.
    1205             :          */
    1206           0 :         if (test_bit(WB_start_all, &wb->state) ||
    1207           0 :             test_and_set_bit(WB_start_all, &wb->state))
    1208             :                 return;
    1209             : 
    1210           0 :         wb->start_all_reason = reason;
    1211           0 :         wb_wakeup(wb);
    1212             : }
    1213             : 
    1214             : /**
    1215             :  * wb_start_background_writeback - start background writeback
    1216             :  * @wb: bdi_writback to write from
    1217             :  *
    1218             :  * Description:
    1219             :  *   This makes sure WB_SYNC_NONE background writeback happens. When
    1220             :  *   this function returns, it is only guaranteed that for given wb
    1221             :  *   some IO is happening if we are over background dirty threshold.
    1222             :  *   Caller need not hold sb s_umount semaphore.
    1223             :  */
    1224           0 : void wb_start_background_writeback(struct bdi_writeback *wb)
    1225             : {
    1226             :         /*
    1227             :          * We just wake up the flusher thread. It will perform background
    1228             :          * writeback as soon as there is no other work to do.
    1229             :          */
    1230           0 :         trace_writeback_wake_background(wb);
    1231           0 :         wb_wakeup(wb);
    1232           0 : }
    1233             : 
    1234             : /*
    1235             :  * Remove the inode from the writeback list it is on.
    1236             :  */
    1237           0 : void inode_io_list_del(struct inode *inode)
    1238             : {
    1239             :         struct bdi_writeback *wb;
    1240             : 
    1241           0 :         wb = inode_to_wb_and_lock_list(inode);
    1242           0 :         spin_lock(&inode->i_lock);
    1243             : 
    1244           0 :         inode->i_state &= ~I_SYNC_QUEUED;
    1245           0 :         list_del_init(&inode->i_io_list);
    1246           0 :         wb_io_lists_depopulated(wb);
    1247             : 
    1248           0 :         spin_unlock(&inode->i_lock);
    1249           0 :         spin_unlock(&wb->list_lock);
    1250           0 : }
    1251             : EXPORT_SYMBOL(inode_io_list_del);
    1252             : 
    1253             : /*
    1254             :  * mark an inode as under writeback on the sb
    1255             :  */
    1256           0 : void sb_mark_inode_writeback(struct inode *inode)
    1257             : {
    1258           0 :         struct super_block *sb = inode->i_sb;
    1259             :         unsigned long flags;
    1260             : 
    1261           0 :         if (list_empty(&inode->i_wb_list)) {
    1262           0 :                 spin_lock_irqsave(&sb->s_inode_wblist_lock, flags);
    1263           0 :                 if (list_empty(&inode->i_wb_list)) {
    1264           0 :                         list_add_tail(&inode->i_wb_list, &sb->s_inodes_wb);
    1265             :                         trace_sb_mark_inode_writeback(inode);
    1266             :                 }
    1267           0 :                 spin_unlock_irqrestore(&sb->s_inode_wblist_lock, flags);
    1268             :         }
    1269           0 : }
    1270             : 
    1271             : /*
    1272             :  * clear an inode as under writeback on the sb
    1273             :  */
    1274           0 : void sb_clear_inode_writeback(struct inode *inode)
    1275             : {
    1276           0 :         struct super_block *sb = inode->i_sb;
    1277             :         unsigned long flags;
    1278             : 
    1279           0 :         if (!list_empty(&inode->i_wb_list)) {
    1280           0 :                 spin_lock_irqsave(&sb->s_inode_wblist_lock, flags);
    1281           0 :                 if (!list_empty(&inode->i_wb_list)) {
    1282           0 :                         list_del_init(&inode->i_wb_list);
    1283             :                         trace_sb_clear_inode_writeback(inode);
    1284             :                 }
    1285           0 :                 spin_unlock_irqrestore(&sb->s_inode_wblist_lock, flags);
    1286             :         }
    1287           0 : }
    1288             : 
    1289             : /*
    1290             :  * Redirty an inode: set its when-it-was dirtied timestamp and move it to the
    1291             :  * furthest end of its superblock's dirty-inode list.
    1292             :  *
    1293             :  * Before stamping the inode's ->dirtied_when, we check to see whether it is
    1294             :  * already the most-recently-dirtied inode on the b_dirty list.  If that is
    1295             :  * the case then the inode must have been redirtied while it was being written
    1296             :  * out and we don't reset its dirtied_when.
    1297             :  */
    1298           0 : static void redirty_tail_locked(struct inode *inode, struct bdi_writeback *wb)
    1299             : {
    1300             :         assert_spin_locked(&inode->i_lock);
    1301             : 
    1302           0 :         inode->i_state &= ~I_SYNC_QUEUED;
    1303             :         /*
    1304             :          * When the inode is being freed just don't bother with dirty list
    1305             :          * tracking. Flush worker will ignore this inode anyway and it will
    1306             :          * trigger assertions in inode_io_list_move_locked().
    1307             :          */
    1308           0 :         if (inode->i_state & I_FREEING) {
    1309           0 :                 list_del_init(&inode->i_io_list);
    1310           0 :                 wb_io_lists_depopulated(wb);
    1311           0 :                 return;
    1312             :         }
    1313           0 :         if (!list_empty(&wb->b_dirty)) {
    1314             :                 struct inode *tail;
    1315             : 
    1316           0 :                 tail = wb_inode(wb->b_dirty.next);
    1317           0 :                 if (time_before(inode->dirtied_when, tail->dirtied_when))
    1318           0 :                         inode->dirtied_when = jiffies;
    1319             :         }
    1320           0 :         inode_io_list_move_locked(inode, wb, &wb->b_dirty);
    1321             : }
    1322             : 
    1323             : static void redirty_tail(struct inode *inode, struct bdi_writeback *wb)
    1324             : {
    1325           0 :         spin_lock(&inode->i_lock);
    1326           0 :         redirty_tail_locked(inode, wb);
    1327           0 :         spin_unlock(&inode->i_lock);
    1328             : }
    1329             : 
    1330             : /*
    1331             :  * requeue inode for re-scanning after bdi->b_io list is exhausted.
    1332             :  */
    1333             : static void requeue_io(struct inode *inode, struct bdi_writeback *wb)
    1334             : {
    1335           0 :         inode_io_list_move_locked(inode, wb, &wb->b_more_io);
    1336             : }
    1337             : 
    1338           0 : static void inode_sync_complete(struct inode *inode)
    1339             : {
    1340           0 :         inode->i_state &= ~I_SYNC;
    1341             :         /* If inode is clean an unused, put it into LRU now... */
    1342           0 :         inode_add_lru(inode);
    1343             :         /* Waiters must see I_SYNC cleared before being woken up */
    1344           0 :         smp_mb();
    1345           0 :         wake_up_bit(&inode->i_state, __I_SYNC);
    1346           0 : }
    1347             : 
    1348             : static bool inode_dirtied_after(struct inode *inode, unsigned long t)
    1349             : {
    1350           0 :         bool ret = time_after(inode->dirtied_when, t);
    1351             : #ifndef CONFIG_64BIT
    1352             :         /*
    1353             :          * For inodes being constantly redirtied, dirtied_when can get stuck.
    1354             :          * It _appears_ to be in the future, but is actually in distant past.
    1355             :          * This test is necessary to prevent such wrapped-around relative times
    1356             :          * from permanently stopping the whole bdi writeback.
    1357             :          */
    1358             :         ret = ret && time_before_eq(inode->dirtied_when, jiffies);
    1359             : #endif
    1360             :         return ret;
    1361             : }
    1362             : 
    1363             : /*
    1364             :  * Move expired (dirtied before dirtied_before) dirty inodes from
    1365             :  * @delaying_queue to @dispatch_queue.
    1366             :  */
    1367           0 : static int move_expired_inodes(struct list_head *delaying_queue,
    1368             :                                struct list_head *dispatch_queue,
    1369             :                                unsigned long dirtied_before)
    1370             : {
    1371           0 :         LIST_HEAD(tmp);
    1372             :         struct list_head *pos, *node;
    1373           0 :         struct super_block *sb = NULL;
    1374             :         struct inode *inode;
    1375           0 :         int do_sb_sort = 0;
    1376           0 :         int moved = 0;
    1377             : 
    1378           0 :         while (!list_empty(delaying_queue)) {
    1379           0 :                 inode = wb_inode(delaying_queue->prev);
    1380           0 :                 if (inode_dirtied_after(inode, dirtied_before))
    1381             :                         break;
    1382           0 :                 spin_lock(&inode->i_lock);
    1383           0 :                 list_move(&inode->i_io_list, &tmp);
    1384           0 :                 moved++;
    1385           0 :                 inode->i_state |= I_SYNC_QUEUED;
    1386           0 :                 spin_unlock(&inode->i_lock);
    1387           0 :                 if (sb_is_blkdev_sb(inode->i_sb))
    1388           0 :                         continue;
    1389           0 :                 if (sb && sb != inode->i_sb)
    1390           0 :                         do_sb_sort = 1;
    1391             :                 sb = inode->i_sb;
    1392             :         }
    1393             : 
    1394             :         /* just one sb in list, splice to dispatch_queue and we're done */
    1395           0 :         if (!do_sb_sort) {
    1396             :                 list_splice(&tmp, dispatch_queue);
    1397             :                 goto out;
    1398             :         }
    1399             : 
    1400             :         /*
    1401             :          * Although inode's i_io_list is moved from 'tmp' to 'dispatch_queue',
    1402             :          * we don't take inode->i_lock here because it is just a pointless overhead.
    1403             :          * Inode is already marked as I_SYNC_QUEUED so writeback list handling is
    1404             :          * fully under our control.
    1405             :          */
    1406           0 :         while (!list_empty(&tmp)) {
    1407           0 :                 sb = wb_inode(tmp.prev)->i_sb;
    1408           0 :                 list_for_each_prev_safe(pos, node, &tmp) {
    1409           0 :                         inode = wb_inode(pos);
    1410           0 :                         if (inode->i_sb == sb)
    1411           0 :                                 list_move(&inode->i_io_list, dispatch_queue);
    1412             :                 }
    1413             :         }
    1414             : out:
    1415           0 :         return moved;
    1416             : }
    1417             : 
    1418             : /*
    1419             :  * Queue all expired dirty inodes for io, eldest first.
    1420             :  * Before
    1421             :  *         newly dirtied     b_dirty    b_io    b_more_io
    1422             :  *         =============>    gf         edc     BA
    1423             :  * After
    1424             :  *         newly dirtied     b_dirty    b_io    b_more_io
    1425             :  *         =============>    g          fBAedc
    1426             :  *                                           |
    1427             :  *                                           +--> dequeue for IO
    1428             :  */
    1429           0 : static void queue_io(struct bdi_writeback *wb, struct wb_writeback_work *work,
    1430             :                      unsigned long dirtied_before)
    1431             : {
    1432             :         int moved;
    1433           0 :         unsigned long time_expire_jif = dirtied_before;
    1434             : 
    1435             :         assert_spin_locked(&wb->list_lock);
    1436           0 :         list_splice_init(&wb->b_more_io, &wb->b_io);
    1437           0 :         moved = move_expired_inodes(&wb->b_dirty, &wb->b_io, dirtied_before);
    1438           0 :         if (!work->for_sync)
    1439           0 :                 time_expire_jif = jiffies - dirtytime_expire_interval * HZ;
    1440           0 :         moved += move_expired_inodes(&wb->b_dirty_time, &wb->b_io,
    1441             :                                      time_expire_jif);
    1442           0 :         if (moved)
    1443           0 :                 wb_io_lists_populated(wb);
    1444           0 :         trace_writeback_queue_io(wb, work, dirtied_before, moved);
    1445           0 : }
    1446             : 
    1447           0 : static int write_inode(struct inode *inode, struct writeback_control *wbc)
    1448             : {
    1449             :         int ret;
    1450             : 
    1451           0 :         if (inode->i_sb->s_op->write_inode && !is_bad_inode(inode)) {
    1452           0 :                 trace_writeback_write_inode_start(inode, wbc);
    1453           0 :                 ret = inode->i_sb->s_op->write_inode(inode, wbc);
    1454           0 :                 trace_writeback_write_inode(inode, wbc);
    1455           0 :                 return ret;
    1456             :         }
    1457             :         return 0;
    1458             : }
    1459             : 
    1460             : /*
    1461             :  * Wait for writeback on an inode to complete. Called with i_lock held.
    1462             :  * Caller must make sure inode cannot go away when we drop i_lock.
    1463             :  */
    1464          34 : static void __inode_wait_for_writeback(struct inode *inode)
    1465             :         __releases(inode->i_lock)
    1466             :         __acquires(inode->i_lock)
    1467             : {
    1468          68 :         DEFINE_WAIT_BIT(wq, &inode->i_state, __I_SYNC);
    1469             :         wait_queue_head_t *wqh;
    1470             : 
    1471          34 :         wqh = bit_waitqueue(&inode->i_state, __I_SYNC);
    1472          68 :         while (inode->i_state & I_SYNC) {
    1473           0 :                 spin_unlock(&inode->i_lock);
    1474           0 :                 __wait_on_bit(wqh, &wq, bit_wait,
    1475             :                               TASK_UNINTERRUPTIBLE);
    1476           0 :                 spin_lock(&inode->i_lock);
    1477             :         }
    1478          34 : }
    1479             : 
    1480             : /*
    1481             :  * Wait for writeback on an inode to complete. Caller must have inode pinned.
    1482             :  */
    1483          34 : void inode_wait_for_writeback(struct inode *inode)
    1484             : {
    1485          68 :         spin_lock(&inode->i_lock);
    1486          34 :         __inode_wait_for_writeback(inode);
    1487          68 :         spin_unlock(&inode->i_lock);
    1488          34 : }
    1489             : 
    1490             : /*
    1491             :  * Sleep until I_SYNC is cleared. This function must be called with i_lock
    1492             :  * held and drops it. It is aimed for callers not holding any inode reference
    1493             :  * so once i_lock is dropped, inode can go away.
    1494             :  */
    1495           0 : static void inode_sleep_on_writeback(struct inode *inode)
    1496             :         __releases(inode->i_lock)
    1497             : {
    1498           0 :         DEFINE_WAIT(wait);
    1499           0 :         wait_queue_head_t *wqh = bit_waitqueue(&inode->i_state, __I_SYNC);
    1500             :         int sleep;
    1501             : 
    1502           0 :         prepare_to_wait(wqh, &wait, TASK_UNINTERRUPTIBLE);
    1503           0 :         sleep = inode->i_state & I_SYNC;
    1504           0 :         spin_unlock(&inode->i_lock);
    1505           0 :         if (sleep)
    1506           0 :                 schedule();
    1507           0 :         finish_wait(wqh, &wait);
    1508           0 : }
    1509             : 
    1510             : /*
    1511             :  * Find proper writeback list for the inode depending on its current state and
    1512             :  * possibly also change of its state while we were doing writeback.  Here we
    1513             :  * handle things such as livelock prevention or fairness of writeback among
    1514             :  * inodes. This function can be called only by flusher thread - noone else
    1515             :  * processes all inodes in writeback lists and requeueing inodes behind flusher
    1516             :  * thread's back can have unexpected consequences.
    1517             :  */
    1518           0 : static void requeue_inode(struct inode *inode, struct bdi_writeback *wb,
    1519             :                           struct writeback_control *wbc)
    1520             : {
    1521           0 :         if (inode->i_state & I_FREEING)
    1522             :                 return;
    1523             : 
    1524             :         /*
    1525             :          * Sync livelock prevention. Each inode is tagged and synced in one
    1526             :          * shot. If still dirty, it will be redirty_tail()'ed below.  Update
    1527             :          * the dirty time to prevent enqueue and sync it again.
    1528             :          */
    1529           0 :         if ((inode->i_state & I_DIRTY) &&
    1530           0 :             (wbc->sync_mode == WB_SYNC_ALL || wbc->tagged_writepages))
    1531           0 :                 inode->dirtied_when = jiffies;
    1532             : 
    1533           0 :         if (wbc->pages_skipped) {
    1534             :                 /*
    1535             :                  * writeback is not making progress due to locked
    1536             :                  * buffers. Skip this inode for now.
    1537             :                  */
    1538           0 :                 redirty_tail_locked(inode, wb);
    1539           0 :                 return;
    1540             :         }
    1541             : 
    1542           0 :         if (mapping_tagged(inode->i_mapping, PAGECACHE_TAG_DIRTY)) {
    1543             :                 /*
    1544             :                  * We didn't write back all the pages.  nfs_writepages()
    1545             :                  * sometimes bales out without doing anything.
    1546             :                  */
    1547           0 :                 if (wbc->nr_to_write <= 0) {
    1548             :                         /* Slice used up. Queue for next turn. */
    1549             :                         requeue_io(inode, wb);
    1550             :                 } else {
    1551             :                         /*
    1552             :                          * Writeback blocked by something other than
    1553             :                          * congestion. Delay the inode for some time to
    1554             :                          * avoid spinning on the CPU (100% iowait)
    1555             :                          * retrying writeback of the dirty page/inode
    1556             :                          * that cannot be performed immediately.
    1557             :                          */
    1558           0 :                         redirty_tail_locked(inode, wb);
    1559             :                 }
    1560           0 :         } else if (inode->i_state & I_DIRTY) {
    1561             :                 /*
    1562             :                  * Filesystems can dirty the inode during writeback operations,
    1563             :                  * such as delayed allocation during submission or metadata
    1564             :                  * updates after data IO completion.
    1565             :                  */
    1566           0 :                 redirty_tail_locked(inode, wb);
    1567           0 :         } else if (inode->i_state & I_DIRTY_TIME) {
    1568           0 :                 inode->dirtied_when = jiffies;
    1569           0 :                 inode_io_list_move_locked(inode, wb, &wb->b_dirty_time);
    1570           0 :                 inode->i_state &= ~I_SYNC_QUEUED;
    1571             :         } else {
    1572             :                 /* The inode is clean. Remove from writeback lists. */
    1573           0 :                 inode_cgwb_move_to_attached(inode, wb);
    1574             :         }
    1575             : }
    1576             : 
    1577             : /*
    1578             :  * Write out an inode and its dirty pages (or some of its dirty pages, depending
    1579             :  * on @wbc->nr_to_write), and clear the relevant dirty flags from i_state.
    1580             :  *
    1581             :  * This doesn't remove the inode from the writeback list it is on, except
    1582             :  * potentially to move it from b_dirty_time to b_dirty due to timestamp
    1583             :  * expiration.  The caller is otherwise responsible for writeback list handling.
    1584             :  *
    1585             :  * The caller is also responsible for setting the I_SYNC flag beforehand and
    1586             :  * calling inode_sync_complete() to clear it afterwards.
    1587             :  */
    1588             : static int
    1589           0 : __writeback_single_inode(struct inode *inode, struct writeback_control *wbc)
    1590             : {
    1591           0 :         struct address_space *mapping = inode->i_mapping;
    1592           0 :         long nr_to_write = wbc->nr_to_write;
    1593             :         unsigned dirty;
    1594             :         int ret;
    1595             : 
    1596           0 :         WARN_ON(!(inode->i_state & I_SYNC));
    1597             : 
    1598           0 :         trace_writeback_single_inode_start(inode, wbc, nr_to_write);
    1599             : 
    1600           0 :         ret = do_writepages(mapping, wbc);
    1601             : 
    1602             :         /*
    1603             :          * Make sure to wait on the data before writing out the metadata.
    1604             :          * This is important for filesystems that modify metadata on data
    1605             :          * I/O completion. We don't do it for sync(2) writeback because it has a
    1606             :          * separate, external IO completion path and ->sync_fs for guaranteeing
    1607             :          * inode metadata is written back correctly.
    1608             :          */
    1609           0 :         if (wbc->sync_mode == WB_SYNC_ALL && !wbc->for_sync) {
    1610           0 :                 int err = filemap_fdatawait(mapping);
    1611           0 :                 if (ret == 0)
    1612           0 :                         ret = err;
    1613             :         }
    1614             : 
    1615             :         /*
    1616             :          * If the inode has dirty timestamps and we need to write them, call
    1617             :          * mark_inode_dirty_sync() to notify the filesystem about it and to
    1618             :          * change I_DIRTY_TIME into I_DIRTY_SYNC.
    1619             :          */
    1620           0 :         if ((inode->i_state & I_DIRTY_TIME) &&
    1621           0 :             (wbc->sync_mode == WB_SYNC_ALL ||
    1622           0 :              time_after(jiffies, inode->dirtied_time_when +
    1623             :                         dirtytime_expire_interval * HZ))) {
    1624           0 :                 trace_writeback_lazytime(inode);
    1625             :                 mark_inode_dirty_sync(inode);
    1626             :         }
    1627             : 
    1628             :         /*
    1629             :          * Get and clear the dirty flags from i_state.  This needs to be done
    1630             :          * after calling writepages because some filesystems may redirty the
    1631             :          * inode during writepages due to delalloc.  It also needs to be done
    1632             :          * after handling timestamp expiration, as that may dirty the inode too.
    1633             :          */
    1634           0 :         spin_lock(&inode->i_lock);
    1635           0 :         dirty = inode->i_state & I_DIRTY;
    1636           0 :         inode->i_state &= ~dirty;
    1637             : 
    1638             :         /*
    1639             :          * Paired with smp_mb() in __mark_inode_dirty().  This allows
    1640             :          * __mark_inode_dirty() to test i_state without grabbing i_lock -
    1641             :          * either they see the I_DIRTY bits cleared or we see the dirtied
    1642             :          * inode.
    1643             :          *
    1644             :          * I_DIRTY_PAGES is always cleared together above even if @mapping
    1645             :          * still has dirty pages.  The flag is reinstated after smp_mb() if
    1646             :          * necessary.  This guarantees that either __mark_inode_dirty()
    1647             :          * sees clear I_DIRTY_PAGES or we see PAGECACHE_TAG_DIRTY.
    1648             :          */
    1649           0 :         smp_mb();
    1650             : 
    1651           0 :         if (mapping_tagged(mapping, PAGECACHE_TAG_DIRTY))
    1652           0 :                 inode->i_state |= I_DIRTY_PAGES;
    1653           0 :         else if (unlikely(inode->i_state & I_PINNING_FSCACHE_WB)) {
    1654           0 :                 if (!(inode->i_state & I_DIRTY_PAGES)) {
    1655           0 :                         inode->i_state &= ~I_PINNING_FSCACHE_WB;
    1656           0 :                         wbc->unpinned_fscache_wb = true;
    1657           0 :                         dirty |= I_PINNING_FSCACHE_WB; /* Cause write_inode */
    1658             :                 }
    1659             :         }
    1660             : 
    1661           0 :         spin_unlock(&inode->i_lock);
    1662             : 
    1663             :         /* Don't write the inode if only I_DIRTY_PAGES was set */
    1664           0 :         if (dirty & ~I_DIRTY_PAGES) {
    1665           0 :                 int err = write_inode(inode, wbc);
    1666           0 :                 if (ret == 0)
    1667           0 :                         ret = err;
    1668             :         }
    1669           0 :         wbc->unpinned_fscache_wb = false;
    1670           0 :         trace_writeback_single_inode(inode, wbc, nr_to_write);
    1671           0 :         return ret;
    1672             : }
    1673             : 
    1674             : /*
    1675             :  * Write out an inode's dirty data and metadata on-demand, i.e. separately from
    1676             :  * the regular batched writeback done by the flusher threads in
    1677             :  * writeback_sb_inodes().  @wbc controls various aspects of the write, such as
    1678             :  * whether it is a data-integrity sync (%WB_SYNC_ALL) or not (%WB_SYNC_NONE).
    1679             :  *
    1680             :  * To prevent the inode from going away, either the caller must have a reference
    1681             :  * to the inode, or the inode must have I_WILL_FREE or I_FREEING set.
    1682             :  */
    1683           0 : static int writeback_single_inode(struct inode *inode,
    1684             :                                   struct writeback_control *wbc)
    1685             : {
    1686             :         struct bdi_writeback *wb;
    1687           0 :         int ret = 0;
    1688             : 
    1689           0 :         spin_lock(&inode->i_lock);
    1690           0 :         if (!atomic_read(&inode->i_count))
    1691           0 :                 WARN_ON(!(inode->i_state & (I_WILL_FREE|I_FREEING)));
    1692             :         else
    1693           0 :                 WARN_ON(inode->i_state & I_WILL_FREE);
    1694             : 
    1695           0 :         if (inode->i_state & I_SYNC) {
    1696             :                 /*
    1697             :                  * Writeback is already running on the inode.  For WB_SYNC_NONE,
    1698             :                  * that's enough and we can just return.  For WB_SYNC_ALL, we
    1699             :                  * must wait for the existing writeback to complete, then do
    1700             :                  * writeback again if there's anything left.
    1701             :                  */
    1702           0 :                 if (wbc->sync_mode != WB_SYNC_ALL)
    1703             :                         goto out;
    1704           0 :                 __inode_wait_for_writeback(inode);
    1705             :         }
    1706           0 :         WARN_ON(inode->i_state & I_SYNC);
    1707             :         /*
    1708             :          * If the inode is already fully clean, then there's nothing to do.
    1709             :          *
    1710             :          * For data-integrity syncs we also need to check whether any pages are
    1711             :          * still under writeback, e.g. due to prior WB_SYNC_NONE writeback.  If
    1712             :          * there are any such pages, we'll need to wait for them.
    1713             :          */
    1714           0 :         if (!(inode->i_state & I_DIRTY_ALL) &&
    1715           0 :             (wbc->sync_mode != WB_SYNC_ALL ||
    1716           0 :              !mapping_tagged(inode->i_mapping, PAGECACHE_TAG_WRITEBACK)))
    1717             :                 goto out;
    1718           0 :         inode->i_state |= I_SYNC;
    1719           0 :         wbc_attach_and_unlock_inode(wbc, inode);
    1720             : 
    1721           0 :         ret = __writeback_single_inode(inode, wbc);
    1722             : 
    1723           0 :         wbc_detach_inode(wbc);
    1724             : 
    1725           0 :         wb = inode_to_wb_and_lock_list(inode);
    1726           0 :         spin_lock(&inode->i_lock);
    1727             :         /*
    1728             :          * If the inode is freeing, its i_io_list shoudn't be updated
    1729             :          * as it can be finally deleted at this moment.
    1730             :          */
    1731           0 :         if (!(inode->i_state & I_FREEING)) {
    1732             :                 /*
    1733             :                  * If the inode is now fully clean, then it can be safely
    1734             :                  * removed from its writeback list (if any). Otherwise the
    1735             :                  * flusher threads are responsible for the writeback lists.
    1736             :                  */
    1737           0 :                 if (!(inode->i_state & I_DIRTY_ALL))
    1738           0 :                         inode_cgwb_move_to_attached(inode, wb);
    1739           0 :                 else if (!(inode->i_state & I_SYNC_QUEUED)) {
    1740           0 :                         if ((inode->i_state & I_DIRTY))
    1741           0 :                                 redirty_tail_locked(inode, wb);
    1742           0 :                         else if (inode->i_state & I_DIRTY_TIME) {
    1743           0 :                                 inode->dirtied_when = jiffies;
    1744           0 :                                 inode_io_list_move_locked(inode,
    1745             :                                                           wb,
    1746             :                                                           &wb->b_dirty_time);
    1747             :                         }
    1748             :                 }
    1749             :         }
    1750             : 
    1751           0 :         spin_unlock(&wb->list_lock);
    1752           0 :         inode_sync_complete(inode);
    1753             : out:
    1754           0 :         spin_unlock(&inode->i_lock);
    1755           0 :         return ret;
    1756             : }
    1757             : 
    1758             : static long writeback_chunk_size(struct bdi_writeback *wb,
    1759             :                                  struct wb_writeback_work *work)
    1760             : {
    1761             :         long pages;
    1762             : 
    1763             :         /*
    1764             :          * WB_SYNC_ALL mode does livelock avoidance by syncing dirty
    1765             :          * inodes/pages in one big loop. Setting wbc.nr_to_write=LONG_MAX
    1766             :          * here avoids calling into writeback_inodes_wb() more than once.
    1767             :          *
    1768             :          * The intended call sequence for WB_SYNC_ALL writeback is:
    1769             :          *
    1770             :          *      wb_writeback()
    1771             :          *          writeback_sb_inodes()       <== called only once
    1772             :          *              write_cache_pages()     <== called once for each inode
    1773             :          *                   (quickly) tag currently dirty pages
    1774             :          *                   (maybe slowly) sync all tagged pages
    1775             :          */
    1776           0 :         if (work->sync_mode == WB_SYNC_ALL || work->tagged_writepages)
    1777             :                 pages = LONG_MAX;
    1778             :         else {
    1779           0 :                 pages = min(wb->avg_write_bandwidth / 2,
    1780             :                             global_wb_domain.dirty_limit / DIRTY_SCOPE);
    1781           0 :                 pages = min(pages, work->nr_pages);
    1782           0 :                 pages = round_down(pages + MIN_WRITEBACK_PAGES,
    1783             :                                    MIN_WRITEBACK_PAGES);
    1784             :         }
    1785             : 
    1786             :         return pages;
    1787             : }
    1788             : 
    1789             : /*
    1790             :  * Write a portion of b_io inodes which belong to @sb.
    1791             :  *
    1792             :  * Return the number of pages and/or inodes written.
    1793             :  *
    1794             :  * NOTE! This is called with wb->list_lock held, and will
    1795             :  * unlock and relock that for each inode it ends up doing
    1796             :  * IO for.
    1797             :  */
    1798           0 : static long writeback_sb_inodes(struct super_block *sb,
    1799             :                                 struct bdi_writeback *wb,
    1800             :                                 struct wb_writeback_work *work)
    1801             : {
    1802           0 :         struct writeback_control wbc = {
    1803           0 :                 .sync_mode              = work->sync_mode,
    1804           0 :                 .tagged_writepages      = work->tagged_writepages,
    1805           0 :                 .for_kupdate            = work->for_kupdate,
    1806           0 :                 .for_background         = work->for_background,
    1807           0 :                 .for_sync               = work->for_sync,
    1808           0 :                 .range_cyclic           = work->range_cyclic,
    1809             :                 .range_start            = 0,
    1810             :                 .range_end              = LLONG_MAX,
    1811             :         };
    1812           0 :         unsigned long start_time = jiffies;
    1813             :         long write_chunk;
    1814           0 :         long total_wrote = 0;  /* count both pages and inodes */
    1815             : 
    1816           0 :         while (!list_empty(&wb->b_io)) {
    1817           0 :                 struct inode *inode = wb_inode(wb->b_io.prev);
    1818             :                 struct bdi_writeback *tmp_wb;
    1819             :                 long wrote;
    1820             : 
    1821           0 :                 if (inode->i_sb != sb) {
    1822           0 :                         if (work->sb) {
    1823             :                                 /*
    1824             :                                  * We only want to write back data for this
    1825             :                                  * superblock, move all inodes not belonging
    1826             :                                  * to it back onto the dirty list.
    1827             :                                  */
    1828           0 :                                 redirty_tail(inode, wb);
    1829           0 :                                 continue;
    1830             :                         }
    1831             : 
    1832             :                         /*
    1833             :                          * The inode belongs to a different superblock.
    1834             :                          * Bounce back to the caller to unpin this and
    1835             :                          * pin the next superblock.
    1836             :                          */
    1837             :                         break;
    1838             :                 }
    1839             : 
    1840             :                 /*
    1841             :                  * Don't bother with new inodes or inodes being freed, first
    1842             :                  * kind does not need periodic writeout yet, and for the latter
    1843             :                  * kind writeout is handled by the freer.
    1844             :                  */
    1845           0 :                 spin_lock(&inode->i_lock);
    1846           0 :                 if (inode->i_state & (I_NEW | I_FREEING | I_WILL_FREE)) {
    1847           0 :                         redirty_tail_locked(inode, wb);
    1848           0 :                         spin_unlock(&inode->i_lock);
    1849           0 :                         continue;
    1850             :                 }
    1851           0 :                 if ((inode->i_state & I_SYNC) && wbc.sync_mode != WB_SYNC_ALL) {
    1852             :                         /*
    1853             :                          * If this inode is locked for writeback and we are not
    1854             :                          * doing writeback-for-data-integrity, move it to
    1855             :                          * b_more_io so that writeback can proceed with the
    1856             :                          * other inodes on s_io.
    1857             :                          *
    1858             :                          * We'll have another go at writing back this inode
    1859             :                          * when we completed a full scan of b_io.
    1860             :                          */
    1861           0 :                         requeue_io(inode, wb);
    1862           0 :                         spin_unlock(&inode->i_lock);
    1863             :                         trace_writeback_sb_inodes_requeue(inode);
    1864           0 :                         continue;
    1865             :                 }
    1866           0 :                 spin_unlock(&wb->list_lock);
    1867             : 
    1868             :                 /*
    1869             :                  * We already requeued the inode if it had I_SYNC set and we
    1870             :                  * are doing WB_SYNC_NONE writeback. So this catches only the
    1871             :                  * WB_SYNC_ALL case.
    1872             :                  */
    1873           0 :                 if (inode->i_state & I_SYNC) {
    1874             :                         /* Wait for I_SYNC. This function drops i_lock... */
    1875           0 :                         inode_sleep_on_writeback(inode);
    1876             :                         /* Inode may be gone, start again */
    1877           0 :                         spin_lock(&wb->list_lock);
    1878           0 :                         continue;
    1879             :                 }
    1880           0 :                 inode->i_state |= I_SYNC;
    1881           0 :                 wbc_attach_and_unlock_inode(&wbc, inode);
    1882             : 
    1883           0 :                 write_chunk = writeback_chunk_size(wb, work);
    1884           0 :                 wbc.nr_to_write = write_chunk;
    1885           0 :                 wbc.pages_skipped = 0;
    1886             : 
    1887             :                 /*
    1888             :                  * We use I_SYNC to pin the inode in memory. While it is set
    1889             :                  * evict_inode() will wait so the inode cannot be freed.
    1890             :                  */
    1891           0 :                 __writeback_single_inode(inode, &wbc);
    1892             : 
    1893           0 :                 wbc_detach_inode(&wbc);
    1894           0 :                 work->nr_pages -= write_chunk - wbc.nr_to_write;
    1895           0 :                 wrote = write_chunk - wbc.nr_to_write - wbc.pages_skipped;
    1896           0 :                 wrote = wrote < 0 ? 0 : wrote;
    1897           0 :                 total_wrote += wrote;
    1898             : 
    1899           0 :                 if (need_resched()) {
    1900             :                         /*
    1901             :                          * We're trying to balance between building up a nice
    1902             :                          * long list of IOs to improve our merge rate, and
    1903             :                          * getting those IOs out quickly for anyone throttling
    1904             :                          * in balance_dirty_pages().  cond_resched() doesn't
    1905             :                          * unplug, so get our IOs out the door before we
    1906             :                          * give up the CPU.
    1907             :                          */
    1908           0 :                         blk_flush_plug(current->plug, false);
    1909           0 :                         cond_resched();
    1910             :                 }
    1911             : 
    1912             :                 /*
    1913             :                  * Requeue @inode if still dirty.  Be careful as @inode may
    1914             :                  * have been switched to another wb in the meantime.
    1915             :                  */
    1916           0 :                 tmp_wb = inode_to_wb_and_lock_list(inode);
    1917           0 :                 spin_lock(&inode->i_lock);
    1918           0 :                 if (!(inode->i_state & I_DIRTY_ALL))
    1919           0 :                         total_wrote++;
    1920           0 :                 requeue_inode(inode, tmp_wb, &wbc);
    1921           0 :                 inode_sync_complete(inode);
    1922           0 :                 spin_unlock(&inode->i_lock);
    1923             : 
    1924           0 :                 if (unlikely(tmp_wb != wb)) {
    1925           0 :                         spin_unlock(&tmp_wb->list_lock);
    1926           0 :                         spin_lock(&wb->list_lock);
    1927             :                 }
    1928             : 
    1929             :                 /*
    1930             :                  * bail out to wb_writeback() often enough to check
    1931             :                  * background threshold and other termination conditions.
    1932             :                  */
    1933           0 :                 if (total_wrote) {
    1934           0 :                         if (time_is_before_jiffies(start_time + HZ / 10UL))
    1935             :                                 break;
    1936           0 :                         if (work->nr_pages <= 0)
    1937             :                                 break;
    1938             :                 }
    1939             :         }
    1940           0 :         return total_wrote;
    1941             : }
    1942             : 
    1943           0 : static long __writeback_inodes_wb(struct bdi_writeback *wb,
    1944             :                                   struct wb_writeback_work *work)
    1945             : {
    1946           0 :         unsigned long start_time = jiffies;
    1947           0 :         long wrote = 0;
    1948             : 
    1949           0 :         while (!list_empty(&wb->b_io)) {
    1950           0 :                 struct inode *inode = wb_inode(wb->b_io.prev);
    1951           0 :                 struct super_block *sb = inode->i_sb;
    1952             : 
    1953           0 :                 if (!trylock_super(sb)) {
    1954             :                         /*
    1955             :                          * trylock_super() may fail consistently due to
    1956             :                          * s_umount being grabbed by someone else. Don't use
    1957             :                          * requeue_io() to avoid busy retrying the inode/sb.
    1958             :                          */
    1959           0 :                         redirty_tail(inode, wb);
    1960           0 :                         continue;
    1961             :                 }
    1962           0 :                 wrote += writeback_sb_inodes(sb, wb, work);
    1963           0 :                 up_read(&sb->s_umount);
    1964             : 
    1965             :                 /* refer to the same tests at the end of writeback_sb_inodes */
    1966           0 :                 if (wrote) {
    1967           0 :                         if (time_is_before_jiffies(start_time + HZ / 10UL))
    1968             :                                 break;
    1969           0 :                         if (work->nr_pages <= 0)
    1970             :                                 break;
    1971             :                 }
    1972             :         }
    1973             :         /* Leave any unwritten inodes on b_io */
    1974           0 :         return wrote;
    1975             : }
    1976             : 
    1977           0 : static long writeback_inodes_wb(struct bdi_writeback *wb, long nr_pages,
    1978             :                                 enum wb_reason reason)
    1979             : {
    1980           0 :         struct wb_writeback_work work = {
    1981             :                 .nr_pages       = nr_pages,
    1982             :                 .sync_mode      = WB_SYNC_NONE,
    1983             :                 .range_cyclic   = 1,
    1984             :                 .reason         = reason,
    1985             :         };
    1986             :         struct blk_plug plug;
    1987             : 
    1988           0 :         blk_start_plug(&plug);
    1989           0 :         spin_lock(&wb->list_lock);
    1990           0 :         if (list_empty(&wb->b_io))
    1991           0 :                 queue_io(wb, &work, jiffies);
    1992           0 :         __writeback_inodes_wb(wb, &work);
    1993           0 :         spin_unlock(&wb->list_lock);
    1994           0 :         blk_finish_plug(&plug);
    1995             : 
    1996           0 :         return nr_pages - work.nr_pages;
    1997             : }
    1998             : 
    1999             : /*
    2000             :  * Explicit flushing or periodic writeback of "old" data.
    2001             :  *
    2002             :  * Define "old": the first time one of an inode's pages is dirtied, we mark the
    2003             :  * dirtying-time in the inode's address_space.  So this periodic writeback code
    2004             :  * just walks the superblock inode list, writing back any inodes which are
    2005             :  * older than a specific point in time.
    2006             :  *
    2007             :  * Try to run once per dirty_writeback_interval.  But if a writeback event
    2008             :  * takes longer than a dirty_writeback_interval interval, then leave a
    2009             :  * one-second gap.
    2010             :  *
    2011             :  * dirtied_before takes precedence over nr_to_write.  So we'll only write back
    2012             :  * all dirty pages if they are all attached to "old" mappings.
    2013             :  */
    2014           0 : static long wb_writeback(struct bdi_writeback *wb,
    2015             :                          struct wb_writeback_work *work)
    2016             : {
    2017           0 :         long nr_pages = work->nr_pages;
    2018           0 :         unsigned long dirtied_before = jiffies;
    2019             :         struct inode *inode;
    2020             :         long progress;
    2021             :         struct blk_plug plug;
    2022             : 
    2023           0 :         blk_start_plug(&plug);
    2024           0 :         spin_lock(&wb->list_lock);
    2025             :         for (;;) {
    2026             :                 /*
    2027             :                  * Stop writeback when nr_pages has been consumed
    2028             :                  */
    2029           0 :                 if (work->nr_pages <= 0)
    2030             :                         break;
    2031             : 
    2032             :                 /*
    2033             :                  * Background writeout and kupdate-style writeback may
    2034             :                  * run forever. Stop them if there is other work to do
    2035             :                  * so that e.g. sync can proceed. They'll be restarted
    2036             :                  * after the other works are all done.
    2037             :                  */
    2038           0 :                 if ((work->for_background || work->for_kupdate) &&
    2039           0 :                     !list_empty(&wb->work_list))
    2040             :                         break;
    2041             : 
    2042             :                 /*
    2043             :                  * For background writeout, stop when we are below the
    2044             :                  * background dirty threshold
    2045             :                  */
    2046           0 :                 if (work->for_background && !wb_over_bg_thresh(wb))
    2047             :                         break;
    2048             : 
    2049             :                 /*
    2050             :                  * Kupdate and background works are special and we want to
    2051             :                  * include all inodes that need writing. Livelock avoidance is
    2052             :                  * handled by these works yielding to any other work so we are
    2053             :                  * safe.
    2054             :                  */
    2055           0 :                 if (work->for_kupdate) {
    2056           0 :                         dirtied_before = jiffies -
    2057           0 :                                 msecs_to_jiffies(dirty_expire_interval * 10);
    2058           0 :                 } else if (work->for_background)
    2059           0 :                         dirtied_before = jiffies;
    2060             : 
    2061           0 :                 trace_writeback_start(wb, work);
    2062           0 :                 if (list_empty(&wb->b_io))
    2063           0 :                         queue_io(wb, work, dirtied_before);
    2064           0 :                 if (work->sb)
    2065           0 :                         progress = writeback_sb_inodes(work->sb, wb, work);
    2066             :                 else
    2067           0 :                         progress = __writeback_inodes_wb(wb, work);
    2068           0 :                 trace_writeback_written(wb, work);
    2069             : 
    2070             :                 /*
    2071             :                  * Did we write something? Try for more
    2072             :                  *
    2073             :                  * Dirty inodes are moved to b_io for writeback in batches.
    2074             :                  * The completion of the current batch does not necessarily
    2075             :                  * mean the overall work is done. So we keep looping as long
    2076             :                  * as made some progress on cleaning pages or inodes.
    2077             :                  */
    2078           0 :                 if (progress)
    2079           0 :                         continue;
    2080             :                 /*
    2081             :                  * No more inodes for IO, bail
    2082             :                  */
    2083           0 :                 if (list_empty(&wb->b_more_io))
    2084             :                         break;
    2085             :                 /*
    2086             :                  * Nothing written. Wait for some inode to
    2087             :                  * become available for writeback. Otherwise
    2088             :                  * we'll just busyloop.
    2089             :                  */
    2090           0 :                 trace_writeback_wait(wb, work);
    2091           0 :                 inode = wb_inode(wb->b_more_io.prev);
    2092           0 :                 spin_lock(&inode->i_lock);
    2093           0 :                 spin_unlock(&wb->list_lock);
    2094             :                 /* This function drops i_lock... */
    2095           0 :                 inode_sleep_on_writeback(inode);
    2096           0 :                 spin_lock(&wb->list_lock);
    2097             :         }
    2098           0 :         spin_unlock(&wb->list_lock);
    2099           0 :         blk_finish_plug(&plug);
    2100             : 
    2101           0 :         return nr_pages - work->nr_pages;
    2102             : }
    2103             : 
    2104             : /*
    2105             :  * Return the next wb_writeback_work struct that hasn't been processed yet.
    2106             :  */
    2107           0 : static struct wb_writeback_work *get_next_work_item(struct bdi_writeback *wb)
    2108             : {
    2109           0 :         struct wb_writeback_work *work = NULL;
    2110             : 
    2111           0 :         spin_lock_irq(&wb->work_lock);
    2112           0 :         if (!list_empty(&wb->work_list)) {
    2113           0 :                 work = list_entry(wb->work_list.next,
    2114             :                                   struct wb_writeback_work, list);
    2115           0 :                 list_del_init(&work->list);
    2116             :         }
    2117           0 :         spin_unlock_irq(&wb->work_lock);
    2118           0 :         return work;
    2119             : }
    2120             : 
    2121           0 : static long wb_check_background_flush(struct bdi_writeback *wb)
    2122             : {
    2123           0 :         if (wb_over_bg_thresh(wb)) {
    2124             : 
    2125           0 :                 struct wb_writeback_work work = {
    2126             :                         .nr_pages       = LONG_MAX,
    2127             :                         .sync_mode      = WB_SYNC_NONE,
    2128             :                         .for_background = 1,
    2129             :                         .range_cyclic   = 1,
    2130             :                         .reason         = WB_REASON_BACKGROUND,
    2131             :                 };
    2132             : 
    2133           0 :                 return wb_writeback(wb, &work);
    2134             :         }
    2135             : 
    2136             :         return 0;
    2137             : }
    2138             : 
    2139           0 : static long wb_check_old_data_flush(struct bdi_writeback *wb)
    2140             : {
    2141             :         unsigned long expired;
    2142             :         long nr_pages;
    2143             : 
    2144             :         /*
    2145             :          * When set to zero, disable periodic writeback
    2146             :          */
    2147           0 :         if (!dirty_writeback_interval)
    2148             :                 return 0;
    2149             : 
    2150           0 :         expired = wb->last_old_flush +
    2151           0 :                         msecs_to_jiffies(dirty_writeback_interval * 10);
    2152           0 :         if (time_before(jiffies, expired))
    2153             :                 return 0;
    2154             : 
    2155           0 :         wb->last_old_flush = jiffies;
    2156           0 :         nr_pages = get_nr_dirty_pages();
    2157             : 
    2158           0 :         if (nr_pages) {
    2159           0 :                 struct wb_writeback_work work = {
    2160             :                         .nr_pages       = nr_pages,
    2161             :                         .sync_mode      = WB_SYNC_NONE,
    2162             :                         .for_kupdate    = 1,
    2163             :                         .range_cyclic   = 1,
    2164             :                         .reason         = WB_REASON_PERIODIC,
    2165             :                 };
    2166             : 
    2167           0 :                 return wb_writeback(wb, &work);
    2168             :         }
    2169             : 
    2170             :         return 0;
    2171             : }
    2172             : 
    2173           0 : static long wb_check_start_all(struct bdi_writeback *wb)
    2174             : {
    2175             :         long nr_pages;
    2176             : 
    2177           0 :         if (!test_bit(WB_start_all, &wb->state))
    2178             :                 return 0;
    2179             : 
    2180           0 :         nr_pages = get_nr_dirty_pages();
    2181           0 :         if (nr_pages) {
    2182           0 :                 struct wb_writeback_work work = {
    2183           0 :                         .nr_pages       = wb_split_bdi_pages(wb, nr_pages),
    2184             :                         .sync_mode      = WB_SYNC_NONE,
    2185             :                         .range_cyclic   = 1,
    2186           0 :                         .reason         = wb->start_all_reason,
    2187             :                 };
    2188             : 
    2189           0 :                 nr_pages = wb_writeback(wb, &work);
    2190             :         }
    2191             : 
    2192           0 :         clear_bit(WB_start_all, &wb->state);
    2193           0 :         return nr_pages;
    2194             : }
    2195             : 
    2196             : 
    2197             : /*
    2198             :  * Retrieve work items and do the writeback they describe
    2199             :  */
    2200           0 : static long wb_do_writeback(struct bdi_writeback *wb)
    2201             : {
    2202             :         struct wb_writeback_work *work;
    2203           0 :         long wrote = 0;
    2204             : 
    2205           0 :         set_bit(WB_writeback_running, &wb->state);
    2206           0 :         while ((work = get_next_work_item(wb)) != NULL) {
    2207           0 :                 trace_writeback_exec(wb, work);
    2208           0 :                 wrote += wb_writeback(wb, work);
    2209           0 :                 finish_writeback_work(wb, work);
    2210             :         }
    2211             : 
    2212             :         /*
    2213             :          * Check for a flush-everything request
    2214             :          */
    2215           0 :         wrote += wb_check_start_all(wb);
    2216             : 
    2217             :         /*
    2218             :          * Check for periodic writeback, kupdated() style
    2219             :          */
    2220           0 :         wrote += wb_check_old_data_flush(wb);
    2221           0 :         wrote += wb_check_background_flush(wb);
    2222           0 :         clear_bit(WB_writeback_running, &wb->state);
    2223             : 
    2224           0 :         return wrote;
    2225             : }
    2226             : 
    2227             : /*
    2228             :  * Handle writeback of dirty data for the device backed by this bdi. Also
    2229             :  * reschedules periodically and does kupdated style flushing.
    2230             :  */
    2231           0 : void wb_workfn(struct work_struct *work)
    2232             : {
    2233           0 :         struct bdi_writeback *wb = container_of(to_delayed_work(work),
    2234             :                                                 struct bdi_writeback, dwork);
    2235             :         long pages_written;
    2236             : 
    2237           0 :         set_worker_desc("flush-%s", bdi_dev_name(wb->bdi));
    2238             : 
    2239           0 :         if (likely(!current_is_workqueue_rescuer() ||
    2240             :                    !test_bit(WB_registered, &wb->state))) {
    2241             :                 /*
    2242             :                  * The normal path.  Keep writing back @wb until its
    2243             :                  * work_list is empty.  Note that this path is also taken
    2244             :                  * if @wb is shutting down even when we're running off the
    2245             :                  * rescuer as work_list needs to be drained.
    2246             :                  */
    2247             :                 do {
    2248           0 :                         pages_written = wb_do_writeback(wb);
    2249           0 :                         trace_writeback_pages_written(pages_written);
    2250           0 :                 } while (!list_empty(&wb->work_list));
    2251             :         } else {
    2252             :                 /*
    2253             :                  * bdi_wq can't get enough workers and we're running off
    2254             :                  * the emergency worker.  Don't hog it.  Hopefully, 1024 is
    2255             :                  * enough for efficient IO.
    2256             :                  */
    2257           0 :                 pages_written = writeback_inodes_wb(wb, 1024,
    2258             :                                                     WB_REASON_FORKER_THREAD);
    2259           0 :                 trace_writeback_pages_written(pages_written);
    2260             :         }
    2261             : 
    2262           0 :         if (!list_empty(&wb->work_list))
    2263           0 :                 wb_wakeup(wb);
    2264           0 :         else if (wb_has_dirty_io(wb) && dirty_writeback_interval)
    2265           0 :                 wb_wakeup_delayed(wb);
    2266           0 : }
    2267             : 
    2268             : /*
    2269             :  * Start writeback of `nr_pages' pages on this bdi. If `nr_pages' is zero,
    2270             :  * write back the whole world.
    2271             :  */
    2272           0 : static void __wakeup_flusher_threads_bdi(struct backing_dev_info *bdi,
    2273             :                                          enum wb_reason reason)
    2274             : {
    2275             :         struct bdi_writeback *wb;
    2276             : 
    2277           0 :         if (!bdi_has_dirty_io(bdi))
    2278             :                 return;
    2279             : 
    2280           0 :         list_for_each_entry_rcu(wb, &bdi->wb_list, bdi_node)
    2281           0 :                 wb_start_writeback(wb, reason);
    2282             : }
    2283             : 
    2284           0 : void wakeup_flusher_threads_bdi(struct backing_dev_info *bdi,
    2285             :                                 enum wb_reason reason)
    2286             : {
    2287             :         rcu_read_lock();
    2288           0 :         __wakeup_flusher_threads_bdi(bdi, reason);
    2289             :         rcu_read_unlock();
    2290           0 : }
    2291             : 
    2292             : /*
    2293             :  * Wakeup the flusher threads to start writeback of all currently dirty pages
    2294             :  */
    2295           0 : void wakeup_flusher_threads(enum wb_reason reason)
    2296             : {
    2297             :         struct backing_dev_info *bdi;
    2298             : 
    2299             :         /*
    2300             :          * If we are expecting writeback progress we must submit plugged IO.
    2301             :          */
    2302           0 :         blk_flush_plug(current->plug, true);
    2303             : 
    2304             :         rcu_read_lock();
    2305           0 :         list_for_each_entry_rcu(bdi, &bdi_list, bdi_list)
    2306           0 :                 __wakeup_flusher_threads_bdi(bdi, reason);
    2307             :         rcu_read_unlock();
    2308           0 : }
    2309             : 
    2310             : /*
    2311             :  * Wake up bdi's periodically to make sure dirtytime inodes gets
    2312             :  * written back periodically.  We deliberately do *not* check the
    2313             :  * b_dirtytime list in wb_has_dirty_io(), since this would cause the
    2314             :  * kernel to be constantly waking up once there are any dirtytime
    2315             :  * inodes on the system.  So instead we define a separate delayed work
    2316             :  * function which gets called much more rarely.  (By default, only
    2317             :  * once every 12 hours.)
    2318             :  *
    2319             :  * If there is any other write activity going on in the file system,
    2320             :  * this function won't be necessary.  But if the only thing that has
    2321             :  * happened on the file system is a dirtytime inode caused by an atime
    2322             :  * update, we need this infrastructure below to make sure that inode
    2323             :  * eventually gets pushed out to disk.
    2324             :  */
    2325             : static void wakeup_dirtytime_writeback(struct work_struct *w);
    2326             : static DECLARE_DELAYED_WORK(dirtytime_work, wakeup_dirtytime_writeback);
    2327             : 
    2328           0 : static void wakeup_dirtytime_writeback(struct work_struct *w)
    2329             : {
    2330             :         struct backing_dev_info *bdi;
    2331             : 
    2332             :         rcu_read_lock();
    2333           0 :         list_for_each_entry_rcu(bdi, &bdi_list, bdi_list) {
    2334             :                 struct bdi_writeback *wb;
    2335             : 
    2336           0 :                 list_for_each_entry_rcu(wb, &bdi->wb_list, bdi_node)
    2337           0 :                         if (!list_empty(&wb->b_dirty_time))
    2338           0 :                                 wb_wakeup(wb);
    2339             :         }
    2340             :         rcu_read_unlock();
    2341           0 :         schedule_delayed_work(&dirtytime_work, dirtytime_expire_interval * HZ);
    2342           0 : }
    2343             : 
    2344           1 : static int __init start_dirtytime_writeback(void)
    2345             : {
    2346           2 :         schedule_delayed_work(&dirtytime_work, dirtytime_expire_interval * HZ);
    2347           1 :         return 0;
    2348             : }
    2349             : __initcall(start_dirtytime_writeback);
    2350             : 
    2351           0 : int dirtytime_interval_handler(struct ctl_table *table, int write,
    2352             :                                void *buffer, size_t *lenp, loff_t *ppos)
    2353             : {
    2354             :         int ret;
    2355             : 
    2356           0 :         ret = proc_dointvec_minmax(table, write, buffer, lenp, ppos);
    2357           0 :         if (ret == 0 && write)
    2358           0 :                 mod_delayed_work(system_wq, &dirtytime_work, 0);
    2359           0 :         return ret;
    2360             : }
    2361             : 
    2362             : /**
    2363             :  * __mark_inode_dirty - internal function to mark an inode dirty
    2364             :  *
    2365             :  * @inode: inode to mark
    2366             :  * @flags: what kind of dirty, e.g. I_DIRTY_SYNC.  This can be a combination of
    2367             :  *         multiple I_DIRTY_* flags, except that I_DIRTY_TIME can't be combined
    2368             :  *         with I_DIRTY_PAGES.
    2369             :  *
    2370             :  * Mark an inode as dirty.  We notify the filesystem, then update the inode's
    2371             :  * dirty flags.  Then, if needed we add the inode to the appropriate dirty list.
    2372             :  *
    2373             :  * Most callers should use mark_inode_dirty() or mark_inode_dirty_sync()
    2374             :  * instead of calling this directly.
    2375             :  *
    2376             :  * CAREFUL!  We only add the inode to the dirty list if it is hashed or if it
    2377             :  * refers to a blockdev.  Unhashed inodes will never be added to the dirty list
    2378             :  * even if they are later hashed, as they will have been marked dirty already.
    2379             :  *
    2380             :  * In short, ensure you hash any inodes _before_ you start marking them dirty.
    2381             :  *
    2382             :  * Note that for blockdevs, inode->dirtied_when represents the dirtying time of
    2383             :  * the block-special inode (/dev/hda1) itself.  And the ->dirtied_when field of
    2384             :  * the kernel-internal blockdev inode represents the dirtying time of the
    2385             :  * blockdev's pages.  This is why for I_DIRTY_PAGES we always use
    2386             :  * page->mapping->host, so the page-dirtying time is recorded in the internal
    2387             :  * blockdev inode.
    2388             :  */
    2389           0 : void __mark_inode_dirty(struct inode *inode, int flags)
    2390             : {
    2391           0 :         struct super_block *sb = inode->i_sb;
    2392           0 :         int dirtytime = 0;
    2393           0 :         struct bdi_writeback *wb = NULL;
    2394             : 
    2395           0 :         trace_writeback_mark_inode_dirty(inode, flags);
    2396             : 
    2397           0 :         if (flags & I_DIRTY_INODE) {
    2398             :                 /*
    2399             :                  * Inode timestamp update will piggback on this dirtying.
    2400             :                  * We tell ->dirty_inode callback that timestamps need to
    2401             :                  * be updated by setting I_DIRTY_TIME in flags.
    2402             :                  */
    2403           0 :                 if (inode->i_state & I_DIRTY_TIME) {
    2404           0 :                         spin_lock(&inode->i_lock);
    2405           0 :                         if (inode->i_state & I_DIRTY_TIME) {
    2406           0 :                                 inode->i_state &= ~I_DIRTY_TIME;
    2407           0 :                                 flags |= I_DIRTY_TIME;
    2408             :                         }
    2409           0 :                         spin_unlock(&inode->i_lock);
    2410             :                 }
    2411             : 
    2412             :                 /*
    2413             :                  * Notify the filesystem about the inode being dirtied, so that
    2414             :                  * (if needed) it can update on-disk fields and journal the
    2415             :                  * inode.  This is only needed when the inode itself is being
    2416             :                  * dirtied now.  I.e. it's only needed for I_DIRTY_INODE, not
    2417             :                  * for just I_DIRTY_PAGES or I_DIRTY_TIME.
    2418             :                  */
    2419           0 :                 trace_writeback_dirty_inode_start(inode, flags);
    2420           0 :                 if (sb->s_op->dirty_inode)
    2421           0 :                         sb->s_op->dirty_inode(inode,
    2422             :                                 flags & (I_DIRTY_INODE | I_DIRTY_TIME));
    2423           0 :                 trace_writeback_dirty_inode(inode, flags);
    2424             : 
    2425             :                 /* I_DIRTY_INODE supersedes I_DIRTY_TIME. */
    2426           0 :                 flags &= ~I_DIRTY_TIME;
    2427             :         } else {
    2428             :                 /*
    2429             :                  * Else it's either I_DIRTY_PAGES, I_DIRTY_TIME, or nothing.
    2430             :                  * (We don't support setting both I_DIRTY_PAGES and I_DIRTY_TIME
    2431             :                  * in one call to __mark_inode_dirty().)
    2432             :                  */
    2433           0 :                 dirtytime = flags & I_DIRTY_TIME;
    2434           0 :                 WARN_ON_ONCE(dirtytime && flags != I_DIRTY_TIME);
    2435             :         }
    2436             : 
    2437             :         /*
    2438             :          * Paired with smp_mb() in __writeback_single_inode() for the
    2439             :          * following lockless i_state test.  See there for details.
    2440             :          */
    2441           0 :         smp_mb();
    2442             : 
    2443           0 :         if ((inode->i_state & flags) == flags)
    2444             :                 return;
    2445             : 
    2446           0 :         spin_lock(&inode->i_lock);
    2447           0 :         if ((inode->i_state & flags) != flags) {
    2448           0 :                 const int was_dirty = inode->i_state & I_DIRTY;
    2449             : 
    2450           0 :                 inode_attach_wb(inode, NULL);
    2451             : 
    2452           0 :                 inode->i_state |= flags;
    2453             : 
    2454             :                 /*
    2455             :                  * Grab inode's wb early because it requires dropping i_lock and we
    2456             :                  * need to make sure following checks happen atomically with dirty
    2457             :                  * list handling so that we don't move inodes under flush worker's
    2458             :                  * hands.
    2459             :                  */
    2460           0 :                 if (!was_dirty) {
    2461           0 :                         wb = locked_inode_to_wb_and_lock_list(inode);
    2462           0 :                         spin_lock(&inode->i_lock);
    2463             :                 }
    2464             : 
    2465             :                 /*
    2466             :                  * If the inode is queued for writeback by flush worker, just
    2467             :                  * update its dirty state. Once the flush worker is done with
    2468             :                  * the inode it will place it on the appropriate superblock
    2469             :                  * list, based upon its state.
    2470             :                  */
    2471           0 :                 if (inode->i_state & I_SYNC_QUEUED)
    2472             :                         goto out_unlock;
    2473             : 
    2474             :                 /*
    2475             :                  * Only add valid (hashed) inodes to the superblock's
    2476             :                  * dirty list.  Add blockdev inodes as well.
    2477             :                  */
    2478           0 :                 if (!S_ISBLK(inode->i_mode)) {
    2479           0 :                         if (inode_unhashed(inode))
    2480             :                                 goto out_unlock;
    2481             :                 }
    2482           0 :                 if (inode->i_state & I_FREEING)
    2483             :                         goto out_unlock;
    2484             : 
    2485             :                 /*
    2486             :                  * If the inode was already on b_dirty/b_io/b_more_io, don't
    2487             :                  * reposition it (that would break b_dirty time-ordering).
    2488             :                  */
    2489           0 :                 if (!was_dirty) {
    2490             :                         struct list_head *dirty_list;
    2491           0 :                         bool wakeup_bdi = false;
    2492             : 
    2493           0 :                         inode->dirtied_when = jiffies;
    2494           0 :                         if (dirtytime)
    2495           0 :                                 inode->dirtied_time_when = jiffies;
    2496             : 
    2497           0 :                         if (inode->i_state & I_DIRTY)
    2498           0 :                                 dirty_list = &wb->b_dirty;
    2499             :                         else
    2500           0 :                                 dirty_list = &wb->b_dirty_time;
    2501             : 
    2502           0 :                         wakeup_bdi = inode_io_list_move_locked(inode, wb,
    2503             :                                                                dirty_list);
    2504             : 
    2505           0 :                         spin_unlock(&wb->list_lock);
    2506           0 :                         spin_unlock(&inode->i_lock);
    2507           0 :                         trace_writeback_dirty_inode_enqueue(inode);
    2508             : 
    2509             :                         /*
    2510             :                          * If this is the first dirty inode for this bdi,
    2511             :                          * we have to wake-up the corresponding bdi thread
    2512             :                          * to make sure background write-back happens
    2513             :                          * later.
    2514             :                          */
    2515           0 :                         if (wakeup_bdi &&
    2516           0 :                             (wb->bdi->capabilities & BDI_CAP_WRITEBACK))
    2517           0 :                                 wb_wakeup_delayed(wb);
    2518             :                         return;
    2519             :                 }
    2520             :         }
    2521             : out_unlock:
    2522           0 :         if (wb)
    2523           0 :                 spin_unlock(&wb->list_lock);
    2524           0 :         spin_unlock(&inode->i_lock);
    2525             : }
    2526             : EXPORT_SYMBOL(__mark_inode_dirty);
    2527             : 
    2528             : /*
    2529             :  * The @s_sync_lock is used to serialise concurrent sync operations
    2530             :  * to avoid lock contention problems with concurrent wait_sb_inodes() calls.
    2531             :  * Concurrent callers will block on the s_sync_lock rather than doing contending
    2532             :  * walks. The queueing maintains sync(2) required behaviour as all the IO that
    2533             :  * has been issued up to the time this function is enter is guaranteed to be
    2534             :  * completed by the time we have gained the lock and waited for all IO that is
    2535             :  * in progress regardless of the order callers are granted the lock.
    2536             :  */
    2537           0 : static void wait_sb_inodes(struct super_block *sb)
    2538             : {
    2539           0 :         LIST_HEAD(sync_list);
    2540             : 
    2541             :         /*
    2542             :          * We need to be protected against the filesystem going from
    2543             :          * r/o to r/w or vice versa.
    2544             :          */
    2545           0 :         WARN_ON(!rwsem_is_locked(&sb->s_umount));
    2546             : 
    2547           0 :         mutex_lock(&sb->s_sync_lock);
    2548             : 
    2549             :         /*
    2550             :          * Splice the writeback list onto a temporary list to avoid waiting on
    2551             :          * inodes that have started writeback after this point.
    2552             :          *
    2553             :          * Use rcu_read_lock() to keep the inodes around until we have a
    2554             :          * reference. s_inode_wblist_lock protects sb->s_inodes_wb as well as
    2555             :          * the local list because inodes can be dropped from either by writeback
    2556             :          * completion.
    2557             :          */
    2558             :         rcu_read_lock();
    2559           0 :         spin_lock_irq(&sb->s_inode_wblist_lock);
    2560           0 :         list_splice_init(&sb->s_inodes_wb, &sync_list);
    2561             : 
    2562             :         /*
    2563             :          * Data integrity sync. Must wait for all pages under writeback, because
    2564             :          * there may have been pages dirtied before our sync call, but which had
    2565             :          * writeout started before we write it out.  In which case, the inode
    2566             :          * may not be on the dirty list, but we still have to wait for that
    2567             :          * writeout.
    2568             :          */
    2569           0 :         while (!list_empty(&sync_list)) {
    2570           0 :                 struct inode *inode = list_first_entry(&sync_list, struct inode,
    2571             :                                                        i_wb_list);
    2572           0 :                 struct address_space *mapping = inode->i_mapping;
    2573             : 
    2574             :                 /*
    2575             :                  * Move each inode back to the wb list before we drop the lock
    2576             :                  * to preserve consistency between i_wb_list and the mapping
    2577             :                  * writeback tag. Writeback completion is responsible to remove
    2578             :                  * the inode from either list once the writeback tag is cleared.
    2579             :                  */
    2580           0 :                 list_move_tail(&inode->i_wb_list, &sb->s_inodes_wb);
    2581             : 
    2582             :                 /*
    2583             :                  * The mapping can appear untagged while still on-list since we
    2584             :                  * do not have the mapping lock. Skip it here, wb completion
    2585             :                  * will remove it.
    2586             :                  */
    2587           0 :                 if (!mapping_tagged(mapping, PAGECACHE_TAG_WRITEBACK))
    2588           0 :                         continue;
    2589             : 
    2590           0 :                 spin_unlock_irq(&sb->s_inode_wblist_lock);
    2591             : 
    2592           0 :                 spin_lock(&inode->i_lock);
    2593           0 :                 if (inode->i_state & (I_FREEING|I_WILL_FREE|I_NEW)) {
    2594           0 :                         spin_unlock(&inode->i_lock);
    2595             : 
    2596           0 :                         spin_lock_irq(&sb->s_inode_wblist_lock);
    2597           0 :                         continue;
    2598             :                 }
    2599           0 :                 __iget(inode);
    2600           0 :                 spin_unlock(&inode->i_lock);
    2601             :                 rcu_read_unlock();
    2602             : 
    2603             :                 /*
    2604             :                  * We keep the error status of individual mapping so that
    2605             :                  * applications can catch the writeback error using fsync(2).
    2606             :                  * See filemap_fdatawait_keep_errors() for details.
    2607             :                  */
    2608           0 :                 filemap_fdatawait_keep_errors(mapping);
    2609             : 
    2610           0 :                 cond_resched();
    2611             : 
    2612           0 :                 iput(inode);
    2613             : 
    2614             :                 rcu_read_lock();
    2615           0 :                 spin_lock_irq(&sb->s_inode_wblist_lock);
    2616             :         }
    2617           0 :         spin_unlock_irq(&sb->s_inode_wblist_lock);
    2618             :         rcu_read_unlock();
    2619           0 :         mutex_unlock(&sb->s_sync_lock);
    2620           0 : }
    2621             : 
    2622          17 : static void __writeback_inodes_sb_nr(struct super_block *sb, unsigned long nr,
    2623             :                                      enum wb_reason reason, bool skip_if_busy)
    2624             : {
    2625          17 :         struct backing_dev_info *bdi = sb->s_bdi;
    2626          17 :         DEFINE_WB_COMPLETION(done, bdi);
    2627          17 :         struct wb_writeback_work work = {
    2628             :                 .sb                     = sb,
    2629             :                 .sync_mode              = WB_SYNC_NONE,
    2630             :                 .tagged_writepages      = 1,
    2631             :                 .done                   = &done,
    2632             :                 .nr_pages               = nr,
    2633             :                 .reason                 = reason,
    2634             :         };
    2635             : 
    2636          17 :         if (!bdi_has_dirty_io(bdi) || bdi == &noop_backing_dev_info)
    2637          17 :                 return;
    2638           0 :         WARN_ON(!rwsem_is_locked(&sb->s_umount));
    2639             : 
    2640           0 :         bdi_split_work_to_wbs(sb->s_bdi, &work, skip_if_busy);
    2641           0 :         wb_wait_for_completion(&done);
    2642             : }
    2643             : 
    2644             : /**
    2645             :  * writeback_inodes_sb_nr -     writeback dirty inodes from given super_block
    2646             :  * @sb: the superblock
    2647             :  * @nr: the number of pages to write
    2648             :  * @reason: reason why some writeback work initiated
    2649             :  *
    2650             :  * Start writeback on some inodes on this super_block. No guarantees are made
    2651             :  * on how many (if any) will be written, and this function does not wait
    2652             :  * for IO completion of submitted IO.
    2653             :  */
    2654           0 : void writeback_inodes_sb_nr(struct super_block *sb,
    2655             :                             unsigned long nr,
    2656             :                             enum wb_reason reason)
    2657             : {
    2658          17 :         __writeback_inodes_sb_nr(sb, nr, reason, false);
    2659           0 : }
    2660             : EXPORT_SYMBOL(writeback_inodes_sb_nr);
    2661             : 
    2662             : /**
    2663             :  * writeback_inodes_sb  -       writeback dirty inodes from given super_block
    2664             :  * @sb: the superblock
    2665             :  * @reason: reason why some writeback work was initiated
    2666             :  *
    2667             :  * Start writeback on some inodes on this super_block. No guarantees are made
    2668             :  * on how many (if any) will be written, and this function does not wait
    2669             :  * for IO completion of submitted IO.
    2670             :  */
    2671          17 : void writeback_inodes_sb(struct super_block *sb, enum wb_reason reason)
    2672             : {
    2673          34 :         return writeback_inodes_sb_nr(sb, get_nr_dirty_pages(), reason);
    2674             : }
    2675             : EXPORT_SYMBOL(writeback_inodes_sb);
    2676             : 
    2677             : /**
    2678             :  * try_to_writeback_inodes_sb - try to start writeback if none underway
    2679             :  * @sb: the superblock
    2680             :  * @reason: reason why some writeback work was initiated
    2681             :  *
    2682             :  * Invoke __writeback_inodes_sb_nr if no writeback is currently underway.
    2683             :  */
    2684           0 : void try_to_writeback_inodes_sb(struct super_block *sb, enum wb_reason reason)
    2685             : {
    2686           0 :         if (!down_read_trylock(&sb->s_umount))
    2687             :                 return;
    2688             : 
    2689           0 :         __writeback_inodes_sb_nr(sb, get_nr_dirty_pages(), reason, true);
    2690           0 :         up_read(&sb->s_umount);
    2691             : }
    2692             : EXPORT_SYMBOL(try_to_writeback_inodes_sb);
    2693             : 
    2694             : /**
    2695             :  * sync_inodes_sb       -       sync sb inode pages
    2696             :  * @sb: the superblock
    2697             :  *
    2698             :  * This function writes and waits on any dirty inode belonging to this
    2699             :  * super_block.
    2700             :  */
    2701          17 : void sync_inodes_sb(struct super_block *sb)
    2702             : {
    2703          17 :         struct backing_dev_info *bdi = sb->s_bdi;
    2704          17 :         DEFINE_WB_COMPLETION(done, bdi);
    2705          17 :         struct wb_writeback_work work = {
    2706             :                 .sb             = sb,
    2707             :                 .sync_mode      = WB_SYNC_ALL,
    2708             :                 .nr_pages       = LONG_MAX,
    2709             :                 .range_cyclic   = 0,
    2710             :                 .done           = &done,
    2711             :                 .reason         = WB_REASON_SYNC,
    2712             :                 .for_sync       = 1,
    2713             :         };
    2714             : 
    2715             :         /*
    2716             :          * Can't skip on !bdi_has_dirty() because we should wait for !dirty
    2717             :          * inodes under writeback and I_DIRTY_TIME inodes ignored by
    2718             :          * bdi_has_dirty() need to be written out too.
    2719             :          */
    2720          17 :         if (bdi == &noop_backing_dev_info)
    2721          17 :                 return;
    2722           0 :         WARN_ON(!rwsem_is_locked(&sb->s_umount));
    2723             : 
    2724             :         /* protect against inode wb switch, see inode_switch_wbs_work_fn() */
    2725           0 :         bdi_down_write_wb_switch_rwsem(bdi);
    2726           0 :         bdi_split_work_to_wbs(bdi, &work, false);
    2727           0 :         wb_wait_for_completion(&done);
    2728           0 :         bdi_up_write_wb_switch_rwsem(bdi);
    2729             : 
    2730           0 :         wait_sb_inodes(sb);
    2731             : }
    2732             : EXPORT_SYMBOL(sync_inodes_sb);
    2733             : 
    2734             : /**
    2735             :  * write_inode_now      -       write an inode to disk
    2736             :  * @inode: inode to write to disk
    2737             :  * @sync: whether the write should be synchronous or not
    2738             :  *
    2739             :  * This function commits an inode to disk immediately if it is dirty. This is
    2740             :  * primarily needed by knfsd.
    2741             :  *
    2742             :  * The caller must either have a ref on the inode or must have set I_WILL_FREE.
    2743             :  */
    2744           0 : int write_inode_now(struct inode *inode, int sync)
    2745             : {
    2746           0 :         struct writeback_control wbc = {
    2747             :                 .nr_to_write = LONG_MAX,
    2748           0 :                 .sync_mode = sync ? WB_SYNC_ALL : WB_SYNC_NONE,
    2749             :                 .range_start = 0,
    2750             :                 .range_end = LLONG_MAX,
    2751             :         };
    2752             : 
    2753           0 :         if (!mapping_can_writeback(inode->i_mapping))
    2754           0 :                 wbc.nr_to_write = 0;
    2755             : 
    2756             :         might_sleep();
    2757           0 :         return writeback_single_inode(inode, &wbc);
    2758             : }
    2759             : EXPORT_SYMBOL(write_inode_now);
    2760             : 
    2761             : /**
    2762             :  * sync_inode_metadata - write an inode to disk
    2763             :  * @inode: the inode to sync
    2764             :  * @wait: wait for I/O to complete.
    2765             :  *
    2766             :  * Write an inode to disk and adjust its dirty state after completion.
    2767             :  *
    2768             :  * Note: only writes the actual inode, no associated data or other metadata.
    2769             :  */
    2770           0 : int sync_inode_metadata(struct inode *inode, int wait)
    2771             : {
    2772           0 :         struct writeback_control wbc = {
    2773           0 :                 .sync_mode = wait ? WB_SYNC_ALL : WB_SYNC_NONE,
    2774             :                 .nr_to_write = 0, /* metadata-only */
    2775             :         };
    2776             : 
    2777           0 :         return writeback_single_inode(inode, &wbc);
    2778             : }
    2779             : EXPORT_SYMBOL(sync_inode_metadata);

Generated by: LCOV version 1.14