Merge tag 'for_v6.6-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs
authorLinus Torvalds <torvalds@linux-foundation.org>
Wed, 30 Aug 2023 19:10:50 +0000 (12:10 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 30 Aug 2023 19:10:50 +0000 (12:10 -0700)
Pull ext2, quota, and udf updates from Jan Kara:

 - fixes for possible use-after-free issues with quota when racing with
   chown

 - fixes for ext2 crashing when xattr allocation races with another
   block allocation to the same file from page writeback code

 - fix for block number overflow in ext2

 - marking of reiserfs as obsolete in MAINTAINERS

 - assorted minor cleanups

* tag 'for_v6.6-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs:
  ext2: Fix kernel-doc warnings
  ext2: improve consistency of ext2_fsblk_t datatype usage
  ext2: dump current reservation window info
  ext2: fix race between setxattr and write back
  ext2: introduce new flags argument for ext2_new_blocks()
  ext2: remove ext2_new_block()
  ext2: fix datatype of block number in ext2_xattr_set2()
  udf: Drop pointless aops assignment
  quota: use lockdep_assert_held_write in dquot_load_quota_sb
  MAINTAINERS: change reiserfs status to obsolete
  udf: Fix -Wstringop-overflow warnings
  quota: simplify drop_dquot_ref()
  quota: fix dqput() to follow the guarantees dquot_srcu should provide
  quota: add new helper dquot_active()
  quota: rename dquot_active() to inode_quota_active()
  quota: factor out dquot_write_dquot()
  ext2: remove redundant assignment to variable desc and variable best_desc

1  2 
MAINTAINERS
fs/ext2/balloc.c
fs/ext2/ialloc.c
fs/ext2/inode.c
fs/ext2/xattr.c
fs/quota/dquot.c
fs/udf/inode.c

diff --combined MAINTAINERS
@@@ -1,5 -1,81 +1,5 @@@
 -List of maintainers and how to submit kernel changes
 -====================================================
 -
 -Please try to follow the guidelines below.  This will make things
 -easier on the maintainers.  Not all of these guidelines matter for every
 -trivial patch so apply some common sense.
 -
 -Tips for patch submitters
 --------------------------
 -
 -1.    Always *test* your changes, however small, on at least 4 or
 -      5 people, preferably many more.
 -
 -2.    Try to release a few ALPHA test versions to the net. Announce
 -      them onto the kernel channel and await results. This is especially
 -      important for device drivers, because often that's the only way
 -      you will find things like the fact version 3 firmware needs
 -      a magic fix you didn't know about, or some clown changed the
 -      chips on a board and not its name.  (Don't laugh!  Look at the
 -      SMC etherpower for that.)
 -
 -3.    Make sure your changes compile correctly in multiple
 -      configurations. In particular check that changes work both as a
 -      module and built into the kernel.
 -
 -4.    When you are happy with a change make it generally available for
 -      testing and await feedback.
 -
 -5.    Make a patch available to the relevant maintainer in the list. Use
 -      ``diff -u`` to make the patch easy to merge. Be prepared to get your
 -      changes sent back with seemingly silly requests about formatting
 -      and variable names.  These aren't as silly as they seem. One
 -      job the maintainers (and especially Linus) do is to keep things
 -      looking the same. Sometimes this means that the clever hack in
 -      your driver to get around a problem actually needs to become a
 -      generalized kernel feature ready for next time.
 -
 -      PLEASE check your patch with the automated style checker
 -      (scripts/checkpatch.pl) to catch trivial style violations.
 -      See Documentation/process/coding-style.rst for guidance here.
 -
 -      PLEASE CC: the maintainers and mailing lists that are generated
 -      by ``scripts/get_maintainer.pl.`` The results returned by the
 -      script will be best if you have git installed and are making
 -      your changes in a branch derived from Linus' latest git tree.
 -      See Documentation/process/submitting-patches.rst for details.
 -
 -      PLEASE try to include any credit lines you want added with the
 -      patch. It avoids people being missed off by mistake and makes
 -      it easier to know who wants adding and who doesn't.
 -
 -      PLEASE document known bugs. If it doesn't work for everything
 -      or does something very odd once a month document it.
 -
 -      PLEASE remember that submissions must be made under the terms
 -      of the Linux Foundation certificate of contribution and should
 -      include a Signed-off-by: line.  The current version of this
 -      "Developer's Certificate of Origin" (DCO) is listed in the file
 -      Documentation/process/submitting-patches.rst.
 -
 -6.    Make sure you have the right to send any changes you make. If you
 -      do changes at work you may find your employer owns the patch
 -      not you.
 -
 -7.    When sending security related changes or reports to a maintainer
 -      please Cc: security@kernel.org, especially if the maintainer
 -      does not respond. Please keep in mind that the security team is
 -      a small set of people who can be efficient only when working on
 -      verified bugs. Please only Cc: this list when you have identified
 -      that the bug would present a short-term risk to other users if it
 -      were publicly disclosed. For example, reports of address leaks do
 -      not represent an immediate threat and are better handled publicly,
 -      and ideally, should come with a patch proposal. Please do not send
 -      automated reports to this list either. Such bugs will be handled
 -      better and faster in the usual public places. See
 -      Documentation/process/security-bugs.rst for details.
 -
 -8.    Happy hacking.
 +List of maintainers
 +===================
  
  Descriptions of section entries and preferred order
  ---------------------------------------------------
@@@ -915,18 -991,6 +915,18 @@@ S:       Supporte
  F:    drivers/crypto/ccp/sev*
  F:    include/uapi/linux/psp-sev.h
  
 +AMD CRYPTOGRAPHIC COPROCESSOR (CCP) DRIVER - DBC SUPPORT
 +M:    Mario Limonciello <mario.limonciello@amd.com>
 +L:    linux-crypto@vger.kernel.org
 +S:    Supported
 +F:    drivers/crypto/ccp/dbc.c
 +F:    drivers/crypto/ccp/dbc.h
 +F:    drivers/crypto/ccp/platform-access.c
 +F:    drivers/crypto/ccp/platform-access.h
 +F:    include/uapi/linux/psp-dbc.h
 +F:    tools/crypto/ccp/*.c
 +F:    tools/crypto/ccp/*.py
 +
  AMD DISPLAY CORE
  M:    Harry Wentland <harry.wentland@amd.com>
  M:    Leo Li <sunpeng.li@amd.com>
@@@ -1877,11 -1941,9 +1877,11 @@@ M:    Martin Povišer <povik+lin@cutebit.o
  L:    asahi@lists.linux.dev
  L:    alsa-devel@alsa-project.org (moderated for non-subscribers)
  S:    Maintained
 +F:    Documentation/devicetree/bindings/sound/adi,ssm3515.yaml
  F:    Documentation/devicetree/bindings/sound/apple,*
  F:    sound/soc/apple/*
  F:    sound/soc/codecs/cs42l83-i2c.c
 +F:    sound/soc/codecs/ssm3515.c
  
  ARM/APPLE MACHINE SUPPORT
  M:    Hector Martin <marcan@marcan.st>
@@@ -2041,7 -2103,6 +2041,7 @@@ N:      digicolo
  ARM/CORESIGHT FRAMEWORK AND DRIVERS
  M:    Suzuki K Poulose <suzuki.poulose@arm.com>
  R:    Mike Leach <mike.leach@linaro.org>
 +R:    James Clark <james.clark@arm.com>
  R:    Leo Yan <leo.yan@linaro.org>
  L:    coresight@lists.linaro.org (moderated for non-subscribers)
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
@@@ -2348,19 -2409,10 +2348,19 @@@ S:   Maintaine
  F:    Documentation/devicetree/bindings/phy/mediatek,*
  F:    drivers/phy/mediatek/
  
 +ARM/MICROCHIP (ARM64) SoC support
 +M:    Conor Dooley <conor@kernel.org>
 +M:    Nicolas Ferre <nicolas.ferre@microchip.com>
 +M:    Claudiu Beznea <claudiu.beznea@tuxon.dev>
 +L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 +S:    Supported
 +T:    git https://git.kernel.org/pub/scm/linux/kernel/git/at91/linux.git
 +F:    arch/arm64/boot/dts/microchip/
 +
  ARM/Microchip (AT91) SoC support
  M:    Nicolas Ferre <nicolas.ferre@microchip.com>
  M:    Alexandre Belloni <alexandre.belloni@bootlin.com>
 -M:    Claudiu Beznea <claudiu.beznea@microchip.com>
 +M:    Claudiu Beznea <claudiu.beznea@tuxon.dev>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Supported
  W:    http://www.linux4sam.org
@@@ -2377,6 -2429,15 +2377,6 @@@ X:     drivers/net/wireless/atmel
  N:    at91
  N:    atmel
  
 -ARM/MICROCHIP (ARM64) SoC support
 -M:    Conor Dooley <conor@kernel.org>
 -M:    Nicolas Ferre <nicolas.ferre@microchip.com>
 -M:    Claudiu Beznea <claudiu.beznea@microchip.com>
 -L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 -S:    Supported
 -T:    git https://git.kernel.org/pub/scm/linux/kernel/git/at91/linux.git
 -F:    arch/arm64/boot/dts/microchip/
 -
  ARM/Microchip Sparx5 SoC support
  M:    Lars Povlsen <lars.povlsen@microchip.com>
  M:    Steen Hegelund <Steen.Hegelund@microchip.com>
@@@ -2784,8 -2845,8 +2784,8 @@@ S:      Maintaine
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/atorgue/stm32.git stm32-next
  F:    arch/arm/boot/dts/st/stm32*
  F:    arch/arm/mach-stm32/
 -F:    drivers/clocksource/armv7m_systick.c
  F:    arch/arm64/boot/dts/st/
 +F:    drivers/clocksource/armv7m_systick.c
  N:    stm32
  N:    stm
  
@@@ -3262,7 -3323,7 +3262,7 @@@ F:      include/uapi/linux/atm
  
  ATMEL MACB ETHERNET DRIVER
  M:    Nicolas Ferre <nicolas.ferre@microchip.com>
 -M:    Claudiu Beznea <claudiu.beznea@microchip.com>
 +M:    Claudiu Beznea <claudiu.beznea@tuxon.dev>
  S:    Supported
  F:    drivers/net/ethernet/cadence/
  
@@@ -3274,8 -3335,9 +3274,8 @@@ F:      Documentation/devicetree/bindings/in
  F:    drivers/input/touchscreen/atmel_mxt_ts.c
  
  ATMEL WIRELESS DRIVER
 -M:    Simon Kelley <simon@thekelleys.org.uk>
  L:    linux-wireless@vger.kernel.org
 -S:    Maintained
 +S:    Orphan
  W:    http://www.thekelleys.org.uk/atmel
  W:    http://atmelwlandriver.sourceforge.net/
  F:    drivers/net/wireless/atmel/atmel*
@@@ -3322,16 -3384,6 +3322,16 @@@ F:    include/uapi/linux/audit.
  F:    kernel/audit*
  F:    lib/*audit.c
  
 +AUXILIARY BUS DRIVER
 +M:    Greg Kroah-Hartman <gregkh@linuxfoundation.org>
 +R:    Dave Ertman <david.m.ertman@intel.com>
 +R:    Ira Weiny <ira.weiny@intel.com>
 +S:    Supported
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core.git
 +F:    Documentation/driver-api/auxiliary_bus.rst
 +F:    drivers/base/auxiliary.c
 +F:    include/linux/auxiliary_bus.h
 +
  AUXILIARY DISPLAY DRIVERS
  M:    Miguel Ojeda <ojeda@kernel.org>
  S:    Maintained
@@@ -3405,7 -3457,7 +3405,7 @@@ F:      drivers/media/radio/radio-aztech
  B43 WIRELESS DRIVER
  L:    linux-wireless@vger.kernel.org
  L:    b43-dev@lists.infradead.org
 -S:    Odd Fixes
 +S:    Orphan
  W:    https://wireless.wiki.kernel.org/en/users/Drivers/b43
  F:    drivers/net/wireless/broadcom/b43/
  
@@@ -3512,24 -3564,18 +3512,24 @@@ M:   Yury Norov <yury.norov@gmail.com
  R:    Andy Shevchenko <andriy.shevchenko@linux.intel.com>
  R:    Rasmus Villemoes <linux@rasmusvillemoes.dk>
  S:    Maintained
 +F:    include/linux/bitfield.h
  F:    include/linux/bitmap.h
 +F:    include/linux/bits.h
  F:    include/linux/cpumask.h
  F:    include/linux/find.h
  F:    include/linux/nodemask.h
 +F:    include/vdso/bits.h
  F:    lib/bitmap.c
  F:    lib/cpumask.c
  F:    lib/cpumask_kunit.c
  F:    lib/find_bit.c
  F:    lib/find_bit_benchmark.c
  F:    lib/test_bitmap.c
 +F:    tools/include/linux/bitfield.h
  F:    tools/include/linux/bitmap.h
 +F:    tools/include/linux/bits.h
  F:    tools/include/linux/find.h
 +F:    tools/include/vdso/bits.h
  F:    tools/lib/bitmap.c
  F:    tools/lib/find_bit.c
  
@@@ -3697,7 -3743,6 +3697,7 @@@ F:      include/linux/filter.
  F:    include/linux/tnum.h
  F:    kernel/bpf/core.c
  F:    kernel/bpf/dispatcher.c
 +F:    kernel/bpf/mprog.c
  F:    kernel/bpf/syscall.c
  F:    kernel/bpf/tnum.c
  F:    kernel/bpf/trampoline.c
@@@ -3708,7 -3753,7 +3708,7 @@@ R:      David Vernet <void@manifault.com
  L:    bpf@vger.kernel.org
  L:    bpf@ietf.org
  S:    Maintained
 -F:    Documentation/bpf/instruction-set.rst
 +F:    Documentation/bpf/standardization/
  
  BPF [GENERAL] (Safe Dynamic Programs and Tools)
  M:    Alexei Starovoitov <ast@kernel.org>
@@@ -3716,7 -3761,7 +3716,7 @@@ M:      Daniel Borkmann <daniel@iogearbox.ne
  M:    Andrii Nakryiko <andrii@kernel.org>
  R:    Martin KaFai Lau <martin.lau@linux.dev>
  R:    Song Liu <song@kernel.org>
 -R:    Yonghong Song <yhs@fb.com>
 +R:    Yonghong Song <yonghong.song@linux.dev>
  R:    John Fastabend <john.fastabend@gmail.com>
  R:    KP Singh <kpsingh@kernel.org>
  R:    Stanislav Fomichev <sdf@google.com>
@@@ -3755,7 -3800,7 +3755,7 @@@ F:      tools/lib/bpf
  F:    tools/testing/selftests/bpf/
  
  BPF [ITERATOR]
 -M:    Yonghong Song <yhs@fb.com>
 +M:    Yonghong Song <yonghong.song@linux.dev>
  L:    bpf@vger.kernel.org
  S:    Maintained
  F:    kernel/bpf/*iter.c
@@@ -3791,15 -3836,13 +3791,15 @@@ L:   netdev@vger.kernel.or
  S:    Maintained
  F:    kernel/bpf/bpf_struct*
  
 -BPF [NETWORKING] (tc BPF, sock_addr)
 +BPF [NETWORKING] (tcx & tc BPF, sock_addr)
  M:    Martin KaFai Lau <martin.lau@linux.dev>
  M:    Daniel Borkmann <daniel@iogearbox.net>
  R:    John Fastabend <john.fastabend@gmail.com>
  L:    bpf@vger.kernel.org
  L:    netdev@vger.kernel.org
  S:    Maintained
 +F:    include/net/tcx.h
 +F:    kernel/bpf/tcx.c
  F:    net/core/filter.c
  F:    net/sched/act_bpf.c
  F:    net/sched/cls_bpf.c
@@@ -3851,15 -3894,6 +3851,15 @@@ S:    Maintaine
  F:    kernel/bpf/stackmap.c
  F:    kernel/trace/bpf_trace.c
  
 +BROADCOM ASP 2.0 ETHERNET DRIVER
 +M:    Justin Chen <justin.chen@broadcom.com>
 +M:    Florian Fainelli <florian.fainelli@broadcom.com>
 +L:    bcm-kernel-feedback-list@broadcom.com
 +L:    netdev@vger.kernel.org
 +S:    Supported
 +F:    Documentation/devicetree/bindings/net/brcm,asp-v2.0.yaml
 +F:    drivers/net/ethernet/broadcom/asp2/
 +
  BROADCOM B44 10/100 ETHERNET DRIVER
  M:    Michael Chan <michael.chan@broadcom.com>
  L:    netdev@vger.kernel.org
@@@ -4146,13 -4180,6 +4146,13 @@@ F:    Documentation/devicetree/bindings/sp
  F:    drivers/spi/spi-bcm63xx-hsspi.c
  F:    drivers/spi/spi-bcmbca-hsspi.c
  
 +BROADCOM BCM6348/BCM6358 SPI controller DRIVER
 +M:    Jonas Gorski <jonas.gorski@gmail.com>
 +L:    linux-spi@vger.kernel.org
 +S:    Odd Fixes
 +F:    Documentation/devicetree/bindings/spi/brcm,bcm63xx-spi.yaml
 +F:    drivers/spi/spi-bcm63xx.c
 +
  BROADCOM ETHERNET PHY DRIVERS
  M:    Florian Fainelli <florian.fainelli@broadcom.com>
  R:    Broadcom internal kernel review list <bcm-kernel-feedback-list@broadcom.com>
@@@ -4219,7 -4246,7 +4219,7 @@@ BROADCOM KONA GPIO DRIVE
  M:    Ray Jui <rjui@broadcom.com>
  R:    Broadcom internal kernel review list <bcm-kernel-feedback-list@broadcom.com>
  S:    Supported
 -F:    Documentation/devicetree/bindings/gpio/brcm,kona-gpio.txt
 +F:    Documentation/devicetree/bindings/gpio/brcm,kona-gpio.yaml
  F:    drivers/gpio/gpio-bcm-kona.c
  
  BROADCOM MPI3 STORAGE CONTROLLER DRIVER
@@@ -4486,6 -4513,7 +4486,6 @@@ CADENCE USB3 DRD IP DRIVE
  M:    Peter Chen <peter.chen@kernel.org>
  M:    Pawel Laszczak <pawell@cadence.com>
  R:    Roger Quadros <rogerq@kernel.org>
 -R:    Aswath Govindraju <a-govindraju@ti.com>
  L:    linux-usb@vger.kernel.org
  S:    Maintained
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/peter.chen/usb.git
@@@ -4493,12 -4521,6 +4493,12 @@@ F:    Documentation/devicetree/bindings/us
  F:    drivers/usb/cdns3/
  X:    drivers/usb/cdns3/cdnsp*
  
 +CADENCE USBHS DRIVER
 +M:    Pawel Laszczak <pawell@cadence.com>
 +L:    linux-usb@vger.kernel.org
 +S:    Maintained
 +F:    drivers/usb/gadget/udc/cdns2
 +
  CADENCE USBSSP DRD IP DRIVER
  M:    Pawel Laszczak <pawell@cadence.com>
  L:    linux-usb@vger.kernel.org
@@@ -4843,7 -4865,6 +4843,7 @@@ F:      drivers/input/touchscreen/chipone_ic
  
  CHROME HARDWARE PLATFORM SUPPORT
  M:    Benson Leung <bleung@chromium.org>
 +M:    Tzung-Bi Shih <tzungbi@kernel.org>
  L:    chrome-platform@lists.linux.dev
  S:    Maintained
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/chrome-platform/linux.git
@@@ -4911,11 -4932,7 +4911,11 @@@ L:    alsa-devel@alsa-project.org (moderat
  L:    patches@opensource.cirrus.com
  S:    Maintained
  F:    Documentation/devicetree/bindings/sound/cirrus,cs*
 +F:    drivers/mfd/cs42l43*
 +F:    drivers/pinctrl/cirrus/pinctrl-cs42l43*
 +F:    drivers/spi/spi-cs42l43*
  F:    include/dt-bindings/sound/cs*
 +F:    include/linux/mfd/cs42l43*
  F:    include/sound/cs*
  F:    sound/pci/hda/cs*
  F:    sound/pci/hda/hda_cs_dsp_ctl.*
@@@ -5176,12 -5193,10 +5176,12 @@@ S:   Maintaine
  F:    include/linux/compiler_attributes.h
  
  COMPUTE EXPRESS LINK (CXL)
 +M:    Davidlohr Bueso <dave@stgolabs.net>
 +M:    Jonathan Cameron <jonathan.cameron@huawei.com>
 +M:    Dave Jiang <dave.jiang@intel.com>
  M:    Alison Schofield <alison.schofield@intel.com>
  M:    Vishal Verma <vishal.l.verma@intel.com>
  M:    Ira Weiny <ira.weiny@intel.com>
 -M:    Ben Widawsky <bwidawsk@kernel.org>
  M:    Dan Williams <dan.j.williams@intel.com>
  L:    linux-cxl@vger.kernel.org
  S:    Maintained
@@@ -5351,11 -5366,11 +5351,11 @@@ M:   Peter Zijlstra <peterz@infradead.org
  L:    linux-kernel@vger.kernel.org
  S:    Maintained
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git smp/core
 -F:    kernel/cpu.c
 -F:    kernel/smpboot.*
  F:    include/linux/cpu.h
  F:    include/linux/cpuhotplug.h
  F:    include/linux/smpboot.h
 +F:    kernel/cpu.c
 +F:    kernel/smpboot.*
  
  CPU IDLE TIME MANAGEMENT FRAMEWORK
  M:    "Rafael J. Wysocki" <rafael@kernel.org>
@@@ -5490,7 -5505,8 +5490,7 @@@ F:      Documentation/devicetree/bindings/ne
  F:    drivers/net/can/ctucanfd/
  
  CW1200 WLAN driver
 -M:    Solomon Peachy <pizza@shaftnet.org>
 -S:    Maintained
 +S:    Orphan
  F:    drivers/net/wireless/st/cw1200/
  
  CX18 VIDEO4LINUX DRIVER
@@@ -5742,8 -5758,8 +5742,8 @@@ M:      Thomas Gleixner <tglx@linutronix.de
  L:    linux-kernel@vger.kernel.org
  S:    Maintained
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git core/debugobjects
 -F:    lib/debugobjects.c
  F:    include/linux/debugobjects.h
 +F:    lib/debugobjects.c
  
  DECSTATION PLATFORM SUPPORT
  M:    "Maciej W. Rozycki" <macro@orcam.me.uk>
@@@ -5899,9 -5915,7 +5899,9 @@@ S:      Orpha
  F:    drivers/mtd/nand/raw/denali*
  
  DESIGNWARE EDMA CORE IP DRIVER
 -M:    Gustavo Pimentel <gustavo.pimentel@synopsys.com>
 +M:    Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
 +R:    Gustavo Pimentel <gustavo.pimentel@synopsys.com>
 +R:    Serge Semin <fancer.lancer@gmail.com>
  L:    dmaengine@vger.kernel.org
  S:    Maintained
  F:    drivers/dma/dw-edma/
@@@ -6038,7 -6052,7 +6038,7 @@@ F:      Documentation/devicetree/bindings/mf
  F:    Documentation/devicetree/bindings/mfd/dlg,da90*.yaml
  F:    Documentation/devicetree/bindings/regulator/da92*.txt
  F:    Documentation/devicetree/bindings/regulator/dlg,da9*.yaml
 -F:    Documentation/devicetree/bindings/regulator/slg51000.txt
 +F:    Documentation/devicetree/bindings/regulator/dlg,slg51000.yaml
  F:    Documentation/devicetree/bindings/sound/da[79]*.txt
  F:    Documentation/devicetree/bindings/thermal/da90??-thermal.txt
  F:    Documentation/devicetree/bindings/watchdog/da90??-wdt.txt
@@@ -6241,9 -6255,9 +6241,9 @@@ X:      Documentation/userspace-api/media
  
  DOCUMENTATION PROCESS
  M:    Jonathan Corbet <corbet@lwn.net>
 +L:    workflows@vger.kernel.org
  S:    Maintained
  F:    Documentation/process/
 -L:    workflows@vger.kernel.org
  
  DOCUMENTATION REPORTING ISSUES
  M:    Thorsten Leemhuis <linux@leemhuis.info>
@@@ -7622,13 -7636,6 +7622,13 @@@ L:    linux-mmc@vger.kernel.or
  S:    Supported
  F:    drivers/mmc/host/cqhci*
  
 +EMS CPC-PCI CAN DRIVER
 +M:    Gerhard Uttenthaler <uttenthaler@ems-wuensche.com>
 +M:    support@ems-wuensche.com
 +L:    linux-can@vger.kernel.org
 +S:    Maintained
 +F:    drivers/net/can/sja1000/ems_pci.c
 +
  EMULEX 10Gbps iSCSI - OneConnect DRIVER
  M:    Ketan Mukadam <ketan.mukadam@broadcom.com>
  L:    linux-scsi@vger.kernel.org
@@@ -7768,7 -7775,6 +7768,7 @@@ F:      include/linux/mii.
  F:    include/linux/of_net.h
  F:    include/linux/phy.h
  F:    include/linux/phy_fixed.h
 +F:    include/linux/phylib_stubs.h
  F:    include/linux/platform_data/mdio-bcm-unimac.h
  F:    include/linux/platform_data/mdio-gpio.h
  F:    include/trace/events/mdio.h
@@@ -8388,6 -8394,7 +8388,6 @@@ L:      linuxppc-dev@lists.ozlabs.or
  L:    netdev@vger.kernel.org
  S:    Maintained
  F:    drivers/net/ethernet/freescale/fs_enet/
 -F:    include/linux/fs_enet_pd.h
  
  FREESCALE SOC SOUND DRIVERS
  M:    Shengjiu Wang <shengjiu.wang@gmail.com>
@@@ -8438,6 -8445,13 +8438,6 @@@ F:     Documentation/power/freezing-of-task
  F:    include/linux/freezer.h
  F:    kernel/freezer.c
  
 -FRONTSWAP API
 -M:    Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
 -L:    linux-kernel@vger.kernel.org
 -S:    Maintained
 -F:    include/linux/frontswap.h
 -F:    mm/frontswap.c
 -
  FS-CACHE: LOCAL CACHING FOR NETWORK FILESYSTEMS
  M:    David Howells <dhowells@redhat.com>
  L:    linux-cachefs@redhat.com (moderated for non-subscribers)
@@@ -8709,11 -8723,8 +8709,11 @@@ S:    Maintaine
  F:    drivers/input/touchscreen/resistive-adc-touch.c
  
  GENERIC STRING LIBRARY
 +M:    Kees Cook <keescook@chromium.org>
  R:    Andy Shevchenko <andy@kernel.org>
 -S:    Maintained
 +L:    linux-hardening@vger.kernel.org
 +S:    Supported
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/kees/linux.git for-next/hardening
  F:    include/linux/string.h
  F:    include/linux/string_choices.h
  F:    include/linux/string_helpers.h
@@@ -8798,15 -8809,6 +8798,15 @@@ S:    Supporte
  F:    Documentation/networking/device_drivers/ethernet/google/gve.rst
  F:    drivers/net/ethernet/google
  
 +GOOGLE FIRMWARE DRIVERS
 +M:    Tzung-Bi Shih <tzungbi@kernel.org>
 +R:    Brian Norris <briannorris@chromium.org>
 +R:    Julius Werner <jwerner@chromium.org>
 +L:    chrome-platform@lists.linux.dev
 +S:    Maintained
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/chrome-platform/linux.git
 +F:    drivers/firmware/google/
 +
  GPD POCKET FAN DRIVER
  M:    Hans de Goede <hdegoede@redhat.com>
  L:    platform-driver-x86@vger.kernel.org
@@@ -8850,7 -8852,6 +8850,7 @@@ R:      Michael Walle <michael@walle.cc
  S:    Maintained
  F:    drivers/gpio/gpio-regmap.c
  F:    include/linux/gpio/regmap.h
 +K:    (devm_)?gpio_regmap_(un)?register
  
  GPIO SUBSYSTEM
  M:    Linus Walleij <linus.walleij@linaro.org>
@@@ -9214,18 -9215,18 +9214,18 @@@ L:   linux-input@vger.kernel.or
  S:    Maintained
  F:    drivers/hid/hid-logitech-*
  
 -HID PHOENIX RC FLIGHT CONTROLLER
 -M:    Marcus Folkesson <marcus.folkesson@gmail.com>
 -L:    linux-input@vger.kernel.org
 -S:    Maintained
 -F:    drivers/hid/hid-pxrc.c
 -
  HID NVIDIA SHIELD DRIVER
  M:    Rahul Rameshbabu <rrameshbabu@nvidia.com>
  L:    linux-input@vger.kernel.org
  S:    Maintained
  F:    drivers/hid/hid-nvidia-shield.c
  
 +HID PHOENIX RC FLIGHT CONTROLLER
 +M:    Marcus Folkesson <marcus.folkesson@gmail.com>
 +L:    linux-input@vger.kernel.org
 +S:    Maintained
 +F:    drivers/hid/hid-pxrc.c
 +
  HID PLAYSTATION DRIVER
  M:    Roderick Colenbrander <roderick.colenbrander@sony.com>
  L:    linux-input@vger.kernel.org
@@@ -9344,7 -9345,7 +9344,7 @@@ F:      drivers/crypto/hisilicon/hpre/hpre_c
  F:    drivers/crypto/hisilicon/hpre/hpre_main.c
  
  HISILICON HNS3 PMU DRIVER
 -M:    Guangbin Huang <huangguangbin2@huawei.com>
 +M:    Jijie Shao <shaojijie@huawei.com>
  S:    Supported
  F:    Documentation/admin-guide/perf/hns3-pmu.rst
  F:    drivers/perf/hisilicon/hns3_pmu.c
@@@ -9382,7 -9383,7 +9382,7 @@@ F:      Documentation/devicetree/bindings/ne
  F:    drivers/net/ethernet/hisilicon/
  
  HISILICON PMU DRIVER
 -M:    Shaokun Zhang <zhangshaokun@hisilicon.com>
 +M:    Yicong Yang <yangyicong@hisilicon.com>
  M:    Jonathan Cameron <jonathan.cameron@huawei.com>
  S:    Supported
  W:    http://www.hisilicon.com
@@@ -9414,6 -9415,7 +9414,6 @@@ F:      drivers/crypto/hisilicon/sgl.
  F:    include/linux/hisi_acc_qm.h
  
  HISILICON ROCE DRIVER
 -M:    Haoyue Xu <xuhaoyue1@hisilicon.com>
  M:    Junxian Huang <huangjunxian6@hisilicon.com>
  L:    linux-rdma@vger.kernel.org
  S:    Maintained
@@@ -9488,13 -9490,6 +9488,13 @@@ F:    lib/test_hmm
  F:    mm/hmm*
  F:    tools/testing/selftests/mm/*hmm*
  
 +HONEYWELL MPRLS0025PA PRESSURE SENSOR SERIES IIO DRIVER
 +M:    Andreas Klinger <ak@it-klinger.de>
 +L:    linux-iio@vger.kernel.org
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/iio/pressure/honeywell,mprls0025pa.yaml
 +F:    drivers/iio/pressure/mprls0025pa.c
 +
  HOST AP DRIVER
  M:    Jouni Malinen <j@w1.fi>
  L:    linux-wireless@vger.kernel.org
@@@ -9533,12 -9528,6 +9533,12 @@@ S:    Maintaine
  W:    http://artax.karlin.mff.cuni.cz/~mikulas/vyplody/hpfs/index-e.cgi
  F:    fs/hpfs/
  
 +HS3001 Hardware Temperature and Humidity Sensor
 +M:    Andre Werner <andre.werner@systec-electronic.com>
 +L:    linux-hwmon@vger.kernel.org
 +S:    Maintained
 +F:    drivers/hwmon/hs3001.c
 +
  HSI SUBSYSTEM
  M:    Sebastian Reichel <sre@kernel.org>
  S:    Maintained
@@@ -9704,7 -9693,6 +9704,7 @@@ F:      tools/hv
  
  HYPERBUS SUPPORT
  M:    Vignesh Raghavendra <vigneshr@ti.com>
 +R:    Tudor Ambarus <tudor.ambarus@linaro.org>
  L:    linux-mtd@lists.infradead.org
  S:    Supported
  Q:    http://patchwork.ozlabs.org/project/linux-mtd/list/
@@@ -10346,13 -10334,6 +10346,13 @@@ L: linux-fbdev@vger.kernel.or
  S:    Maintained
  F:    drivers/video/fbdev/i810/
  
 +INTEL 8254 COUNTER DRIVER
 +M:    William Breathitt Gray <william.gray@linaro.org>
 +L:    linux-iio@vger.kernel.org
 +S:    Maintained
 +F:    drivers/counter/i8254.c
 +F:    include/linux/i8254.h
 +
  INTEL 8255 GPIO DRIVER
  M:    William Breathitt Gray <william.gray@linaro.org>
  L:    linux-gpio@vger.kernel.org
@@@ -10558,7 -10539,7 +10558,7 @@@ L:   linux-media@vger.kernel.or
  S:    Maintained
  F:    Documentation/admin-guide/media/ipu3.rst
  F:    Documentation/admin-guide/media/ipu3_rcb.svg
 -F:    Documentation/userspace-api/media/v4l/pixfmt-meta-intel-ipu3.rst
 +F:    Documentation/userspace-api/media/v4l/metafmt-intel-ipu3.rst
  F:    drivers/staging/media/ipu3/
  
  INTEL ISHTP ECLITE DRIVER
@@@ -10966,6 -10947,7 +10966,6 @@@ F:   include/linux/io_uring_types.
  F:    include/trace/events/io_uring.h
  F:    include/uapi/linux/io_uring.h
  F:    io_uring/
 -F:    tools/io_uring/
  
  IPMI SUBSYSTEM
  M:    Corey Minyard <minyard@acm.org>
@@@ -11427,8 -11409,6 +11427,8 @@@ T:   git git://git.kernel.org/pub/scm/lin
  F:    Documentation/dev-tools/kunit/
  F:    include/kunit/
  F:    lib/kunit/
 +F:    rust/kernel/kunit.rs
 +F:    scripts/rustdoc_test_*
  F:    tools/testing/kunit/
  
  KERNEL USERMODE HELPER
@@@ -11535,7 -11515,6 +11535,7 @@@ M:   Sean Christopherson <seanjc@google.c
  M:    Paolo Bonzini <pbonzini@redhat.com>
  L:    kvm@vger.kernel.org
  S:    Supported
 +P:    Documentation/process/maintainer-kvm-x86.rst
  T:    git git://git.kernel.org/pub/scm/virt/kvm/kvm.git
  F:    arch/x86/include/asm/kvm*
  F:    arch/x86/include/asm/svm.h
@@@ -12126,13 -12105,6 +12126,13 @@@ F: Documentation/litmus-tests
  F:    Documentation/memory-barriers.txt
  F:    tools/memory-model/
  
 +LINUX-NEXT TREE
 +M:    Stephen Rothwell <sfr@canb.auug.org.au>
 +L:    linux-next@vger.kernel.org
 +S:    Supported
 +B:    mailto:linux-next@vger.kernel.org and the appropriate development tree
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/
 +
  LIS3LV02D ACCELEROMETER DRIVER
  M:    Eric Piel <eric.piel@tremplin-utc.net>
  S:    Maintained
@@@ -12315,16 -12287,6 +12315,16 @@@ F: Documentation/devicetree/bindings/cl
  F:    drivers/clk/clk-loongson2.c
  F:    include/dt-bindings/clock/loongson,ls2k-clk.h
  
 +LOONGSON SPI DRIVER
 +M:    Yinbo Zhu <zhuyinbo@loongson.cn>
 +L:    linux-spi@vger.kernel.org
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/spi/loongson,ls2k-spi.yaml
 +F:    drivers/spi/spi-loongson-core.c
 +F:    drivers/spi/spi-loongson-pci.c
 +F:    drivers/spi/spi-loongson-plat.c
 +F:    drivers/spi/spi-loongson.h
 +
  LOONGSON-2 SOC SERIES GUTS DRIVER
  M:    Yinbo Zhu <zhuyinbo@loongson.cn>
  L:    loongarch@lists.linux.dev
@@@ -12535,7 -12497,6 +12535,7 @@@ F:   net/mctp
  
  MAPLE TREE
  M:    Liam R. Howlett <Liam.Howlett@oracle.com>
 +L:    maple-tree@lists.infradead.org
  L:    linux-mm@kvack.org
  S:    Supported
  F:    Documentation/core-api/maple_tree.rst
@@@ -12647,14 -12608,18 +12647,14 @@@ F:        Documentation/devicetree/bindings/ne
  F:    drivers/net/ethernet/marvell/mvpp2/
  
  MARVELL MWIFIEX WIRELESS DRIVER
 -M:    Amitkumar Karwar <amitkarwar@gmail.com>
 -M:    Ganapathi Bhat <ganapathi017@gmail.com>
 -M:    Sharvari Harisangam <sharvari.harisangam@nxp.com>
 -M:    Xinming Hu <huxinming820@gmail.com>
 +M:    Brian Norris <briannorris@chromium.org>
  L:    linux-wireless@vger.kernel.org
 -S:    Maintained
 +S:    Odd Fixes
  F:    drivers/net/wireless/marvell/mwifiex/
  
  MARVELL MWL8K WIRELESS DRIVER
 -M:    Lennert Buytenhek <buytenh@wantstofly.org>
  L:    linux-wireless@vger.kernel.org
 -S:    Odd Fixes
 +S:    Orphan
  F:    drivers/net/wireless/marvell/mwl8k.c
  
  MARVELL NAND CONTROLLER DRIVER
@@@ -13842,7 -13807,7 +13842,7 @@@ F:   Documentation/devicetree/bindings/se
  F:    drivers/spi/spi-at91-usart.c
  
  MICROCHIP AUDIO ASOC DRIVERS
 -M:    Claudiu Beznea <claudiu.beznea@microchip.com>
 +M:    Claudiu Beznea <claudiu.beznea@tuxon.dev>
  L:    alsa-devel@alsa-project.org (moderated for non-subscribers)
  S:    Supported
  F:    Documentation/devicetree/bindings/sound/atmel*
@@@ -13865,7 -13830,7 +13865,7 @@@ S:   Maintaine
  F:    drivers/crypto/atmel-ecc.*
  
  MICROCHIP EIC DRIVER
 -M:    Claudiu Beznea <claudiu.beznea@microchip.com>
 +M:    Claudiu Beznea <claudiu.beznea@tuxon.dev>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Supported
  F:    Documentation/devicetree/bindings/interrupt-controller/microchip,sama7g5-eic.yaml
@@@ -13938,7 -13903,7 +13938,7 @@@ F:   drivers/video/fbdev/atmel_lcdfb.
  F:    include/video/atmel_lcdc.h
  
  MICROCHIP MCP16502 PMIC DRIVER
 -M:    Claudiu Beznea <claudiu.beznea@microchip.com>
 +M:    Claudiu Beznea <claudiu.beznea@tuxon.dev>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Supported
  F:    Documentation/devicetree/bindings/regulator/mcp16502-regulator.txt
@@@ -13965,7 -13930,7 +13965,7 @@@ F:   Documentation/devicetree/bindings/mt
  F:    drivers/mtd/nand/raw/atmel/*
  
  MICROCHIP OTPC DRIVER
 -M:    Claudiu Beznea <claudiu.beznea@microchip.com>
 +M:    Claudiu Beznea <claudiu.beznea@tuxon.dev>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Supported
  F:    Documentation/devicetree/bindings/nvmem/microchip,sama7g5-otpc.yaml
@@@ -14004,7 -13969,7 +14004,7 @@@ F:   Documentation/devicetree/bindings/fp
  F:    drivers/fpga/microchip-spi.c
  
  MICROCHIP PWM DRIVER
 -M:    Claudiu Beznea <claudiu.beznea@microchip.com>
 +M:    Claudiu Beznea <claudiu.beznea@tuxon.dev>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  L:    linux-pwm@vger.kernel.org
  S:    Supported
@@@ -14020,9 -13985,8 +14020,9 @@@ F:   drivers/iio/adc/at91-sama5d2_adc.
  F:    include/dt-bindings/iio/adc/at91-sama5d2_adc.h
  
  MICROCHIP SAMA5D2-COMPATIBLE SHUTDOWN CONTROLLER
 -M:    Claudiu Beznea <claudiu.beznea@microchip.com>
 +M:    Claudiu Beznea <claudiu.beznea@tuxon.dev>
  S:    Supported
 +F:    Documentation/devicetree/bindings/power/reset/atmel,sama5d2-shdwc.yaml
  F:    drivers/power/reset/at91-sama5d2_shdwc.c
  
  MICROCHIP SOC DRIVERS
@@@ -14032,12 -13996,12 +14032,12 @@@ T:        git https://git.kernel.org/pub/scm/l
  F:    drivers/soc/microchip/
  
  MICROCHIP SPI DRIVER
 -M:    Tudor Ambarus <tudor.ambarus@linaro.org>
 +M:    Ryan Wanner <ryan.wanner@microchip.com>
  S:    Supported
  F:    drivers/spi/spi-atmel.*
  
  MICROCHIP SSC DRIVER
 -M:    Claudiu Beznea <claudiu.beznea@microchip.com>
 +M:    Claudiu Beznea <claudiu.beznea@tuxon.dev>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Supported
  F:    Documentation/devicetree/bindings/misc/atmel-ssc.txt
@@@ -14066,7 -14030,7 +14066,7 @@@ F:   drivers/usb/gadget/udc/atmel_usba_ud
  
  MICROCHIP WILC1000 WIFI DRIVER
  M:    Ajay Singh <ajay.kathat@microchip.com>
 -M:    Claudiu Beznea <claudiu.beznea@microchip.com>
 +M:    Claudiu Beznea <claudiu.beznea@tuxon.dev>
  L:    linux-wireless@vger.kernel.org
  S:    Supported
  F:    drivers/net/wireless/microchip/wilc1000/
@@@ -14695,7 -14659,7 +14695,7 @@@ F:   drivers/rtc/rtc-ntxec.
  F:    include/linux/mfd/ntxec.h
  
  NETRONOME ETHERNET DRIVERS
 -M:    Simon Horman <simon.horman@corigine.com>
 +M:    Louis Peens <louis.peens@corigine.com>
  R:    Jakub Kicinski <kuba@kernel.org>
  L:    oss-drivers@corigine.com
  S:    Maintained
@@@ -14732,6 -14696,7 +14732,6 @@@ T:   git git://git.kernel.org/pub/scm/lin
  F:    Documentation/devicetree/bindings/net/
  F:    drivers/connector/
  F:    drivers/net/
 -X:    drivers/net/wireless/
  F:    include/dt-bindings/net/
  F:    include/linux/etherdevice.h
  F:    include/linux/fcdevice.h
@@@ -14742,7 -14707,6 +14742,7 @@@ F:   include/linux/inetdevice.
  F:    include/linux/netdevice.h
  F:    include/uapi/linux/if_*
  F:    include/uapi/linux/netdevice.h
 +X:    drivers/net/wireless/
  
  NETWORKING DRIVERS (WIRELESS)
  M:    Kalle Valo <kvalo@kernel.org>
@@@ -14797,9 -14761,9 +14797,9 @@@ F:   include/uapi/linux/netdevice.
  F:    lib/net_utils.c
  F:    lib/random32.c
  F:    net/
 -X:    net/bluetooth/
  F:    tools/net/
  F:    tools/testing/selftests/net/
 +X:    net/bluetooth/
  
  NETWORKING [IPSEC]
  M:    Steffen Klassert <steffen.klassert@secunet.com>
@@@ -14858,16 -14822,6 +14858,16 @@@ F: net/netfilter/xt_CONNSECMARK.
  F:    net/netfilter/xt_SECMARK.c
  F:    net/netlabel/
  
 +NETWORKING [MACSEC]
 +M:    Sabrina Dubroca <sd@queasysnail.net>
 +L:    netdev@vger.kernel.org
 +S:    Maintained
 +F:    drivers/net/macsec.c
 +F:    include/net/macsec.h
 +F:    include/uapi/linux/if_macsec.h
 +K:    macsec
 +K:    \bmdo_
 +
  NETWORKING [MPTCP]
  M:    Matthieu Baerts <matthieu.baerts@tessares.net>
  M:    Mat Martineau <martineau@kernel.org>
@@@ -14890,6 -14844,7 +14890,6 @@@ NETWORKING [TCP
  M:    Eric Dumazet <edumazet@google.com>
  L:    netdev@vger.kernel.org
  S:    Maintained
 -F:    include/linux/net_mm.h
  F:    include/linux/tcp.h
  F:    include/net/tcp.h
  F:    include/trace/events/tcp.h
@@@ -15052,7 -15007,6 +15052,7 @@@ F:   include/linux/power/bq27xxx_battery.
  
  NOLIBC HEADER FILE
  M:    Willy Tarreau <w@1wt.eu>
 +M:    Thomas Weißschuh <linux@weissschuh.net>
  S:    Maintained
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/wtarreau/nolibc.git
  F:    tools/include/nolibc/
@@@ -15084,7 -15038,7 +15084,7 @@@ M:   Allen Hubbe <allenbh@gmail.com
  L:    ntb@lists.linux.dev
  S:    Supported
  W:    https://github.com/jonmason/ntb/wiki
 -T:    git git://github.com/jonmason/ntb.git
 +T:    git https://github.com/jonmason/ntb.git
  F:    drivers/net/ntb_netdev.c
  F:    drivers/ntb/
  F:    drivers/pci/endpoint/functions/pci-epf-*ntb.c
@@@ -15620,13 -15574,6 +15620,13 @@@ L: linux-media@vger.kernel.or
  S:    Maintained
  F:    drivers/media/i2c/og01a1b.c
  
 +OMNIVISION OV01A10 SENSOR DRIVER
 +M:    Bingbu Cao <bingbu.cao@intel.com>
 +L:    linux-media@vger.kernel.org
 +S:    Maintained
 +T:    git git://linuxtv.org/media_tree.git
 +F:    drivers/media/i2c/ov01a10.c
 +
  OMNIVISION OV02A10 SENSOR DRIVER
  M:    Dongchun Zhu <dongchun.zhu@mediatek.com>
  L:    linux-media@vger.kernel.org
@@@ -15975,7 -15922,7 +15975,7 @@@ ORACLE CLUSTER FILESYSTEM 2 (OCFS2
  M:    Mark Fasheh <mark@fasheh.com>
  M:    Joel Becker <jlbec@evilplan.org>
  M:    Joseph Qi <joseph.qi@linux.alibaba.com>
 -L:    ocfs2-devel@oss.oracle.com (moderated for non-subscribers)
 +L:    ocfs2-devel@lists.linux.dev
  S:    Supported
  W:    http://ocfs2.wiki.kernel.org
  F:    Documentation/filesystems/dlmfs.rst
@@@ -16067,7 -16014,7 +16067,7 @@@ M:   Ilias Apalodimas <ilias.apalodimas@l
  L:    netdev@vger.kernel.org
  S:    Supported
  F:    Documentation/networking/page_pool.rst
 -F:    include/net/page_pool.h
 +F:    include/net/page_pool/
  F:    include/trace/events/page_pool.h
  F:    net/core/page_pool.c
  
@@@ -16359,7 -16306,6 +16359,7 @@@ F:   drivers/pci/controller/dwc/pci-exyno
  PCI DRIVER FOR SYNOPSYS DESIGNWARE
  M:    Jingoo Han <jingoohan1@gmail.com>
  M:    Gustavo Pimentel <gustavo.pimentel@synopsys.com>
 +M:    Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
  L:    linux-pci@vger.kernel.org
  S:    Maintained
  F:    Documentation/devicetree/bindings/pci/snps,dw-pcie-ep.yaml
@@@ -16630,10 -16576,6 +16630,10 @@@ S: Maintaine
  F:    crypto/pcrypt.c
  F:    include/crypto/pcrypt.h
  
 +PDS DSC VIRTIO DATA PATH ACCELERATOR
 +R:    Shannon Nelson <shannon.nelson@amd.com>
 +F:    drivers/vdpa/pds/
 +
  PECI HARDWARE MONITORING DRIVERS
  M:    Iwona Winiarska <iwona.winiarska@intel.com>
  L:    linux-hwmon@vger.kernel.org
@@@ -17112,7 -17054,6 +17112,7 @@@ F:   drivers/net/ppp/pptp.
  PRESSURE STALL INFORMATION (PSI)
  M:    Johannes Weiner <hannes@cmpxchg.org>
  M:    Suren Baghdasaryan <surenb@google.com>
 +R:    Peter Ziljstra <peterz@infradead.org>
  S:    Maintained
  F:    include/linux/psi*
  F:    kernel/sched/psi.c
@@@ -17220,13 -17161,6 +17220,13 @@@ F: drivers/ptp/
  F:    include/linux/ptp_cl*
  K:    (?:\b|_)ptp(?:\b|_)
  
 +PTP MOCKUP CLOCK SUPPORT
 +M:    Vladimir Oltean <vladimir.oltean@nxp.com>
 +L:    netdev@vger.kernel.org
 +S:    Maintained
 +F:    drivers/ptp/ptp_mock.c
 +F:    include/linux/ptp_mock.h
 +
  PTP VIRTUAL CLOCK SUPPORT
  M:    Yangbo Lu <yangbo.lu@nxp.com>
  L:    netdev@vger.kernel.org
@@@ -17519,7 -17453,6 +17519,7 @@@ F:   drivers/media/tuners/qt1010
  
  QUALCOMM ATH12K WIRELESS DRIVER
  M:    Kalle Valo <kvalo@kernel.org>
 +M:    Jeff Johnson <quic_jjohnson@quicinc.com>
  L:    ath12k@lists.infradead.org
  S:    Supported
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git
@@@ -17527,7 -17460,6 +17527,7 @@@ F:   drivers/net/wireless/ath/ath12k
  
  QUALCOMM ATHEROS ATH10K WIRELESS DRIVER
  M:    Kalle Valo <kvalo@kernel.org>
 +M:    Jeff Johnson <quic_jjohnson@quicinc.com>
  L:    ath10k@lists.infradead.org
  S:    Supported
  W:    https://wireless.wiki.kernel.org/en/users/Drivers/ath10k
@@@ -17537,7 -17469,6 +17537,7 @@@ F:   drivers/net/wireless/ath/ath10k
  
  QUALCOMM ATHEROS ATH11K WIRELESS DRIVER
  M:    Kalle Valo <kvalo@kernel.org>
 +M:    Jeff Johnson <quic_jjohnson@quicinc.com>
  L:    ath11k@lists.infradead.org
  S:    Supported
  W:    https://wireless.wiki.kernel.org/en/users/Drivers/ath11k
@@@ -17629,7 -17560,6 +17629,7 @@@ QUALCOMM ETHQOS ETHERNET DRIVE
  M:    Vinod Koul <vkoul@kernel.org>
  R:    Bhupesh Sharma <bhupesh.sharma@linaro.org>
  L:    netdev@vger.kernel.org
 +L:    linux-arm-msm@vger.kernel.org
  S:    Maintained
  F:    Documentation/devicetree/bindings/net/qcom,ethqos.yaml
  F:    drivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c
@@@ -17739,18 -17669,9 +17739,18 @@@ S: Maintaine
  F:    Documentation/devicetree/bindings/thermal/qcom-tsens.yaml
  F:    drivers/thermal/qcom/
  
 +QUALCOMM TYPEC PORT MANAGER DRIVER
 +M:    Bryan O'Donoghue <bryan.odonoghue@linaro.org>
 +L:    linux-arm-msm@vger.kernel.org
 +L:    linux-usb@vger.kernel.org
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/usb/qcom,pmic-*.yaml
 +F:    drivers/usb/typec/tcpm/qcom/
 +
  QUALCOMM VENUS VIDEO ACCELERATOR DRIVER
  M:    Stanimir Varbanov <stanimir.k.varbanov@gmail.com>
  M:    Vikash Garodia <quic_vgarodia@quicinc.com>
 +R:    Bryan O'Donoghue <bryan.odonoghue@linaro.org>
  L:    linux-media@vger.kernel.org
  L:    linux-arm-msm@vger.kernel.org
  S:    Maintained
@@@ -18058,7 -17979,7 +18058,7 @@@ T:   git git://git.kernel.org/pub/scm/lin
  F:    drivers/net/wireless/realtek/rtlwifi/
  
  REALTEK WIRELESS DRIVER (rtw88)
 -M:    Yan-Hsuan Chuang <tony0620emma@gmail.com>
 +M:    Ping-Ke Shih <pkshih@realtek.com>
  L:    linux-wireless@vger.kernel.org
  S:    Maintained
  F:    drivers/net/wireless/realtek/rtw88/
@@@ -18085,7 -18006,7 +18085,7 @@@ F:   include/linux/regmap.
  
  REISERFS FILE SYSTEM
  L:    reiserfs-devel@vger.kernel.org
- S:    Supported
+ S:    Obsolete
  F:    fs/reiserfs/
  
  REMOTE PROCESSOR (REMOTEPROC) SUBSYSTEM
@@@ -18265,13 -18186,6 +18265,13 @@@ S: Maintaine
  F:    Documentation/devicetree/bindings/clock/renesas,versaclock7.yaml
  F:    drivers/clk/clk-versaclock7.c
  
 +RENESAS X9250 DIGITAL POTENTIOMETERS DRIVER
 +M:    Herve Codina <herve.codina@bootlin.com>
 +L:    linux-iio@vger.kernel.org
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/iio/potentiometer/renesas,x9250.yaml
 +F:    drivers/iio/potentiometer/x9250.c
 +
  RESET CONTROLLER FRAMEWORK
  M:    Philipp Zabel <p.zabel@pengutronix.de>
  S:    Maintained
@@@ -18367,7 -18281,6 +18367,7 @@@ F:   drivers/clk/microchip/clk-mpfs*.
  F:    drivers/i2c/busses/i2c-microchip-corei2c.c
  F:    drivers/mailbox/mailbox-mpfs.c
  F:    drivers/pci/controller/pcie-microchip-host.c
 +F:    drivers/pwm/pwm-microchip-core.c
  F:    drivers/reset/reset-mpfs.c
  F:    drivers/rtc/rtc-mpfs.c
  F:    drivers/soc/microchip/mpfs-sys-controller.c
@@@ -18440,7 -18353,7 +18440,7 @@@ L:   linux-rockchip@lists.infradead.or
  S:    Maintained
  F:    Documentation/admin-guide/media/rkisp1.rst
  F:    Documentation/devicetree/bindings/media/rockchip-isp1.yaml
 -F:    Documentation/userspace-api/media/v4l/pixfmt-meta-rkisp1.rst
 +F:    Documentation/userspace-api/media/v4l/metafmt-rkisp1.rst
  F:    drivers/media/platform/rockchip/rkisp1
  F:    include/uapi/linux/rkisp1-config.h
  
@@@ -18485,11 -18398,10 +18485,11 @@@ S:        Maintaine
  F:    Documentation/devicetree/bindings/iio/light/bh1750.yaml
  F:    drivers/iio/light/bh1750.c
  
 -ROHM BU27034 AMBIENT LIGHT SENSOR DRIVER
 +ROHM BU270xx LIGHT SENSOR DRIVERs
  M:    Matti Vaittinen <mazziesaccount@gmail.com>
  L:    linux-iio@vger.kernel.org
  S:    Supported
 +F:    drivers/iio/light/rohm-bu27008.c
  F:    drivers/iio/light/rohm-bu27034.c
  
  ROHM MULTIFUNCTION BD9571MWV-M PMIC DEVICE DRIVERS
@@@ -18583,14 -18495,17 +18583,14 @@@ RTL8180 WIRELESS DRIVE
  L:    linux-wireless@vger.kernel.org
  S:    Orphan
  W:    https://wireless.wiki.kernel.org/
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git
  F:    drivers/net/wireless/realtek/rtl818x/rtl8180/
  
  RTL8187 WIRELESS DRIVER
 -M:    Herton Ronaldo Krzesinski <herton@canonical.com>
 -M:    Hin-Tak Leung <htl10@users.sourceforge.net>
 +M:    Hin-Tak Leung <hintak.leung@gmail.com>
  M:    Larry Finger <Larry.Finger@lwfinger.net>
  L:    linux-wireless@vger.kernel.org
  S:    Maintained
  W:    https://wireless.wiki.kernel.org/
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git
  F:    drivers/net/wireless/realtek/rtl818x/rtl8187/
  
  RTL8XXXU WIRELESS DRIVER (rtl8xxxu)
@@@ -18626,8 -18541,6 +18626,8 @@@ R:   Boqun Feng <boqun.feng@gmail.com
  R:    Gary Guo <gary@garyguo.net>
  R:    Björn Roy Baron <bjorn3_gh@protonmail.com>
  R:    Benno Lossin <benno.lossin@proton.me>
 +R:    Andreas Hindborg <a.hindborg@samsung.com>
 +R:    Alice Ryhl <aliceryhl@google.com>
  L:    rust-for-linux@vger.kernel.org
  S:    Supported
  W:    https://github.com/Rust-for-Linux/linux
@@@ -18669,7 -18582,7 +18669,7 @@@ L:   linux-s390@vger.kernel.or
  S:    Supported
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux.git
  F:    Documentation/driver-api/s390-drivers.rst
 -F:    Documentation/s390/
 +F:    Documentation/arch/s390/
  F:    arch/s390/
  F:    drivers/s390/
  F:    drivers/watchdog/diag288_wdt.c
@@@ -18730,7 -18643,7 +18730,7 @@@ M:   Niklas Schnelle <schnelle@linux.ibm.
  M:    Gerald Schaefer <gerald.schaefer@linux.ibm.com>
  L:    linux-s390@vger.kernel.org
  S:    Supported
 -F:    Documentation/s390/pci.rst
 +F:    Documentation/arch/s390/pci.rst
  F:    arch/s390/pci/
  F:    drivers/pci/hotplug/s390_pci_hpc.c
  
@@@ -18747,7 -18660,7 +18747,7 @@@ M:   Halil Pasic <pasic@linux.ibm.com
  M:    Jason Herne <jjherne@linux.ibm.com>
  L:    linux-s390@vger.kernel.org
  S:    Supported
 -F:    Documentation/s390/vfio-ap*
 +F:    Documentation/arch/s390/vfio-ap*
  F:    drivers/s390/crypto/vfio_ap*
  
  S390 VFIO-CCW DRIVER
@@@ -18757,7 -18670,7 +18757,7 @@@ R:   Halil Pasic <pasic@linux.ibm.com
  L:    linux-s390@vger.kernel.org
  L:    kvm@vger.kernel.org
  S:    Supported
 -F:    Documentation/s390/vfio-ccw.rst
 +F:    Documentation/arch/s390/vfio-ccw.rst
  F:    drivers/s390/cio/vfio_ccw*
  F:    include/uapi/linux/vfio_ccw.h
  
@@@ -19019,10 -18932,10 +19019,10 @@@ R:        John Garry <john.g.garry@oracle.com
  R:    Jason Yan <yanaijie@huawei.com>
  L:    linux-scsi@vger.kernel.org
  S:    Supported
 +F:    Documentation/scsi/libsas.rst
  F:    drivers/scsi/libsas/
  F:    include/scsi/libsas.h
  F:    include/scsi/sas_ata.h
 -F:    Documentation/scsi/libsas.rst
  
  SCSI RDMA PROTOCOL (SRP) INITIATOR
  M:    Bart Van Assche <bvanassche@acm.org>
@@@ -19299,6 -19212,13 +19299,6 @@@ F:  Documentation/devicetree/bindings/se
  F:    drivers/tty/serdev/
  F:    include/linux/serdev.h
  
 -SERIAL DRIVERS
 -M:    Greg Kroah-Hartman <gregkh@linuxfoundation.org>
 -L:    linux-serial@vger.kernel.org
 -S:    Maintained
 -F:    Documentation/devicetree/bindings/serial/
 -F:    drivers/tty/serial/
 -
  SERIAL IR RECEIVER
  M:    Sean Young <sean@mess.org>
  L:    linux-media@vger.kernel.org
@@@ -19350,6 -19270,7 +19350,6 @@@ F:   drivers/misc/sgi-gru
  SGI XP/XPC/XPNET DRIVER
  M:    Robin Holt <robinmholt@gmail.com>
  M:    Steve Wahl <steve.wahl@hpe.com>
 -R:    Mike Travis <mike.travis@hpe.com>
  S:    Maintained
  F:    drivers/misc/sgi-xp/
  
@@@ -19660,6 -19581,13 +19660,6 @@@ M:  Nicolas Pitre <nico@fluxnic.net
  S:    Odd Fixes
  F:    drivers/net/ethernet/smsc/smc91x.*
  
 -SMM665 HARDWARE MONITOR DRIVER
 -M:    Guenter Roeck <linux@roeck-us.net>
 -L:    linux-hwmon@vger.kernel.org
 -S:    Maintained
 -F:    Documentation/hwmon/smm665.rst
 -F:    drivers/hwmon/smm665.c
 -
  SMSC EMC2103 HARDWARE MONITOR DRIVER
  M:    Steve Glendinning <steve.glendinning@shawell.net>
  L:    linux-hwmon@vger.kernel.org
@@@ -20317,13 -20245,6 +20317,13 @@@ M: Ion Badulescu <ionut@badula.org
  S:    Odd Fixes
  F:    drivers/net/ethernet/adaptec/starfire*
  
 +STARFIVE CRYPTO DRIVER
 +M:    Jia Jie Ho <jiajie.ho@starfivetech.com>
 +M:    William Qiu <william.qiu@starfivetech.com>
 +S:    Supported
 +F:    Documentation/devicetree/bindings/crypto/starfive*
 +F:    drivers/crypto/starfive/
 +
  STARFIVE DEVICETREES
  M:    Emil Renner Berthing <kernel@esmil.dk>
  S:    Maintained
@@@ -20342,12 -20263,6 +20342,12 @@@ S: Supporte
  F:    Documentation/devicetree/bindings/mmc/starfive*
  F:    drivers/mmc/host/dw_mmc-starfive.c
  
 +STARFIVE JH7110 TDM DRIVER
 +M:    Walker Chen <walker.chen@starfivetech.com>
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/sound/starfive,jh7110-tdm.yaml
 +F:    sound/soc/starfive/jh7110_tdm.c
 +
  STARFIVE JH71X0 CLOCK DRIVERS
  M:    Emil Renner Berthing <kernel@esmil.dk>
  M:    Hal Feng <hal.feng@starfivetech.com>
@@@ -20356,6 -20271,13 +20356,6 @@@ F:  Documentation/devicetree/bindings/cl
  F:    drivers/clk/starfive/clk-starfive-jh71*
  F:    include/dt-bindings/clock/starfive?jh71*.h
  
 -STARFIVE CRYPTO DRIVER
 -M:    Jia Jie Ho <jiajie.ho@starfivetech.com>
 -M:    William Qiu <william.qiu@starfivetech.com>
 -S:    Supported
 -F:    Documentation/devicetree/bindings/crypto/starfive*
 -F:    drivers/crypto/starfive/
 -
  STARFIVE JH71X0 PINCTRL DRIVERS
  M:    Emil Renner Berthing <kernel@esmil.dk>
  M:    Jianlong Huang <jianlong.huang@starfivetech.com>
@@@ -20374,12 -20296,6 +20374,12 @@@ F: Documentation/devicetree/bindings/re
  F:    drivers/reset/starfive/reset-starfive-jh71*
  F:    include/dt-bindings/reset/starfive?jh71*.h
  
 +STARFIVE JH71X0 USB DRIVERS
 +M:    Minda Chen <minda.chen@starfivetech.com>
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/usb/starfive,jh7110-usb.yaml
 +F:    drivers/usb/cdns3/cdns3-starfive.c
 +
  STARFIVE JH71XX PMU CONTROLLER DRIVER
  M:    Walker Chen <walker.chen@starfivetech.com>
  S:    Supported
@@@ -20387,6 -20303,12 +20387,6 @@@ F:  Documentation/devicetree/bindings/po
  F:    drivers/soc/starfive/jh71xx_pmu.c
  F:    include/dt-bindings/power/starfive,jh7110-pmu.h
  
 -STARFIVE JH7110 TDM DRIVER
 -M:    Walker Chen <walker.chen@starfivetech.com>
 -S:    Maintained
 -F:    Documentation/devicetree/bindings/sound/starfive,jh7110-tdm.yaml
 -F:    sound/soc/starfive/jh7110_tdm.c
 -
  STARFIVE SOC DRIVERS
  M:    Conor Dooley <conor@kernel.org>
  S:    Maintained
@@@ -20461,6 -20383,7 +20461,6 @@@ F:   drivers/pwm/pwm-stm32
  F:    include/linux/*/stm32-*tim*
  
  STMMAC ETHERNET DRIVER
 -M:    Giuseppe Cavallaro <peppe.cavallaro@st.com>
  M:    Alexandre Torgue <alexandre.torgue@foss.st.com>
  M:    Jose Abreu <joabreu@synopsys.com>
  L:    netdev@vger.kernel.org
@@@ -21072,13 -20995,10 +21072,13 @@@ TEGRA VIDEO DRIVE
  M:    Thierry Reding <thierry.reding@gmail.com>
  M:    Jonathan Hunter <jonathanh@nvidia.com>
  M:    Sowjanya Komatineni <skomatineni@nvidia.com>
 +M:    Luca Ceresoli <luca.ceresoli@bootlin.com>
  L:    linux-media@vger.kernel.org
  L:    linux-tegra@vger.kernel.org
  S:    Maintained
  F:    Documentation/devicetree/bindings/display/tegra/nvidia,tegra20-host1x.yaml
 +F:    Documentation/devicetree/bindings/display/tegra/nvidia,tegra20-vi.yaml
 +F:    Documentation/devicetree/bindings/display/tegra/nvidia,tegra20-vip.yaml
  F:    drivers/staging/media/tegra-video/
  
  TEGRA XUSB PADCTL DRIVER
@@@ -21119,39 -21039,6 +21119,39 @@@ S: Maintaine
  F:    Documentation/devicetree/bindings/sound/davinci-mcasp-audio.yaml
  F:    sound/soc/ti/
  
 +TEXAS INSTRUMENTS AUDIO (ASoC/HDA) DRIVERS
 +M:    Shenghao Ding <shenghao-ding@ti.com>
 +M:    Kevin Lu <kevin-lu@ti.com>
 +M:    Baojun Xu <x1077012@ti.com>
 +L:    alsa-devel@alsa-project.org (moderated for non-subscribers)
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/sound/tas2552.txt
 +F:    Documentation/devicetree/bindings/sound/tas2562.yaml
 +F:    Documentation/devicetree/bindings/sound/tas2770.yaml
 +F:    Documentation/devicetree/bindings/sound/tas27xx.yaml
 +F:    Documentation/devicetree/bindings/sound/ti,pcm1681.txt
 +F:    Documentation/devicetree/bindings/sound/ti,pcm3168a.yaml
 +F:    Documentation/devicetree/bindings/sound/ti,tlv320*.yaml
 +F:    Documentation/devicetree/bindings/sound/tlv320adcx140.yaml
 +F:    Documentation/devicetree/bindings/sound/tlv320aic31xx.txt
 +F:    Documentation/devicetree/bindings/sound/tpa6130a2.txt
 +F:    include/sound/tas2*.h
 +F:    include/sound/tlv320*.h
 +F:    include/sound/tpa6130a2-plat.h
 +F:    sound/pci/hda/tas2781_hda_i2c.c
 +F:    sound/soc/codecs/pcm1681.c
 +F:    sound/soc/codecs/pcm1789*.*
 +F:    sound/soc/codecs/pcm179x*.*
 +F:    sound/soc/codecs/pcm186x*.*
 +F:    sound/soc/codecs/pcm3008.*
 +F:    sound/soc/codecs/pcm3060*.*
 +F:    sound/soc/codecs/pcm3168a*.*
 +F:    sound/soc/codecs/pcm5102a.c
 +F:    sound/soc/codecs/pcm512x*.*
 +F:    sound/soc/codecs/tas2*.*
 +F:    sound/soc/codecs/tlv320*.*
 +F:    sound/soc/codecs/tpa6130a2.*
 +
  TEXAS INSTRUMENTS DMA DRIVERS
  M:    Peter Ujfalusi <peter.ujfalusi@gmail.com>
  L:    dmaengine@vger.kernel.org
@@@ -21728,16 -21615,14 +21728,16 @@@ W:        https://github.com/srcres258/linux-d
  T:    git git://github.com/srcres258/linux-doc.git doc-zh-tw
  F:    Documentation/translations/zh_TW/
  
 -TTY LAYER
 +TTY LAYER AND SERIAL DRIVERS
  M:    Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  M:    Jiri Slaby <jirislaby@kernel.org>
 +L:    linux-kernel@vger.kernel.org
 +L:    linux-serial@vger.kernel.org
  S:    Supported
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty.git
 +F:    Documentation/devicetree/bindings/serial/
  F:    Documentation/driver-api/serial/
  F:    drivers/tty/
 -F:    drivers/tty/serial/serial_core.c
  F:    include/linux/selection.h
  F:    include/linux/serial.h
  F:    include/linux/serial_core.h
@@@ -21766,14 -21651,11 +21766,14 @@@ S:        Orpha
  F:    drivers/net/ethernet/dec/tulip/
  
  TUN/TAP driver
 -M:    Maxim Krasnyansky <maxk@qti.qualcomm.com>
 +M:    Willem de Bruijn <willemdebruijn.kernel@gmail.com>
 +M:    Jason Wang <jasowang@redhat.com>
  S:    Maintained
  W:    http://vtun.sourceforge.net/tun
  F:    Documentation/networking/tuntap.rst
  F:    arch/um/os-Linux/drivers/
 +F:    drivers/net/tap.c
 +F:    drivers/net/tun.c
  
  TURBOCHANNEL SUBSYSTEM
  M:    "Maciej W. Rozycki" <macro@orcam.me.uk>
@@@ -21996,8 -21878,9 +21996,8 @@@ S:   Maintaine
  F:    drivers/usb/misc/apple-mfi-fastcharge.c
  
  USB AR5523 WIRELESS DRIVER
 -M:    Pontus Fuchs <pontus.fuchs@gmail.com>
  L:    linux-wireless@vger.kernel.org
 -S:    Maintained
 +S:    Orphan
  F:    drivers/net/wireless/ath/ar5523/
  
  USB ATTACHED SCSI
@@@ -22210,7 -22093,6 +22210,7 @@@ F:   drivers/usb
  F:    include/dt-bindings/usb/
  F:    include/linux/usb.h
  F:    include/linux/usb/
 +F:    include/uapi/linux/usb/
  
  USB TYPEC BUS FOR ALTERNATE MODES
  M:    Heikki Krogerus <heikki.krogerus@linux.intel.com>
@@@ -22274,8 -22156,9 +22274,8 @@@ F:   drivers/usb/gadget/legacy/webcam.
  F:    include/uapi/linux/usb/g_uvc.h
  
  USB WIRELESS RNDIS DRIVER (rndis_wlan)
 -M:    Jussi Kivilinna <jussi.kivilinna@iki.fi>
  L:    linux-wireless@vger.kernel.org
 -S:    Maintained
 +S:    Orphan
  F:    drivers/net/wireless/legacy/rndis_wlan.c
  
  USB XHCI DRIVER
@@@ -22564,6 -22447,7 +22564,6 @@@ L:   virtualization@lists.linux-foundatio
  S:    Maintained
  F:    drivers/block/virtio_blk.c
  F:    drivers/scsi/virtio_scsi.c
 -F:    drivers/vhost/scsi.c
  F:    include/uapi/linux/virtio_blk.h
  F:    include/uapi/linux/virtio_scsi.h
  
@@@ -22662,16 -22546,6 +22662,16 @@@ F: include/linux/vhost_iotlb.
  F:    include/uapi/linux/vhost.h
  F:    kernel/vhost_task.c
  
 +VIRTIO HOST (VHOST-SCSI)
 +M:    "Michael S. Tsirkin" <mst@redhat.com>
 +M:    Jason Wang <jasowang@redhat.com>
 +M:    Mike Christie <michael.christie@oracle.com>
 +R:    Paolo Bonzini <pbonzini@redhat.com>
 +R:    Stefan Hajnoczi <stefanha@redhat.com>
 +L:    virtualization@lists.linux-foundation.org
 +S:    Maintained
 +F:    drivers/vhost/scsi.c
 +
  VIRTIO I2C DRIVER
  M:    Conghui Chen <conghui.chen@intel.com>
  M:    Viresh Kumar <viresh.kumar@linaro.org>
@@@ -22989,7 -22863,6 +22989,7 @@@ S:   Maintaine
  W:    https://www.net-swift.com
  F:    Documentation/networking/device_drivers/ethernet/wangxun/*
  F:    drivers/net/ethernet/wangxun/
 +F:    drivers/net/pcs/pcs-xpcs-wx.c
  
  WATCHDOG DEVICE DRIVERS
  M:    Wim Van Sebroeck <wim@linux-watchdog.org>
@@@ -23060,7 -22933,7 +23060,7 @@@ F:   drivers/input/misc/wistron_btns.
  
  WL3501 WIRELESS PCMCIA CARD DRIVER
  L:    linux-wireless@vger.kernel.org
 -S:    Odd fixes
 +S:    Orphan
  F:    drivers/net/wireless/legacy/wl3501*
  
  WMI BINARY MOF DRIVER
@@@ -23240,8 -23113,7 +23240,8 @@@ F:   arch/x86/platfor
  
  X86 PLATFORM UV HPE SUPERDOME FLEX
  M:    Steve Wahl <steve.wahl@hpe.com>
 -R:    Mike Travis <mike.travis@hpe.com>
 +R:    Justin Ernst <justin.ernst@hpe.com>
 +R:    Kyle Meyer <kyle.meyer@hpe.com>
  R:    Dimitri Sivanich <dimitri.sivanich@hpe.com>
  R:    Russ Anderson <russ.anderson@hpe.com>
  S:    Supported
@@@ -23516,10 -23388,8 +23516,10 @@@ M: Srinivas Neeli <srinivas.neeli@amd.c
  R:    Shubhrajyoti Datta <shubhrajyoti.datta@amd.com>
  R:    Michal Simek <michal.simek@amd.com>
  S:    Maintained
 +F:    Documentation/devicetree/bindings/watchdog/xlnx,versal-wwdt.yaml
  F:    Documentation/devicetree/bindings/watchdog/xlnx,xps-timebase-wdt.yaml
  F:    drivers/watchdog/of_xilinx_wdt.c
 +F:    drivers/watchdog/xilinx_wwdt.c
  
  XILINX XDMA DRIVER
  M:    Lizhi Hou <lizhi.hou@amd.com>
@@@ -23632,8 -23502,11 +23632,8 @@@ S:  Maintaine
  F:    mm/zbud.c
  
  ZD1211RW WIRELESS DRIVER
 -M:    Ulrich Kunitz <kune@deine-taler.de>
  L:    linux-wireless@vger.kernel.org
 -L:    zd1211-devs@lists.sourceforge.net (subscribers-only)
 -S:    Maintained
 -W:    http://zd1211.ath.cx/wiki/DriverRewrite
 +S:    Orphan
  F:    drivers/net/wireless/zydas/zd1211rw/
  
  ZD1301 MEDIA DRIVER
diff --combined fs/ext2/balloc.c
@@@ -36,6 -36,8 +36,6 @@@
   */
  
  
 -#define in_range(b, first, len)       ((b) >= (first) && (b) <= (first) + (len) - 1)
 -
  struct ext2_group_desc * ext2_get_group_desc(struct super_block * sb,
                                             unsigned int block_group,
                                             struct buffer_head ** bh)
@@@ -472,8 -474,8 +472,8 @@@ void ext2_discard_reservation(struct in
   * @block:            start physical block to free
   * @count:            number of blocks to free
   */
- void ext2_free_blocks (struct inode * inode, unsigned long block,
-                      unsigned long count)
+ void ext2_free_blocks(struct inode * inode, ext2_fsblk_t block,
+                     unsigned long count)
  {
        struct buffer_head *bitmap_bh = NULL;
        struct buffer_head * bh2;
@@@ -716,36 -718,34 +716,34 @@@ fail_access
  }
  
  /**
-  *    find_next_reservable_window():
-  *            find a reservable space within the given range.
-  *            It does not allocate the reservation window for now:
-  *            alloc_new_reservation() will do the work later.
+  * find_next_reservable_window - Find a reservable space within the given range.
+  * @search_head: The list to search.
+  * @my_rsv: The reservation we're currently using.
+  * @sb: The super block.
+  * @start_block: The first block we consider to start the real search from
+  * @last_block: The maximum block number that our goal reservable space
+  *    could start from.
   *
-  *    @search_head: the head of the searching list;
-  *            This is not necessarily the list head of the whole filesystem
+  * It does not allocate the reservation window: alloc_new_reservation()
+  * will do the work later.
   *
-  *            We have both head and start_block to assist the search
-  *            for the reservable space. The list starts from head,
-  *            but we will shift to the place where start_block is,
-  *            then start from there, when looking for a reservable space.
+  * We search the given range, rather than the whole reservation double
+  * linked list, (start_block, last_block) to find a free region that is
+  * of my size and has not been reserved.
   *
-  *    @sb: the super block.
+  * @search_head is not necessarily the list head of the whole filesystem.
+  * We have both head and @start_block to assist the search for the
+  * reservable space. The list starts from head, but we will shift to
+  * the place where start_block is, then start from there, when looking
+  * for a reservable space.
   *
-  *    @start_block: the first block we consider to start the real search from
-  *
-  *    @last_block:
-  *            the maximum block number that our goal reservable space
-  *            could start from. This is normally the last block in this
-  *            group. The search will end when we found the start of next
-  *            possible reservable space is out of this boundary.
-  *            This could handle the cross boundary reservation window
-  *            request.
-  *
-  *    basically we search from the given range, rather than the whole
-  *    reservation double linked list, (start_block, last_block)
-  *    to find a free region that is of my size and has not
-  *    been reserved.
+  * @last_block is normally the last block in this group. The search will end
+  * when we found the start of next possible reservable space is out
+  * of this boundary.  This could handle the cross boundary reservation
+  * window request.
   *
+  * Return: -1 if we could not find a range of sufficient size.  If we could,
+  * return 0 and fill in @my_rsv with the range information.
   */
  static int find_next_reservable_window(
                                struct ext2_reserve_window_node *search_head,
  }
  
  /**
-  *    alloc_new_reservation()--allocate a new reservation window
-  *
-  *            To make a new reservation, we search part of the filesystem
-  *            reservation list (the list that inside the group). We try to
-  *            allocate a new reservation window near the allocation goal,
-  *            or the beginning of the group, if there is no goal.
-  *
-  *            We first find a reservable space after the goal, then from
-  *            there, we check the bitmap for the first free block after
-  *            it. If there is no free block until the end of group, then the
-  *            whole group is full, we failed. Otherwise, check if the free
-  *            block is inside the expected reservable space, if so, we
-  *            succeed.
-  *            If the first free block is outside the reservable space, then
-  *            start from the first free block, we search for next available
-  *            space, and go on.
+  * alloc_new_reservation - Allocate a new reservation window.
+  * @my_rsv: The reservation we're currently using.
+  * @grp_goal: The goal block relative to the start of the group.
+  * @sb: The super block.
+  * @group: The group we are trying to allocate in.
+  * @bitmap_bh: The block group block bitmap.
   *
-  *    on succeed, a new reservation will be found and inserted into the list
-  *    It contains at least one free block, and it does not overlap with other
-  *    reservation windows.
+  * To make a new reservation, we search part of the filesystem reservation
+  * list (the list inside the group). We try to allocate a new
+  * reservation window near @grp_goal, or the beginning of the
+  * group, if @grp_goal is negative.
   *
-  *    failed: we failed to find a reservation window in this group
+  * We first find a reservable space after the goal, then from there,
+  * we check the bitmap for the first free block after it. If there is
+  * no free block until the end of group, then the whole group is full,
+  * we failed. Otherwise, check if the free block is inside the expected
+  * reservable space, if so, we succeed.
   *
-  *    @my_rsv: the reservation
+  * If the first free block is outside the reservable space, then start
+  * from the first free block, we search for next available space, and
+  * go on.
   *
-  *    @grp_goal: The goal (group-relative).  It is where the search for a
-  *            free reservable space should start from.
-  *            if we have a goal(goal >0 ), then start from there,
-  *            no goal(goal = -1), we start from the first block
-  *            of the group.
-  *
-  *    @sb: the super block
-  *    @group: the group we are trying to allocate in
-  *    @bitmap_bh: the block group block bitmap
+  * on succeed, a new reservation will be found and inserted into the
+  * list. It contains at least one free block, and it does not overlap
+  * with other reservation windows.
   *
+  * Return: 0 on success, -1 if we failed to find a reservation window
+  * in this group
   */
  static int alloc_new_reservation(struct ext2_reserve_window_node *my_rsv,
                ext2_grpblk_t grp_goal, struct super_block *sb,
@@@ -1131,8 -1124,13 +1122,13 @@@ ext2_try_to_allocate_with_rsv(struct su
  
                if ((my_rsv->rsv_start > group_last_block) ||
                                (my_rsv->rsv_end < group_first_block)) {
+                       ext2_error(sb, __func__,
+                                  "Reservation out of group %u range goal %d fsb[%lu,%lu] rsv[%lu, %lu]",
+                                  group, grp_goal, group_first_block,
+                                  group_last_block, my_rsv->rsv_start,
+                                  my_rsv->rsv_end);
                        rsv_window_dump(&EXT2_SB(sb)->s_rsv_window_root, 1);
-                       BUG();
+                       return -1;
                }
                ret = ext2_try_to_allocate(sb, group, bitmap_bh, grp_goal,
                                           &num, &my_rsv->rsv_window);
@@@ -1193,6 -1191,7 +1189,7 @@@ int ext2_data_block_valid(struct ext2_s
   * @goal:             given target block(filesystem wide)
   * @count:            target number of blocks to allocate
   * @errp:             error code
+  * @flags:            allocate flags
   *
   * ext2_new_blocks uses a goal block to assist allocation.  If the goal is
   * free, or there is a free block within 32 blocks of the goal, that block
   * This function also updates quota and i_blocks field.
   */
  ext2_fsblk_t ext2_new_blocks(struct inode *inode, ext2_fsblk_t goal,
-                   unsigned long *count, int *errp)
+                   unsigned long *count, int *errp, unsigned int flags)
  {
        struct buffer_head *bitmap_bh = NULL;
        struct buffer_head *gdp_bh;
        es = EXT2_SB(sb)->s_es;
        ext2_debug("goal=%lu.\n", goal);
        /*
-        * Allocate a block from reservation only when
-        * filesystem is mounted with reservation(default,-o reservation), and
-        * it's a regular file, and
-        * the desired window size is greater than 0 (One could use ioctl
-        * command EXT2_IOC_SETRSVSZ to set the window size to 0 to turn off
-        * reservation on that particular file)
+        * Allocate a block from reservation only when the filesystem is
+        * mounted with reservation(default,-o reservation), and it's a regular
+        * file, and the desired window size is greater than 0 (One could use
+        * ioctl command EXT2_IOC_SETRSVSZ to set the window size to 0 to turn
+        * off reservation on that particular file). Also do not use the
+        * reservation window if the caller asked us not to do it.
         */
        block_i = EXT2_I(inode)->i_block_alloc_info;
-       if (block_i) {
+       if (!(flags & EXT2_ALLOC_NORESERVE) && block_i) {
                windowsz = block_i->rsv_window_node.rsv_goal_size;
                if (windowsz > 0)
                        my_rsv = &block_i->rsv_window_node;
@@@ -1429,13 -1428,6 +1426,6 @@@ out
        return 0;
  }
  
- ext2_fsblk_t ext2_new_block(struct inode *inode, unsigned long goal, int *errp)
- {
-       unsigned long count = 1;
-       return ext2_new_blocks(inode, goal, &count, errp);
- }
  #ifdef EXT2FS_DEBUG
  
  unsigned long ext2_count_free(struct buffer_head *map, unsigned int numchars)
diff --combined fs/ext2/ialloc.c
@@@ -273,7 -273,6 +273,6 @@@ static int find_group_orlov(struct supe
  
        if ((parent == d_inode(sb->s_root)) ||
            (EXT2_I(parent)->i_flags & EXT2_TOPDIR_FL)) {
-               struct ext2_group_desc *best_desc = NULL;
                int best_ndir = inodes_per_group;
                int best_group = -1;
  
                                continue;
                        best_group = group;
                        best_ndir = le16_to_cpu(desc->bg_used_dirs_count);
-                       best_desc = desc;
                }
                if (best_group >= 0) {
-                       desc = best_desc;
                        group = best_group;
                        goto found;
                }
@@@ -549,7 -546,7 +546,7 @@@ got
  
        inode->i_ino = ino;
        inode->i_blocks = 0;
 -      inode->i_mtime = inode->i_atime = inode->i_ctime = current_time(inode);
 +      inode->i_mtime = inode->i_atime = inode_set_ctime_current(inode);
        memset(ei->i_data, 0, sizeof(ei->i_data));
        ei->i_flags =
                ext2_mask_flags(mode, EXT2_I(dir)->i_flags & EXT2_FL_INHERITED);
diff --combined fs/ext2/inode.c
@@@ -385,12 -385,16 +385,16 @@@ ext2_blks_to_allocate(Indirect * branch
  }
  
  /**
-  *    ext2_alloc_blocks: multiple allocate blocks needed for a branch
-  *    @indirect_blks: the number of blocks need to allocate for indirect
-  *                    blocks
-  *    @blks: the number of blocks need to allocate for direct blocks
-  *    @new_blocks: on return it will store the new block numbers for
-  *    the indirect blocks(if needed) and the first direct block,
+  * ext2_alloc_blocks: Allocate multiple blocks needed for a branch.
+  * @inode: Owner.
+  * @goal: Preferred place for allocation.
+  * @indirect_blks: The number of blocks needed to allocate for indirect blocks.
+  * @blks: The number of blocks need to allocate for direct blocks.
+  * @new_blocks: On return it will store the new block numbers for
+  *    the indirect blocks(if needed) and the first direct block.
+  * @err: Error pointer.
+  *
+  * Return: Number of blocks allocated.
   */
  static int ext2_alloc_blocks(struct inode *inode,
                        ext2_fsblk_t goal, int indirect_blks, int blks,
        while (1) {
                count = target;
                /* allocating blocks for indirect blocks and direct blocks */
-               current_block = ext2_new_blocks(inode,goal,&count,err);
+               current_block = ext2_new_blocks(inode, goal, &count, err, 0);
                if (*err)
                        goto failed_out;
  
@@@ -595,7 -599,7 +599,7 @@@ static void ext2_splice_branch(struct i
        if (where->bh)
                mark_buffer_dirty_inode(where->bh, inode);
  
 -      inode->i_ctime = current_time(inode);
 +      inode_set_ctime_current(inode);
        mark_inode_dirty(inode);
  }
  
@@@ -1082,8 -1086,8 +1086,8 @@@ no_top
   */
  static inline void ext2_free_data(struct inode *inode, __le32 *p, __le32 *q)
  {
-       unsigned long block_to_free = 0, count = 0;
-       unsigned long nr;
+       ext2_fsblk_t block_to_free = 0, count = 0;
+       ext2_fsblk_t nr;
  
        for ( ; p < q ; p++) {
                nr = le32_to_cpu(*p);
  static void ext2_free_branches(struct inode *inode, __le32 *p, __le32 *q, int depth)
  {
        struct buffer_head * bh;
-       unsigned long nr;
+       ext2_fsblk_t nr;
  
        if (depth--) {
                int addr_per_block = EXT2_ADDR_PER_BLOCK(inode->i_sb);
@@@ -1287,7 -1291,7 +1291,7 @@@ static int ext2_setsize(struct inode *i
        __ext2_truncate_blocks(inode, newsize);
        filemap_invalidate_unlock(inode->i_mapping);
  
 -      inode->i_mtime = inode->i_ctime = current_time(inode);
 +      inode->i_mtime = inode_set_ctime_current(inode);
        if (inode_needs_sync(inode)) {
                sync_mapping_buffers(inode->i_mapping);
                sync_inode_metadata(inode, 1);
@@@ -1409,9 -1413,9 +1413,9 @@@ struct inode *ext2_iget (struct super_b
        set_nlink(inode, le16_to_cpu(raw_inode->i_links_count));
        inode->i_size = le32_to_cpu(raw_inode->i_size);
        inode->i_atime.tv_sec = (signed)le32_to_cpu(raw_inode->i_atime);
 -      inode->i_ctime.tv_sec = (signed)le32_to_cpu(raw_inode->i_ctime);
 +      inode_set_ctime(inode, (signed)le32_to_cpu(raw_inode->i_ctime), 0);
        inode->i_mtime.tv_sec = (signed)le32_to_cpu(raw_inode->i_mtime);
 -      inode->i_atime.tv_nsec = inode->i_mtime.tv_nsec = inode->i_ctime.tv_nsec = 0;
 +      inode->i_atime.tv_nsec = inode->i_mtime.tv_nsec = 0;
        ei->i_dtime = le32_to_cpu(raw_inode->i_dtime);
        /* We now have enough fields to check if the inode was active or not.
         * This is needed because nfsd might try to access dead inodes
@@@ -1541,7 -1545,7 +1545,7 @@@ static int __ext2_write_inode(struct in
        raw_inode->i_links_count = cpu_to_le16(inode->i_nlink);
        raw_inode->i_size = cpu_to_le32(inode->i_size);
        raw_inode->i_atime = cpu_to_le32(inode->i_atime.tv_sec);
 -      raw_inode->i_ctime = cpu_to_le32(inode->i_ctime.tv_sec);
 +      raw_inode->i_ctime = cpu_to_le32(inode_get_ctime(inode).tv_sec);
        raw_inode->i_mtime = cpu_to_le32(inode->i_mtime.tv_sec);
  
        raw_inode->i_blocks = cpu_to_le32(inode->i_blocks);
@@@ -1628,7 -1632,7 +1632,7 @@@ int ext2_getattr(struct mnt_idmap *idma
                        STATX_ATTR_IMMUTABLE |
                        STATX_ATTR_NODUMP);
  
 -      generic_fillattr(&nop_mnt_idmap, inode, stat);
 +      generic_fillattr(&nop_mnt_idmap, request_mask, inode, stat);
        return 0;
  }
  
diff --combined fs/ext2/xattr.c
@@@ -742,10 -742,13 +742,13 @@@ ext2_xattr_set2(struct inode *inode, st
                        /* We need to allocate a new block */
                        ext2_fsblk_t goal = ext2_group_first_block_no(sb,
                                                EXT2_I(inode)->i_block_group);
-                       int block = ext2_new_block(inode, goal, &error);
+                       unsigned long count = 1;
+                       ext2_fsblk_t block = ext2_new_blocks(inode, goal,
+                                               &count, &error,
+                                               EXT2_ALLOC_NORESERVE);
                        if (error)
                                goto cleanup;
-                       ea_idebug(inode, "creating block %d", block);
+                       ea_idebug(inode, "creating block %lu", block);
  
                        new_bh = sb_getblk(sb, block);
                        if (unlikely(!new_bh)) {
  
        /* Update the inode. */
        EXT2_I(inode)->i_file_acl = new_bh ? new_bh->b_blocknr : 0;
 -      inode->i_ctime = current_time(inode);
 +      inode_set_ctime_current(inode);
        if (IS_SYNC(inode)) {
                error = sync_inode_metadata(inode, 1);
                /* In case sync failed due to ENOSPC the inode was actually
diff --combined fs/quota/dquot.c
@@@ -225,13 -225,22 +225,22 @@@ static void put_quota_format(struct quo
  
  /*
   * Dquot List Management:
-  * The quota code uses four lists for dquot management: the inuse_list,
-  * free_dquots, dqi_dirty_list, and dquot_hash[] array. A single dquot
-  * structure may be on some of those lists, depending on its current state.
+  * The quota code uses five lists for dquot management: the inuse_list,
+  * releasing_dquots, free_dquots, dqi_dirty_list, and dquot_hash[] array.
+  * A single dquot structure may be on some of those lists, depending on
+  * its current state.
   *
   * All dquots are placed to the end of inuse_list when first created, and this
   * list is used for invalidate operation, which must look at every dquot.
   *
+  * When the last reference of a dquot will be dropped, the dquot will be
+  * added to releasing_dquots. We'd then queue work item which would call
+  * synchronize_srcu() and after that perform the final cleanup of all the
+  * dquots on the list. Both releasing_dquots and free_dquots use the
+  * dq_free list_head in the dquot struct. When a dquot is removed from
+  * releasing_dquots, a reference count is always subtracted, and if
+  * dq_count == 0 at that point, the dquot will be added to the free_dquots.
+  *
   * Unused dquots (dq_count == 0) are added to the free_dquots list when freed,
   * and this list is searched whenever we need an available dquot.  Dquots are
   * removed from the list as soon as they are used again, and
  
  static LIST_HEAD(inuse_list);
  static LIST_HEAD(free_dquots);
+ static LIST_HEAD(releasing_dquots);
  static unsigned int dq_hash_bits, dq_hash_mask;
  static struct hlist_head *dquot_hash;
  
@@@ -260,6 -270,9 +270,9 @@@ static qsize_t inode_get_rsv_space(stru
  static qsize_t __inode_get_rsv_space(struct inode *inode);
  static int __dquot_initialize(struct inode *inode, int type);
  
+ static void quota_release_workfn(struct work_struct *work);
+ static DECLARE_DELAYED_WORK(quota_release_work, quota_release_workfn);
  static inline unsigned int
  hashfn(const struct super_block *sb, struct kqid qid)
  {
@@@ -305,12 -318,18 +318,18 @@@ static inline void put_dquot_last(struc
        dqstats_inc(DQST_FREE_DQUOTS);
  }
  
+ static inline void put_releasing_dquots(struct dquot *dquot)
+ {
+       list_add_tail(&dquot->dq_free, &releasing_dquots);
+ }
  static inline void remove_free_dquot(struct dquot *dquot)
  {
        if (list_empty(&dquot->dq_free))
                return;
        list_del_init(&dquot->dq_free);
-       dqstats_dec(DQST_FREE_DQUOTS);
+       if (!atomic_read(&dquot->dq_count))
+               dqstats_dec(DQST_FREE_DQUOTS);
  }
  
  static inline void put_inuse(struct dquot *dquot)
@@@ -336,6 -355,11 +355,11 @@@ static void wait_on_dquot(struct dquot 
        mutex_unlock(&dquot->dq_lock);
  }
  
+ static inline int dquot_active(struct dquot *dquot)
+ {
+       return test_bit(DQ_ACTIVE_B, &dquot->dq_flags);
+ }
  static inline int dquot_dirty(struct dquot *dquot)
  {
        return test_bit(DQ_MOD_B, &dquot->dq_flags);
@@@ -351,14 -375,14 +375,14 @@@ int dquot_mark_dquot_dirty(struct dquo
  {
        int ret = 1;
  
-       if (!test_bit(DQ_ACTIVE_B, &dquot->dq_flags))
+       if (!dquot_active(dquot))
                return 0;
  
        if (sb_dqopt(dquot->dq_sb)->flags & DQUOT_NOLIST_DIRTY)
                return test_and_set_bit(DQ_MOD_B, &dquot->dq_flags);
  
        /* If quota is dirty already, we don't have to acquire dq_list_lock */
-       if (test_bit(DQ_MOD_B, &dquot->dq_flags))
+       if (dquot_dirty(dquot))
                return 1;
  
        spin_lock(&dq_list_lock);
@@@ -440,7 -464,7 +464,7 @@@ int dquot_acquire(struct dquot *dquot
        smp_mb__before_atomic();
        set_bit(DQ_READ_B, &dquot->dq_flags);
        /* Instantiate dquot if needed */
-       if (!test_bit(DQ_ACTIVE_B, &dquot->dq_flags) && !dquot->dq_off) {
+       if (!dquot_active(dquot) && !dquot->dq_off) {
                ret = dqopt->ops[dquot->dq_id.type]->commit_dqblk(dquot);
                /* Write the info if needed */
                if (info_dirty(&dqopt->info[dquot->dq_id.type])) {
@@@ -482,7 -506,7 +506,7 @@@ int dquot_commit(struct dquot *dquot
                goto out_lock;
        /* Inactive dquot can be only if there was error during read/init
         * => we have better not writing it */
-       if (test_bit(DQ_ACTIVE_B, &dquot->dq_flags))
+       if (dquot_active(dquot))
                ret = dqopt->ops[dquot->dq_id.type]->commit_dqblk(dquot);
        else
                ret = -EIO;
@@@ -547,6 -571,8 +571,8 @@@ static void invalidate_dquots(struct su
        struct dquot *dquot, *tmp;
  
  restart:
+       flush_delayed_work(&quota_release_work);
        spin_lock(&dq_list_lock);
        list_for_each_entry_safe(dquot, tmp, &inuse_list, dq_inuse) {
                if (dquot->dq_sb != sb)
                        continue;
                /* Wait for dquot users */
                if (atomic_read(&dquot->dq_count)) {
+                       /* dquot in releasing_dquots, flush and retry */
+                       if (!list_empty(&dquot->dq_free)) {
+                               spin_unlock(&dq_list_lock);
+                               goto restart;
+                       }
                        atomic_inc(&dquot->dq_count);
                        spin_unlock(&dq_list_lock);
                        /*
@@@ -597,7 -629,7 +629,7 @@@ int dquot_scan_active(struct super_bloc
  
        spin_lock(&dq_list_lock);
        list_for_each_entry(dquot, &inuse_list, dq_inuse) {
-               if (!test_bit(DQ_ACTIVE_B, &dquot->dq_flags))
+               if (!dquot_active(dquot))
                        continue;
                if (dquot->dq_sb != sb)
                        continue;
                 * outstanding call and recheck the DQ_ACTIVE_B after that.
                 */
                wait_on_dquot(dquot);
-               if (test_bit(DQ_ACTIVE_B, &dquot->dq_flags)) {
+               if (dquot_active(dquot)) {
                        ret = fn(dquot, priv);
                        if (ret < 0)
                                goto out;
@@@ -628,6 -660,18 +660,18 @@@ out
  }
  EXPORT_SYMBOL(dquot_scan_active);
  
+ static inline int dquot_write_dquot(struct dquot *dquot)
+ {
+       int ret = dquot->dq_sb->dq_op->write_dquot(dquot);
+       if (ret < 0) {
+               quota_error(dquot->dq_sb, "Can't write quota structure "
+                           "(error %d). Quota may get out of sync!", ret);
+               /* Clear dirty bit anyway to avoid infinite loop. */
+               clear_dquot_dirty(dquot);
+       }
+       return ret;
+ }
  /* Write all dquot structures to quota files */
  int dquot_writeback_dquots(struct super_block *sb, int type)
  {
                        dquot = list_first_entry(&dirty, struct dquot,
                                                 dq_dirty);
  
-                       WARN_ON(!test_bit(DQ_ACTIVE_B, &dquot->dq_flags));
+                       WARN_ON(!dquot_active(dquot));
  
                        /* Now we have active dquot from which someone is
                         * holding reference so we can safely just increase
                         * use count */
                        dqgrab(dquot);
                        spin_unlock(&dq_list_lock);
-                       err = sb->dq_op->write_dquot(dquot);
-                       if (err) {
-                               /*
-                                * Clear dirty bit anyway to avoid infinite
-                                * loop here.
-                                */
-                               clear_dquot_dirty(dquot);
-                               if (!ret)
-                                       ret = err;
-                       }
+                       err = dquot_write_dquot(dquot);
+                       if (err && !ret)
+                               ret = err;
                        dqput(dquot);
                        spin_lock(&dq_list_lock);
                }
@@@ -760,13 -797,54 +797,54 @@@ static struct shrinker dqcache_shrinke
        .seeks = DEFAULT_SEEKS,
  };
  
+ /*
+  * Safely release dquot and put reference to dquot.
+  */
+ static void quota_release_workfn(struct work_struct *work)
+ {
+       struct dquot *dquot;
+       struct list_head rls_head;
+       spin_lock(&dq_list_lock);
+       /* Exchange the list head to avoid livelock. */
+       list_replace_init(&releasing_dquots, &rls_head);
+       spin_unlock(&dq_list_lock);
+ restart:
+       synchronize_srcu(&dquot_srcu);
+       spin_lock(&dq_list_lock);
+       while (!list_empty(&rls_head)) {
+               dquot = list_first_entry(&rls_head, struct dquot, dq_free);
+               /* Dquot got used again? */
+               if (atomic_read(&dquot->dq_count) > 1) {
+                       remove_free_dquot(dquot);
+                       atomic_dec(&dquot->dq_count);
+                       continue;
+               }
+               if (dquot_dirty(dquot)) {
+                       spin_unlock(&dq_list_lock);
+                       /* Commit dquot before releasing */
+                       dquot_write_dquot(dquot);
+                       goto restart;
+               }
+               if (dquot_active(dquot)) {
+                       spin_unlock(&dq_list_lock);
+                       dquot->dq_sb->dq_op->release_dquot(dquot);
+                       goto restart;
+               }
+               /* Dquot is inactive and clean, now move it to free list */
+               remove_free_dquot(dquot);
+               atomic_dec(&dquot->dq_count);
+               put_dquot_last(dquot);
+       }
+       spin_unlock(&dq_list_lock);
+ }
  /*
   * Put reference to dquot
   */
  void dqput(struct dquot *dquot)
  {
-       int ret;
        if (!dquot)
                return;
  #ifdef CONFIG_QUOTA_DEBUG
        }
  #endif
        dqstats_inc(DQST_DROPS);
- we_slept:
        spin_lock(&dq_list_lock);
        if (atomic_read(&dquot->dq_count) > 1) {
                /* We have more than one user... nothing to do */
                spin_unlock(&dq_list_lock);
                return;
        }
        /* Need to release dquot? */
-       if (dquot_dirty(dquot)) {
-               spin_unlock(&dq_list_lock);
-               /* Commit dquot before releasing */
-               ret = dquot->dq_sb->dq_op->write_dquot(dquot);
-               if (ret < 0) {
-                       quota_error(dquot->dq_sb, "Can't write quota structure"
-                                   " (error %d). Quota may get out of sync!",
-                                   ret);
-                       /*
-                        * We clear dirty bit anyway, so that we avoid
-                        * infinite loop here
-                        */
-                       clear_dquot_dirty(dquot);
-               }
-               goto we_slept;
-       }
-       if (test_bit(DQ_ACTIVE_B, &dquot->dq_flags)) {
-               spin_unlock(&dq_list_lock);
-               dquot->dq_sb->dq_op->release_dquot(dquot);
-               goto we_slept;
-       }
-       atomic_dec(&dquot->dq_count);
  #ifdef CONFIG_QUOTA_DEBUG
        /* sanity check */
        BUG_ON(!list_empty(&dquot->dq_free));
  #endif
-       put_dquot_last(dquot);
+       put_releasing_dquots(dquot);
        spin_unlock(&dq_list_lock);
+       queue_delayed_work(system_unbound_wq, &quota_release_work, 1);
  }
  EXPORT_SYMBOL(dqput);
  
@@@ -908,7 -966,7 +966,7 @@@ we_slept
         * already finished or it will be canceled due to dq_count > 1 test */
        wait_on_dquot(dquot);
        /* Read the dquot / allocate space in quota file */
-       if (!test_bit(DQ_ACTIVE_B, &dquot->dq_flags)) {
+       if (!dquot_active(dquot)) {
                int err;
  
                err = sb->dq_op->acquire_dquot(dquot);
@@@ -1014,59 -1072,7 +1072,7 @@@ out
        return err;
  }
  
- /*
-  * Remove references to dquots from inode and add dquot to list for freeing
-  * if we have the last reference to dquot
-  */
- static void remove_inode_dquot_ref(struct inode *inode, int type,
-                                  struct list_head *tofree_head)
- {
-       struct dquot **dquots = i_dquot(inode);
-       struct dquot *dquot = dquots[type];
-       if (!dquot)
-               return;
-       dquots[type] = NULL;
-       if (list_empty(&dquot->dq_free)) {
-               /*
-                * The inode still has reference to dquot so it can't be in the
-                * free list
-                */
-               spin_lock(&dq_list_lock);
-               list_add(&dquot->dq_free, tofree_head);
-               spin_unlock(&dq_list_lock);
-       } else {
-               /*
-                * Dquot is already in a list to put so we won't drop the last
-                * reference here.
-                */
-               dqput(dquot);
-       }
- }
- /*
-  * Free list of dquots
-  * Dquots are removed from inodes and no new references can be got so we are
-  * the only ones holding reference
-  */
- static void put_dquot_list(struct list_head *tofree_head)
- {
-       struct list_head *act_head;
-       struct dquot *dquot;
-       act_head = tofree_head->next;
-       while (act_head != tofree_head) {
-               dquot = list_entry(act_head, struct dquot, dq_free);
-               act_head = act_head->next;
-               /* Remove dquot from the list so we won't have problems... */
-               list_del_init(&dquot->dq_free);
-               dqput(dquot);
-       }
- }
- static void remove_dquot_ref(struct super_block *sb, int type,
-               struct list_head *tofree_head)
+ static void remove_dquot_ref(struct super_block *sb, int type)
  {
        struct inode *inode;
  #ifdef CONFIG_QUOTA_DEBUG
                 */
                spin_lock(&dq_data_lock);
                if (!IS_NOQUOTA(inode)) {
+                       struct dquot **dquots = i_dquot(inode);
+                       struct dquot *dquot = dquots[type];
  #ifdef CONFIG_QUOTA_DEBUG
                        if (unlikely(inode_get_rsv_space(inode) > 0))
                                reserved = 1;
  #endif
-                       remove_inode_dquot_ref(inode, type, tofree_head);
+                       dquots[type] = NULL;
+                       if (dquot)
+                               dqput(dquot);
                }
                spin_unlock(&dq_data_lock);
        }
  /* Gather all references from inodes and drop them */
  static void drop_dquot_ref(struct super_block *sb, int type)
  {
-       LIST_HEAD(tofree_head);
-       if (sb->dq_op) {
-               remove_dquot_ref(sb, type, &tofree_head);
-               synchronize_srcu(&dquot_srcu);
-               put_dquot_list(&tofree_head);
-       }
+       if (sb->dq_op)
+               remove_dquot_ref(sb, type);
  }
  
  static inline
@@@ -1425,7 -1431,7 +1431,7 @@@ static int info_bdq_free(struct dquot *
        return QUOTA_NL_NOWARN;
  }
  
- static int dquot_active(const struct inode *inode)
+ static int inode_quota_active(const struct inode *inode)
  {
        struct super_block *sb = inode->i_sb;
  
@@@ -1448,7 -1454,7 +1454,7 @@@ static int __dquot_initialize(struct in
        qsize_t rsv;
        int ret = 0;
  
-       if (!dquot_active(inode))
+       if (!inode_quota_active(inode))
                return 0;
  
        dquots = i_dquot(inode);
@@@ -1556,7 -1562,7 +1562,7 @@@ bool dquot_initialize_needed(struct ino
        struct dquot **dquots;
        int i;
  
-       if (!dquot_active(inode))
+       if (!inode_quota_active(inode))
                return false;
  
        dquots = i_dquot(inode);
@@@ -1667,7 -1673,7 +1673,7 @@@ int __dquot_alloc_space(struct inode *i
        int reserve = flags & DQUOT_SPACE_RESERVE;
        struct dquot **dquots;
  
-       if (!dquot_active(inode)) {
+       if (!inode_quota_active(inode)) {
                if (reserve) {
                        spin_lock(&inode->i_lock);
                        *inode_reserved_space(inode) += number;
@@@ -1737,7 -1743,7 +1743,7 @@@ int dquot_alloc_inode(struct inode *ino
        struct dquot_warn warn[MAXQUOTAS];
        struct dquot * const *dquots;
  
-       if (!dquot_active(inode))
+       if (!inode_quota_active(inode))
                return 0;
        for (cnt = 0; cnt < MAXQUOTAS; cnt++)
                warn[cnt].w_type = QUOTA_NL_NOWARN;
@@@ -1780,7 -1786,7 +1786,7 @@@ int dquot_claim_space_nodirty(struct in
        struct dquot **dquots;
        int cnt, index;
  
-       if (!dquot_active(inode)) {
+       if (!inode_quota_active(inode)) {
                spin_lock(&inode->i_lock);
                *inode_reserved_space(inode) -= number;
                __inode_add_bytes(inode, number);
@@@ -1822,7 -1828,7 +1828,7 @@@ void dquot_reclaim_space_nodirty(struc
        struct dquot **dquots;
        int cnt, index;
  
-       if (!dquot_active(inode)) {
+       if (!inode_quota_active(inode)) {
                spin_lock(&inode->i_lock);
                *inode_reserved_space(inode) += number;
                __inode_sub_bytes(inode, number);
@@@ -1866,7 -1872,7 +1872,7 @@@ void __dquot_free_space(struct inode *i
        struct dquot **dquots;
        int reserve = flags & DQUOT_SPACE_RESERVE, index;
  
-       if (!dquot_active(inode)) {
+       if (!inode_quota_active(inode)) {
                if (reserve) {
                        spin_lock(&inode->i_lock);
                        *inode_reserved_space(inode) -= number;
@@@ -1921,7 -1927,7 +1927,7 @@@ void dquot_free_inode(struct inode *ino
        struct dquot * const *dquots;
        int index;
  
-       if (!dquot_active(inode))
+       if (!inode_quota_active(inode))
                return;
  
        dquots = i_dquot(inode);
@@@ -2093,7 -2099,7 +2099,7 @@@ int dquot_transfer(struct mnt_idmap *id
        struct super_block *sb = inode->i_sb;
        int ret;
  
-       if (!dquot_active(inode))
+       if (!inode_quota_active(inode))
                return 0;
  
        if (i_uid_needs_update(idmap, iattr, inode)) {
@@@ -2359,15 -2365,14 +2365,14 @@@ int dquot_load_quota_sb(struct super_bl
        struct quota_info *dqopt = sb_dqopt(sb);
        int error;
  
+       lockdep_assert_held_write(&sb->s_umount);
        /* Just unsuspend quotas? */
        BUG_ON(flags & DQUOT_SUSPENDED);
-       /* s_umount should be held in exclusive mode */
-       if (WARN_ON_ONCE(down_read_trylock(&sb->s_umount)))
-               up_read(&sb->s_umount);
  
        if (!fmt)
                return -ESRCH;
 -      if (!sb->s_op->quota_write || !sb->s_op->quota_read ||
 +      if (!sb->dq_op || !sb->s_qcop ||
            (type == PRJQUOTA && sb->dq_op->get_projid == NULL)) {
                error = -EINVAL;
                goto out_fmt;
diff --combined fs/udf/inode.c
@@@ -352,8 -352,6 +352,6 @@@ int udf_expand_file_adinicb(struct inod
                        iinfo->i_alloc_type = ICBTAG_FLAG_AD_SHORT;
                else
                        iinfo->i_alloc_type = ICBTAG_FLAG_AD_LONG;
-               /* from now on we have normal address_space methods */
-               inode->i_data.a_ops = &udf_aops;
                up_write(&iinfo->i_data_sem);
                mark_inode_dirty(inode);
                return 0;
@@@ -910,7 -908,7 +908,7 @@@ static int inode_getblk(struct inode *i
        map->oflags = UDF_BLK_NEW | UDF_BLK_MAPPED;
        iinfo->i_next_alloc_block = map->lblk + 1;
        iinfo->i_next_alloc_goal = newblocknum + 1;
 -      inode->i_ctime = current_time(inode);
 +      inode_set_ctime_current(inode);
  
        if (IS_SYNC(inode))
                udf_sync_inode(inode);
@@@ -1298,7 -1296,7 +1296,7 @@@ set_size
                        goto out_unlock;
        }
  update_time:
 -      inode->i_mtime = inode->i_ctime = current_time(inode);
 +      inode->i_mtime = inode_set_ctime_current(inode);
        if (IS_SYNC(inode))
                udf_sync_inode(inode);
        else
@@@ -1329,7 -1327,6 +1327,7 @@@ static int udf_read_inode(struct inode 
        int bs = inode->i_sb->s_blocksize;
        int ret = -EIO;
        uint32_t uid, gid;
 +      struct timespec64 ctime;
  
  reread:
        if (iloc->partitionReferenceNum >= sbi->s_partitions) {
  
                udf_disk_stamp_to_time(&inode->i_atime, fe->accessTime);
                udf_disk_stamp_to_time(&inode->i_mtime, fe->modificationTime);
 -              udf_disk_stamp_to_time(&inode->i_ctime, fe->attrTime);
 +              udf_disk_stamp_to_time(&ctime, fe->attrTime);
 +              inode_set_ctime_to_ts(inode, ctime);
  
                iinfo->i_unique = le64_to_cpu(fe->uniqueID);
                iinfo->i_lenEAttr = le32_to_cpu(fe->lengthExtendedAttr);
                udf_disk_stamp_to_time(&inode->i_atime, efe->accessTime);
                udf_disk_stamp_to_time(&inode->i_mtime, efe->modificationTime);
                udf_disk_stamp_to_time(&iinfo->i_crtime, efe->createTime);
 -              udf_disk_stamp_to_time(&inode->i_ctime, efe->attrTime);
 +              udf_disk_stamp_to_time(&ctime, efe->attrTime);
 +              inode_set_ctime_to_ts(inode, ctime);
  
                iinfo->i_unique = le64_to_cpu(efe->uniqueID);
                iinfo->i_lenEAttr = le32_to_cpu(efe->lengthExtendedAttr);
@@@ -1802,7 -1797,7 +1800,7 @@@ static int udf_update_inode(struct inod
  
                udf_time_to_disk_stamp(&fe->accessTime, inode->i_atime);
                udf_time_to_disk_stamp(&fe->modificationTime, inode->i_mtime);
 -              udf_time_to_disk_stamp(&fe->attrTime, inode->i_ctime);
 +              udf_time_to_disk_stamp(&fe->attrTime, inode_get_ctime(inode));
                memset(&(fe->impIdent), 0, sizeof(struct regid));
                strcpy(fe->impIdent.ident, UDF_ID_DEVELOPER);
                fe->impIdent.identSuffix[0] = UDF_OS_CLASS_UNIX;
  
                udf_adjust_time(iinfo, inode->i_atime);
                udf_adjust_time(iinfo, inode->i_mtime);
 -              udf_adjust_time(iinfo, inode->i_ctime);
 +              udf_adjust_time(iinfo, inode_get_ctime(inode));
  
                udf_time_to_disk_stamp(&efe->accessTime, inode->i_atime);
                udf_time_to_disk_stamp(&efe->modificationTime, inode->i_mtime);
                udf_time_to_disk_stamp(&efe->createTime, iinfo->i_crtime);
 -              udf_time_to_disk_stamp(&efe->attrTime, inode->i_ctime);
 +              udf_time_to_disk_stamp(&efe->attrTime, inode_get_ctime(inode));
  
                memset(&(efe->impIdent), 0, sizeof(efe->impIdent));
                strcpy(efe->impIdent.ident, UDF_ID_DEVELOPER);