]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blobdiff - include/linux/backing-dev.h
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu
[mirror_ubuntu-bionic-kernel.git] / include / linux / backing-dev.h
index e9aec0d099df31e21dd1cef86a901493c5425e04..35b00746c712fc11776e78345edf786b98f9063b 100644 (file)
@@ -31,6 +31,7 @@ enum bdi_state {
        BDI_async_congested,    /* The async (write) queue is getting full */
        BDI_sync_congested,     /* The sync queue is getting full */
        BDI_registered,         /* bdi_register() was done */
+       BDI_writeback_running,  /* Writeback is in progress */
        BDI_unused,             /* Available bits start here */
 };
 
@@ -45,22 +46,21 @@ enum bdi_stat_item {
 #define BDI_STAT_BATCH (8*(1+ilog2(nr_cpu_ids)))
 
 struct bdi_writeback {
-       struct list_head list;                  /* hangs off the bdi */
-
-       struct backing_dev_info *bdi;           /* our parent bdi */
+       struct backing_dev_info *bdi;   /* our parent bdi */
        unsigned int nr;
 
-       unsigned long last_old_flush;           /* last old data flush */
+       unsigned long last_old_flush;   /* last old data flush */
+       unsigned long last_active;      /* last time bdi thread was active */
 
-       struct task_struct      *task;          /* writeback task */
-       struct list_head        b_dirty;        /* dirty inodes */
-       struct list_head        b_io;           /* parked for writeback */
-       struct list_head        b_more_io;      /* parked for more writeback */
+       struct task_struct *task;       /* writeback thread */
+       struct timer_list wakeup_timer; /* used for delayed bdi thread wakeup */
+       struct list_head b_dirty;       /* dirty inodes */
+       struct list_head b_io;          /* parked for writeback */
+       struct list_head b_more_io;     /* parked for more writeback */
 };
 
 struct backing_dev_info {
        struct list_head bdi_list;
-       struct rcu_head rcu_head;
        unsigned long ra_pages; /* max readahead in PAGE_CACHE_SIZE units */
        unsigned long state;    /* Always use atomic bitops on this */
        unsigned int capabilities; /* Device capabilities */
@@ -80,8 +80,7 @@ struct backing_dev_info {
        unsigned int max_ratio, max_prop_frac;
 
        struct bdi_writeback wb;  /* default writeback info for this bdi */
-       spinlock_t wb_lock;       /* protects update side of wb_list */
-       struct list_head wb_list; /* the flusher threads hanging off this bdi */
+       spinlock_t wb_lock;       /* protects work_list */
 
        struct list_head work_list;
 
@@ -105,9 +104,10 @@ void bdi_unregister(struct backing_dev_info *bdi);
 int bdi_setup_and_register(struct backing_dev_info *, char *, unsigned int);
 void bdi_start_writeback(struct backing_dev_info *bdi, long nr_pages);
 void bdi_start_background_writeback(struct backing_dev_info *bdi);
-int bdi_writeback_task(struct bdi_writeback *wb);
+int bdi_writeback_thread(void *data);
 int bdi_has_dirty_io(struct backing_dev_info *bdi);
 void bdi_arm_supers_timer(void);
+void bdi_wakeup_thread_delayed(struct backing_dev_info *bdi);
 
 extern spinlock_t bdi_lock;
 extern struct list_head bdi_list;