LCOV - code coverage report
Current view: top level - include/linux - writeback.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 1 1 100.0 %
Date: 2014-02-18 Functions: 0 0 -
Branches: 0 0 -

           Branch data     Line data    Source code
       1                 :            : /*
       2                 :            :  * include/linux/writeback.h
       3                 :            :  */
       4                 :            : #ifndef WRITEBACK_H
       5                 :            : #define WRITEBACK_H
       6                 :            : 
       7                 :            : #include <linux/sched.h>
       8                 :            : #include <linux/workqueue.h>
       9                 :            : #include <linux/fs.h>
      10                 :            : 
      11                 :            : DECLARE_PER_CPU(int, dirty_throttle_leaks);
      12                 :            : 
      13                 :            : /*
      14                 :            :  * The 1/4 region under the global dirty thresh is for smooth dirty throttling:
      15                 :            :  *
      16                 :            :  *      (thresh - thresh/DIRTY_FULL_SCOPE, thresh)
      17                 :            :  *
      18                 :            :  * Further beyond, all dirtier tasks will enter a loop waiting (possibly long
      19                 :            :  * time) for the dirty pages to drop, unless written enough pages.
      20                 :            :  *
      21                 :            :  * The global dirty threshold is normally equal to the global dirty limit,
      22                 :            :  * except when the system suddenly allocates a lot of anonymous memory and
      23                 :            :  * knocks down the global dirty threshold quickly, in which case the global
      24                 :            :  * dirty limit will follow down slowly to prevent livelocking all dirtier tasks.
      25                 :            :  */
      26                 :            : #define DIRTY_SCOPE             8
      27                 :            : #define DIRTY_FULL_SCOPE        (DIRTY_SCOPE / 2)
      28                 :            : 
      29                 :            : struct backing_dev_info;
      30                 :            : 
      31                 :            : /*
      32                 :            :  * fs/fs-writeback.c
      33                 :            :  */
      34                 :            : enum writeback_sync_modes {
      35                 :            :         WB_SYNC_NONE,   /* Don't wait on anything */
      36                 :            :         WB_SYNC_ALL,    /* Wait on every mapping */
      37                 :            : };
      38                 :            : 
      39                 :            : /*
      40                 :            :  * why some writeback work was initiated
      41                 :            :  */
      42                 :            : enum wb_reason {
      43                 :            :         WB_REASON_BACKGROUND,
      44                 :            :         WB_REASON_TRY_TO_FREE_PAGES,
      45                 :            :         WB_REASON_SYNC,
      46                 :            :         WB_REASON_PERIODIC,
      47                 :            :         WB_REASON_LAPTOP_TIMER,
      48                 :            :         WB_REASON_FREE_MORE_MEM,
      49                 :            :         WB_REASON_FS_FREE_SPACE,
      50                 :            :         /*
      51                 :            :          * There is no bdi forker thread any more and works are done
      52                 :            :          * by emergency worker, however, this is TPs userland visible
      53                 :            :          * and we'll be exposing exactly the same information,
      54                 :            :          * so it has a mismatch name.
      55                 :            :          */
      56                 :            :         WB_REASON_FORKER_THREAD,
      57                 :            : 
      58                 :            :         WB_REASON_MAX,
      59                 :            : };
      60                 :            : 
      61                 :            : /*
      62                 :            :  * A control structure which tells the writeback code what to do.  These are
      63                 :            :  * always on the stack, and hence need no locking.  They are always initialised
      64                 :            :  * in a manner such that unspecified fields are set to zero.
      65                 :            :  */
      66                 :            : struct writeback_control {
      67                 :            :         long nr_to_write;               /* Write this many pages, and decrement
      68                 :            :                                            this for each page written */
      69                 :            :         long pages_skipped;             /* Pages which were not written */
      70                 :            : 
      71                 :            :         /*
      72                 :            :          * For a_ops->writepages(): if start or end are non-zero then this is
      73                 :            :          * a hint that the filesystem need only write out the pages inside that
      74                 :            :          * byterange.  The byte at `end' is included in the writeout request.
      75                 :            :          */
      76                 :            :         loff_t range_start;
      77                 :            :         loff_t range_end;
      78                 :            : 
      79                 :            :         enum writeback_sync_modes sync_mode;
      80                 :            : 
      81                 :            :         unsigned for_kupdate:1;         /* A kupdate writeback */
      82                 :            :         unsigned for_background:1;      /* A background writeback */
      83                 :            :         unsigned tagged_writepages:1;   /* tag-and-write to avoid livelock */
      84                 :            :         unsigned for_reclaim:1;         /* Invoked from the page allocator */
      85                 :            :         unsigned range_cyclic:1;        /* range_start is cyclic */
      86                 :            :         unsigned for_sync:1;            /* sync(2) WB_SYNC_ALL writeback */
      87                 :            : };
      88                 :            : 
      89                 :            : /*
      90                 :            :  * fs/fs-writeback.c
      91                 :            :  */     
      92                 :            : struct bdi_writeback;
      93                 :            : int inode_wait(void *);
      94                 :            : void writeback_inodes_sb(struct super_block *, enum wb_reason reason);
      95                 :            : void writeback_inodes_sb_nr(struct super_block *, unsigned long nr,
      96                 :            :                                                         enum wb_reason reason);
      97                 :            : int try_to_writeback_inodes_sb(struct super_block *, enum wb_reason reason);
      98                 :            : int try_to_writeback_inodes_sb_nr(struct super_block *, unsigned long nr,
      99                 :            :                                   enum wb_reason reason);
     100                 :            : void sync_inodes_sb(struct super_block *sb, unsigned long older_than_this);
     101                 :            : void wakeup_flusher_threads(long nr_pages, enum wb_reason reason);
     102                 :            : void inode_wait_for_writeback(struct inode *inode);
     103                 :            : 
     104                 :            : /* writeback.h requires fs.h; it, too, is not included from here. */
     105                 :            : static inline void wait_on_inode(struct inode *inode)
     106                 :            : {
     107                 :            :         might_sleep();
     108                 :       1700 :         wait_on_bit(&inode->i_state, __I_NEW, inode_wait, TASK_UNINTERRUPTIBLE);
     109                 :            : }
     110                 :            : 
     111                 :            : /*
     112                 :            :  * mm/page-writeback.c
     113                 :            :  */
     114                 :            : #ifdef CONFIG_BLOCK
     115                 :            : void laptop_io_completion(struct backing_dev_info *info);
     116                 :            : void laptop_sync_completion(void);
     117                 :            : void laptop_mode_sync(struct work_struct *work);
     118                 :            : void laptop_mode_timer_fn(unsigned long data);
     119                 :            : #else
     120                 :            : static inline void laptop_sync_completion(void) { }
     121                 :            : #endif
     122                 :            : void throttle_vm_writeout(gfp_t gfp_mask);
     123                 :            : bool zone_dirty_ok(struct zone *zone);
     124                 :            : 
     125                 :            : extern unsigned long global_dirty_limit;
     126                 :            : 
     127                 :            : /* These are exported to sysctl. */
     128                 :            : extern int dirty_background_ratio;
     129                 :            : extern unsigned long dirty_background_bytes;
     130                 :            : extern int vm_dirty_ratio;
     131                 :            : extern unsigned long vm_dirty_bytes;
     132                 :            : extern unsigned int dirty_writeback_interval;
     133                 :            : extern unsigned int dirty_expire_interval;
     134                 :            : extern int vm_highmem_is_dirtyable;
     135                 :            : extern int block_dump;
     136                 :            : extern int laptop_mode;
     137                 :            : 
     138                 :            : extern int dirty_background_ratio_handler(struct ctl_table *table, int write,
     139                 :            :                 void __user *buffer, size_t *lenp,
     140                 :            :                 loff_t *ppos);
     141                 :            : extern int dirty_background_bytes_handler(struct ctl_table *table, int write,
     142                 :            :                 void __user *buffer, size_t *lenp,
     143                 :            :                 loff_t *ppos);
     144                 :            : extern int dirty_ratio_handler(struct ctl_table *table, int write,
     145                 :            :                 void __user *buffer, size_t *lenp,
     146                 :            :                 loff_t *ppos);
     147                 :            : extern int dirty_bytes_handler(struct ctl_table *table, int write,
     148                 :            :                 void __user *buffer, size_t *lenp,
     149                 :            :                 loff_t *ppos);
     150                 :            : 
     151                 :            : struct ctl_table;
     152                 :            : int dirty_writeback_centisecs_handler(struct ctl_table *, int,
     153                 :            :                                       void __user *, size_t *, loff_t *);
     154                 :            : 
     155                 :            : void global_dirty_limits(unsigned long *pbackground, unsigned long *pdirty);
     156                 :            : unsigned long bdi_dirty_limit(struct backing_dev_info *bdi,
     157                 :            :                                unsigned long dirty);
     158                 :            : 
     159                 :            : void __bdi_update_bandwidth(struct backing_dev_info *bdi,
     160                 :            :                             unsigned long thresh,
     161                 :            :                             unsigned long bg_thresh,
     162                 :            :                             unsigned long dirty,
     163                 :            :                             unsigned long bdi_thresh,
     164                 :            :                             unsigned long bdi_dirty,
     165                 :            :                             unsigned long start_time);
     166                 :            : 
     167                 :            : void page_writeback_init(void);
     168                 :            : void balance_dirty_pages_ratelimited(struct address_space *mapping);
     169                 :            : 
     170                 :            : typedef int (*writepage_t)(struct page *page, struct writeback_control *wbc,
     171                 :            :                                 void *data);
     172                 :            : 
     173                 :            : int generic_writepages(struct address_space *mapping,
     174                 :            :                        struct writeback_control *wbc);
     175                 :            : void tag_pages_for_writeback(struct address_space *mapping,
     176                 :            :                              pgoff_t start, pgoff_t end);
     177                 :            : int write_cache_pages(struct address_space *mapping,
     178                 :            :                       struct writeback_control *wbc, writepage_t writepage,
     179                 :            :                       void *data);
     180                 :            : int do_writepages(struct address_space *mapping, struct writeback_control *wbc);
     181                 :            : void set_page_dirty_balance(struct page *page, int page_mkwrite);
     182                 :            : void writeback_set_ratelimit(void);
     183                 :            : void tag_pages_for_writeback(struct address_space *mapping,
     184                 :            :                              pgoff_t start, pgoff_t end);
     185                 :            : 
     186                 :            : void account_page_redirty(struct page *page);
     187                 :            : 
     188                 :            : #endif          /* WRITEBACK_H */

Generated by: LCOV version 1.9