]> Git Repo - J-linux.git/commitdiff
Merge tag 'for-5.12/drivers-2021-02-17' of git://git.kernel.dk/linux-block
authorLinus Torvalds <[email protected]>
Sun, 21 Feb 2021 19:06:54 +0000 (11:06 -0800)
committerLinus Torvalds <[email protected]>
Sun, 21 Feb 2021 19:06:54 +0000 (11:06 -0800)
Pull block driver updates from Jens Axboe:

 - Remove the skd driver. It's been EOL for a long time (Damien)

 - NVMe pull requests
      - fix multipath handling of ->queue_rq errors (Chao Leng)
      - nvmet cleanups (Chaitanya Kulkarni)
      - add a quirk for buggy Amazon controller (Filippo Sironi)
      - avoid devm allocations in nvme-hwmon that don't interact well
        with fabrics (Hannes Reinecke)
      - sysfs cleanups (Jiapeng Chong)
      - fix nr_zones for multipath (Keith Busch)
      - nvme-tcp crash fix for no-data commands (Sagi Grimberg)
      - nvmet-tcp fixes (Sagi Grimberg)
      - add a missing __rcu annotation (Christoph)
      - failed reconnect fixes (Chao Leng)
      - various tracing improvements (Michal Krakowiak, Johannes
        Thumshirn)
      - switch the nvmet-fc assoc_list to use RCU protection (Leonid
        Ravich)
      - resync the status codes with the latest spec (Max Gurtovoy)
      - minor nvme-tcp improvements (Sagi Grimberg)
      - various cleanups (Rikard Falkeborn, Minwoo Im, Chaitanya
        Kulkarni, Israel Rukshin)

 - Floppy O_NDELAY fix (Denis)

 - MD pull request
      - raid5 chunk_sectors fix (Guoqing)

 - Use lore links (Kees)

 - Use DEFINE_SHOW_ATTRIBUTE for nbd (Liao)

 - loop lock scaling (Pavel)

 - mtip32xx PCI fixes (Bjorn)

 - bcache fixes (Kai, Dongdong)

 - Misc fixes (Tian, Yang, Guoqing, Joe, Andy)

* tag 'for-5.12/drivers-2021-02-17' of git://git.kernel.dk/linux-block: (64 commits)
  lightnvm: pblk: Replace guid_copy() with export_guid()/import_guid()
  lightnvm: fix unnecessary NULL check warnings
  nvme-tcp: fix crash triggered with a dataless request submission
  block: Replace lkml.org links with lore
  nbd: Convert to DEFINE_SHOW_ATTRIBUTE
  nvme: add 48-bit DMA address quirk for Amazon NVMe controllers
  nvme-hwmon: rework to avoid devm allocation
  nvmet: remove else at the end of the function
  nvmet: add nvmet_req_subsys() helper
  nvmet: use min of device_path and disk len
  nvmet: use invalid cmd opcode helper
  nvmet: use invalid cmd opcode helper
  nvmet: add helper to report invalid opcode
  nvmet: remove extra variable in id-ns handler
  nvmet: make nvmet_find_namespace() req based
  nvmet: return uniform error for invalid ns
  nvmet: set status to 0 in case for invalid nsid
  nvmet-fc: add a missing __rcu annotation to nvmet_fc_tgt_assoc.queues
  nvme-multipath: set nr_zones for zoned namespaces
  nvmet-tcp: fix potential race of tcp socket closing accept_work
  ...

1  2 
MAINTAINERS
drivers/block/drbd/drbd_int.h
drivers/block/drbd/drbd_main.c
drivers/block/drbd/drbd_req.c
drivers/block/nbd.c
drivers/md/raid5.c
drivers/nvme/host/core.c
drivers/nvme/host/multipath.c
drivers/nvme/host/pci.c
drivers/nvme/target/io-cmd-bdev.c
drivers/nvme/target/tcp.c

diff --combined MAINTAINERS
index 01c2666610f4dad8b7153698d7fab2685e5dd486,f4766335189a4bb7c9e39ed221f5cea7de04a649..abcf7e894a3748d9a260f94216f22e10868444d7
@@@ -1413,6 -1413,7 +1413,6 @@@ F:      arch/arm*/include/asm/hw_breakpoint.
  F:    arch/arm*/include/asm/perf_event.h
  F:    arch/arm*/kernel/hw_breakpoint.c
  F:    arch/arm*/kernel/perf_*
 -F:    arch/arm/oprofile/common.c
  F:    drivers/perf/
  F:    include/linux/perf/arm_pmu.h
  
@@@ -1510,7 -1511,6 +1510,7 @@@ ARM/ACTIONS SEMI ARCHITECTUR
  M:    Andreas Färber <[email protected]>
  M:    Manivannan Sadhasivam <[email protected]>
  L:    [email protected] (moderated for non-subscribers)
 +L:    [email protected] (moderated for non-subscribers)
  S:    Maintained
  F:    Documentation/devicetree/bindings/arm/actions.yaml
  F:    Documentation/devicetree/bindings/clock/actions,owl-cmu.txt
@@@ -1778,6 -1778,19 +1778,6 @@@ F:     drivers/net/ethernet/cortina
  F:    drivers/pinctrl/pinctrl-gemini.c
  F:    drivers/rtc/rtc-ftrtc010.c
  
 -ARM/CSR SIRFPRIMA2 MACHINE SUPPORT
 -M:    Barry Song <[email protected]>
 -L:    [email protected] (moderated for non-subscribers)
 -S:    Maintained
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/baohua/linux.git
 -F:    arch/arm/boot/dts/prima2*
 -F:    arch/arm/mach-prima2/
 -F:    drivers/clk/sirf/
 -F:    drivers/clocksource/timer-atlas7.c
 -F:    drivers/clocksource/timer-prima2.c
 -X:    drivers/gnss
 -N:    [^a-z]sirf
 -
  ARM/CZ.NIC TURRIS MOX SUPPORT
  M:    Marek Behun <[email protected]>
  S:    Maintained
@@@ -1793,6 -1806,13 +1793,6 @@@ F:     drivers/firmware/turris-mox-rwtm.
  F:    drivers/gpio/gpio-moxtet.c
  F:    include/linux/moxtet.h
  
 -ARM/ENERGY MICRO (SILICON LABS) EFM32 SUPPORT
 -M:    Uwe Kleine-König <[email protected]>
 -R:    Pengutronix Kernel Team <[email protected]>
 -L:    [email protected] (moderated for non-subscribers)
 -S:    Maintained
 -N:    efm32
 -
  ARM/EZX SMARTPHONES (A780, A910, A1200, E680, ROKR E2 and ROKR E6)
  M:    Robert Jarzmik <[email protected]>
  L:    [email protected] (moderated for non-subscribers)
@@@ -2070,7 -2090,7 +2070,7 @@@ M:      Chunfeng Yun <chunfeng.yun@mediatek.
  L:    [email protected] (moderated for non-subscribers)
  L:    [email protected] (moderated for non-subscribers)
  S:    Maintained
 -F:    Documentation/devicetree/bindings/phy/phy-mtk-*
 +F:    Documentation/devicetree/bindings/phy/mediatek,*
  F:    drivers/phy/mediatek/
  
  ARM/Microchip (AT91) SoC support
@@@ -2135,7 -2155,7 +2135,7 @@@ ARM/NEC MOBILEPRO 900/c MACHINE SUPPOR
  M:    Michael Petchkovsky <[email protected]>
  S:    Maintained
  
 -ARM/NOMADIK/U300/Ux500 ARCHITECTURES
 +ARM/NOMADIK/Ux500 ARCHITECTURES
  M:    Linus Walleij <[email protected]>
  L:    [email protected] (moderated for non-subscribers)
  S:    Maintained
@@@ -2144,23 -2164,35 +2144,23 @@@ F:   Documentation/devicetree/bindings/ar
  F:    Documentation/devicetree/bindings/arm/ux500.yaml
  F:    Documentation/devicetree/bindings/arm/ux500/
  F:    Documentation/devicetree/bindings/i2c/i2c-nomadik.txt
 -F:    Documentation/devicetree/bindings/i2c/i2c-stu300.txt
  F:    arch/arm/boot/dts/ste-*
  F:    arch/arm/mach-nomadik/
 -F:    arch/arm/mach-u300/
  F:    arch/arm/mach-ux500/
  F:    drivers/clk/clk-nomadik.c
 -F:    drivers/clk/clk-u300.c
  F:    drivers/clocksource/clksrc-dbx500-prcmu.c
 -F:    drivers/clocksource/timer-u300.c
 -F:    drivers/dma/coh901318*
  F:    drivers/dma/ste_dma40*
  F:    drivers/hwspinlock/u8500_hsem.c
  F:    drivers/i2c/busses/i2c-nomadik.c
 -F:    drivers/i2c/busses/i2c-stu300.c
  F:    drivers/iio/adc/ab8500-gpadc.c
 -F:    drivers/mfd/ab3100*
  F:    drivers/mfd/ab8500*
  F:    drivers/mfd/abx500*
  F:    drivers/mfd/db8500*
  F:    drivers/mfd/dbx500*
  F:    drivers/pinctrl/nomadik/
 -F:    drivers/pinctrl/pinctrl-coh901*
 -F:    drivers/pinctrl/pinctrl-u300.c
 -F:    drivers/rtc/rtc-ab3100.c
  F:    drivers/rtc/rtc-ab8500.c
 -F:    drivers/rtc/rtc-coh901331.c
  F:    drivers/rtc/rtc-pl031.c
  F:    drivers/soc/ux500/
 -F:    drivers/watchdog/coh901327_wdt.c
  
  ARM/NUVOTON NPCM ARCHITECTURE
  M:    Avi Fishman <[email protected]>
