OpenCloudOS-Kernel/drivers
NeilBrown a37b0715dd mm/writeback: replace PF_LESS_THROTTLE with PF_LOCAL_THROTTLE
PF_LESS_THROTTLE exists for loop-back nfsd (and a similar need in the
loop block driver and callers of prctl(PR_SET_IO_FLUSHER)), where a
daemon needs to write to one bdi (the final bdi) in order to free up
writes queued to another bdi (the client bdi).

The daemon sets PF_LESS_THROTTLE and gets a larger allowance of dirty
pages, so that it can still dirty pages after other processses have been
throttled.  The purpose of this is to avoid deadlock that happen when
the PF_LESS_THROTTLE process must write for any dirty pages to be freed,
but it is being thottled and cannot write.

This approach was designed when all threads were blocked equally,
independently on which device they were writing to, or how fast it was.
Since that time the writeback algorithm has changed substantially with
different threads getting different allowances based on non-trivial
heuristics.  This means the simple "add 25%" heuristic is no longer
reliable.

The important issue is not that the daemon needs a *larger* dirty page
allowance, but that it needs a *private* dirty page allowance, so that
dirty pages for the "client" bdi that it is helping to clear (the bdi
for an NFS filesystem or loop block device etc) do not affect the
throttling of the daemon writing to the "final" bdi.

This patch changes the heuristic so that the task is not throttled when
the bdi it is writing to has a dirty page count below below (or equal
to) the free-run threshold for that bdi.  This ensures it will always be
able to have some pages in flight, and so will not deadlock.

In a steady-state, it is expected that PF_LOCAL_THROTTLE tasks might
still be throttled by global threshold, but that is acceptable as it is
only the deadlock state that is interesting for this flag.

This approach of "only throttle when target bdi is busy" is consistent
with the other use of PF_LESS_THROTTLE in current_may_throttle(), were
it causes attention to be focussed only on the target bdi.

So this patch
 - renames PF_LESS_THROTTLE to PF_LOCAL_THROTTLE,
 - removes the 25% bonus that that flag gives, and
 - If PF_LOCAL_THROTTLE is set, don't delay at all unless the
   global and the local free-run thresholds are exceeded.

Note that previously realtime threads were treated the same as
PF_LESS_THROTTLE threads.  This patch does *not* change the behvaiour
for real-time threads, so it is now different from the behaviour of nfsd
and loop tasks.  I don't know what is wanted for realtime.

