1. 17 Feb, 2024 3 commits
  2. 16 Feb, 2024 22 commits
    • Linus Torvalds's avatar
      Merge tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi · c1ca10ce
      Linus Torvalds authored
      Pull SCSI fixes from James Bottomley:
       "Three fixes: the two fnic ones are a revert and a refix, which is why
        the diffstat is a bit big. The target one also extracts a function to
        add a check for configuration and so looks bigger than it is"
      
      * tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi:
        scsi: fnic: Move fnic_fnic_flush_tx() to a work queue
        scsi: Revert "scsi: fcoe: Fix potential deadlock on &fip->ctlr_lock"
        scsi: target: Fix unmap setup during configuration
      c1ca10ce
    • Linus Torvalds's avatar
      Merge tag 'wq-for-6.8-rc4-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq · 975b26ab
      Linus Torvalds authored
      Pull workqueue fix from Tejun Heo:
       "Just one patch to revert commit ca10d851 ("workqueue: Override
        implicit ordered attribute in workqueue_apply_unbound_cpumask()").
      
        This commit could break ordering guarantees for ordered workqueues.
        The problem that the commit tried to resolve partially - making
        ordered workqueues follow unbound cpumask - is fully solved in
        wq/for-6.9 branch"
      
      * tag 'wq-for-6.8-rc4-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq:
        Revert "workqueue: Override implicit ordered attribute in workqueue_apply_unbound_cpumask()"
      975b26ab
    • Linus Torvalds's avatar
      Merge tag 'block-6.8-2024-02-16' of git://git.kernel.dk/linux · 7edfe0aa
      Linus Torvalds authored
      Pull block fixes from Jens Axboe:
       "Just an nvme pull request via Keith:
      
         - Fabrics connection error handling (Chaitanya)
      
         - Use relaxed effects to reduce unnecessary queue freezes (Keith)"
      
      * tag 'block-6.8-2024-02-16' of git://git.kernel.dk/linux:
        nvmet: remove superfluous initialization
        nvme: implement support for relaxed effects
        nvme-fabrics: fix I/O connect error handling
      7edfe0aa
    • Linus Torvalds's avatar
      Merge tag 'io_uring-6.8-2024-02-16' of git://git.kernel.dk/linux · 80960150
      Linus Torvalds authored
      Pull io_uring fix from Jens Axboe:
       "Just a single fix for a regression in how overflow is handled for
        multishot accept requests"
      
      * tag 'io_uring-6.8-2024-02-16' of git://git.kernel.dk/linux:
        io_uring/net: fix multishot accept overflow handling
      80960150
    • Linus Torvalds's avatar
      Merge tag 'ceph-for-6.8-rc5' of https://github.com/ceph/ceph-client · 3f9c1b31
      Linus Torvalds authored
      Pull ceph fixes from Ilya Dryomov:
       "Additional cap handling fixes from Xiubo to avoid "client isn't
        responding to mclientcaps(revoke)" stalls on the MDS side"
      
      * tag 'ceph-for-6.8-rc5' of https://github.com/ceph/ceph-client:
        ceph: add ceph_cap_unlink_work to fire check_caps() immediately
        ceph: always queue a writeback when revoking the Fb caps
      3f9c1b31
    • Linus Torvalds's avatar
      Merge tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm · 683b783c
      Linus Torvalds authored
      Pull KVM fixes from Paolo Bonzini:
       "ARM:
      
         - Avoid dropping the page refcount twice when freeing an unlinked
           page-table subtree.
      
         - Don't source the VFIO Kconfig twice
      
         - Fix protected-mode locking order between kvm and vcpus
      
        RISC-V:
      
         - Fix steal-time related sparse warnings
      
        x86:
      
         - Cleanup gtod_is_based_on_tsc() to return "bool" instead of an "int"
      
         - Make a KVM_REQ_NMI request while handling KVM_SET_VCPU_EVENTS if
           and only if the incoming events->nmi.pending is non-zero. If the
           target vCPU is in the UNITIALIZED state, the spurious request will
           result in KVM exiting to userspace, which in turn causes QEMU to
           constantly acquire and release QEMU's global mutex, to the point
           where the BSP is unable to make forward progress.
      
         - Fix a type (u8 versus u64) goof that results in pmu->fixed_ctr_ctrl
           being incorrectly truncated, and ultimately causes KVM to think a
           fixed counter has already been disabled (KVM thinks the old value
           is '0').
      
         - Fix a stack leak in KVM_GET_MSRS where a failed MSR read from
           userspace that is ultimately ignored due to ignore_msrs=true
           doesn't zero the output as intended.
      
        Selftests cleanups and fixes:
      
         - Remove redundant newlines from error messages.
      
         - Delete an unused variable in the AMX test (which causes build
           failures when compiling with -Werror).
      
         - Fail instead of skipping tests if open(), e.g. of /dev/kvm, fails
           with an error code other than ENOENT (a Hyper-V selftest bug
           resulted in an EMFILE, and the test eventually got skipped).
      
         - Fix TSC related bugs in several Hyper-V selftests.
      
         - Fix a bug in the dirty ring logging test where a sem_post() could
           be left pending across multiple runs, resulting in incorrect
           synchronization between the main thread and the vCPU worker thread.
      
         - Relax the dirty log split test's assertions on 4KiB mappings to fix
           false positives due to the number of mappings for memslot 0 (used
           for code and data that is NOT being dirty logged) changing, e.g.
           due to NUMA balancing"
      
      * tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm: (25 commits)
        KVM: arm64: Fix double-free following kvm_pgtable_stage2_free_unlinked()
        RISC-V: KVM: Use correct restricted types
        RISC-V: paravirt: Use correct restricted types
        RISC-V: paravirt: steal_time should be static
        KVM: selftests: Don't assert on exact number of 4KiB in dirty log split test
        KVM: selftests: Fix a semaphore imbalance in the dirty ring logging test
        KVM: x86: Fix KVM_GET_MSRS stack info leak
        KVM: arm64: Do not source virt/lib/Kconfig twice
        KVM: x86/pmu: Fix type length error when reading pmu->fixed_ctr_ctrl
        KVM: x86: Make gtod_is_based_on_tsc() return 'bool'
        KVM: selftests: Make hyperv_clock require TSC based system clocksource
        KVM: selftests: Run clocksource dependent tests with hyperv_clocksource_tsc_page too
        KVM: selftests: Use generic sys_clocksource_is_tsc() in vmx_nested_tsc_scaling_test
        KVM: selftests: Generalize check_clocksource() from kvm_clock_test
        KVM: x86: make KVM_REQ_NMI request iff NMI pending for vcpu
        KVM: arm64: Fix circular locking dependency
        KVM: selftests: Fail tests when open() fails with !ENOENT
        KVM: selftests: Avoid infinite loop in hyperv_features when invtsc is missing
        KVM: selftests: Delete superfluous, unused "stage" variable in AMX test
        KVM: selftests: x86_64: Remove redundant newlines
        ...
      683b783c
    • Linus Torvalds's avatar
      Merge tag 'trace-v6.8-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/trace/linux-trace · 4b6f7c62
      Linus Torvalds authored
      Pull tracing fixes from Steven Rostedt:
      
       - Fix the #ifndef that didn't have the 'CONFIG_' prefix on
         HAVE_DYNAMIC_FTRACE_WITH_REGS
      
         The fix to have dynamic trampolines work with x86 broke arm64 as the
         config used in the #ifdef was HAVE_DYNAMIC_FTRACE_WITH_REGS and not
         CONFIG_HAVE_DYNAMIC_FTRACE_WITH_REGS which removed the fix that the
         previous fix was to fix.
      
       - Fix tracing_on state
      
         The code to test if "tracing_on" is set incorrectly used
         ring_buffer_record_is_on() which returns false if the ring buffer
         isn't able to be written to.
      
         But the ring buffer disable has several bits that disable it. One is
         internal disabling which is used for resizing and other modifications
         of the ring buffer. But the "tracing_on" user space visible flag
         should only report if tracing is actually on and not internally
         disabled, as this can cause confusion as writing "1" when it is
         disabled will not enable it.
      
         Instead use ring_buffer_record_is_set_on() which shows the user space
         visible settings.
      
       - Fix a false positive kmemleak on saved cmdlines
      
         Now that the saved_cmdlines structure is allocated via alloc_page()
         and not via kmalloc() it has become invisible to kmemleak. The
         allocation done to one of its pointers was flagged as a dangling
         allocation leak. Make kmemleak aware of this allocation and free.
      
       - Fix synthetic event dynamic strings
      
         An update that cleaned up the synthetic event code removed the return
         value of trace_string(), and had it return zero instead of the
         length, causing dynamic strings in the synthetic event to always have
         zero size.
      
       - Clean up documentation and header files for seq_buf
      
      * tag 'trace-v6.8-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/trace/linux-trace:
        seq_buf: Fix kernel documentation
        seq_buf: Don't use "proxy" headers
        tracing/synthetic: Fix trace_string() return value
        tracing: Inform kmemleak of saved_cmdlines allocation
        tracing: Use ring_buffer_record_is_set_on() in tracer_tracing_is_on()
        tracing: Fix HAVE_DYNAMIC_FTRACE_WITH_REGS ifdef
      4b6f7c62
    • Linus Torvalds's avatar
      Merge tag 'arm64-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux · 3f3f64cb
      Linus Torvalds authored
      Pull arm64 fixes from Will Deacon:
       "It's a little busier than normal, but it's still not a lot of code and
        things seem fairly quiet in general:
      
         - Fix allocation failure during SVE coredumps
      
         - Fix handling of SVE context on signal delivery
      
         - Enable Neoverse N2 CPU errata workarounds for Microsoft's "Azure
           Cobalt 100" clone
      
         - Work around CMN PMU erratum in AmpereOneX implementation
      
         - Fix typo in CXL PMU event definition
      
         - Fix jump label asm constraints"
      
      * tag 'arm64-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux:
        arm64/sve: Lower the maximum allocation for the SVE ptrace regset
        arm64: Subscribe Microsoft Azure Cobalt 100 to ARM Neoverse N2 errata
        perf/arm-cmn: Workaround AmpereOneX errata AC04_MESH_1 (incorrect child count)
        arm64: jump_label: use constraints "Si" instead of "i"
        arm64: fix typo in comments
        perf: CXL: fix mismatched cpmu event opcode
        arm64/signal: Don't assume that TIF_SVE means we saved SVE state
      3f3f64cb
    • Linus Torvalds's avatar
      Merge tag 'zonefs-6.8-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/dlemoal/zonefs · efb0b63a
      Linus Torvalds authored
      Pull zonefs fix from Damien Le Moal:
      
       - Fix direct write error handling to avoid a race between failed IO
         completion and the submission path itself which can result in an
         invalid file size exposed to the user after the failed IO.
      
      * tag 'zonefs-6.8-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/dlemoal/zonefs:
        zonefs: Improve error handling
      efb0b63a
    • Paolo Bonzini's avatar
      Merge tag 'kvmarm-fixes-6.8-2' of... · 9895ceeb
      Paolo Bonzini authored
      Merge tag 'kvmarm-fixes-6.8-2' of git://git.kernel.org/pub/scm/linux/kernel/git/kvmarm/kvmarm into HEAD
      
      KVM/arm64 fixes for 6.8, take #2
      
      - Avoid dropping the page refcount twice when freeing an unlinked
        page-table subtree.
      9895ceeb
    • Paolo Bonzini's avatar
      Merge tag 'kvmarm-fixes-6.8-1' of... · 8046fa5f
      Paolo Bonzini authored
      Merge tag 'kvmarm-fixes-6.8-1' of git://git.kernel.org/pub/scm/linux/kernel/git/kvmarm/kvmarm into HEAD
      
      KVM/arm64 fixes for 6.8, take #1
      
      - Don't source the VFIO Kconfig twice
      
      - Fix protected-mode locking order between kvm and vcpus
      8046fa5f
    • Linus Torvalds's avatar
      Merge tag 'sound-6.8-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound · 0f1dd5e9
      Linus Torvalds authored
      Pull sound fixes from Takashi Iwai:
       "A collection of device-specific fixes. It became a bit bigger than
        wished, but all look reasonably small and safe to apply.
      
         - A few Cirrus Logic CS35L56 and CS42L43 driver fixes
      
         - ASoC SOF fixes and workarounds
      
         - Various ASoC Intel fixes
      
         - Lots of HD-, USB-audio and AMD ACP quirks"
      
      * tag 'sound-6.8-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound: (33 commits)
        ALSA: usb-audio: More relaxed check of MIDI jack names
        ALSA: hda/realtek: fix mute/micmute LED For HP mt645
        ALSA: hda/realtek: cs35l41: Fix order and duplicates in quirks table
        ALSA: hda/realtek: cs35l41: Fix device ID / model name
        ALSA: hda/realtek: cs35l41: Add internal speaker support for ASUS UM3402 with missing DSD
        ASoC: cs35l56: Workaround for ACPI with broken spk-id-gpios property
        ALSA: hda: Add Lenovo Legion 7i gen7 sound quirk
        ASoC: SOF: IPC3: fix message bounds on ipc ops
        ASoC: SOF: ipc4-pcm: Workaround for crashed firmware on system suspend
        ASoC: q6dsp: fix event handler prototype
        ASoC: SOF: Intel: pci-lnl: Change the topology path to intel/sof-ipc4-tplg
        ASoC: SOF: Intel: pci-tgl: Change the default paths and firmware names
        ASoC: amd: yc: Fix non-functional mic on Lenovo 82UU
        ASoC: rt5645: Add DMI quirk for inverted jack-detect on MeeGoPad T8
        ASoC: rt5645: Make LattePanda board DMI match more precise
        ASoC: SOF: amd: Fix locking in ACP IRQ handler
        ASoC: rt5645: Fix deadlock in rt5645_jack_detect_work()
        ASoC: Intel: cht_bsw_rt5645: Cleanup codec_name handling
        ASoC: Intel: Boards: Fix NULL pointer deref in BYT/CHT boards
        ASoC: cs35l56: Remove default from IRQ1_CFG register
        ...
      0f1dd5e9
    • Linus Torvalds's avatar
      Merge tag 'gpio-fixes-for-v6.8-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/brgl/linux · beda9c23
      Linus Torvalds authored
      Pull gpio fixes from Bartosz Golaszewski:
      
       - add missing stubs for functions that are not built with GPIOLIB
         disabled
      
      * tag 'gpio-fixes-for-v6.8-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/brgl/linux:
        gpiolib: add gpio_device_get_label() stub for !GPIOLIB
        gpiolib: add gpio_device_get_base() stub for !GPIOLIB
        gpiolib: add gpiod_to_gpio_device() stub for !GPIOLIB
      beda9c23
    • Linus Torvalds's avatar
      Merge tag 'drm-fixes-2024-02-16' of git://anongit.freedesktop.org/drm/drm · ca6a62f9
      Linus Torvalds authored
      Pull drm fixes from Dave Airlie:
       "Regular weekly fixes, nothing too major, mostly amdgpu, then i915, xe,
        msm and nouveau with some scattered bits elsewhere.
      
        crtc:
         - fix uninit variable
      
        prime:
         - support > 4GB page arrays
      
        buddy:
         - fix error handling in allocations
      
        i915:
         - fix blankscreen on JSL chromebooks
         - stable fix to limit DP sst link rates
      
        xe:
         - Fix an out-of-bounds shift.
         - Fix the display code thinking xe uses shmem
         - Fix a warning about index out-of-bound
         - Fix a clang-16 compilation warning
      
        amdgpu:
         - PSR fixes
         - Suspend/resume fixes
         - Link training fix
         - Aspect ratio fix
         - DCN 3.5 fixes
         - VCN 4.x fix
         - GFX 11 fix
         - Misc display fixes
         - Misc small fixes
      
        amdkfd:
         - Cache size reporting fix
         - SIMD distribution fix
      
        msm:
         - GPU:
         - dmabuf vmap fix
         - a610 UBWC corruption fix (incorrect hbb)
         - revert a commit that was making GPU recovery unreliable
         - tlb invalidation fix
      
        ivpu:
         - suspend/resume fix
      
        nouveau:
         - fix scheduler cleanup path
         - fix pointless scheduler creation
         - fix kvalloc argument order
      
        rockchip:
         - vop2 locking fix"
      
      * tag 'drm-fixes-2024-02-16' of git://anongit.freedesktop.org/drm/drm: (38 commits)
        drm/amdgpu: Fix implicit assumtion in gfx11 debug flags
        drm/amdkfd: update SIMD distribution algo for GFXIP 9.4.2 onwards
        drm/amd/display: Increase ips2_eval delay for DCN35
        drm/amdgpu/display: Initialize gamma correction mode variable in dcn30_get_gamcor_current()
        drm/amdgpu/soc21: update VCN 4 max HEVC encoding resolution
        drm/amd/display: fixed integer types and null check locations
        drm/amd/display: Fix array-index-out-of-bounds in dcn35_clkmgr
        drm/amd/display: Preserve original aspect ratio in create stream
        drm/amd/display: Fix possible NULL dereference on device remove/driver unload
        Revert "drm/amd/display: increased min_dcfclk_mhz and min_fclk_mhz"
        drm/amd/display: Add align done check
        Revert "drm/amd: flush any delayed gfxoff on suspend entry"
        drm/amd: Stop evicting resources on APUs in suspend
        drm/amd/display: Fix possible buffer overflow in 'find_dcfclk_for_voltage()'
        drm/amd/display: Fix possible use of uninitialized 'max_chunks_fbc_mode' in 'calculate_bandwidth()'
        drm/amd/display: Initialize 'wait_time_microsec' variable in link_dp_training_dpia.c
        drm/amd/display: Fix && vs || typos
        drm/amdkfd: Fix L2 cache size reporting in GFX9.4.3
        drm/amdgpu: make damage clips support configurable
        drm/msm: Wire up tlb ops
        ...
      ca6a62f9
    • Linus Torvalds's avatar
      Merge tag 'lsm-pr-20240215' of git://git.kernel.org/pub/scm/linux/kernel/git/pcmoore/lsm · b8ef9201
      Linus Torvalds authored
      Pull lsm fix from Paul Moore:
       "One small LSM patch to fix a potential integer overflow in the newly
        added lsm_set_self_attr() syscall"
      
      * tag 'lsm-pr-20240215' of git://git.kernel.org/pub/scm/linux/kernel/git/pcmoore/lsm:
        lsm: fix integer overflow in lsm_set_self_attr() syscall
      b8ef9201
    • Dave Airlie's avatar
      Merge tag 'drm-msm-fixes-2024-02-15' of https://gitlab.freedesktop.org/drm/msm into drm-fixes · ea69f782
      Dave Airlie authored
      Fixes for v6.8-rc5
      
      GPU:
      - dmabuf vmap fix
      - a610 UBWC corruption fix (incorrect hbb)
      - revert a commit that was making GPU recovery unreliable
      - tlb invalidation fix
      Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
      From: Rob Clark <robdclark@gmail.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/CAF6AEGszDSiw66+a=ttBr-hat+zrcBtfc_cZ4LQqXu89DJ0UeQ@mail.gmail.com
      ea69f782
    • Dave Airlie's avatar
      Merge tag 'amd-drm-fixes-6.8-2024-02-15-2' of... · 44395701
      Dave Airlie authored
      Merge tag 'amd-drm-fixes-6.8-2024-02-15-2' of https://gitlab.freedesktop.org/agd5f/linux into drm-fixes
      
      amd-drm-fixes-6.8-2024-02-15-2:
      
      amdgpu:
      - PSR fixes
      - Suspend/resume fixes
      - Link training fix
      - Aspect ratio fix
      - DCN 3.5 fixes
      - VCN 4.x fix
      - GFX 11 fix
      - Misc display fixes
      - Misc small fixes
      
      amdkfd:
      - Cache size reporting fix
      - SIMD distribution fix
      Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
      
      From: Alex Deucher <alexander.deucher@amd.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20240215192452.11805-1-alexander.deucher@amd.com
      44395701
    • Dave Airlie's avatar
      Merge tag 'drm-xe-fixes-2024-02-15' of https://gitlab.freedesktop.org/drm/xe/kernel into drm-fixes · 427e337f
      Dave Airlie authored
      Driver Changes:
      - Fix an out-of-bounds shift.
      - Fix the display code thinking xe uses shmem
      - Fix a warning about index out-of-bound
      - Fix a clang-16 compilation warning
      Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
      
      From: Thomas Hellstrom <thomas.hellstrom@linux.intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/Zc4GpcrbFVqdK9Ws@fedora
      427e337f
    • Dave Airlie's avatar
      Merge tag 'drm-intel-fixes-2024-02-15' of... · 7e1c3be3
      Dave Airlie authored
      Merge tag 'drm-intel-fixes-2024-02-15' of git://anongit.freedesktop.org/drm/drm-intel into drm-fixes
      
      Fix for #10172: Blank screen on JSL Chromebooks. Stable fix to limit DP SST link rate to <=8.1Gbps.
      Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
      From: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/Zc37W27F5OvoeSkG@jlahtine-mobl.ger.corp.intel.com
      7e1c3be3
    • Dave Airlie's avatar
      Merge tag 'drm-misc-fixes-2024-02-15' of git://anongit.freedesktop.org/drm/drm-misc into drm-fixes · 38df7e5e
      Dave Airlie authored
      A suspend/resume error fix for ivpu, a couple of scheduler fixes for
      nouveau, a patch to support large page arrays in prime, a uninitialized
      variable fix in crtc, a locking fix in rockchip/vop2 and a buddy
      allocator error reporting fix.
      Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
      
      From: Maxime Ripard <mripard@redhat.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/b4ffqzigtfh6cgzdpwuk6jlrv3dnk4hu6etiizgvibysqgtl2p@42n2gdfdd5eu
      38df7e5e
    • Steve French's avatar
      smb: Fix regression in writes when non-standard maximum write size negotiated · 4860abb9
      Steve French authored
      The conversion to netfs in the 6.3 kernel caused a regression when
      maximum write size is set by the server to an unexpected value which is
      not a multiple of 4096 (similarly if the user overrides the maximum
      write size by setting mount parm "wsize", but sets it to a value that
      is not a multiple of 4096).  When negotiated write size is not a
      multiple of 4096 the netfs code can skip the end of the final
      page when doing large sequential writes, causing data corruption.
      
      This section of code is being rewritten/removed due to a large
      netfs change, but until that point (ie for the 6.3 kernel until now)
      we can not support non-standard maximum write sizes.
      
      Add a warning if a user specifies a wsize on mount that is not
      a multiple of 4096 (and round down), also add a change where we
      round down the maximum write size if the server negotiates a value
      that is not a multiple of 4096 (we also have to check to make sure that
      we do not round it down to zero).
      Reported-by: default avatarR. Diez" <rdiez-2006@rd10.de>
      Fixes: d08089f6 ("cifs: Change the I/O paths to use an iterator rather than a page list")
      Suggested-by: default avatarRonnie Sahlberg <ronniesahlberg@gmail.com>
      Acked-by: default avatarRonnie Sahlberg <ronniesahlberg@gmail.com>
      Tested-by: default avatarMatthew Ruffell <matthew.ruffell@canonical.com>
      Reviewed-by: default avatarShyam Prasad N <sprasad@microsoft.com>
      Cc: stable@vger.kernel.org # v6.3+
      Cc: David Howells <dhowells@redhat.com>
      Signed-off-by: default avatarSteve French <stfrench@microsoft.com>
      4860abb9
    • Damien Le Moal's avatar
      zonefs: Improve error handling · 14db5f64
      Damien Le Moal authored
      Write error handling is racy and can sometime lead to the error recovery
      path wrongly changing the inode size of a sequential zone file to an
      incorrect value  which results in garbage data being readable at the end
      of a file. There are 2 problems:
      
      1) zonefs_file_dio_write() updates a zone file write pointer offset
         after issuing a direct IO with iomap_dio_rw(). This update is done
         only if the IO succeed for synchronous direct writes. However, for
         asynchronous direct writes, the update is done without waiting for
         the IO completion so that the next asynchronous IO can be
         immediately issued. However, if an asynchronous IO completes with a
         failure right before the i_truncate_mutex lock protecting the update,
         the update may change the value of the inode write pointer offset
         that was corrected by the error path (zonefs_io_error() function).
      
      2) zonefs_io_error() is called when a read or write error occurs. This
         function executes a report zone operation using the callback function
         zonefs_io_error_cb(), which does all the error recovery handling
         based on the current zone condition, write pointer position and
         according to the mount options being used. However, depending on the
         zoned device being used, a report zone callback may be executed in a
         context that is different from the context of __zonefs_io_error(). As
         a result, zonefs_io_error_cb() may be executed without the inode
         truncate mutex lock held, which can lead to invalid error processing.
      
      Fix both problems as follows:
      - Problem 1: Perform the inode write pointer offset update before a
        direct write is issued with iomap_dio_rw(). This is safe to do as
        partial direct writes are not supported (IOMAP_DIO_PARTIAL is not
        set) and any failed IO will trigger the execution of zonefs_io_error()
        which will correct the inode write pointer offset to reflect the
        current state of the one on the device.
      - Problem 2: Change zonefs_io_error_cb() into zonefs_handle_io_error()
        and call this function directly from __zonefs_io_error() after
        obtaining the zone information using blkdev_report_zones() with a
        simple callback function that copies to a local stack variable the
        struct blk_zone obtained from the device. This ensures that error
        handling is performed holding the inode truncate mutex.
        This change also simplifies error handling for conventional zone files
        by bypassing the execution of report zones entirely. This is safe to
        do because the condition of conventional zones cannot be read-only or
        offline and conventional zone files are always fully mapped with a
        constant file size.
      Reported-by: default avatarShin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
      Fixes: 8dcc1a9d ("fs: New zonefs file system")
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarDamien Le Moal <dlemoal@kernel.org>
      Tested-by: default avatarShin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
      Reviewed-by: default avatarJohannes Thumshirn <johannes.thumshirn@wdc.com>
      Reviewed-by: default avatarHimanshu Madhani <himanshu.madhani@oracle.com>
      14db5f64
  3. 15 Feb, 2024 15 commits