@@@ -2382,8 -2414,6 +2382,8 @@@ F:      drivers/*/*s5pv210
  F:    drivers/memory/samsung/
  F:    drivers/soc/samsung/
  F:    drivers/tty/serial/samsung*
 +F:    include/linux/platform_data/*s3c*
 +F:    include/linux/serial_s3c.h
  F:    include/linux/soc/samsung/
  N:    exynos
  N:    s3c2410
@@@ -2527,6 -2557,13 +2527,6 @@@ F:     arch/arm/boot/dts/berlin
  F:    arch/arm/mach-berlin/
  F:    arch/arm64/boot/dts/synaptics/
  
 -ARM/TANGO ARCHITECTURE
 -M:    Marc Gonzalez <[email protected]>
 -M:    Mans Rullgard <[email protected]>
 -L:    [email protected]
 -S:    Odd Fixes
 -N:    tango
 -
  ARM/TECHNOLOGIC SYSTEMS TS7250 MACHINE SUPPORT
  M:    Lennert Buytenhek <[email protected]>
  L:    [email protected] (moderated for non-subscribers)
@@@ -2579,8 -2616,8 +2579,8 @@@ S:      Maintaine
  F:    drivers/power/reset/keystone-reset.c
  
  ARM/TEXAS INSTRUMENTS K3 ARCHITECTURE
 -M:    Tero Kristo <[email protected]>
  M:    Nishanth Menon <[email protected]>
 +M:    Tero Kristo <[email protected]>
  L:    [email protected] (moderated for non-subscribers)
  S:    Supported
  F:    Documentation/devicetree/bindings/arm/ti/k3.yaml
  S:    Supported
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/iwamatsu/linux-visconti.git
  F:    Documentation/devicetree/bindings/arm/toshiba.yaml
 +F:    Documentation/devicetree/bindings/net/toshiba,visconti-dwmac.yaml
  F:    Documentation/devicetree/bindings/pinctrl/toshiba,tmpv7700-pinctrl.yaml
 +F:    Documentation/devicetree/bindings/watchdog/toshiba,visconti-wdt.yaml
  F:    arch/arm64/boot/dts/toshiba/
 +F:    drivers/net/ethernet/stmicro/stmmac/dwmac-visconti.c
  F:    drivers/pinctrl/visconti/
 +F:    drivers/watchdog/visconti_wdt.c
  N:    visconti
  
  ARM/UNIPHIER ARCHITECTURE
@@@ -2690,6 -2723,40 +2690,6 @@@ S:     Maintaine
  F:    arch/arm/mach-pxa/include/mach/z2.h
  F:    arch/arm/mach-pxa/z2.c
  
 -ARM/ZTE ARCHITECTURE
 -M:    Jun Nie <[email protected]>
 -M:    Shawn Guo <[email protected]>
 -L:    [email protected] (moderated for non-subscribers)
 -S:    Maintained
 -F:    Documentation/devicetree/bindings/arm/zte.yaml
 -F:    Documentation/devicetree/bindings/clock/zx2967*.txt
 -F:    Documentation/devicetree/bindings/dma/zxdma.txt
 -F:    Documentation/devicetree/bindings/gpio/zx296702-gpio.txt
 -F:    Documentation/devicetree/bindings/i2c/i2c-zx2967.txt
 -F:    Documentation/devicetree/bindings/mmc/zx-dw-mshc.txt
 -F:    Documentation/devicetree/bindings/pinctrl/pinctrl-zx.txt
 -F:    Documentation/devicetree/bindings/reset/zte,zx2967-reset.txt
 -F:    Documentation/devicetree/bindings/soc/zte/
 -F:    Documentation/devicetree/bindings/sound/zte,*.txt
 -F:    Documentation/devicetree/bindings/thermal/zx2967-thermal.txt
 -F:    Documentation/devicetree/bindings/watchdog/zte,zx2967-wdt.txt
 -F:    arch/arm/boot/dts/zx2967*
 -F:    arch/arm/mach-zx/
 -F:    arch/arm64/boot/dts/zte/
 -F:    drivers/clk/zte/
 -F:    drivers/dma/zx_dma.c
 -F:    drivers/gpio/gpio-zx.c
 -F:    drivers/i2c/busses/i2c-zx2967.c
 -F:    drivers/mmc/host/dw_mmc-zx.*
 -F:    drivers/pinctrl/zte/
 -F:    drivers/soc/zte/
 -F:    drivers/thermal/zx2967_thermal.c
 -F:    drivers/watchdog/zx2967_wdt.c
 -F:    include/dt-bindings/clock/zx2967*.h
 -F:    include/dt-bindings/soc/zte,*.h
 -F:    sound/soc/codecs/zx_aud96p22.c
 -F:    sound/soc/zte/
 -
  ARM/ZYNQ ARCHITECTURE
  M:    Michal Simek <[email protected]>
  L:    [email protected] (moderated for non-subscribers)
@@@ -2698,7 -2765,6 +2698,7 @@@ W:      http://wiki.xilinx.co
  T:    git https://github.com/Xilinx/linux-xlnx.git
  F:    Documentation/devicetree/bindings/i2c/cdns,i2c-r1p10.yaml
  F:    Documentation/devicetree/bindings/i2c/xlnx,xps-iic-2.00.a.yaml
 +F:    Documentation/devicetree/bindings/spi/xlnx,zynq-qspi.yaml
  F:    arch/arm/mach-zynq/
  F:    drivers/block/xsysace.c
  F:    drivers/clocksource/timer-cadence-ttc.c
@@@ -2721,14 -2787,6 +2721,14 @@@ F:    arch/arm64
  F:    tools/testing/selftests/arm64/
  X:    arch/arm64/boot/dts/
  
 +ARROW SPEEDCHIPS XRS7000 SERIES ETHERNET SWITCH DRIVER
 +M:    George McCollister <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/net/dsa/arrow,xrs700x.yaml
 +F:    drivers/net/dsa/xrs700x/*
 +F:    net/dsa/tag_xrs700x.c
 +
  AS3645A LED FLASH CONTROLLER DRIVER
  M:    Sakari Ailus <[email protected]>
  L:    [email protected]
@@@ -3181,7 -3239,6 +3181,7 @@@ L:      [email protected]
  S:    Supported
  W:    http://sourceforge.net/projects/bonding/
  F:    drivers/net/bonding/
 +F:    include/net/bonding.h
  F:    include/uapi/linux/if_bonding.h
  
  BOSCH SENSORTEC BMA400 ACCELEROMETER IIO DRIVER
@@@ -3341,7 -3398,6 +3341,7 @@@ L:      [email protected] (sub
  S:    Supported
  F:    Documentation/devicetree/bindings/net/dsa/brcm,b53.yaml
  F:    drivers/net/dsa/b53/*
 +F:    include/linux/dsa/brcm.h
  F:    include/linux/platform_data/b53.h
  
  BROADCOM BCM2711/BCM2835 ARM ARCHITECTURE
@@@ -3355,7 -3411,7 +3355,7 @@@ F:      Documentation/devicetree/bindings/pc
  F:    drivers/pci/controller/pcie-brcmstb.c
  F:    drivers/staging/vc04_services
  N:    bcm2711
 -N:    bcm2835
 +N:    bcm283*
  
  BROADCOM BCM281XX/BCM11XXX/BCM216XX ARM ARCHITECTURE
  M:    Florian Fainelli <[email protected]>
@@@ -3379,15 -3435,6 +3379,15 @@@ F:    Documentation/devicetree/bindings/mi
  F:    arch/mips/bcm47xx/*
  F:    arch/mips/include/asm/mach-bcm47xx/*
  
 +BROADCOM BCM4908 ETHERNET DRIVER
 +M:    Rafał Miłecki <[email protected]>
 +M:    [email protected]
 +L:    [email protected]
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/net/brcm,bcm4908-enet.yaml
 +F:    drivers/net/ethernet/broadcom/bcm4908_enet.*
 +F:    drivers/net/ethernet/broadcom/unimac.h
 +
  BROADCOM BCM5301X ARM ARCHITECTURE
  M:    Hauke Mehrtens <[email protected]>
  M:    Rafał Miłecki <[email protected]>
@@@ -3576,7 -3623,6 +3576,7 @@@ S:      Supporte
  F:    Documentation/devicetree/bindings/net/brcm,bcmgenet.txt
  F:    Documentation/devicetree/bindings/net/brcm,unimac-mdio.txt
  F:    drivers/net/ethernet/broadcom/genet/
 +F:    drivers/net/ethernet/broadcom/unimac.h
  F:    drivers/net/mdio/mdio-bcm-unimac.c
  F:    include/linux/platform_data/bcmgenet.h
  F:    include/linux/platform_data/mdio-bcm-unimac.h
@@@ -3610,15 -3656,6 +3610,15 @@@ N:    bcm8831
  N:    hr2
  N:    stingray
  
 +BROADCOM IPROC GBIT ETHERNET DRIVER
 +M:    Rafał Miłecki <[email protected]>
 +M:    [email protected]
 +L:    [email protected]
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/net/brcm,amac.txt
 +F:    drivers/net/ethernet/broadcom/bgmac*
 +F:    drivers/net/ethernet/broadcom/unimac.h
 +
  BROADCOM KONA GPIO DRIVER
  M:    Ray Jui <[email protected]>
  L:    [email protected]
  S:    Maintained
  F:    drivers/firmware/broadcom/*
  
 +BROADCOM PMB (POWER MANAGEMENT BUS) DRIVER
 +M:    Rafał Miłecki <[email protected]>
 +M:    Florian Fainelli <[email protected]>
 +M:    [email protected]
 +L:    [email protected]
 +S:    Maintained
 +T:    git git://github.com/broadcom/stblinux.git
 +F:    drivers/soc/bcm/bcm-pmb.c
 +F:    include/dt-bindings/soc/bcm-pmb.h
 +
  BROADCOM SPECIFIC AMBA DRIVER (BCMA)
  M:    Rafał Miłecki <[email protected]>
  L:    [email protected]
@@@ -3708,7 -3735,6 +3708,7 @@@ L:      [email protected]
  L:    [email protected]
  S:    Supported
  F:    drivers/net/ethernet/broadcom/bcmsysport.*
 +F:    drivers/net/ethernet/broadcom/unimac.h
  
  BROADCOM TG3 GIGABIT ETHERNET DRIVER
  M:    Siva Reddy Kallam <[email protected]>
@@@ -3816,6 -3842,14 +3816,6 @@@ F:     drivers/irqchip/irq-csky-
  N:    csky
  K:    csky
  
 -C6X ARCHITECTURE
 -M:    Mark Salter <[email protected]>
 -M:    Aurelien Jacquiot <[email protected]>
 -L:    [email protected]
 -S:    Maintained
 -W:    http://www.linux-c6x.org/wiki/index.php/Main_Page
 -F:    arch/c6x/
 -
  CA8210 IEEE-802.15.4 RADIO DRIVER
  M:    Harry Morris <[email protected]>
  L:    [email protected]
@@@ -3854,15 -3888,6 +3854,15 @@@ S:    Maintaine
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/peter.chen/usb.git
  F:    Documentation/devicetree/bindings/usb/cdns,usb3.yaml
  F:    drivers/usb/cdns3/
 +X:    drivers/usb/cdns3/cdnsp*
 +
 +CADENCE USBSSP DRD IP DRIVER
 +M:    Pawel Laszczak <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/peter.chen/usb.git
 +F:    drivers/usb/cdns3/
 +X:    drivers/usb/cdns3/cdns3*
  
  CADET FM/AM RADIO RECEIVER DRIVER
  M:    Hans Verkuil <[email protected]>
@@@ -3904,10 -3929,8 +3904,10 @@@ T:    git git://git.kernel.org/pub/scm/lin
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can-next.git
  F:    Documentation/devicetree/bindings/net/can/
  F:    drivers/net/can/
 +F:    include/linux/can/bittiming.h
  F:    include/linux/can/dev.h
  F:    include/linux/can/led.h
 +F:    include/linux/can/length.h
  F:    include/linux/can/platform/
  F:    include/linux/can/rx-offload.h
  F:    include/uapi/linux/can/error.h
@@@ -3923,7 -3946,6 +3923,7 @@@ W:      https://github.com/linux-ca
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can.git
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can-next.git
  F:    Documentation/networking/can.rst
 +F:    include/linux/can/can-ml.h
  F:    include/linux/can/core.h
  F:    include/linux/can/skb.h
  F:    include/net/netns/can.h
@@@ -4059,6 -4081,7 +4059,6 @@@ W:      http://www.ibm.com/developerworks/po
  F:    arch/powerpc/include/asm/cell*.h
  F:    arch/powerpc/include/asm/spu*.h
  F:    arch/powerpc/include/uapi/asm/spu*.h
 -F:    arch/powerpc/oprofile/*cell*
  F:    arch/powerpc/platforms/cell/
  
  CELLWISE CW2015 BATTERY DRIVER
@@@ -4280,7 -4303,7 +4280,7 @@@ S:      Maintaine
  F:    .clang-format
  
  CLANG/LLVM BUILD SUPPORT
 -M:    Nathan Chancellor <nat[email protected]>
 +M:    Nathan Chancellor <nat[email protected]>
  M:    Nick Desaulniers <[email protected]>
  L:    [email protected]
  S:    Supported
@@@ -4444,7 -4467,7 +4444,7 @@@ F:      include/linux/console
  
  CONTROL GROUP (CGROUP)
  M:    Tejun Heo <[email protected]>
 -M:    Li Zefan <lizefan@huawei.com>
 +M:    Zefan Li <lizefan.x@bytedance.com>
  M:    Johannes Weiner <[email protected]>
  L:    [email protected]
  S:    Maintained
@@@ -4468,9 -4491,11 +4468,9 @@@ F:     block/blk-throttle.
  F:    include/linux/blk-cgroup.h
  
  CONTROL GROUP - CPUSET
 -M:    Li Zefan <lizefan@huawei.com>
 +M:    Zefan Li <lizefan.x@bytedance.com>
  L:    [email protected]
  S:    Maintained
 -W:    http://www.bullopensource.org/cpuset/
 -W:    http://oss.sgi.com/projects/cpusets/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup.git
  F:    Documentation/admin-guide/cgroup-v1/cpusets.rst
  F:    include/linux/cpuset.h
@@@ -4598,7 -4623,6 +4598,7 @@@ L:      [email protected]
  S:    Supported
  F:    arch/arm/mach-exynos/pm.c
  F:    drivers/cpuidle/cpuidle-exynos.c
 +F:    include/linux/platform_data/cpuidle-exynos.h
  
  CPUIDLE DRIVER - ARM PSCI
  M:    Lorenzo Pieralisi <[email protected]>
@@@ -6032,6 -6056,14 +6032,6 @@@ T:     git git://anongit.freedesktop.org/dr
  F:    Documentation/devicetree/bindings/display/xlnx/
  F:    drivers/gpu/drm/xlnx/
  
 -DRM DRIVERS FOR ZTE ZX
 -M:    Shawn Guo <[email protected]>
 -L:    [email protected]
 -S:    Maintained
 -T:    git git://anongit.freedesktop.org/drm/drm-misc
 -F:    Documentation/devicetree/bindings/display/zte,vou.txt
 -F:    drivers/gpu/drm/zte/
 -
  DRM PANEL DRIVERS
  M:    Thierry Reding <[email protected]>
  R:    Sam Ravnborg <[email protected]>
@@@ -6441,9 -6473,9 +6441,9 @@@ S:      Maintaine
  F:    drivers/edac/skx_*.[ch]
  
  EDAC-TI
 -M:    Tero Kristo <[email protected]>
 +M:    Tero Kristo <[email protected]>
  L:    [email protected]
 -S:    Maintained
 +S:    Odd Fixes
  F:    drivers/edac/ti_edac.c
  
  EDIROL UA-101/UA-1000 DRIVER
@@@ -8401,8 -8433,11 +8401,8 @@@ F:     drivers/i3c
  F:    include/linux/i3c/
  
  IA64 (Itanium) PLATFORM
 -M:    Tony Luck <[email protected]>
 -M:    Fenghua Yu <[email protected]>
  L:    [email protected]
 -S:    Odd Fixes
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/aegl/linux.git
 +S:    Orphan
  F:    Documentation/ia64/
  F:    arch/ia64/
  
@@@ -9191,11 -9226,10 +9191,11 @@@ F:   include/linux/tboot.
  
  INTEL SGX
  M:    Jarkko Sakkinen <[email protected]>
 +R:    Dave Hansen <[email protected]>
  L:    [email protected]
  S:    Supported
  Q:    https://patchwork.kernel.org/project/intel-sgx/list/
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jarkko/linux-sgx.git
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git x86/sgx
  F:    Documentation/x86/sgx.rst
  F:    arch/x86/entry/vdso/vsgx.S
  F:    arch/x86/include/uapi/asm/sgx.h
@@@ -9527,18 -9561,16 +9527,18 @@@ F:   Documentation/hwmon/k8temp.rs
  F:    drivers/hwmon/k8temp.c
  
  KASAN
 -M:    Andrey Ryabinin <aryabinin@virtuozzo.com>
 +M:    Andrey Ryabinin <ryabinin.a.a@gmail.com>
  R:    Alexander Potapenko <[email protected]>
 +R:    Andrey Konovalov <[email protected]>
  R:    Dmitry Vyukov <[email protected]>
  L:    [email protected]
  S:    Maintained
  F:    Documentation/dev-tools/kasan.rst
 -F:    arch/*/include/asm/kasan.h
 +F:    arch/*/include/asm/*kasan.h
  F:    arch/*/mm/kasan_init*
  F:    include/linux/kasan*.h
 -F:    lib/test_kasan.c
 +F:    lib/Kconfig.kasan
 +F:    lib/test_kasan*.c
  F:    mm/kasan/
  F:    scripts/Makefile.kasan
  