[akpm@linux-foundation.org: coding style fixes]
Signed-off-by: NeilBrown <neilb@suse.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Reviewed-by: Jan Kara <jack@suse.cz>
Acked-by: Chuck Lever <chuck.lever@oracle.com>	[nfsd]
Cc: Christoph Hellwig <hch@lst.de>
Cc: Michal Hocko <mhocko@suse.com>
Cc: Trond Myklebust <trond.myklebust@hammerspace.com>
Link: http://lkml.kernel.org/r/87ftbf7gs3.fsf@notabene.neil.brown.name
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2020-06-02 10:59:08 -07:00
..
accessibility
acpi ACPI: EC: PM: Avoid flushing EC work when EC GPE is inactive 2020-05-18 13:15:13 +02:00
amba amba: Initialize dma_parms for amba devices 2020-04-28 17:44:34 +02:00
android Merge 5.6-rc7 into char-misc-next 2020-03-23 07:59:38 +01:00
ata ata: sata_inic162x fix a spelling issue 2020-04-23 09:59:30 -06:00
atm .gitignore: add SPDX License Identifier 2020-03-25 11:50:48 +01:00
auxdisplay Merge 5.6-rc7 into char-misc-next 2020-03-23 07:59:38 +01:00
base Merge remote-tracking branch 'regmap/for-5.8' into regmap-next 2020-05-29 14:03:32 +01:00
bcma
block mm/writeback: replace PF_LESS_THROTTLE with PF_LOCAL_THROTTLE 2020-06-02 10:59:08 -07:00
bluetooth Bluetooth: btusb: print Intel fw build version in power-on boot 2020-03-16 08:57:40 +01:00
bus bus: mhi: core: Fix some error return code 2020-05-15 16:32:20 +02:00
cdrom
char Merge branch 'linus' of git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6 2020-06-01 12:00:10 -07:00
clk clk: qcom: gcc: Fix parent for gpll0_out_even 2020-05-26 17:15:06 -07:00
clocksource clocksource/drivers/timer-vf-pit: Add missing parenthesis 2020-04-05 09:24:58 +02:00
connector
counter counter: 104-quad-8: Add lock guards - generic interface 2020-04-19 17:50:00 +01:00
cpufreq cpufreq: intel_pstate: Only mention the BIOS disabling turbo mode once 2020-04-27 10:30:11 +02:00
cpuidle Merge branch 'pm-cpuidle' 2020-04-10 11:32:22 +02:00
crypto Merge branch 'linus' of git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6 2020-06-01 12:00:10 -07:00
dax vfs: track per-sb writeback errors and report them to syncfs 2020-06-02 10:59:05 -07:00
dca
devfreq PM / devfreq: Fix handling dev_pm_qos_remove_request result 2020-03-25 08:35:03 +09:00
dio dio: Fix dio_bus_match() kerneldoc 2020-03-09 11:12:19 +01:00
dma dmaengine: tegra210-adma: Fix an error handling path in 'tegra_adma_probe()' 2020-05-19 22:26:01 +05:30
dma-buf dma-buf: fix documentation build warnings 2020-04-30 19:47:39 +05:30
edac Merge branches 'edac-i10nm' and 'edac-misc' into edac-updates-for-5.8 2020-06-01 11:39:15 +02:00
eisa .gitignore: add SPDX License Identifier 2020-03-25 11:50:48 +01:00
extcon Char/Misc driver patches for 5.7-rc1 2020-04-03 13:22:40 -07:00
firewire
firmware Printk changes for 5.8 2020-06-01 12:13:30 -07:00
fpga fpga: dfl: pci: fix return value of cci_pci_sriov_configure 2020-03-30 20:45:30 -07:00
fsi
gnss
gpio gpio: fix locking open drain IRQ lines 2020-05-29 14:01:49 +02:00
gpu drm fixes for 5.7 final 2020-05-29 12:32:46 -07:00
greybus
hid HID: quirks: Add HID_QUIRK_NO_INIT_REPORTS quirk for Dell K12A keyboard-dock 2020-05-04 11:24:58 +02:00
hsi
hv hyperv-fixes for 5.7-rc4 2020-04-27 13:28:27 -07:00
hwmon hwmon: Add Baikal-T1 PVT sensor driver 2020-05-28 07:59:45 -07:00
hwspinlock hwspinlock: hwspinlock_internal.h: Replace zero-length array with flexible-array member 2020-03-25 22:30:46 -07:00
hwtracing coresight: cti: remove incorrect NULL return check 2020-05-15 16:32:20 +02:00
i2c i2c: mux: demux-pinctrl: Fix an error handling path in 'i2c_demux_pinctrl_probe()' 2020-05-15 11:23:49 +02:00
i3c i3c master: GETMRL's 3rd byte is optional even with BCR_IBI_PAYLOAD 2020-04-16 14:27:46 +02:00
ide drivers/ide: Fix build regression. 2020-04-04 18:07:59 -07:00
idle Merge branch 'perf-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2020-03-30 16:40:08 -07:00
iio iio: sca3000: Remove an erroneous 'get_device()' 2020-05-10 10:53:36 +01:00
infiniband IB/ipoib: Fix double free of skb in case of multicast traffic in CM mode 2020-05-27 21:14:09 -03:00
input Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input 2020-05-28 12:41:11 -07:00
interconnect interconnect: qcom: Move the static keyword to the front of declaration 2020-04-29 13:11:44 +02:00
iommu iommu: Fix reference count leak in iommu_group_alloc. 2020-05-29 15:27:50 +02:00
ipack ipack: tpci200: fix error return code in tpci200_register() 2020-05-15 16:32:20 +02:00
irqchip Merge branch 'irq/gic-v4.1-fixes-5.7' into irq/irqchip-5.7 2020-04-17 08:59:55 +01:00
isdn mISDN: make dmril and dmrim static 2020-04-16 13:52:31 -07:00
leds leds: core: Fix warning message when init_data 2020-04-06 23:12:08 +02:00
lightnvm for-5.7/drivers-2020-03-29 2020-03-30 11:43:51 -07:00
macintosh Char/Misc driver patches for 5.7-rc1 2020-04-03 13:22:40 -07:00
mailbox mailbox: imx: add SCU MU support 2020-03-19 23:04:32 -05:00
mcb
md md: remove __clear_page_buffers and use attach/detach_page_private 2020-06-02 10:59:07 -07:00
media usb: pulse8-cec: Switch to use %ptT 2020-05-20 14:54:26 +02:00
memory ARM: driver updates 2020-04-03 15:05:35 -07:00
memstick
message scsi: message: fusion: Replace zero-length array with flexible-array member 2020-03-26 22:40:47 -04:00
mfd mfd: Add Gateworks System Controller core driver 2020-05-20 10:28:57 +01:00
misc misc: rtsx: Add short delay after exit from ASPM 2020-05-22 13:27:38 +02:00
mmc mmc: block: Fix use-after-free issue for rpmb 2020-05-25 10:45:17 +02:00
most most: core: use function subsys_initcall() 2020-04-28 15:04:09 +02:00
mtd Fixes and new features for pstore 2020-06-01 12:07:34 -07:00
mux
net drivers/net/ibmvnic: Update VNIC protocol version reporting 2020-05-29 17:20:59 -07:00
nfc Merge branch 'linus' of git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6 2020-06-01 12:00:10 -07:00
ntb pci-v5.7-changes 2020-04-03 14:25:02 -07:00
nubus
nvdimm libnvdimm for 5.7 2020-04-08 21:03:40 -07:00
nvme nvme-pci: avoid race between nvme_reap_pending_cqes() and nvme_poll() 2020-05-27 20:32:56 +02:00
nvmem nvmem: core: remove nvmem_sysfs_get_groups() 2020-03-25 19:23:49 +01:00
of of: unittest: kmemleak in duplicate property update 2020-04-17 08:31:34 -05:00
opp opp: Manage empty OPP tables with clk handle 2020-04-13 16:14:55 +05:30
oprofile
parisc parisc: Replace setup_irq() by request_irq() 2020-04-05 22:05:23 +02:00
parport
pci PCI: Move Apex Edge TPU class quirk to fix BAR assignment 2020-04-14 19:16:51 -05:00
pcmcia pcmcia: remove some unused space characters 2020-03-31 18:48:22 +02:00
perf arm64 updates for 5.7: 2020-03-31 10:05:01 -07:00
phy phy: qualcomm: usb-hs-28nm: Prepare clocks in init 2020-04-30 12:10:49 +05:30
pinctrl pinctrl: qcom: Add affinity callbacks to msmgpio IRQ chip 2020-05-12 14:29:29 +02:00
platform Fixes and new features for pstore 2020-06-01 12:07:34 -07:00
pnp
power power: supply: bd70528: rename linear_range to avoid collision 2020-05-08 18:18:13 +01:00
powercap Merge branch 'perf-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2020-03-30 16:40:08 -07:00
pps
ps3 powerpc/ps3: Remove an unneeded NULL check 2020-04-03 00:09:59 +11:00
ptp ptp: Remove unneeded conversion to bool 2020-04-21 15:45:32 -07:00
pwm pwm: pca9685: Fix PWM/GPIO inter-operation 2020-04-03 21:41:42 +02:00
rapidio rapidio: fix an error in get_user_pages_fast() error handling 2020-05-23 10:26:31 -07:00
ras
regulator Merge remote-tracking branch 'regulator/for-5.8' into regulator-linus 2020-06-01 13:01:44 +01:00
remoteproc remoteproc fixes for v5.7 2020-04-23 09:28:15 -07:00
reset
rpmsg rpmsg: pull in slab.h 2020-04-17 06:05:29 -04:00
rtc - New Drivers 2020-04-07 19:48:52 -07:00
s390 s390/ism: fix error return code in ism_probe() 2020-05-13 12:14:51 -07:00
sbus misc: move FLASH_MINOR into miscdevice.h and fix conflicts 2020-03-18 12:27:04 +01:00
scsi scsi: pm: Balance pm_only counter of request queue during system resume 2020-05-11 19:43:25 -04:00
sfi
sh
siox
slimbus slimbus: ngd: add v2.1.0 compatible 2020-03-12 16:51:15 +01:00
soc soc: mediatek: cmdq: return send msg error code 2020-05-16 19:55:50 +02:00
soundwire Char/Misc driver patches for 5.7-rc1 2020-04-03 13:22:40 -07:00
spi Merge remote-tracking branch 'spi/for-5.8' into spi-next 2020-05-30 00:03:53 +01:00
spmi
ssb ssb: Use scnprintf() for avoiding potential buffer overflow 2020-03-12 15:44:12 +02:00
staging iio-fixes-for-5.7b Second set of fixes for IIO in the 5.7 cycle. 2020-05-15 16:04:24 +02:00
target scsi: target: Put lun_ref at end of tmr processing 2020-05-14 20:27:05 -04:00
tc
tee ARM: driver updates 2020-04-03 15:05:35 -07:00
thermal - Convert tsens configuration DT binding to yaml (Rajeshwari) 2020-04-07 20:00:16 -07:00
thunderbolt thunderbolt: Check return value of tb_sw_read() in usb4_switch_op() 2020-04-28 19:00:59 +02:00
tty tty: serial: add missing spin_lock_init for SiFive serial console 2020-05-15 14:55:10 +02:00
uio uio: uio_pdrv_genirq: use new devm_uio_register_device() function 2020-03-18 12:34:10 +01:00
usb USB: gadget: fix illegal array access in binding with UDC 2020-05-15 15:42:17 +02:00
vdpa vdpasim: remove unused variable 'ret' 2020-05-11 06:44:12 -04:00
vfio vfio/type1: Fix VA->PA translation for PFNMAP VMAs in vaddr_get_pfn() 2020-04-23 12:10:01 -06:00
vhost virtio: build warning fixes 2020-05-21 12:59:29 -07:00
video drm fixes for 5.7-rc1 2020-04-07 20:24:34 -07:00
virt virt: vbox: Use fallthrough; 2020-03-19 07:41:03 +01:00
virtio virtio-balloon: Avoid using the word 'report' when referring to free page hinting 2020-04-17 06:05:30 -04:00
visorbus
vlynq
vme
w1
watchdog watchdog: sp805: fix restart handler 2020-04-08 11:18:38 +02:00
xen xen: branch for v5.7-rc2 2020-04-17 10:35:17 -07:00
zorro SPDX patches for 5.7-rc1. 2020-04-03 13:12:26 -07:00
Kconfig virtio: fixes, vdpa 2020-04-08 10:51:53 -07:00
Makefile virtio: fixes, vdpa 2020-04-08 10:51:53 -07:00