Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branch 'writeback-for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/wfg/linux

Pull writeback fixes from Fengguang Wu:
"Three trivial writeback fixes"

* 'writeback-for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/wfg/linux:
CPU hotplug, writeback: Don't call writeback_set_ratelimit() too often during hotplug
writeback: correct comment for move_expired_inodes()
backing-dev: use kstrto* in preference to simple_strtoul

+38 -28
+1 -1
fs/fs-writeback.c
··· 249 249 } 250 250 251 251 /* 252 - * Move expired (dirtied after work->older_than_this) dirty inodes from 252 + * Move expired (dirtied before work->older_than_this) dirty inodes from 253 253 * @delaying_queue to @dispatch_queue. 254 254 */ 255 255 static int move_expired_inodes(struct list_head *delaying_queue,
+26 -24
mm/backing-dev.c
··· 158 158 const char *buf, size_t count) 159 159 { 160 160 struct backing_dev_info *bdi = dev_get_drvdata(dev); 161 - char *end; 162 161 unsigned long read_ahead_kb; 163 - ssize_t ret = -EINVAL; 162 + ssize_t ret; 164 163 165 - read_ahead_kb = simple_strtoul(buf, &end, 10); 166 - if (*buf && (end[0] == '\0' || (end[0] == '\n' && end[1] == '\0'))) { 167 - bdi->ra_pages = read_ahead_kb >> (PAGE_SHIFT - 10); 168 - ret = count; 169 - } 170 - return ret; 164 + ret = kstrtoul(buf, 10, &read_ahead_kb); 165 + if (ret < 0) 166 + return ret; 167 + 168 + bdi->ra_pages = read_ahead_kb >> (PAGE_SHIFT - 10); 169 + 170 + return count; 171 171 } 172 172 173 173 #define K(pages) ((pages) << (PAGE_SHIFT - 10)) ··· 187 187 struct device_attribute *attr, const char *buf, size_t count) 188 188 { 189 189 struct backing_dev_info *bdi = dev_get_drvdata(dev); 190 - char *end; 191 190 unsigned int ratio; 192 - ssize_t ret = -EINVAL; 191 + ssize_t ret; 193 192 194 - ratio = simple_strtoul(buf, &end, 10); 195 - if (*buf && (end[0] == '\0' || (end[0] == '\n' && end[1] == '\0'))) { 196 - ret = bdi_set_min_ratio(bdi, ratio); 197 - if (!ret) 198 - ret = count; 199 - } 193 + ret = kstrtouint(buf, 10, &ratio); 194 + if (ret < 0) 195 + return ret; 196 + 197 + ret = bdi_set_min_ratio(bdi, ratio); 198 + if (!ret) 199 + ret = count; 200 + 200 201 return ret; 201 202 } 202 203 BDI_SHOW(min_ratio, bdi->min_ratio) ··· 206 205 struct device_attribute *attr, const char *buf, size_t count) 207 206 { 208 207 struct backing_dev_info *bdi = dev_get_drvdata(dev); 209 - char *end; 210 208 unsigned int ratio; 211 - ssize_t ret = -EINVAL; 209 + ssize_t ret; 212 210 213 - ratio = simple_strtoul(buf, &end, 10); 214 - if (*buf && (end[0] == '\0' || (end[0] == '\n' && end[1] == '\0'))) { 215 - ret = bdi_set_max_ratio(bdi, ratio); 216 - if (!ret) 217 - ret = count; 218 - } 211 + ret = kstrtouint(buf, 10, &ratio); 212 + if (ret < 0) 213 + return ret; 214 + 215 + ret = bdi_set_max_ratio(bdi, ratio); 216 + if (!ret) 217 + ret = count; 218 + 219 219 return ret; 220 220 } 221 221 BDI_SHOW(max_ratio, bdi->max_ratio)
+11 -3
mm/page-writeback.c
··· 1602 1602 } 1603 1603 1604 1604 static int __cpuinit 1605 - ratelimit_handler(struct notifier_block *self, unsigned long u, void *v) 1605 + ratelimit_handler(struct notifier_block *self, unsigned long action, 1606 + void *hcpu) 1606 1607 { 1607 - writeback_set_ratelimit(); 1608 - return NOTIFY_DONE; 1608 + 1609 + switch (action & ~CPU_TASKS_FROZEN) { 1610 + case CPU_ONLINE: 1611 + case CPU_DEAD: 1612 + writeback_set_ratelimit(); 1613 + return NOTIFY_OK; 1614 + default: 1615 + return NOTIFY_DONE; 1616 + } 1609 1617 } 1610 1618 1611 1619 static struct notifier_block __cpuinitdata ratelimit_nb = {