@@@ -9553,7 -9585,7 +9553,7 @@@ F:      scripts/kconfig
  
  KCOV
  R:    Dmitry Vyukov <[email protected]>
 -R:    Andrey Konovalov <andreyknvl@google.com>
 +R:    Andrey Konovalov <andreyknvl@gmail.com>
  L:    [email protected]
  S:    Maintained
  F:    Documentation/dev-tools/kcov.rst
@@@ -10657,8 -10689,6 +10657,8 @@@ M:   Sunil Goutham <[email protected]
  M:    Linu Cherian <[email protected]>
  M:    Geetha sowjanya <[email protected]>
  M:    Jerin Jacob <[email protected]>
 +M:    hariprasad <[email protected]>
 +M:    Subbaraya Sundeep <[email protected]>
  L:    [email protected]
  S:    Supported
  F:    Documentation/networking/device_drivers/ethernet/marvell/octeontx2.rst
  L:    [email protected] (moderated for non-subscribers)
  L:    [email protected] (moderated for non-subscribers)
  S:    Maintained
 +F:    Documentation/devicetree/bindings/usb/mediatek,*
 +F:    drivers/usb/host/xhci-mtk*
  F:    drivers/usb/mtu3/
  
  MEGACHIPS STDPXXXX-GE-B850V3-FW LVDS/DP++ BRIDGES
