1. 04 3月, 2021 12 次提交
    • P
      io_uring: destroy io-wq on exec · 8452d4a6
      Pavel Begunkov 提交于
      Destroy current's io-wq backend and tctx on __io_uring_task_cancel(),
      aka exec(). Looks it's not strictly necessary, because it will be done
      at some point when the task dies and changes of creds/files/etc. are
      handled, but better to do that earlier to free io-wq and not potentially
      lock previous mm and other resources for the time being.
      
      It's safe to do because we wait for all requests of the current task to
      complete, so no request will use tctx afterwards. Note, that
      io_uring_files_cancel() may leave some requests for later reaping, so it
      leaves tctx intact, that's ok as the task is dying anyway.
      Signed-off-by: NPavel Begunkov <asml.silence@gmail.com>
      Signed-off-by: NJens Axboe <axboe@kernel.dk>
      8452d4a6
    • P
      io_uring: warn on not destroyed io-wq · ef8eaa4e
      Pavel Begunkov 提交于
      Make sure that we killed an io-wq by the time a task is dead.
      Signed-off-by: NPavel Begunkov <asml.silence@gmail.com>
      Signed-off-by: NJens Axboe <axboe@kernel.dk>
      ef8eaa4e
    • J
      io_uring: fix race condition in task_work add and clear · 1d5f360d
      Jens Axboe 提交于
      We clear the bit marking the ctx task_work as active after having run
      the queued work, but we really should be clearing it before. Otherwise
      we can hit a tiny race ala:
      
      CPU0					CPU1
      io_task_work_add()			tctx_task_work()
      					run_work
      	add_to_list
      	test_and_set_bit
      					clear_bit
      		already set
      
      and CPU0 will return thinking the task_work is queued, while in reality
      it's already being run. If we hit the condition after __tctx_task_work()
      found no more work, but before we've cleared the bit, then we'll end up
      thinking it's queued and will be run. In reality it is queued, but we
      didn't queue the ctx task_work to ensure that it gets run.
      
      Fixes: 7cbf1722 ("io_uring: provide FIFO ordering for task_work")
      Signed-off-by: NJens Axboe <axboe@kernel.dk>
      1d5f360d
    • J
      io-wq: provide an io_wq_put_and_exit() helper · afcc4015
      Jens Axboe 提交于
      If we put the io-wq from io_uring, we really want it to exit. Provide
      a helper that does that for us. Couple that with not having the manager
      hold a reference to the 'wq' and the normal SQPOLL exit will tear down
      the io-wq context appropriate.
      
      On the io-wq side, our wq context is per task, so only the task itself
      is manipulating ->manager and hence it's safe to check and clear without
      any extra locking. We just need to ensure that the manager task stays
      around, in case it exits.
      Signed-off-by: NJens Axboe <axboe@kernel.dk>
      afcc4015
    • J
      io_uring: don't use complete_all() on SQPOLL thread exit · 8629397e
      Jens Axboe 提交于
      We want to reuse this completion, and a single complete should do just
      fine. Ensure that we park ourselves first if requested, as that is what
      lead to the initial deadlock in this area. If we've got someone attempting
      to park us, then we can't proceed without having them finish first.
      
      Fixes: 37d1e2e3 ("io_uring: move SQPOLL thread io-wq forked worker")
      Signed-off-by: NJens Axboe <axboe@kernel.dk>
      8629397e
    • P
      io_uring: run fallback on cancellation · ba50a036
      Pavel Begunkov 提交于
      io_uring_try_cancel_requests() matches not only current's requests, but
      also of other exiting tasks, so we need to actively cancel them and not
      just wait, especially since the function can be called on flush during
      do_exit() -> exit_files().
      Even if it's not a problem for now, it's much nicer to know that the
      function tries to cancel everything it can.
      Signed-off-by: NPavel Begunkov <asml.silence@gmail.com>
      Signed-off-by: NJens Axboe <axboe@kernel.dk>
      ba50a036
    • J
      io_uring: SQPOLL stop error handling fixes · e54945ae
      Jens Axboe 提交于
      If we fail to fork an SQPOLL worker, we can hit cancel, and hence
      attempted thread stop, with the thread already being stopped. Ensure
      we check for that.
      
      Also guard thread stop fully by the sqd mutex, just like we do for
      park.
      Signed-off-by: NJens Axboe <axboe@kernel.dk>
      e54945ae
    • J
      io-wq: fix double put of 'wq' in error path · 470ec4ed
      Jens Axboe 提交于
      We are already freeing the wq struct in both spots, so don't put it and
      get it freed twice.
      
      Reported-by: syzbot+7bf785eedca35ca05501@syzkaller.appspotmail.com
      Fixes: 4fb6ac32 ("io-wq: improve manager/worker handling over exec")
      Signed-off-by: NJens Axboe <axboe@kernel.dk>
      470ec4ed
    • J
      io-wq: wait for manager exit on wq destroy · d364d9e5
      Jens Axboe 提交于
      The manager waits for the workers, hence the manager is always valid if
      workers are running. Now also have wq destroy wait for the manager on
      exit, so we now everything is gone.
      Signed-off-by: NJens Axboe <axboe@kernel.dk>
      d364d9e5
    • J
      io-wq: rename wq->done completion to wq->started · dbf99620
      Jens Axboe 提交于
      This is a leftover from a different use cases, it's used to wait for
      the manager to startup. Rename it as such.
      Signed-off-by: NJens Axboe <axboe@kernel.dk>
      dbf99620
    • J
      io-wq: don't ask for a new worker if we're exiting · 613eeb60
      Jens Axboe 提交于
      If we're in the process of shutting down the async context, then don't
      create new workers if we already have at least the fixed one.
      Signed-off-by: NJens Axboe <axboe@kernel.dk>
      613eeb60
    • J
      io-wq: have manager wait for all workers to exit · fb3a1f6c
      Jens Axboe 提交于
      Instead of having to wait separately on workers and manager, just have
      the manager wait on the workers. We use an atomic_t for the reference
      here, as we need to start at 0 and allow increment from that. Since the
      number of workers is naturally capped by the allowed nr of processes,
      and that uses an int, there is no risk of overflow.
      Signed-off-by: NJens Axboe <axboe@kernel.dk>
      fb3a1f6c
  2. 02 3月, 2021 1 次提交
  3. 01 3月, 2021 8 次提交
    • L
      Linux 5.12-rc1 · fe07bfda
      Linus Torvalds 提交于
      fe07bfda
    • L
      Merge tag 'ide-5.11-2021-02-28' of git://git.kernel.dk/linux-block · d346da4a
      Linus Torvalds 提交于
      Pull ide fix from Jens Axboe:
       "This is a leftover fix from 5.11, where I forgot to ship it your way"
      
      * tag 'ide-5.11-2021-02-28' of git://git.kernel.dk/linux-block:
        ide/falconide: Fix module unload
      d346da4a
    • L
      Merge tag 'kbuild-fixes-v5.12' of... · 06d5d309
      Linus Torvalds 提交于
      Merge tag 'kbuild-fixes-v5.12' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild
      
      Pull Kbuild fixes from Masahiro Yamada:
      
       - Fix UNUSED_KSYMS_WHITELIST for Clang LTO
      
       - Make -s builds really silent irrespective of V= option
      
       - Fix build error when SUBLEVEL or PATCHLEVEL is empty
      
      * tag 'kbuild-fixes-v5.12' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild:
        kbuild: Fix <linux/version.h> for empty SUBLEVEL or PATCHLEVEL again
        kbuild: make -s option take precedence over V=1
        ia64: remove redundant READELF from arch/ia64/Makefile
        kbuild: do not include include/config/auto.conf from adjust_autoksyms.sh
        kbuild: fix UNUSED_KSYMS_WHITELIST for Clang LTO
        kbuild: lto: add _mcount to list of used symbols
      06d5d309
    • L
      Merge tag 'csky-for-linus-5.12-rc1' of git://github.com/c-sky/csky-linux · cd278456
      Linus Torvalds 提交于
      Pull arch/csky updates from Guo Ren:
       "Features:
         - add new memory layout 2.5G(user):1.5G(kernel)
         - add kmemleak support
         - reconstruct VDSO framework: add VDSO with GENERIC_GETTIMEOFDAY,
           GENERIC_TIME_VSYSCALL, HAVE_GENERIC_VDSO
         - add faulthandler_disabled() check
         - support (fix) swapon
         - add (fix) _PAGE_ACCESSED for default pgprot
         - abort uaccess retries upon fatal signal (from arm)
      
        Fixes and optimizations:
         - fix perf probe failure
         - fix show_regs doesn't contain regs->usp
         - remove custom asm/atomic.h implementation
         - fix barrier design
         - fix futex SMP implementation
         - fix asm/cmpxchg.h with correct ordering barrier
         - cleanup asm/spinlock.h
         - fix PTE global for 2.5:1.5 virtual memory
         - remove prologue of page fault handler in entry.S
         - fix TLB maintenance synchronization problem
         - add show_tlb for CPU_CK860 debug
         - fix FAULT_FLAG_XXX param for handle_mm_fault
         - fix update_mmu_cache called with user io mapping
         - fix do_page_fault parent irq status
         - fix a size determination in gpr_get()
         - pgtable.h: Coding convention
         - kprobe: Fix code in simulate without 'long'
         - fix pfn_valid error with wrong max_mapnr
         - use free_initmem_default() in free_initmem()
         - fix compile error"
      
      * tag 'csky-for-linus-5.12-rc1' of git://github.com/c-sky/csky-linux: (30 commits)
        csky: Fixup compile error
        csky: use free_initmem_default() in free_initmem()
        csky: Fixup pfn_valid error with wrong max_mapnr
        csky: Add VDSO with GENERIC_GETTIMEOFDAY, GENERIC_TIME_VSYSCALL, HAVE_GENERIC_VDSO
        csky: kprobe: Fixup code in simulate without 'long'
        csky: Fixup swapon
        csky: pgtable.h: Coding convention
        csky: Fixup _PAGE_ACCESSED for default pgprot
        csky: remove unused including <linux/version.h>
        csky: Fix a size determination in gpr_get()
        csky: Reconstruct VDSO framework
        csky: mm: abort uaccess retries upon fatal signal
        csky: Sync riscv mm/fault.c for easy maintenance
        csky: Fixup do_page_fault parent irq status
        csky: Add faulthandler_disabled() check
        csky: Fixup update_mmu_cache called with user io mapping
        csky: Fixup FAULT_FLAG_XXX param for handle_mm_fault
        csky: Add show_tlb for CPU_CK860 debug
        csky: Fix TLB maintenance synchronization problem
        csky: Add kmemleak support
        ...
      cd278456
    • L
      Merge tag 'riscv-for-linus-5.12-mw1' of git://git.kernel.org/pub/scm/linux/kernel/git/riscv/linux · 7d19ea5e
      Linus Torvalds 提交于
      Pull more RISC-V updates from Palmer Dabbelt:
       "A pair of patches that slipped through the cracks:
      
         - enable CPU hotplug in the defconfigs
      
         - some cleanups to setup_bootmem
      
        There's also a single fix for some randconfig build failures:
      
         - make NUMA depend on SMP"
      
      * tag 'riscv-for-linus-5.12-mw1' of git://git.kernel.org/pub/scm/linux/kernel/git/riscv/linux:
        riscv: Cleanup setup_bootmem()
        RISC-V: Enable CPU Hotplug in defconfigs
        RISC-V: Make NUMA depend on SMP
      7d19ea5e
    • L
      Merge tag 'scsi-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi · 0b311e34
      Linus Torvalds 提交于
      Pull more SCSI updates from James Bottomley:
       "This is a few driver updates (iscsi, mpt3sas) that were still in the
        staging queue when the merge window opened (all committed on or before
        8 Feb) and some small bug fixes which came in during the merge window
        (all committed on 22 Feb)"
      
      * tag 'scsi-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi: (30 commits)
        scsi: hpsa: Correct dev cmds outstanding for retried cmds
        scsi: sd: Fix Opal support
        scsi: target: tcmu: Fix memory leak caused by wrong uio usage
        scsi: target: tcmu: Move some functions without code change
        scsi: sd: sd_zbc: Don't pass GFP_NOIO to kvcalloc
        scsi: aic7xxx: Remove unused function pointer typedef ahc_bus_suspend/resume_t
        scsi: bnx2fc: Fix Kconfig warning & CNIC build errors
        scsi: ufs: Fix a duplicate dev quirk number
        scsi: aic79xx: Fix spelling of version
        scsi: target: core: Prevent underflow for service actions
        scsi: target: core: Add cmd length set before cmd complete
        scsi: iscsi: Drop session lock in iscsi_session_chkready()
        scsi: qla4xxx: Use iscsi_is_session_online()
        scsi: libiscsi: Reset max/exp cmdsn during recovery
        scsi: iscsi_tcp: Fix shost can_queue initialization
        scsi: libiscsi: Add helper to calculate max SCSI cmds per session
        scsi: libiscsi: Fix iSCSI host workq destruction
        scsi: libiscsi: Fix iscsi_task use after free()
        scsi: libiscsi: Drop taskqueuelock
        scsi: libiscsi: Fix iscsi_prep_scsi_cmd_pdu() error handling
        ...
      0b311e34
    • L
      Merge tag 'xfs-5.12-merge-6' of git://git.kernel.org/pub/scm/fs/xfs/xfs-linux · 03dc748b
      Linus Torvalds 提交于
      Pull more xfs updates from Darrick Wong:
       "The most notable fix here prevents premature reuse of freed metadata
        blocks, and adding the ability to detect accidental nested
        transactions, which are not allowed here.
      
         - Restore a disused sysctl control knob that was inadvertently
           dropped during the merge window to avoid fstests regressions.
      
         - Don't speculatively release freed blocks from the busy list until
           we're actually allocating them, which fixes a rare log recovery
           regression.
      
         - Don't nest transactions when scanning for free space.
      
         - Add an idiot^Wmaintainer light to detect nested transactions. ;)"
      
      * tag 'xfs-5.12-merge-6' of git://git.kernel.org/pub/scm/fs/xfs/xfs-linux:
        xfs: use current->journal_info for detecting transaction recursion
        xfs: don't nest transactions when scanning for eofblocks
        xfs: don't reuse busy extents on extent trim
        xfs: restore speculative_cow_prealloc_lifetime sysctl
      03dc748b
    • L
      Merge tag 'block-5.12-2021-02-27' of git://git.kernel.dk/linux-block · 3ab6608e
      Linus Torvalds 提交于
      Pull more block updates from Jens Axboe:
       "A few stragglers (and one due to me missing it originally), and fixes
        for changes in this merge window mostly. In particular:
      
         - blktrace cleanups (Chaitanya, Greg)
      
         - Kill dead blk_pm_* functions (Bart)
      
         - Fixes for the bio alloc changes (Christoph)
      
         - Fix for the partition changes (Christoph, Ming)
      
         - Fix for turning off iopoll with polled IO inflight (Jeffle)
      
         - nbd disconnect fix (Josef)
      
         - loop fsync error fix (Mauricio)
      
         - kyber update depth fix (Yang)
      
         - max_sectors alignment fix (Mikulas)
      
         - Add bio_max_segs helper (Matthew)"
      
      * tag 'block-5.12-2021-02-27' of git://git.kernel.dk/linux-block: (21 commits)
        block: Add bio_max_segs
        blktrace: fix documentation for blk_fill_rw()
        block: memory allocations in bounce_clone_bio must not fail
        block: remove the gfp_mask argument to bounce_clone_bio
        block: fix bounce_clone_bio for passthrough bios
        block-crypto-fallback: use a bio_set for splitting bios
        block: fix logging on capacity change
        blk-settings: align max_sectors on "logical_block_size" boundary
        block: reopen the device in blkdev_reread_part
        block: don't skip empty device in in disk_uevent
        blktrace: remove debugfs file dentries from struct blk_trace
        nbd: handle device refs for DESTROY_ON_DISCONNECT properly
        kyber: introduce kyber_depth_updated()
        loop: fix I/O error on fsync() in detached loop devices
        block: fix potential IO hang when turning off io_poll
        block: get rid of the trace rq insert wrapper
        blktrace: fix blk_rq_merge documentation
        blktrace: fix blk_rq_issue documentation
        blktrace: add blk_fill_rwbs documentation comment
        block: remove superfluous param in blk_fill_rwbs()
        ...
      3ab6608e
  4. 28 2月, 2021 7 次提交
    • M
      kbuild: Fix <linux/version.h> for empty SUBLEVEL or PATCHLEVEL again · 207da4c8
      Masahiro Yamada 提交于
      Commit 78d3bb44 ("kbuild: Fix <linux/version.h> for empty SUBLEVEL
      or PATCHLEVEL") fixed the build error for empty SUBLEVEL or PATCHLEVEL
      by prepending a zero.
      
      Commit 9b82f13e ("kbuild: clamp SUBLEVEL to 255") re-introduced
      this issue.
      
      This time, we cannot take the same approach because we have C code:
      
        #define LINUX_VERSION_PATCHLEVEL $(PATCHLEVEL)
        #define LINUX_VERSION_SUBLEVEL $(SUBLEVEL)
      
      Replace empty SUBLEVEL/PATCHLEVEL with a zero.
      
      Fixes: 9b82f13e ("kbuild: clamp SUBLEVEL to 255")
      Reported-by: NChristian Zigotzky <chzigotzky@xenosoft.de>
      Signed-off-by: NMasahiro Yamada <masahiroy@kernel.org>
      Reviewed-and-tested-by: NSasha Levin <sashal@kernel.org>
      207da4c8
    • M
      kbuild: make -s option take precedence over V=1 · 22149454
      Masahiro Yamada 提交于
      'make -s' should be really silent. However, 'make -s V=1' prints noisy
      log messages from some shell scripts.
      
      Of course, such a combination is odd, but the build system needs to do
      the right thing even if a user gives strange input.
      
      If -s is given, KBUILD_VERBOSE should be forced to 0.
      Signed-off-by: NMasahiro Yamada <masahiroy@kernel.org>
      22149454
    • M
      ia64: remove redundant READELF from arch/ia64/Makefile · ad7953e7
      Masahiro Yamada 提交于
      READELF is defined by the top Makefile.
      Signed-off-by: NMasahiro Yamada <masahiroy@kernel.org>
      ad7953e7
    • M
      kbuild: do not include include/config/auto.conf from adjust_autoksyms.sh · 12e9dea6
      Masahiro Yamada 提交于
      Commit cd195bc4 ("kbuild: split adjust_autoksyms.sh in two parts")
      split out the code that needs include/config/auto.conf.
      
      This script no longer needs to include include/config/auto.conf.
      
      Fixes: cd195bc4 ("kbuild: split adjust_autoksyms.sh in two parts")
      Signed-off-by: NMasahiro Yamada <masahiroy@kernel.org>
      12e9dea6
    • M
      kbuild: fix UNUSED_KSYMS_WHITELIST for Clang LTO · a6aaeb84
      Masahiro Yamada 提交于
      Commit fbe078d3 ("kbuild: lto: add a default list of used symbols")
      does not work as expected if the .config file has already specified
      CONFIG_UNUSED_KSYMS_WHITELIST="my/own/white/list" before enabling
      CONFIG_LTO_CLANG.
      
      So, the user-supplied whitelist and LTO-specific white list must be
      independent of each other.
      
      I refactored the shell script so CONFIG_MODVERSIONS and CONFIG_CLANG_LTO
      handle whitelists in the same way.
      
      Fixes: fbe078d3 ("kbuild: lto: add a default list of used symbols")
      Signed-off-by: NMasahiro Yamada <masahiroy@kernel.org>
      Tested-by: NSedat Dilek <sedat.dilek@gmail.com>
      a6aaeb84
    • L
      Merge tag 'io_uring-worker.v3-2021-02-25' of git://git.kernel.dk/linux-block · 5695e516
      Linus Torvalds 提交于
      Pull io_uring thread rewrite from Jens Axboe:
       "This converts the io-wq workers to be forked off the tasks in question
        instead of being kernel threads that assume various bits of the
        original task identity.
      
        This kills > 400 lines of code from io_uring/io-wq, and it's the worst
        part of the code. We've had several bugs in this area, and the worry
        is always that we could be missing some pieces for file types doing
        unusual things (recent /dev/tty example comes to mind, userfaultfd
        reads installing file descriptors is another fun one... - both of
        which need special handling, and I bet it's not the last weird oddity
        we'll find).
      
        With these identical workers, we can have full confidence that we're
        never missing anything. That, in itself, is a huge win. Outside of
        that, it's also more efficient since we're not wasting space and code
        on tracking state, or switching between different states.
      
        I'm sure we're going to find little things to patch up after this
        series, but testing has been pretty thorough, from the usual
        regression suite to production. Any issue that may crop up should be
        manageable.
      
        There's also a nice series of further reductions we can do on top of
        this, but I wanted to get the meat of it out sooner rather than later.
        The general worry here isn't that it's fundamentally broken. Most of
        the little issues we've found over the last week have been related to
        just changes in how thread startup/exit is done, since that's the main
        difference between using kthreads and these kinds of threads. In fact,
        if all goes according to plan, I want to get this into the 5.10 and
        5.11 stable branches as well.
      
        That said, the changes outside of io_uring/io-wq are:
      
         - arch setup, simple one-liner to each arch copy_thread()
           implementation.
      
         - Removal of net and proc restrictions for io_uring, they are no
           longer needed or useful"
      
      * tag 'io_uring-worker.v3-2021-02-25' of git://git.kernel.dk/linux-block: (30 commits)
        io-wq: remove now unused IO_WQ_BIT_ERROR
        io_uring: fix SQPOLL thread handling over exec
        io-wq: improve manager/worker handling over exec
        io_uring: ensure SQPOLL startup is triggered before error shutdown
        io-wq: make buffered file write hashed work map per-ctx
        io-wq: fix race around io_worker grabbing
        io-wq: fix races around manager/worker creation and task exit
        io_uring: ensure io-wq context is always destroyed for tasks
        arch: ensure parisc/powerpc handle PF_IO_WORKER in copy_thread()
        io_uring: cleanup ->user usage
        io-wq: remove nr_process accounting
        io_uring: flag new native workers with IORING_FEAT_NATIVE_WORKERS
        net: remove cmsg restriction from io_uring based send/recvmsg calls
        Revert "proc: don't allow async path resolution of /proc/self components"
        Revert "proc: don't allow async path resolution of /proc/thread-self components"
        io_uring: move SQPOLL thread io-wq forked worker
        io-wq: make io_wq_fork_thread() available to other users
        io-wq: only remove worker from free_list, if it was there
        io_uring: remove io_identity
        io_uring: remove any grabbing of context
        ...
      5695e516
    • L
      Merge branch 'work.misc' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs · 5ceabb60
      Linus Torvalds 提交于
      Pull misc vfs updates from Al Viro:
       "Assorted stuff pile - no common topic here"
      
      * 'work.misc' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs:
        whack-a-mole: don't open-code iminor/imajor
        9p: fix misuse of sscanf() in v9fs_stat2inode()
        audit_alloc_mark(): don't open-code ERR_CAST()
        fs/inode.c: make inode_init_always() initialize i_ino to 0
        vfs: don't unnecessarily clone write access for writable fds
      5ceabb60
  5. 27 2月, 2021 12 次提交