Linus Torvalds
1ac5cd4978
block: don't use un-ordered __set_current_state(TASK_UNINTERRUPTIBLE)
...
This mostly reverts commit 849a370016 ("block: avoid ordered task
state change for polled IO"). It was wrongly claiming that the ordering
wasn't necessary. The memory barrier _is_ necessary.
If something is truly polling and not going to sleep, it's the whole
state setting that is unnecessary, not the memory barrier. Whenever you
set your state to a sleeping state, you absolutely need the memory
barrier.
Note that sometimes the memory barrier can be elsewhere. For example,
the ordering might be provided by an external lock, or by setting the
process state to sleeping before adding yourself to the wait queue list
that is used for waking up (where the wait queue lock itself will
guarantee that any wakeup will correctly see the sleeping state).
But none of those cases were true here.
NOTE! Some of the polling paths may indeed be able to drop the state
setting entirely, at which point the memory barrier also goes away.
(Also note that this doesn't revert the TASK_RUNNING cases: there is no
race between a wakeup and setting the process state to TASK_RUNNING,
since the end result doesn't depend on ordering).
Cc: Jens Axboe <axboe@kernel.dk>
Cc: Christoph Hellwig <hch@lst.de>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2019-01-02 10:46:03 -08:00
..
kasan
mm: convert totalram_pages and totalhigh_pages variables to atomic
2018-12-28 12:11:47 -08:00
backing-dev.c
blkcg: delay blkg destruction until after writeback has finished
2018-08-31 14:48:56 -06:00
balloon_compaction.c
cleancache.c
mm: use octal not symbolic permissions
2018-06-15 07:55:25 +09:00
cma.c
kasan, mm, arm64: tag non slab memory allocated via pagealloc
2018-12-28 12:11:44 -08:00
cma.h
cma_debug.c
mm/cma: remove unsupported gfp_mask parameter from cma_alloc()
2018-08-17 16:20:32 -07:00
compaction.c
mm: move zone watermark accesses behind an accessor
2018-12-28 12:11:48 -08:00
debug.c
mm/debug.c: make "migrate_reason_names[]" const char *
2018-12-28 12:11:48 -08:00
debug_page_ref.c
dmapool.c
mm: use octal not symbolic permissions
2018-06-15 07:55:25 +09:00
early_ioremap.c
fadvise.c
vfs: implement readahead(2) using POSIX_FADV_WILLNEED
2018-08-30 20:01:32 +02:00
failslab.c
mm: use octal not symbolic permissions
2018-06-15 07:55:25 +09:00
filemap.c
mm, fault_around: do not take a reference to a locked page
2018-12-28 12:11:51 -08:00
frame_vector.c
frontswap.c
mm: use octal not symbolic permissions
2018-06-15 07:55:25 +09:00
gup.c
mm/gup: finish consolidating error handling
2018-11-30 14:56:13 -08:00
gup_benchmark.c
mm/gup_benchmark.c: prevent integer overflow in ioctl
2018-10-31 08:54:12 -07:00
highmem.c
mm: convert totalram_pages and totalhigh_pages variables to atomic
2018-12-28 12:11:47 -08:00
hmm.c
mm/hmm: fix memremap.h, move dev_page_fault_t callback to hmm
2018-12-28 12:11:52 -08:00
huge_memory.c
mm, thp, proc: report THP eligibility for each vma
2018-12-28 12:11:50 -08:00
hugetlb.c
hugetlbfs: Use i_mmap_rwsem to fix page fault/truncate race
2018-12-28 12:11:52 -08:00
hugetlb_cgroup.c
hwpoison-inject.c
init-mm.c
mm: Allocate the mm_cpumask (mm->cpu_bitmap[]) dynamically based on nr_cpu_ids
2018-07-17 09:35:30 +02:00
internal.h
mm: use alloc_flags to record if kswapd can wake
2018-12-28 12:11:48 -08:00
interval_tree.c
Kconfig
ksm: replace jhash2 with xxhash
2018-12-28 12:11:46 -08:00
Kconfig.debug
mm: clarify CONFIG_PAGE_POISONING and usage
2018-08-22 10:52:44 -07:00
khugepaged.c
mm/mmu_notifier: use structure for invalidate_range_start/end calls v2
2018-12-28 12:11:50 -08:00
kmemleak-test.c
kmemleak.c
kmemleak: add config to select auto scan
2018-12-28 12:11:51 -08:00
ksm.c
ksm: react on changing "sleep_millisecs" parameter faster
2018-12-28 12:11:51 -08:00
list_lru.c
mm/list_lru: introduce list_lru_shrink_walk_irq()
2018-08-17 16:20:32 -07:00
maccess.c
x86/fault: BUG() when uaccess helpers fault on kernel addresses
2018-09-03 15:12:09 +02:00
madvise.c
mm/mmu_notifier: use structure for invalidate_range_start/end calls v2
2018-12-28 12:11:50 -08:00
Makefile
mm: remove nobootmem
2018-10-31 08:54:16 -07:00
memblock.c
mm/memblock.c: skip kmemleak for kasan_init()
2018-12-28 12:11:49 -08:00
memcontrol.c
memcg, oom: notify on oom killer invocation from the charge path
2018-12-28 12:11:52 -08:00
memfd.c
memfd: Convert memfd_tag_pins to XArray
2018-10-21 10:46:41 -04:00
memory-failure.c
hugetlbfs: use i_mmap_rwsem for more pmd sharing synchronization
2018-12-28 12:11:51 -08:00
memory.c
mm, thp, proc: report THP eligibility for each vma
2018-12-28 12:11:50 -08:00
memory_hotplug.c
mm, memory_hotplug: deobfuscate migration part of offlining
2018-12-28 12:11:50 -08:00
mempolicy.c
Revert "mm, thp: consolidate THP gfp handling into alloc_hugepage_direct_gfpmask"
2018-12-08 10:26:20 -08:00
mempool.c
mm/mempool.c: add missing parameter description
2018-08-22 10:52:44 -07:00
memtest.c
migrate.c
hugetlbfs: use i_mmap_rwsem for more pmd sharing synchronization
2018-12-28 12:11:51 -08:00
mincore.c
xarray: Replace exceptional entries
2018-09-29 22:47:49 -04:00
mlock.c
dax: remove VM_MIXEDMAP for fsdax and device dax
2018-08-17 16:20:27 -07:00
mm_init.c
mm: convert totalram_pages and totalhigh_pages variables to atomic
2018-12-28 12:11:47 -08:00
mmap.c
mm/mmap.c: remove verify_mm_writelocked()
2018-12-28 12:11:47 -08:00
mmu_context.c
mmu_gather.c
mm: Replace call_rcu_sched() with call_rcu()
2018-11-27 09:21:46 -08:00
mmu_notifier.c
mm/mmu_notifier: use structure for invalidate_range_start/end calls v2
2018-12-28 12:11:50 -08:00
mmzone.c
mprotect.c
mm/mmu_notifier: use structure for invalidate_range_start/end calls v2
2018-12-28 12:11:50 -08:00
mremap.c
mm/mmu_notifier: use structure for invalidate_range_start/end calls v2
2018-12-28 12:11:50 -08:00
msync.c
nommu.c
mm/gup: cache dev_pagemap while pinning pages
2018-10-26 16:38:15 -07:00
oom_kill.c
mm/mmu_notifier: use structure for invalidate_range_start/end calls v2
2018-12-28 12:11:50 -08:00
page-writeback.c
mm/page-writeback.c: don't break integrity writeback on ->writepage() error
2018-12-28 12:11:49 -08:00
page_alloc.c
mm/page_alloc.c: allow error injection
2018-12-28 12:11:51 -08:00
page_counter.c
page_ext.c
mm: remove include/linux/bootmem.h
2018-10-31 08:54:16 -07:00
page_idle.c
mm: remove include/linux/bootmem.h
2018-10-31 08:54:16 -07:00
page_io.c
block: don't use un-ordered __set_current_state(TASK_UNINTERRUPTIBLE)
2019-01-02 10:46:03 -08:00
page_isolation.c
mm: only report isolation failures when offlining memory
2018-12-28 12:11:46 -08:00
page_owner.c
mm/page_owner: clamp read count to PAGE_SIZE
2018-12-28 12:11:46 -08:00
page_poison.c
virtio, vhost: fixes, tweaks
2018-11-01 14:42:49 -07:00
page_vma_mapped.c
mm/rmap: map_pte() was not handling private ZONE_DEVICE page properly
2018-10-31 08:54:11 -07:00
pagewalk.c
percpu-internal.h
percpu-km.c
percpu: convert spin_lock_irq to spin_lock_irqsave.
2018-12-18 09:04:08 -08:00
percpu-stats.c
treewide: Use array_size() in vmalloc()
2018-06-12 16:19:22 -07:00
percpu-vm.c
percpu.c
Merge branch 'for-4.20' of git://git.kernel.org/pub/scm/linux/kernel/git/dennis/percpu
2018-11-01 09:27:57 -07:00
pgtable-generic.c
x86/mm: Page size aware flush_tlb_mm_range()
2018-10-09 16:51:11 +02:00
process_vm_access.c
quicklist.c
readahead.c
mm/readahead.c: simplify get_next_ra_size()
2018-12-28 12:11:46 -08:00
rmap.c
hugetlbfs: use i_mmap_rwsem for more pmd sharing synchronization
2018-12-28 12:11:51 -08:00
rodata_test.c
shmem.c
mm: convert totalram_pages and totalhigh_pages variables to atomic
2018-12-28 12:11:47 -08:00
slab.c
mm: convert totalram_pages and totalhigh_pages variables to atomic
2018-12-28 12:11:47 -08:00
slab.h
kasan, mm: change hooks signatures
2018-12-28 12:11:43 -08:00
slab_common.c
A fairly normal cycle for documentation stuff. We have a new
2018-12-29 11:21:49 -08:00
slob.c
slub.c
mm/slub.c: record final state of slub action in deactivate_slab()
2018-12-28 12:11:46 -08:00
sparse-vmemmap.c
mm: remove include/linux/bootmem.h
2018-10-31 08:54:16 -07:00
sparse.c
mm, sparse: pass nid instead of pgdat to sparse_add_one_section()
2018-12-28 12:11:49 -08:00
swap.c
mm: convert totalram_pages and totalhigh_pages variables to atomic
2018-12-28 12:11:47 -08:00
swap_cgroup.c
swap_slots.c
mm, swap, get_swap_pages: use entry_size instead of cluster in parameter
2018-08-22 10:52:44 -07:00
swap_state.c
Merge branch 'xarray' of git://git.infradead.org/users/willy/linux-dax
2018-10-28 11:35:40 -07:00
swapfile.c
mm, swap: fix swapoff with KSM pages
2018-12-28 12:11:52 -08:00
truncate.c
mm: cleancache: fix corruption on missed inode invalidation
2018-11-30 14:56:14 -08:00
usercopy.c
usercopy: Allow boot cmdline disabling of hardening
2018-07-04 08:04:52 -07:00
userfaultfd.c
hugetlbfs: use i_mmap_rwsem for more pmd sharing synchronization
2018-12-28 12:11:51 -08:00
util.c
mm: convert totalram_pages and totalhigh_pages variables to atomic
2018-12-28 12:11:47 -08:00
vmacache.c
mm: get rid of vmacache_flush_all() entirely
2018-09-13 15:18:04 -10:00
vmalloc.c
mm: convert totalram_pages and totalhigh_pages variables to atomic
2018-12-28 12:11:47 -08:00
vmpressure.c
vmscan.c
mm: put_and_wait_on_page_locked() while page is migrated
2018-12-28 12:11:48 -08:00
vmstat.c
mm: convert zone->managed_pages to atomic variable
2018-12-28 12:11:47 -08:00
workingset.c
mm: convert totalram_pages and totalhigh_pages variables to atomic
2018-12-28 12:11:47 -08:00
z3fold.c
z3fold: fix possible reclaim races
2018-11-18 10:15:09 -08:00
zbud.c
zpool.c
zsmalloc.c
mm/zsmalloc.c: fix fall-through annotation
2018-10-26 16:26:35 -07:00
zswap.c
mm: convert totalram_pages and totalhigh_pages variables to atomic
2018-12-28 12:11:47 -08:00