@@@ -12387,7 -12415,6 +12387,7 @@@ F:   tools/testing/selftests/net/ipsec.
  NETWORKING [IPv4/IPv6]
  M:    "David S. Miller" <[email protected]>
  M:    Hideaki YOSHIFUJI <[email protected]>
 +M:    David Ahern <[email protected]>
  L:    [email protected]
  S:    Maintained
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net.git
@@@ -12491,14 -12518,6 +12491,14 @@@ F: include/net/nfc
  F:    include/uapi/linux/nfc.h
  F:    net/nfc/
  
 +NFC VIRTUAL NCI DEVICE DRIVER
 +M:    Bongsu Jeon <[email protected]>
 +L:    [email protected]
 +L:    [email protected] (moderated for non-subscribers)
 +S:    Supported
 +F:    drivers/nfc/virtual_ncidev.c
 +F:    tools/testing/selftests/nci/
 +
  NFS, SUNRPC, AND LOCKD CLIENTS
  M:    Trond Myklebust <[email protected]>
  M:    Anna Schumaker <[email protected]>
@@@ -12810,7 -12829,6 +12810,7 @@@ F:   drivers/net/dsa/ocelot/
  F:    drivers/net/ethernet/mscc/
  F:    include/soc/mscc/ocelot*
  F:    net/dsa/tag_ocelot.c
 +F:    net/dsa/tag_ocelot_8021q.c
  F:    tools/testing/selftests/drivers/net/ocelot/*
  
  OCXL (Open Coherent Accelerator Processor Interface OpenCAPI) DRIVER
@@@ -12870,7 -12888,7 +12870,7 @@@ S:   Orpha
  F:    drivers/video/fbdev/omap/
  
  OMAP GENERAL PURPOSE MEMORY CONTROLLER SUPPORT
 -M:    Roger Quadros <rogerq@ti.com>
 +M:    Roger Quadros <rogerq@kernel.org>
  M:    Tony Lindgren <[email protected]>
  L:    [email protected]
  S:    Maintained
@@@ -13289,6 -13307,15 +13289,6 @@@ S:  Maintaine
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound.git
  F:    sound/drivers/opl4/
  
 -OPROFILE
 -M:    Robert Richter <[email protected]>
 -L:    [email protected]
 -S:    Maintained
 -F:    arch/*/include/asm/oprofile*.h
 -F:    arch/*/oprofile/
 -F:    drivers/oprofile/
 -F:    include/linux/oprofile.h
 -
  ORACLE CLUSTER FILESYSTEM 2 (OCFS2)
  M:    Mark Fasheh <[email protected]>
  M:    Joel Becker <[email protected]>
  S:    Maintained
  F:    drivers/hid/hid-picolcd*
  
 -PICOXCELL SUPPORT
 -M:    Jamie Iles <[email protected]>
 -L:    [email protected] (moderated for non-subscribers)
 -S:    Supported
 -T:    git git://github.com/jamieiles/linux-2.6-ji.git
 -F:    arch/arm/boot/dts/picoxcell*
 -F:    arch/arm/mach-picoxcell/
 -F:    drivers/crypto/picoxcell*
 -
  PIDFD API
  M:    Christian Brauner <[email protected]>
  L:    [email protected]
  S:    Supported
  F:    drivers/staging/qlge/
  
 +QLOGIC QLGE 10Gb ETHERNET DRIVER
 +M:    Coiby Xu <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +F:    Documentation/networking/device_drivers/qlogic/qlge.rst
 +
  QM1D1B0004 MEDIA DRIVER
  M:    Akihiro Tsukada <[email protected]>
  L:    [email protected]
@@@ -16908,12 -16938,6 +16908,6 @@@ F:  include/linux/static_call*.
  F:    kernel/jump_label.c
  F:    kernel/static_call.c
  
- STEC S1220 SKD DRIVER
- M:    Damien Le Moal <[email protected]>
- L:    [email protected]
- S:    Maintained
- F:    drivers/block/skd*[ch]
  STI AUDIO (ASoC) DRIVERS
  M:    Arnaud Pouliquen <[email protected]>
  L:    [email protected] (moderated for non-subscribers)
@@@ -17183,7 -17207,6 +17177,7 @@@ F:   drivers/mfd/syscon.
  
  SYSTEM CONTROL & POWER/MANAGEMENT INTERFACE (SCPI/SCMI) Message Protocol drivers
  M:    Sudeep Holla <[email protected]>
 +R:    Cristian Marussi <[email protected]>
  L:    [email protected]
  S:    Maintained
  F:    Documentation/devicetree/bindings/arm/arm,sc[mp]i.txt
@@@ -17191,7 -17214,6 +17185,7 @@@ F:   drivers/clk/clk-sc[mp]i.
  F:    drivers/cpufreq/sc[mp]i-cpufreq.c
  F:    drivers/firmware/arm_scmi/
  F:    drivers/firmware/arm_scpi.c
 +F:    drivers/regulator/scmi-regulator.c
  F:    drivers/reset/reset-scmi.c
  F:    include/linux/sc[mp]i_protocol.h
  F:    include/trace/events/scmi.h
@@@ -17545,7 -17567,7 +17539,7 @@@ F:   include/linux/dma/k3-psil.
  
  TEXAS INSTRUMENTS' SYSTEM CONTROL INTERFACE (TISCI) PROTOCOL DRIVER
  M:    Nishanth Menon <[email protected]>
 -M:    Tero Kristo <[email protected]>
 +M:    Tero Kristo <[email protected]>
  M:    Santosh Shilimkar <[email protected]>
  L:    [email protected]
  S:    Maintained
@@@ -17689,9 -17711,9 +17683,9 @@@ S:   Maintaine
  F:    drivers/clk/clk-cdce706.c
  
  TI CLOCK DRIVER
 -M:    Tero Kristo <[email protected]>
 +M:    Tero Kristo <[email protected]>
  L:    [email protected]
 -S:    Maintained
 +S:    Odd Fixes
  F:    drivers/clk/ti/
  F:    include/linux/clk/ti.h
  
@@@ -17817,7 -17839,7 +17811,7 @@@ M:   Dan Murphy <[email protected]
  L:    [email protected]
  S:    Maintained
  F:    Documentation/devicetree/bindings/net/can/tcan4x5x.txt
 -F:    drivers/net/can/m_can/tcan4x5x.c
 +F:    drivers/net/can/m_can/tcan4x5x*
  
  TI TRF7970A NFC DRIVER
  M:    Mark Greer <[email protected]>
index 02db50d7e4c6680d3d2bef93aba2ea2f9ea3acd1,de59f72d49cc575a5e994e2b70a5d8adb2aa46d4..7d9cc433b758ae9c29ac3cd76428f7dcc4fc6fac
@@@ -1422,6 -1422,8 +1422,6 @@@ extern mempool_t drbd_md_io_page_pool
  /* We also need to make sure we get a bio
   * when we need it for housekeeping purposes */
  extern struct bio_set drbd_md_io_bio_set;
 -/* to allocate from that set */
 -extern struct bio *bio_alloc_drbd(gfp_t gfp_mask);
  
  /* And a bio_set for cloning */
  extern struct bio_set drbd_io_bio_set;
