summaryrefslogtreecommitdiffstats
path: root/mm/page-writeback.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2017-11-14 18:32:19 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2017-11-14 18:32:19 -0500
commite2c5923c349c1738fe8fda980874d93f6fb2e5b6 (patch)
treeb97a90170c45211bcc437761653aa8016c34afcd /mm/page-writeback.c
parentabc36be236358162202e86ad88616ff95a755101 (diff)
parenta04b5de5050ab8b891128eb2c47a0916fe8622e1 (diff)
Merge branch 'for-4.15/block' of git://git.kernel.dk/linux-block
Pull core block layer updates from Jens Axboe: "This is the main pull request for block storage for 4.15-rc1. Nothing out of the ordinary in here, and no API changes or anything like that. Just various new features for drivers, core changes, etc. In particular, this pull request contains: - A patch series from Bart, closing the whole on blk/scsi-mq queue quescing. - A series from Christoph, building towards hidden gendisks (for multipath) and ability to move bio chains around. - NVMe - Support for native multipath for NVMe (Christoph). - Userspace notifications for AENs (Keith). - Command side-effects support (Keith). - SGL support (Chaitanya Kulkarni) - FC fixes and improvements (James Smart) - Lots of fixes and tweaks (Various) - bcache - New maintainer (Michael Lyle) - Writeback control improvements (Michael) - Various fixes (Coly, Elena, Eric, Liang, et al) - lightnvm updates, mostly centered around the pblk interface (Javier, Hans, and Rakesh). - Removal of unused bio/bvec kmap atomic interfaces (me, Christoph) - Writeback series that fix the much discussed hundreds of millions of sync-all units. This goes all the way, as discussed previously (me). - Fix for missing wakeup on writeback timer adjustments (Yafang Shao). - Fix laptop mode on blk-mq (me). - {mq,name} tupple lookup for IO schedulers, allowing us to have alias names. This means you can use 'deadline' on both !mq and on mq (where it's called mq-deadline). (me). - blktrace race fix, oopsing on sg load (me). - blk-mq optimizations (me). - Obscure waitqueue race fix for kyber (Omar). - NBD fixes (Josef). - Disable writeback throttling by default on bfq, like we do on cfq (Luca Miccio). - Series from Ming that enable us to treat flush requests on blk-mq like any other request. This is a really nice cleanup. - Series from Ming that improves merging on blk-mq with schedulers, getting us closer to flipping the switch on scsi-mq again. - BFQ updates (Paolo). - blk-mq atomic flags memory ordering fixes (Peter Z). - Loop cgroup support (Shaohua). - Lots of minor fixes from lots of different folks, both for core and driver code" * 'for-4.15/block' of git://git.kernel.dk/linux-block: (294 commits) nvme: fix visibility of "uuid" ns attribute blk-mq: fixup some comment typos and lengths ide: ide-atapi: fix compile error with defining macro DEBUG blk-mq: improve tag waiting setup for non-shared tags brd: remove unused brd_mutex blk-mq: only run the hardware queue if IO is pending block: avoid null pointer dereference on null disk fs: guard_bio_eod() needs to consider partitions xtensa/simdisk: fix compile error nvme: expose subsys attribute to sysfs nvme: create 'slaves' and 'holders' entries for hidden controllers block: create 'slaves' and 'holders' entries for hidden gendisks nvme: also expose the namespace identification sysfs files for mpath nodes nvme: implement multipath access to nvme subsystems nvme: track shared namespaces nvme: introduce a nvme_ns_ids structure nvme: track subsystems block, nvme: Introduce blk_mq_req_flags_t block, scsi: Make SCSI quiesce and resume work reliably block: Add the QUEUE_FLAG_PREEMPT_ONLY request queue flag ...
Diffstat (limited to 'mm/page-writeback.c')
-rw-r--r--mm/page-writeback.c36
1 files changed, 18 insertions, 18 deletions
diff --git a/mm/page-writeback.c b/mm/page-writeback.c
index 0b9c5cbe8eba..c518c845f202 100644
--- a/mm/page-writeback.c
+++ b/mm/page-writeback.c
@@ -1972,31 +1972,31 @@ bool wb_over_bg_thresh(struct bdi_writeback *wb)
1972int dirty_writeback_centisecs_handler(struct ctl_table *table, int write, 1972int dirty_writeback_centisecs_handler(struct ctl_table *table, int write,
1973 void __user *buffer, size_t *length, loff_t *ppos) 1973 void __user *buffer, size_t *length, loff_t *ppos)
1974{ 1974{
1975 proc_dointvec(table, write, buffer, length, ppos); 1975 unsigned int old_interval = dirty_writeback_interval;
1976 return 0; 1976 int ret;
1977
1978 ret = proc_dointvec(table, write, buffer, length, ppos);
1979
1980 /*
1981 * Writing 0 to dirty_writeback_interval will disable periodic writeback
1982 * and a different non-zero value will wakeup the writeback threads.
1983 * wb_wakeup_delayed() would be more appropriate, but it's a pain to
1984 * iterate over all bdis and wbs.
1985 * The reason we do this is to make the change take effect immediately.
1986 */
1987 if (!ret && write && dirty_writeback_interval &&
1988 dirty_writeback_interval != old_interval)
1989 wakeup_flusher_threads(WB_REASON_PERIODIC);
1990
1991 return ret;
1977} 1992}
1978 1993
1979#ifdef CONFIG_BLOCK 1994#ifdef CONFIG_BLOCK
1980void laptop_mode_timer_fn(unsigned long data) 1995void laptop_mode_timer_fn(unsigned long data)
1981{ 1996{
1982 struct request_queue *q = (struct request_queue *)data; 1997 struct request_queue *q = (struct request_queue *)data;
1983 int nr_pages = global_node_page_state(NR_FILE_DIRTY) +
1984 global_node_page_state(NR_UNSTABLE_NFS);
1985 struct bdi_writeback *wb;
1986 1998
1987 /* 1999 wakeup_flusher_threads_bdi(q->backing_dev_info, WB_REASON_LAPTOP_TIMER);
1988 * We want to write everything out, not just down to the dirty
1989 * threshold
1990 */
1991 if (!bdi_has_dirty_io(q->backing_dev_info))
1992 return;
1993
1994 rcu_read_lock();
1995 list_for_each_entry_rcu(wb, &q->backing_dev_info->wb_list, bdi_node)
1996 if (wb_has_dirty_io(wb))
1997 wb_start_writeback(wb, nr_pages, true,
1998 WB_REASON_LAPTOP_TIMER);
1999 rcu_read_unlock();
2000} 2000}
2001 2001
2002/* 2002/*