home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / linux / writeback.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  3.5 KB  |  124 lines

  1. /*
  2.  * include/linux/writeback.h.
  3.  */
  4. #ifndef WRITEBACK_H
  5. #define WRITEBACK_H
  6.  
  7. struct backing_dev_info;
  8.  
  9. extern spinlock_t inode_lock;
  10. extern struct list_head inode_in_use;
  11. extern struct list_head inode_unused;
  12.  
  13. /*
  14.  * Yes, writeback.h requires sched.h
  15.  * No, sched.h is not included from here.
  16.  */
  17. static inline int task_is_pdflush(struct task_struct *task)
  18. {
  19.     return task->flags & PF_FLUSHER;
  20. }
  21.  
  22. #define current_is_pdflush()    task_is_pdflush(current)
  23.  
  24. /*
  25.  * fs/fs-writeback.c
  26.  */
  27. enum writeback_sync_modes {
  28.     WB_SYNC_NONE,    /* Don't wait on anything */
  29.     WB_SYNC_ALL,    /* Wait on every mapping */
  30.     WB_SYNC_HOLD,    /* Hold the inode on sb_dirty for sys_sync() */
  31. };
  32.  
  33. /*
  34.  * A control structure which tells the writeback code what to do.  These are
  35.  * always on the stack, and hence need no locking.  They are always initialised
  36.  * in a manner such that unspecified fields are set to zero.
  37.  */
  38. struct writeback_control {
  39.     struct backing_dev_info *bdi;    /* If !NULL, only write back this
  40.                        queue */
  41.     enum writeback_sync_modes sync_mode;
  42.     unsigned long *older_than_this;    /* If !NULL, only write back inodes
  43.                        older than this */
  44.     long nr_to_write;        /* Write this many pages, and decrement
  45.                        this for each page written */
  46.     long pages_skipped;        /* Pages which were not written */
  47.  
  48.     /*
  49.      * For a_ops->writepages(): is start or end are non-zero then this is
  50.      * a hint that the filesystem need only write out the pages inside that
  51.      * byterange.  The byte at `end' is included in the writeout request.
  52.      */
  53.     loff_t start;
  54.     loff_t end;
  55.  
  56.     unsigned nonblocking:1;        /* Don't get stuck on request queues */
  57.     unsigned encountered_congestion:1; /* An output: a queue is full */
  58.     unsigned for_kupdate:1;        /* A kupdate writeback */
  59.     unsigned for_reclaim:1;        /* Invoked from the page allocator */
  60.     unsigned for_writepages:1;    /* This is a writepages() call */
  61. };
  62.  
  63. /*
  64.  * fs/fs-writeback.c
  65.  */    
  66. void writeback_inodes(struct writeback_control *wbc);
  67. void wake_up_inode(struct inode *inode);
  68. int inode_wait(void *);
  69. void sync_inodes_sb(struct super_block *, int wait);
  70. void sync_inodes(int wait);
  71.  
  72. /* writeback.h requires fs.h; it, too, is not included from here. */
  73. static inline void wait_on_inode(struct inode *inode)
  74. {
  75.     might_sleep();
  76.     wait_on_bit(&inode->i_state, __I_LOCK, inode_wait,
  77.                             TASK_UNINTERRUPTIBLE);
  78. }
  79.  
  80. /*
  81.  * mm/page-writeback.c
  82.  */
  83. int wakeup_pdflush(long nr_pages);
  84. void laptop_io_completion(void);
  85. void laptop_sync_completion(void);
  86. void throttle_vm_writeout(void);
  87.  
  88. /* These are exported to sysctl. */
  89. extern int dirty_background_ratio;
  90. extern int vm_dirty_ratio;
  91. extern int dirty_writeback_interval;
  92. extern int dirty_expire_interval;
  93. extern int block_dump;
  94. extern int laptop_mode;
  95.  
  96. struct ctl_table;
  97. struct file;
  98. int dirty_writeback_centisecs_handler(struct ctl_table *, int, struct file *,
  99.                       void __user *, size_t *, loff_t *);
  100.  
  101. void page_writeback_init(void);
  102. void balance_dirty_pages_ratelimited_nr(struct address_space *mapping,
  103.                     unsigned long nr_pages_dirtied);
  104.  
  105. static inline void
  106. balance_dirty_pages_ratelimited(struct address_space *mapping)
  107. {
  108.     balance_dirty_pages_ratelimited_nr(mapping, 1);
  109. }
  110.  
  111. int pdflush_operation(void (*fn)(unsigned long), unsigned long arg0);
  112. int do_writepages(struct address_space *mapping, struct writeback_control *wbc);
  113. int sync_page_range(struct inode *inode, struct address_space *mapping,
  114.             loff_t pos, loff_t count);
  115. int sync_page_range_nolock(struct inode *inode, struct address_space *mapping,
  116.                loff_t pos, loff_t count);
  117.  
  118. /* pdflush.c */
  119. extern int nr_pdflush_threads;    /* Global so it can be exported to sysctl
  120.                    read-only. */
  121.  
  122.  
  123. #endif        /* WRITEBACK_H */
  124.