@@@ -1447,7 -1449,7 +1447,7 @@@ extern void conn_free_crypto(struct drb
  
  /* drbd_req */
  extern void do_submit(struct work_struct *ws);
- extern void __drbd_make_request(struct drbd_device *, struct bio *, unsigned long);
+ extern void __drbd_make_request(struct drbd_device *, struct bio *);
  extern blk_qc_t drbd_submit_bio(struct bio *bio);
  extern int drbd_read_remote(struct drbd_device *device, struct drbd_request *req);
  extern int is_valid_ar_handle(struct drbd_request *, sector_t);
index 788dd97e6026b8c2c8685dac2a588c5cc3a97300,7e5fcce812e1aa8246efe13b00e85544b5b58722..25cd8a2f729db9ff0743fc09b039e31c7e485ae5
@@@ -138,6 -138,19 +138,6 @@@ static const struct block_device_operat
        .release        = drbd_release,
  };
  
 -struct bio *bio_alloc_drbd(gfp_t gfp_mask)
 -{
 -      struct bio *bio;
 -
 -      if (!bioset_initialized(&drbd_md_io_bio_set))
 -              return bio_alloc(gfp_mask, 1);
 -
 -      bio = bio_alloc_bioset(gfp_mask, 1, &drbd_md_io_bio_set);
 -      if (!bio)
 -              return NULL;
 -      return bio;
 -}
 -
  #ifdef __CHECKER__
  /* When checking with sparse, and this is an inline function, sparse will
     give tons of false positives. When this is a real functions sparse works.
@@@ -2275,7 -2288,6 +2275,6 @@@ static void do_retry(struct work_struc
        list_for_each_entry_safe(req, tmp, &writes, tl_requests) {
                struct drbd_device *device = req->device;
                struct bio *bio = req->master_bio;
-               unsigned long start_jif = req->start_jif;
                bool expected;
  
                expected =
                /* We are not just doing submit_bio_noacct(),
                 * as we want to keep the start_time information. */
                inc_ap_bio(device);
-               __drbd_make_request(device, bio, start_jif);
+               __drbd_make_request(device, bio);
        }
  }
  
index 9dbb660a7d7c8eadafc435cf32970ce82cae03cb,ee785f2bdf79c59d5106e0facac5e76af54a45d3..9398c2c2cb2dffccf6f90473844ced3961d5b2e5
@@@ -30,10 -30,7 +30,10 @@@ static struct drbd_request *drbd_req_ne
                return NULL;
        memset(req, 0, sizeof(*req));
  
 -      drbd_req_make_private_bio(req, bio_src);
 +      req->private_bio = bio_clone_fast(bio_src, GFP_NOIO, &drbd_io_bio_set);
 +      req->private_bio->bi_private = req;
 +      req->private_bio->bi_end_io = drbd_request_endio;
 +
        req->rq_state = (bio_data_dir(bio_src) == WRITE ? RQ_WRITE : 0)
                      | (bio_op(bio_src) == REQ_OP_WRITE_SAME ? RQ_WSAME : 0)
                      | (bio_op(bio_src) == REQ_OP_WRITE_ZEROES ? RQ_ZEROES : 0)
@@@ -1191,7 -1188,7 +1191,7 @@@ static void drbd_queue_write(struct drb
   * Returns ERR_PTR(-ENOMEM) if we cannot allocate a drbd_request.
   */
  static struct drbd_request *
- drbd_request_prepare(struct drbd_device *device, struct bio *bio, unsigned long start_jif)
+ drbd_request_prepare(struct drbd_device *device, struct bio *bio)
  {
        const int rw = bio_data_dir(bio);
        struct drbd_request *req;
@@@ -1419,9 -1416,9 +1419,9 @@@ out
                complete_master_bio(device, &m);
  }
  
- void __drbd_make_request(struct drbd_device *device, struct bio *bio, unsigned long start_jif)
+ void __drbd_make_request(struct drbd_device *device, struct bio *bio)
  {
-       struct drbd_request *req = drbd_request_prepare(device, bio, start_jif);
+       struct drbd_request *req = drbd_request_prepare(device, bio);
        if (IS_ERR_OR_NULL(req))
                return;
        drbd_send_and_submit(device, req);
@@@ -1599,19 -1596,16 +1599,16 @@@ void do_submit(struct work_struct *ws
  blk_qc_t drbd_submit_bio(struct bio *bio)
  {
        struct drbd_device *device = bio->bi_bdev->bd_disk->private_data;
-       unsigned long start_jif;
  
        blk_queue_split(&bio);
  
-       start_jif = jiffies;
        /*
         * what we "blindly" assume:
         */
        D_ASSERT(device, IS_ALIGNED(bio->bi_iter.bi_size, 512));
  
        inc_ap_bio(device);
-       __drbd_make_request(device, bio, start_jif);
+       __drbd_make_request(device, bio);
        return BLK_QC_T_NONE;
  }
  
diff --combined drivers/block/nbd.c
index e6ea5d344f87b6190e1c5aaf335875bbf7dc45f9,b076a0a53fb138ec697edb46e782bc6830603d7e..8b9622eb0a21b280bc30d60182fec9c521be8537
@@@ -1022,12 -1022,6 +1022,12 @@@ static int nbd_add_socket(struct nbd_de
        if (!sock)
                return err;
  
 +      /*
 +       * We need to make sure we don't get any errant requests while we're
 +       * reallocating the ->socks array.
 +       */
 +      blk_mq_freeze_queue(nbd->disk->queue);
 +
        if (!netlink && !nbd->task_setup &&
            !test_bit(NBD_RT_BOUND, &config->runtime_flags))
                nbd->task_setup = current;
        nsock->cookie = 0;
        socks[config->num_connections++] = nsock;
        atomic_inc(&config->live_connections);
 +      blk_mq_unfreeze_queue(nbd->disk->queue);
  
        return 0;
  
  put_socket:
 +      blk_mq_unfreeze_queue(nbd->disk->queue);
        sockfd_put(sock);
        return err;
  }
@@@ -1529,17 -1521,7 +1529,7 @@@ static int nbd_dbg_tasks_show(struct se
        return 0;
  }
  
- static int nbd_dbg_tasks_open(struct inode *inode, struct file *file)
- {
-       return single_open(file, nbd_dbg_tasks_show, inode->i_private);
- }
- static const struct file_operations nbd_dbg_tasks_ops = {
-       .open = nbd_dbg_tasks_open,
-       .read = seq_read,
-       .llseek = seq_lseek,
-       .release = single_release,
- };
+ DEFINE_SHOW_ATTRIBUTE(nbd_dbg_tasks);
  
  static int nbd_dbg_flags_show(struct seq_file *s, void *unused)
  {
        return 0;
  }
  
- static int nbd_dbg_flags_open(struct inode *inode, struct file *file)
- {
-       return single_open(file, nbd_dbg_flags_show, inode->i_private);
- }
- static const struct file_operations nbd_dbg_flags_ops = {
-       .open = nbd_dbg_flags_open,
-       .read = seq_read,
-       .llseek = seq_lseek,
-       .release = single_release,
- };
+ DEFINE_SHOW_ATTRIBUTE(nbd_dbg_flags);
  
  static int nbd_dev_dbg_init(struct nbd_device *nbd)
  {
        }
        config->dbg_dir = dir;
  
-       debugfs_create_file("tasks", 0444, dir, nbd, &nbd_dbg_tasks_ops);
+       debugfs_create_file("tasks", 0444, dir, nbd, &nbd_dbg_tasks_fops);
        debugfs_create_u64("size_bytes", 0444, dir, &config->bytesize);
        debugfs_create_u32("timeout", 0444, dir, &nbd->tag_set.timeout);
        debugfs_create_u64("blocksize", 0444, dir, &config->blksize);
-       debugfs_create_file("flags", 0444, dir, nbd, &nbd_dbg_flags_ops);
+       debugfs_create_file("flags", 0444, dir, nbd, &nbd_dbg_flags_fops);
  
        return 0;
  }
diff --combined drivers/md/raid5.c
index a348b2adf2a9f9a095ba84a7135c50e4e7718111,b71f501324958704a6004ab4688c691571643773..5d57a5bd171fa1a82beb539f9fa53df95152c659
@@@ -5393,72 -5393,90 +5393,72 @@@ static void raid5_align_endio(struct bi
  static int raid5_read_one_chunk(struct mddev *mddev, struct bio *raid_bio)
  {
        struct r5conf *conf = mddev->private;
 -      int dd_idx;
 -      struct bio* align_bi;
 +      struct bio *align_bio;
        struct md_rdev *rdev;
 -      sector_t end_sector;
 +      sector_t sector, end_sector, first_bad;
 +      int bad_sectors, dd_idx;
  
        if (!in_chunk_boundary(mddev, raid_bio)) {
                pr_debug("%s: non aligned\n", __func__);
                return 0;
        }
 -      /*
 -       * use bio_clone_fast to make a copy of the bio
 -       */
 -      align_bi = bio_clone_fast(raid_bio, GFP_NOIO, &mddev->bio_set);
 -      if (!align_bi)
 -              return 0;
 -      /*
 -       *   set bi_end_io to a new function, and set bi_private to the
 -       *     original bio.
 -       */
 -      align_bi->bi_end_io  = raid5_align_endio;
 -      align_bi->bi_private = raid_bio;
 -      /*
 -       *      compute position
 -       */
 -      align_bi->bi_iter.bi_sector =
 -              raid5_compute_sector(conf, raid_bio->bi_iter.bi_sector,
 -                                   0, &dd_idx, NULL);
  
 -      end_sector = bio_end_sector(align_bi);
 +      sector = raid5_compute_sector(conf, raid_bio->bi_iter.bi_sector, 0,
 +                                    &dd_idx, NULL);
 +      end_sector = bio_end_sector(raid_bio);
 +
        rcu_read_lock();
 +      if (r5c_big_stripe_cached(conf, sector))
 +              goto out_rcu_unlock;
 +
        rdev = rcu_dereference(conf->disks[dd_idx].replacement);
        if (!rdev || test_bit(Faulty, &rdev->flags) ||
            rdev->recovery_offset < end_sector) {
                rdev = rcu_dereference(conf->disks[dd_idx].rdev);
 -              if (rdev &&
 -                  (test_bit(Faulty, &rdev->flags) ||
 +              if (!rdev)
 +                      goto out_rcu_unlock;
 +              if (test_bit(Faulty, &rdev->flags) ||
                    !(test_bit(In_sync, &rdev->flags) ||
 -                    rdev->recovery_offset >= end_sector)))
 -                      rdev = NULL;
 +                    rdev->recovery_offset >= end_sector))
 +                      goto out_rcu_unlock;
        }
  
 -      if (r5c_big_stripe_cached(conf, align_bi->bi_iter.bi_sector)) {
 -              rcu_read_unlock();
 -              bio_put(align_bi);
 +      atomic_inc(&rdev->nr_pending);
 +      rcu_read_unlock();
 +
 +      align_bio = bio_clone_fast(raid_bio, GFP_NOIO, &mddev->bio_set);
 +      bio_set_dev(align_bio, rdev->bdev);
 +      align_bio->bi_end_io = raid5_align_endio;
 +      align_bio->bi_private = raid_bio;
 +      align_bio->bi_iter.bi_sector = sector;
 +
 +      raid_bio->bi_next = (void *)rdev;
 +
 +      if (is_badblock(rdev, sector, bio_sectors(align_bio), &first_bad,
 +                      &bad_sectors)) {
 +              bio_put(align_bio);
 +              rdev_dec_pending(rdev, mddev);
                return 0;
        }
  
 -      if (rdev) {
 -              sector_t first_bad;
 -              int bad_sectors;
 +      /* No reshape active, so we can trust rdev->data_offset */
 +      align_bio->bi_iter.bi_sector += rdev->data_offset;
  
 -              atomic_inc(&rdev->nr_pending);
 -              rcu_read_unlock();
 -              raid_bio->bi_next = (void*)rdev;
 -              bio_set_dev(align_bi, rdev->bdev);
 -
 -              if (is_badblock(rdev, align_bi->bi_iter.bi_sector,
 -                              bio_sectors(align_bi),
 -                              &first_bad, &bad_sectors)) {
 -                      bio_put(align_bi);
 -                      rdev_dec_pending(rdev, mddev);
 -                      return 0;
 -              }
 +      spin_lock_irq(&conf->device_lock);
 +      wait_event_lock_irq(conf->wait_for_quiescent, conf->quiesce == 0,
 +                          conf->device_lock);
 +      atomic_inc(&conf->active_aligned_reads);
 +      spin_unlock_irq(&conf->device_lock);
  
 -              /* No reshape active, so we can trust rdev->data_offset */
 -              align_bi->bi_iter.bi_sector += rdev->data_offset;
 +      if (mddev->gendisk)
 +              trace_block_bio_remap(align_bio, disk_devt(mddev->gendisk),
 +                                    raid_bio->bi_iter.bi_sector);
 +      submit_bio_noacct(align_bio);
 +      return 1;
  
 -              spin_lock_irq(&conf->device_lock);
 -              wait_event_lock_irq(conf->wait_for_quiescent,
 -                                  conf->quiesce == 0,
 -                                  conf->device_lock);
 -              atomic_inc(&conf->active_aligned_reads);
 -              spin_unlock_irq(&conf->device_lock);
 -
 -              if (mddev->gendisk)
 -                      trace_block_bio_remap(align_bi, disk_devt(mddev->gendisk),
 -                                            raid_bio->bi_iter.bi_sector);
 -              submit_bio_noacct(align_bi);
 -              return 1;
 -      } else {
 -              rcu_read_unlock();
 -              bio_put(align_bi);
 -              return 0;
 -      }
 +out_rcu_unlock:
 +      rcu_read_unlock();
 +      return 0;
  }
  
  static struct bio *chunk_aligned_read(struct mddev *mddev, struct bio *raid_bio)
@@@ -7643,7 -7661,7 +7643,7 @@@ static int raid5_run(struct mddev *mdde
        }
  
        /* device size must be a multiple of chunk size */
-       mddev->dev_sectors &= ~(mddev->chunk_sectors - 1);
+       mddev->dev_sectors &= ~((sector_t)mddev->chunk_sectors - 1);
        mddev->resync_max_sectors = mddev->dev_sectors;
  
        if (mddev->degraded > dirty_parity_disks &&
diff --combined drivers/nvme/host/core.c
index 89cacff897a8d828b9785aeb7e9d6d5286e1aa9d,d77f3f26d8d387d4aeae051d0ddd84534c200bf4..e68a8c4ac5a6ea6dbd9ddd7768e2cd8dcd18c3e9
@@@ -279,14 -279,13 +279,13 @@@ static blk_status_t nvme_error_status(u
  
  static void nvme_retry_req(struct request *req)
  {
-       struct nvme_ns *ns = req->q->queuedata;
        unsigned long delay = 0;
        u16 crd;
  
        /* The mask and shift result must be <= 3 */
        crd = (nvme_req(req)->status & NVME_SC_CRD) >> 11;
-       if (ns && crd)
-               delay = ns->ctrl->crdt[crd - 1] * 100;
+       if (crd)
+               delay = nvme_req(req)->ctrl->crdt[crd - 1] * 100;
  
        nvme_req(req)->retries++;
        blk_mq_requeue_request(req, false);
@@@ -356,6 -355,21 +355,21 @@@ void nvme_complete_rq(struct request *r
  }
  EXPORT_SYMBOL_GPL(nvme_complete_rq);
  
+ /*
+  * Called to unwind from ->queue_rq on a failed command submission so that the
+  * multipathing code gets called to potentially failover to another path.
+  * The caller needs to unwind all transport specific resource allocations and
+  * must return propagate the return value.
+  */
+ blk_status_t nvme_host_path_error(struct request *req)
+ {
+       nvme_req(req)->status = NVME_SC_HOST_PATH_ERROR;
+       blk_mq_set_request_complete(req);
+       nvme_complete_rq(req);
+       return BLK_STS_OK;
+ }
+ EXPORT_SYMBOL_GPL(nvme_host_path_error);
  bool nvme_cancel_request(struct request *req, void *data, bool reserved)
  {
        dev_dbg_ratelimited(((struct nvme_ctrl *) data)->device,
  }
  EXPORT_SYMBOL_GPL(nvme_cancel_request);
  
+ void nvme_cancel_tagset(struct nvme_ctrl *ctrl)
+ {
+       if (ctrl->tagset) {
+               blk_mq_tagset_busy_iter(ctrl->tagset,
+                               nvme_cancel_request, ctrl);
+               blk_mq_tagset_wait_completed_request(ctrl->tagset);
+       }
+ }
+ EXPORT_SYMBOL_GPL(nvme_cancel_tagset);
+ void nvme_cancel_admin_tagset(struct nvme_ctrl *ctrl)
+ {
+       if (ctrl->admin_tagset) {
+               blk_mq_tagset_busy_iter(ctrl->admin_tagset,
+                               nvme_cancel_request, ctrl);
+               blk_mq_tagset_wait_completed_request(ctrl->admin_tagset);
+       }
+ }
+ EXPORT_SYMBOL_GPL(nvme_cancel_admin_tagset);
  bool nvme_change_ctrl_state(struct nvme_ctrl *ctrl,
                enum nvme_ctrl_state new_state)
  {
@@@ -842,11 -876,11 +876,11 @@@ static inline blk_status_t nvme_setup_r
  void nvme_cleanup_cmd(struct request *req)
  {
        if (req->rq_flags & RQF_SPECIAL_PAYLOAD) {
-               struct nvme_ns *ns = req->rq_disk->private_data;
+               struct nvme_ctrl *ctrl = nvme_req(req)->ctrl;
                struct page *page = req->special_vec.bv_page;
  
-               if (page == ns->ctrl->discard_page)
-                       clear_bit_unlock(0, &ns->ctrl->discard_page_busy);
+               if (page == ctrl->discard_page)
+                       clear_bit_unlock(0, &ctrl->discard_page_busy);
                else
                        kfree(page_address(page) + req->special_vec.bv_offset);
        }
@@@ -1133,8 -1167,7 +1167,8 @@@ static int nvme_submit_user_cmd(struct 
                if (ret)
                        goto out;
                bio = req->bio;
 -              bio_set_dev(bio, bdev);
 +              if (bdev)
 +                      bio_set_dev(bio, bdev);
                if (bdev && meta_buffer && meta_len) {
                        meta = nvme_add_user_metadata(bio, meta_buffer, meta_len,
                                        meta_seed, write);
@@@ -2176,18 -2209,17 +2210,18 @@@ static int nvme_update_ns_info(struct n
        ns->lba_shift = id->lbaf[lbaf].ds;
        nvme_set_queue_limits(ns->ctrl, ns->queue);
  
 +      ret = nvme_configure_metadata(ns, id);
 +      if (ret)
 +              goto out_unfreeze;
 +      nvme_set_chunk_sectors(ns, id);
 +      nvme_update_disk_info(ns->disk, ns, id);
 +
        if (ns->head->ids.csi == NVME_CSI_ZNS) {
                ret = nvme_update_zone_info(ns, lbaf);
                if (ret)
                        goto out_unfreeze;
        }
  
 -      ret = nvme_configure_metadata(ns, id);
 -      if (ret)
 -              goto out_unfreeze;
 -      nvme_set_chunk_sectors(ns, id);
 -      nvme_update_disk_info(ns->disk, ns, id);
        blk_mq_unfreeze_queue(ns->disk->queue);
  
        if (blk_queue_is_zoned(ns->queue)) {
@@@ -2831,7 -2863,7 +2865,7 @@@ static ssize_t nvme_subsys_show_nqn(str
        struct nvme_subsystem *subsys =
                container_of(dev, struct nvme_subsystem, dev);
  
-       return snprintf(buf, PAGE_SIZE, "%s\n", subsys->subnqn);
+       return sysfs_emit(buf, "%s\n", subsys->subnqn);
  }
  static SUBSYS_ATTR_RO(subsysnqn, S_IRUGO, nvme_subsys_show_nqn);
  
@@@ -2861,7 -2893,7 +2895,7 @@@ static struct attribute *nvme_subsys_at
        NULL,
  };
  
- static struct attribute_group nvme_subsys_attrs_group = {
+ static const struct attribute_group nvme_subsys_attrs_group = {
        .attrs = nvme_subsys_attrs,
  };
  
@@@ -3524,7 -3556,7 +3558,7 @@@ static ssize_t nvme_sysfs_show_transpor
  {
        struct nvme_ctrl *ctrl = dev_get_drvdata(dev);
  
-       return snprintf(buf, PAGE_SIZE, "%s\n", ctrl->ops->name);
+       return sysfs_emit(buf, "%s\n", ctrl->ops->name);
  }
  static DEVICE_ATTR(transport, S_IRUGO, nvme_sysfs_show_transport, NULL);
  
@@@ -3558,7 -3590,7 +3592,7 @@@ static ssize_t nvme_sysfs_show_subsysnq
  {
        struct nvme_ctrl *ctrl = dev_get_drvdata(dev);
  
-       return snprintf(buf, PAGE_SIZE, "%s\n", ctrl->subsys->subnqn);
+       return sysfs_emit(buf, "%s\n", ctrl->subsys->subnqn);
  }
  static DEVICE_ATTR(subsysnqn, S_IRUGO, nvme_sysfs_show_subsysnqn, NULL);
  
@@@ -3568,7 -3600,7 +3602,7 @@@ static ssize_t nvme_sysfs_show_hostnqn(
  {
        struct nvme_ctrl *ctrl = dev_get_drvdata(dev);
  
-       return snprintf(buf, PAGE_SIZE, "%s\n", ctrl->opts->host->nqn);
+       return sysfs_emit(buf, "%s\n", ctrl->opts->host->nqn);
  }
  static DEVICE_ATTR(hostnqn, S_IRUGO, nvme_sysfs_show_hostnqn, NULL);
  
@@@ -3578,7 -3610,7 +3612,7 @@@ static ssize_t nvme_sysfs_show_hostid(s
  {
        struct nvme_ctrl *ctrl = dev_get_drvdata(dev);
  
-       return snprintf(buf, PAGE_SIZE, "%pU\n", &ctrl->opts->host->id);
+       return sysfs_emit(buf, "%pU\n", &ctrl->opts->host->id);
  }
  static DEVICE_ATTR(hostid, S_IRUGO, nvme_sysfs_show_hostid, NULL);
  
@@@ -3696,7 -3728,7 +3730,7 @@@ static umode_t nvme_dev_attrs_are_visib
        return a->mode;
  }
  
- static struct attribute_group nvme_dev_attrs_group = {
+ static const struct attribute_group nvme_dev_attrs_group = {
        .attrs          = nvme_dev_attrs,
        .is_visible     = nvme_dev_attrs_are_visible,
  };
@@@ -3830,7 -3862,7 +3864,7 @@@ static int nvme_init_ns_head(struct nvm
                }
        }
  
 -      list_add_tail(&ns->siblings, &head->list);
 +      list_add_tail_rcu(&ns->siblings, &head->list);
        ns->head = head;
        mutex_unlock(&ctrl->subsys->lock);
        return 0;
@@@ -4439,6 -4471,7 +4473,7 @@@ EXPORT_SYMBOL_GPL(nvme_start_ctrl)
  
  void nvme_uninit_ctrl(struct nvme_ctrl *ctrl)
  {
+       nvme_hwmon_exit(ctrl);
        nvme_fault_inject_fini(&ctrl->fault_inject);
        dev_pm_qos_hide_latency_tolerance(ctrl->device);
        cdev_device_del(&ctrl->cdev, ctrl->device);
@@@ -4451,7 -4484,7 +4486,7 @@@ static void nvme_free_cels(struct nvme_
        struct nvme_effects_log *cel;
        unsigned long i;
  
-       xa_for_each (&ctrl->cels, i, cel) {
+       xa_for_each(&ctrl->cels, i, cel) {
                xa_erase(&ctrl->cels, i);
                kfree(cel);
        }
index 1427c9555cef3865d2c803f0f24b89c30575c1a2,0696319adaf642341ad674be52148fa9b9a34564..a1d476e1ac020f39c5a83c1d28f9f45557cee8fc
@@@ -221,7 -221,7 +221,7 @@@ static struct nvme_ns *nvme_round_robin
        }
  
        for (ns = nvme_next_ns(head, old);
 -           ns != old;
 +           ns && ns != old;
             ns = nvme_next_ns(head, ns)) {
                if (nvme_path_is_disabled(ns))
                        continue;
@@@ -677,6 -677,10 +677,10 @@@ void nvme_mpath_add_disk(struct nvme_n
        if (blk_queue_stable_writes(ns->queue) && ns->head->disk)
                blk_queue_flag_set(QUEUE_FLAG_STABLE_WRITES,
                                   ns->head->disk->queue);
+ #ifdef CONFIG_BLK_DEV_ZONED
+       if (blk_queue_is_zoned(ns->queue) && ns->head->disk)
+               ns->head->disk->queue->nr_zones = ns->queue->nr_zones;
+ #endif
  }
  
  void nvme_mpath_remove_disk(struct nvme_ns_head *head)
diff --combined drivers/nvme/host/pci.c
index 808ab51869288458be69683b5d890a8ea120e026,0045c5edf629e679bbba563ec2b56184320a2e08..7b6632c00ffd01072d5b3aff63f175d57278938a
@@@ -2362,13 -2362,16 +2362,16 @@@ static int nvme_pci_enable(struct nvme_
  {
        int result = -ENOMEM;
        struct pci_dev *pdev = to_pci_dev(dev->dev);
+       int dma_address_bits = 64;
  
        if (pci_enable_device_mem(pdev))
                return result;
  
        pci_set_master(pdev);
  
-       if (dma_set_mask_and_coherent(dev->dev, DMA_BIT_MASK(64)))
+       if (dev->ctrl.quirks & NVME_QUIRK_DMA_ADDRESS_BITS_48)
+               dma_address_bits = 48;
+       if (dma_set_mask_and_coherent(dev->dev, DMA_BIT_MASK(dma_address_bits)))
                goto disable;
  
        if (readl(dev->bar + NVME_REG_CSTS) == -1) {
@@@ -3242,8 -3245,6 +3245,8 @@@ static const struct pci_device_id nvme_
        { PCI_DEVICE(0x144d, 0xa822),   /* Samsung PM1725a */
                .driver_data = NVME_QUIRK_DELAY_BEFORE_CHK_RDY |
                                NVME_QUIRK_IGNORE_DEV_SUBNQN, },
 +      { PCI_DEVICE(0x1987, 0x5016),   /* Phison E16 */
 +              .driver_data = NVME_QUIRK_IGNORE_DEV_SUBNQN, },
        { PCI_DEVICE(0x1d1d, 0x1f1f),   /* LighNVM qemu device */
                .driver_data = NVME_QUIRK_LIGHTNVM, },
        { PCI_DEVICE(0x1d1d, 0x2807),   /* CNEX WL */
                .driver_data = NVME_QUIRK_DISABLE_WRITE_ZEROES, },
        { PCI_DEVICE(0x2646, 0x2263),   /* KINGSTON A2000 NVMe SSD  */
                .driver_data = NVME_QUIRK_NO_DEEPEST_PS, },
+       { PCI_DEVICE(PCI_VENDOR_ID_AMAZON, 0x0061),
+               .driver_data = NVME_QUIRK_DMA_ADDRESS_BITS_48, },
+       { PCI_DEVICE(PCI_VENDOR_ID_AMAZON, 0x0065),
+               .driver_data = NVME_QUIRK_DMA_ADDRESS_BITS_48, },
+       { PCI_DEVICE(PCI_VENDOR_ID_AMAZON, 0x8061),
+               .driver_data = NVME_QUIRK_DMA_ADDRESS_BITS_48, },
+       { PCI_DEVICE(PCI_VENDOR_ID_AMAZON, 0xcd00),
+               .driver_data = NVME_QUIRK_DMA_ADDRESS_BITS_48, },
+       { PCI_DEVICE(PCI_VENDOR_ID_AMAZON, 0xcd01),
+               .driver_data = NVME_QUIRK_DMA_ADDRESS_BITS_48, },
+       { PCI_DEVICE(PCI_VENDOR_ID_AMAZON, 0xcd02),
+               .driver_data = NVME_QUIRK_DMA_ADDRESS_BITS_48, },
        { PCI_DEVICE(PCI_VENDOR_ID_APPLE, 0x2001),
                .driver_data = NVME_QUIRK_SINGLE_VECTOR },
        { PCI_DEVICE(PCI_VENDOR_ID_APPLE, 0x2003) },
index bf6e0ac9ad2890170921c32ab5d8ebff2b7e8766,105ef2b125cfeaa296c8d6f411e79577479fe8a4..3d9a5d3ed9cdbfeed8f1f9ffea49adf28b675510
@@@ -256,8 -256,7 +256,7 @@@ static void nvmet_bdev_execute_rw(struc
        if (is_pci_p2pdma_page(sg_page(req->sg)))
                op |= REQ_NOMERGE;
  
-       sector = le64_to_cpu(req->cmd->rw.slba);
-       sector <<= (req->ns->blksize_shift - 9);
+       sector = nvmet_lba_to_sect(req->ns, req->cmd->rw.slba);
  
        if (req->transfer_len <= NVMET_MAX_INLINE_DATA_LEN) {
                bio = &req->b.inline_bio;
@@@ -333,7 -332,7 +332,7 @@@ static void nvmet_bdev_execute_flush(st
  
  u16 nvmet_bdev_flush(struct nvmet_req *req)
  {
 -      if (blkdev_issue_flush(req->ns->bdev, GFP_KERNEL))
 +      if (blkdev_issue_flush(req->ns->bdev))
                return NVME_SC_INTERNAL | NVME_SC_DNR;
        return 0;
  }
@@@ -345,7 -344,7 +344,7 @@@ static u16 nvmet_bdev_discard_range(str
        int ret;
  
        ret = __blkdev_issue_discard(ns->bdev,
-                       le64_to_cpu(range->slba) << (ns->blksize_shift - 9),
+                       nvmet_lba_to_sect(ns, range->slba),
                        le32_to_cpu(range->nlb) << (ns->blksize_shift - 9),
                        GFP_KERNEL, 0, bio);
        if (ret && ret != -EOPNOTSUPP) {
@@@ -414,8 -413,7 +413,7 @@@ static void nvmet_bdev_execute_write_ze
        if (!nvmet_check_transfer_len(req, 0))
                return;
  
-       sector = le64_to_cpu(write_zeroes->slba) <<
-               (req->ns->blksize_shift - 9);
+       sector = nvmet_lba_to_sect(req->ns, write_zeroes->slba);
        nr_sector = (((sector_t)le16_to_cpu(write_zeroes->length) + 1) <<
                (req->ns->blksize_shift - 9));
  
@@@ -451,9 -449,6 +449,6 @@@ u16 nvmet_bdev_parse_io_cmd(struct nvme
                req->execute = nvmet_bdev_execute_write_zeroes;
                return 0;
        default:
-               pr_err("unhandled cmd %d on qid %d\n", cmd->common.opcode,
-                      req->sq->qid);
-               req->error_loc = offsetof(struct nvme_common_command, opcode);
-               return NVME_SC_INVALID_OPCODE | NVME_SC_DNR;
+               return nvmet_report_invalid_opcode(req);
        }
  }
index aacf06f0b4312539c0d295d96ce5a2d7542c7c17,ac2d9ed23ceaff99e1c9c23412c06de5cea5da97..8b0485ada315b9f139e3e42b8131d70ea466b92f
@@@ -305,7 -305,7 +305,7 @@@ static void nvmet_tcp_map_pdu_iovec(str
        length = cmd->pdu_len;
        cmd->nr_mapped = DIV_ROUND_UP(length, PAGE_SIZE);
        offset = cmd->rbytes_done;
 -      cmd->sg_idx = DIV_ROUND_UP(offset, PAGE_SIZE);
 +      cmd->sg_idx = offset / PAGE_SIZE;
        sg_offset = offset % PAGE_SIZE;
        sg = &cmd->req.sg[cmd->sg_idx];
  
                length -= iov_len;
                sg = sg_next(sg);
                iov++;
 +              sg_offset = 0;
        }
  
        iov_iter_kvec(&cmd->recv_msg.msg_iter, READ, cmd->iov,
@@@ -379,7 -378,7 +379,7 @@@ err
        return NVME_SC_INTERNAL;
  }
  
- static void nvmet_tcp_ddgst(struct ahash_request *hash,
+ static void nvmet_tcp_send_ddgst(struct ahash_request *hash,
                struct nvmet_tcp_cmd *cmd)
  {
        ahash_request_set_crypt(hash, cmd->req.sg,
        crypto_ahash_digest(hash);
  }
  
+ static void nvmet_tcp_recv_ddgst(struct ahash_request *hash,
+               struct nvmet_tcp_cmd *cmd)
+ {
+       struct scatterlist sg;
+       struct kvec *iov;
+       int i;
+       crypto_ahash_init(hash);
+       for (i = 0, iov = cmd->iov; i < cmd->nr_mapped; i++, iov++) {
+               sg_init_one(&sg, iov->iov_base, iov->iov_len);
+               ahash_request_set_crypt(hash, &sg, NULL, iov->iov_len);
+               crypto_ahash_update(hash);
+       }
+       ahash_request_set_crypt(hash, NULL, (void *)&cmd->exp_ddgst, 0);
+       crypto_ahash_final(hash);
+ }
  static void nvmet_setup_c2h_data_pdu(struct nvmet_tcp_cmd *cmd)
  {
        struct nvme_tcp_data_pdu *pdu = cmd->data_pdu;
  
        if (queue->data_digest) {
                pdu->hdr.flags |= NVME_TCP_F_DDGST;
-               nvmet_tcp_ddgst(queue->snd_hash, cmd);
+               nvmet_tcp_send_ddgst(queue->snd_hash, cmd);
        }
  
        if (cmd->queue->hdr_digest) {
@@@ -1060,7 -1076,7 +1077,7 @@@ static void nvmet_tcp_prep_recv_ddgst(s
  {
        struct nvmet_tcp_queue *queue = cmd->queue;
  
-       nvmet_tcp_ddgst(queue->rcv_hash, cmd);
+       nvmet_tcp_recv_ddgst(queue->rcv_hash, cmd);
        queue->offset = 0;
        queue->left = NVME_TCP_DIGEST_LENGTH;
        queue->rcv_state = NVMET_TCP_RECV_DDGST;
@@@ -1081,14 -1097,14 +1098,14 @@@ static int nvmet_tcp_try_recv_data(stru
                cmd->rbytes_done += ret;
        }
  
+       if (queue->data_digest) {
+               nvmet_tcp_prep_recv_ddgst(cmd);
+               return 0;
+       }
        nvmet_tcp_unmap_pdu_iovec(cmd);
  
        if (!(cmd->flags & NVMET_TCP_F_INIT_FAILED) &&
            cmd->rbytes_done == cmd->req.transfer_len) {
-               if (queue->data_digest) {
-                       nvmet_tcp_prep_recv_ddgst(cmd);
-                       return 0;
-               }
                cmd->req.execute(&cmd->req);
        }
  
@@@ -1468,17 -1484,27 +1485,27 @@@ static int nvmet_tcp_set_queue_sock(str
        if (inet->rcv_tos > 0)
                ip_sock_set_tos(sock->sk, inet->rcv_tos);
  
+       ret = 0;
        write_lock_bh(&sock->sk->sk_callback_lock);
-       sock->sk->sk_user_data = queue;
-       queue->data_ready = sock->sk->sk_data_ready;
-       sock->sk->sk_data_ready = nvmet_tcp_data_ready;
-       queue->state_change = sock->sk->sk_state_change;
-       sock->sk->sk_state_change = nvmet_tcp_state_change;
-       queue->write_space = sock->sk->sk_write_space;
-       sock->sk->sk_write_space = nvmet_tcp_write_space;
+       if (sock->sk->sk_state != TCP_ESTABLISHED) {
+               /*
+                * If the socket is already closing, don't even start
+                * consuming it
+                */
+               ret = -ENOTCONN;
+       } else {
+               sock->sk->sk_user_data = queue;
+               queue->data_ready = sock->sk->sk_data_ready;
+               sock->sk->sk_data_ready = nvmet_tcp_data_ready;
+               queue->state_change = sock->sk->sk_state_change;
+               sock->sk->sk_state_change = nvmet_tcp_state_change;
+               queue->write_space = sock->sk->sk_write_space;
+               sock->sk->sk_write_space = nvmet_tcp_write_space;
+               queue_work_on(queue_cpu(queue), nvmet_tcp_wq, &queue->io_work);
+       }
        write_unlock_bh(&sock->sk->sk_callback_lock);
  
-       return 0;
+       return ret;
  }
  
  static int nvmet_tcp_alloc_queue(struct nvmet_tcp_port *port,
        if (ret)
                goto out_destroy_sq;
  
-       queue_work_on(queue_cpu(queue), nvmet_tcp_wq, &queue->io_work);
        return 0;
  out_destroy_sq:
        mutex_lock(&nvmet_tcp_queue_mutex);
This page took 0.188661 seconds and 4 git commands to generate.