Linux 5.4.237
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.4.237 kernel.
All users of the 5.4 kernel series must upgrade.
The updated 5.4.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.4.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Documentation/admin-guide/kernel-parameters.txt | 51 +++++- Makefile | 2 arch/alpha/kernel/module.c | 4 arch/mips/include/asm/mach-rc32434/pci.h | 2 arch/powerpc/kernel/vmlinux.lds.S | 6 arch/riscv/kernel/stacktrace.c | 2 arch/s390/kernel/vmlinux.lds.S | 2 arch/sh/kernel/vmlinux.lds.S | 1 arch/um/kernel/vmlinux.lds.S | 2 arch/x86/kernel/cpu/amd.c | 9 + arch/x86/kernel/vmlinux.lds.S | 2 drivers/char/ipmi/ipmi_ssif.c | 146 ++++++------------ drivers/char/ipmi/ipmi_watchdog.c | 8 - drivers/gpu/drm/drm_atomic.c | 1 drivers/gpu/drm/i915/gt/intel_ringbuffer.c | 4 drivers/gpu/drm/msm/adreno/a5xx_gpu.c | 4 drivers/iommu/amd_iommu_init.c | 105 ++++++++++--- drivers/iommu/intel-pasid.c | 7 drivers/macintosh/windfarm_lm75_sensor.c | 4 drivers/macintosh/windfarm_smu_sensors.c | 4 drivers/media/i2c/ov5640.c | 2 drivers/net/ethernet/broadcom/bnxt/bnxt.c | 23 +- drivers/net/phy/microchip.c | 32 ++++ drivers/net/usb/lan78xx.c | 189 +++++++++--------------- drivers/nfc/fdp/i2c.c | 4 drivers/s390/block/dasd_diag.c | 7 drivers/s390/block/dasd_fba.c | 7 drivers/s390/block/dasd_int.h | 1 drivers/scsi/hosts.c | 2 drivers/scsi/megaraid/megaraid_sas.h | 2 drivers/scsi/megaraid/megaraid_sas_fp.c | 2 fs/cifs/cifsacl.c | 14 - fs/cifs/cifsfs.c | 2 fs/cifs/cifsglob.h | 6 fs/cifs/cifsproto.h | 8 + fs/cifs/connect.c | 2 fs/cifs/dir.c | 5 fs/cifs/file.c | 10 - fs/cifs/inode.c | 8 - fs/cifs/ioctl.c | 2 fs/cifs/link.c | 18 -- fs/cifs/smb1ops.c | 19 +- fs/cifs/smb2inode.c | 9 - fs/cifs/smb2ops.c | 92 ++++------- fs/cifs/smb2proto.h | 2 fs/ext4/fsmap.c | 2 fs/ext4/inline.c | 1 fs/ext4/inode.c | 7 fs/ext4/ioctl.c | 1 fs/ext4/namei.c | 36 +++- fs/ext4/xattr.c | 3 fs/file.c | 1 include/asm-generic/vmlinux.lds.h | 16 +- include/linux/irqdomain.h | 2 include/linux/pci_ids.h | 2 include/net/netfilter/nf_tproxy.h | 7 kernel/bpf/btf.c | 1 kernel/irq/irqdomain.c | 62 +++++-- net/caif/caif_usb.c | 3 net/ipv4/netfilter/nf_tproxy_ipv4.c | 2 net/ipv6/ila/ila_xlat.c | 1 net/ipv6/netfilter/nf_tproxy_ipv6.c | 2 net/nfc/netlink.c | 2 net/smc/af_smc.c | 13 + tools/testing/selftests/netfilter/nft_nat.sh | 2 65 files changed, 557 insertions(+), 443 deletions(-)
Alexandre Ghiti (1):
riscv: Use READ_ONCE_NOCHECK in imprecise unwinding stack mode
Alvaro Karsz (1):
PCI: Add SolidRun vendor ID
Amir Goldstein (1):
SMB3: Backup intent flag missing from some more ops
Andrew Cooper (1):
x86/CPU/AMD: Disable XSAVES on AMD family 0x17
Bart Van Assche (1):
scsi: core: Remove the /proc/scsi/${proc_name} directory earlierBixuan Cui (1):
irqdomain: Change the type of 'size' in __irq_domain_add() to be consistent
Chandrakanth Patil (1):
scsi: megaraid_sas: Update max supported LD IDs to 240
Corey Minyard (5):
ipmi:ssif: resend_msg() cannot fail
ipmi:ssif: Remove rtc_us_timer
ipmi:ssif: Increase the message retry time ipmi:ssif: Add a timer between request retries ipmi:watchdog: Set panic count to proper value on a panic
D. Wythe (1):
net/smc: fix fallback failed while sendmsg with fastopen
Darrick J. Wong (1):
ext4: fix another off-by-one fsmap error on 1k block filesystems
Dmitry Baryshkov (1):
drm/msm/a5xx: fix setting of the CP_PREEMPT_ENABLE_LOCAL register
Edward Humes (1):
alpha: fix R_ALPHA_LITERAL reloc for large modules
Eric Dumazet (1):
ila: do not generate empty messages in ila_xlat_nl_cmd_get_mapping()
Eric Whitney (1):
ext4: fix RENAME_WHITEOUT handling for inline directories
Fedor Pchelkin (1):
nfc: change order inside nfc_se_io error path
Florian Westphal (1):
netfilter: tproxy: fix deadlock due to missing BH disable
Gavrilov Ilia (1):
iommu/amd: Add a length limitation for the ivrs_acpihid command-line parameter
Greg Kroah-Hartman (1):
Linux 5.4.237
H.J. Lu (1):
x86, vmlinux.lds: Add RUNTIME_DISCARD_EXIT to generic DISCARDS
Hangbin Liu (1):
selftests: nft_nat: ensuring the listening side is up before starting the client
Harry Wentland (1):
drm/connector: print max_requested_bpc in state debugfs
Jacob Pan (1):
iommu/vt-d: Fix PASID directory pointer coherency
Jan Kara (2):
ext4: Fix possible corruption when moving a directory
ext4: Fix deadlock during directory rename
John Harrison (1):
drm/i915: Don't use BAR mappings for ring buffers with LLC
Kang Chen (1):
nfc: fdp: add null check of devm_kmalloc_array in fdp_nci_i2c_read_device_properties
Kim Phillips (1):
iommu/amd: Fix ill-formed ivrs_ioapic, ivrs_hpet and ivrs_acpihid options
Lee Jones (1):
net: usb: lan78xx: Remove lots of set but unused 'ret' variables
Liguang Zhang (1):
ipmi:ssif: make ssif_i2c_send() void
Lorenz Bauer (1):
btf: fix resolving BTF_KIND_VAR after ARRAY, STRUCT, UNION, PTR
Marc Zyngier (1):
irqdomain: Fix domain registration race
Masahiro Yamada (3):
arch: fix broken BuildID for arm64 and riscv
s390: define RUNTIME_DISCARD_EXIT to fix link error with GNU ld < 2.36
UML: define RUNTIME_DISCARD_EXIT
Michael Chan (1):
bnxt_en: Avoid order-5 memory allocation for TPA data
Michael Ellerman (2):
powerpc/vmlinux.lds: Define RUNTIME_DISCARD_EXIT powerpc/vmlinux.lds: Don't discard .rela* for relocatable builds
Nathan Chancellor (1):
macintosh: windfarm: Use unsigned type for 1-bit bitfields
Paul Elder (1):
media: ov5640: Fix analogue gain control
Shigeru Yoshida (1):
net: caif: Fix use-after-free in cfusbl_device_notify()
Stefan Haberland (1):
s390/dasd: add missing discipline function
Suravee Suthikulpanit (1):
iommu/amd: Add PCI segment support for ivrs_[ioapic/hpet/acpihid] commands
Theodore Ts'o (1):
fs: prevent out-of-bounds array speculation when closing a file descriptor
Tom Saeger (1):
sh: define RUNTIME_DISCARD_EXIT
Volker Lendecke (1):
cifs: Fix uninitialized memory read in smb3_qfs_tcon()
Ye Bin (2):
ext4: move where set the MAY_INLINE_DATA flag is set
ext4: fix WARNING in ext4_update_inline_data
Yejune Deng (1):
ipmi/watchdog: replace atomic_add() and atomic_sub()
Yuiko Oshino (1):
net: lan78xx: fix accessing the LAN7800's internal phy specific registers from the MAC driver
Zhihao Cheng (1):
ext4: zero i_disksize when initializing the bootloader inode
xurui (1):
MIPS: Fix a compilation issue
Greg Kroah-Hartman
maintainerDocumentation/admin-guide/kernel-parameters.txt +42 -9
@@ -1944,24 +1944,57 @@ ivrs_ioapic [HW,X86_64] Provide an override to the IOAPIC-ID<->DEVICE-ID - mapping provided in the IVRS ACPI table. For - example, to map IOAPIC-ID decimal 10 to - PCI device 00:14.0 write the parameter as: + mapping provided in the IVRS ACPI table. + By default, PCI segment is 0, and can be omitted. + + For example, to map IOAPIC-ID decimal 10 to + PCI segment 0x1 and PCI device 00:14.0, + write the parameter as: + ivrs_ioapic=10@0001:00:14.0 + + Deprecated formats: + * To map IOAPIC-ID decimal 10 to PCI device 00:14.0 + write the parameter as: ivrs_ioapic[10]=00:14.0 + * To map IOAPIC-ID decimal 10 to PCI segment 0x1 and + PCI device 00:14.0 write the parameter as: + ivrs_ioapic[10]=0001:00:14.0 ivrs_hpet [HW,X86_64] Provide an override to the HPET-ID<->DEVICE-ID - mapping provided in the IVRS ACPI table. For - example, to map HPET-ID decimal 0 to - PCI device 00:14.0 write the parameter as: + mapping provided in the IVRS ACPI table. + By default, PCI segment is 0, and can be omitted. + + For example, to map HPET-ID decimal 10 to + PCI segment 0x1 and PCI device 00:14.0, + write the parameter as: + ivrs_hpet=10@0001:00:14.0 + + Deprecated formats: + * To map HPET-ID decimal 0 to PCI device 00:14.0 + write the parameter as: ivrs_hpet[0]=00:14.0 + * To map HPET-ID decimal 10 to PCI segment 0x1 and + PCI device 00:14.0 write the parameter as: + ivrs_ioapic[10]=0001:00:14.0 ivrs_acpihid [HW,X86_64] Provide an override to the ACPI-HID:UID<->DEVICE-ID - mapping provided in the IVRS ACPI table. For - example, to map UART-HID:UID AMD0020:0 to - PCI device 00:14.5 write the parameter as: + mapping provided in the IVRS ACPI table. + By default, PCI segment is 0, and can be omitted. + + For example, to map UART-HID:UID AMD0020:0 to + PCI segment 0x1 and PCI device ID 00:14.5, + write the parameter as: + ivrs_acpihid=AMD0020:0@0001:00:14.5 + + Deprecated formats: + * To map UART-HID:UID AMD0020:0 to PCI segment is 0, + PCI device ID 00:14.5, write the parameter as: ivrs_acpihid[00:14.5]=AMD0020:0 + * To map UART-HID:UID AMD0020:0 to PCI segment 0x1 and + PCI device ID 00:14.5, write the parameter as: + ivrs_acpihid[0001:00:14.5]=AMD0020:0 js= [HW,JOY] Analog joystick See Documentation/input/joydev/joystick.rst.
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 4 -SUBLEVEL = 236 +SUBLEVEL = 237 EXTRAVERSION = NAME = Kleptomaniac Octopus
arch/alpha/kernel/module.c +1 -3
@@ -146,10 +146,8 @@ apply_relocate_add(Elf64_Shdr *sechdrs, const char *strtab, base = (void *)sechdrs[sechdrs[relsec].sh_info].sh_addr; symtab = (Elf64_Sym *)sechdrs[symindex].sh_addr; -/* The small sections were sorted to the end of the segment. -The following should definitely cover them. */ - gp = (u64 )me->core_layout.base + me->core_layout.size -0x8000 ; got = sechdrs[me->arch.gotsecindex].sh_addr; + gp = got +0x8000 ;for (i =0 ; i < n; i++) {unsigned long r_sym =ELF64_R_SYM (rela[i].r_info);
arch/mips/include/asm/mach-rc32434/pci.h +1 -1
@@ -377,7 +377,7 @@ struct pci_msu { PCI_CFG04_STAT_SSE | \ PCI_CFG04_STAT_PE) -#define KORINA_CNFG1 ((KORINA_STAT<<16)|KORINA_CMD) +#define KORINA_CNFG1 (KORINA_STAT | KORINA_CMD)#define KORINA_REVID 0#define KORINA_CLASS_CODE 0
arch/powerpc/kernel/vmlinux.lds.S +5 -1
@@ -6,6 +6,7 @@ #endif #define BSS_FIRST_SECTIONS *(.bss.prominit) +#define RUNTIME_DISCARD_EXIT #include <asm/page.h> #include <asm-generic/vmlinux.lds.h>
@@ -394,9 +395,12 @@ SECTIONS DISCARDS /DISCARD/ : { *(*.EMB.apuinfo) - *(.glink .iplt .plt .rela* .comment) + *(.glink .iplt .plt .comment) *(.gnu.version*) *(.gnu.attributes) *(.eh_frame) +#ifndef CONFIG_RELOCATABLE + *(.rela*) +#endif } }
arch/riscv/kernel/stacktrace.c +1 -1
@@ -89,7 +89,7 @@ void notrace walk_stackframe(struct task_struct *task,while (!kstack_end (ksp)) {if (__kernel_text_address (pc) &&unlikely (fn (pc, arg)))break ; - pc = (*ksp++) -0x4 ; + pc =READ_ONCE_NOCHECK (*ksp++) -0x4 ; } }
arch/s390/kernel/vmlinux.lds.S +2 -0
@@ -15,6 +15,8 @@ /* Handle ro_after_init data on our own. */ #define RO_AFTER_INIT_DATA +#define RUNTIME_DISCARD_EXIT + #include <asm-generic/vmlinux.lds.h> #include <asm/vmlinux.lds.h>
arch/sh/kernel/vmlinux.lds.S +1 -0
@@ -10,6 +10,7 @@ OUTPUT_ARCH(sh:sh5) #define LOAD_OFFSET 0 OUTPUT_ARCH(sh) #endif +#define RUNTIME_DISCARD_EXIT #include <asm/thread_info.h> #include <asm/cache.h>
arch/um/kernel/vmlinux.lds.S +1 -1
@@ -1,4 +1,4 @@ - +#define RUNTIME_DISCARD_EXIT KERNEL_STACK_SIZE = 4096 * (1 << CONFIG_KERNEL_STACK_ORDER); #ifdef CONFIG_LD_SCRIPT_STATIC
arch/x86/kernel/cpu/amd.c +9 -0
@@ -205,6 +205,15 @@ static void init_amd_k6(struct cpuinfo_x86 *c) return; }#endif +/* +* Work around Erratum 1386. The XSAVES instruction malfunctions in +* certain circumstances on Zen1/2 uarch, and not all parts have had +* updated microcode at the time of writing (March 2023). +* +* Affected parts all have no supervisor XSAVE states, meaning that +* the XSAVEC instruction (which works fine) is equivalent. +*/ +clear_cpu_cap (c,X86_FEATURE_XSAVES ); }static void init_amd_k7 (struct cpuinfo_x86 *c)
arch/x86/kernel/vmlinux.lds.S +2 -0
@@ -21,6 +21,8 @@ #define LOAD_OFFSET __START_KERNEL_map #endif +#define RUNTIME_DISCARD_EXIT + #include <asm-generic/vmlinux.lds.h> #include <asm/asm-offsets.h> #include <asm/thread_info.h>
drivers/char/ipmi/ipmi_ssif.c +51 -95
300 lines not on this page · raw message
drivers/char/ipmi/ipmi_watchdog.c +4 -4
@@ -498,7 +498,7 @@ static void panic_halt_ipmi_heartbeat(void) msg.cmd =IPMI_WDOG_RESET_TIMER ; msg.data =NULL ; msg.data_len =0 ; -atomic_add (1 , &panic_done_count); +atomic_add (2 , &panic_done_count); rv = ipmi_request_supply_msgs(watchdog_user, (struct ipmi_addr *) &addr, 0,
@@ -508,7 +508,7 @@ static void panic_halt_ipmi_heartbeat(void) &panic_halt_heartbeat_recv_msg, 1);if (rv) -atomic_sub (1 , &panic_done_count); +atomic_sub (2 , &panic_done_count); }static struct ipmi_smi_msg panic_halt_smi_msg = {
@@ -532,12 +532,12 @@ static void panic_halt_ipmi_set_timeout(void)/* Wait for the messages to be free. */ while (atomic_read (&panic_done_count) !=0 )ipmi_poll_interface (watchdog_user); -atomic_add (1 , &panic_done_count); +atomic_add (2 , &panic_done_count); rv =__ipmi_set_timeout (&panic_halt_smi_msg, &panic_halt_recv_msg, &send_heartbeat_now);if (rv) { -atomic_sub (1 , &panic_done_count); +atomic_sub (2 , &panic_done_count);pr_warn ("Unable to extend the watchdog timeout\n" ); }else {if (send_heartbeat_now)
drivers/gpu/drm/drm_atomic.c +1 -0
@@ -1006,6 +1006,7 @@ static void drm_atomic_connector_print_state(struct drm_printer *p,drm_printf (p,"connector[%u]: %s\n" , connector->base.id, connector->name);drm_printf (p,"\tcrtc=%s\n" , state->crtc ? state->crtc->name :"(null)" );drm_printf (p,"\tself_refresh_aware=%d\n" , state->self_refresh_aware); +drm_printf (p,"\tmax_requested_bpc=%d\n" , state->max_requested_bpc);if (connector->connector_type ==DRM_MODE_CONNECTOR_WRITEBACK )if (state->writeback_job && state->writeback_job->fb)
drivers/gpu/drm/i915/gt/intel_ringbuffer.c +2 -2
@@ -1208,7 +1208,7 @@ int intel_ring_pin(struct intel_ring *ring)if (unlikely (ret)) goto err_unpin; -if (i915_vma_is_map_and_fenceable (vma)) +if (i915_vma_is_map_and_fenceable (vma) && !HAS_LLC (vma->vm->i915)) addr = (void __force *)i915_vma_pin_iomap (vma);else addr = i915_gem_object_pin_map(vma->obj,
@@ -1252,7 +1252,7 @@ void intel_ring_unpin(struct intel_ring *ring)intel_ring_reset (ring, ring->emit);i915_vma_unset_ggtt_write (vma); -if (i915_vma_is_map_and_fenceable (vma)) +if (i915_vma_is_map_and_fenceable (vma) && !HAS_LLC (vma->vm->i915))i915_vma_unpin_iomap (vma);else i915_gem_object_unpin_map (vma->obj);
drivers/gpu/drm/msm/adreno/a5xx_gpu.c +2 -2
@@ -135,8 +135,8 @@ static void a5xx_submit(struct msm_gpu *gpu, struct msm_gem_submit *submit,OUT_RING (ring,1 );/* Enable local preemption for finegrain preemption */ -OUT_PKT7 (ring,CP_PREEMPT_ENABLE_GLOBAL ,1 ); -OUT_RING (ring,0x02 ); +OUT_PKT7 (ring,CP_PREEMPT_ENABLE_LOCAL ,1 ); +OUT_RING (ring,0x1 );/* Allow CP_CONTEXT_SWITCH_YIELD packets in the IB2 */ OUT_PKT7 (ring,CP_YIELD_ENABLE ,1 );
drivers/iommu/amd_iommu_init.c +79 -26
160 lines not on this page · raw message
drivers/iommu/intel-pasid.c +7 -0
@@ -166,6 +166,9 @@ int intel_pasid_alloc_table(struct device *dev) attach_out:device_attach_pasid_table (info, pasid_table); +if (!ecap_coherent (info->iommu->ecap)) +clflush_cache_range (pasid_table->table, size); +return 0 ; }
@@ -250,6 +253,10 @@ struct pasid_entry *intel_pasid_get_entry(struct device *dev, int pasid)WRITE_ONCE (dir[dir_index].val, (u64 )virt_to_phys (entries) |PASID_PTE_PRESENT ); +if (!ecap_coherent (info->iommu->ecap)) { +clflush_cache_range (entries,VTD_PAGE_SIZE ); +clflush_cache_range (&dir[dir_index].val,sizeof (*dir)); + } }spin_unlock (&pasid_lock);
drivers/macintosh/windfarm_lm75_sensor.c +2 -2
@@ -34,8 +34,8 @@#endif struct wf_lm75_sensor { -int ds1775 :1 ; -int inited :1 ; +unsigned int ds1775 :1 ; +unsigned int inited :1 ;struct i2c_client *i2c;struct wf_sensor sens; };
drivers/macintosh/windfarm_smu_sensors.c +2 -2
@@ -273,8 +273,8 @@ struct smu_cpu_power_sensor {struct list_head link;struct wf_sensor *volts;struct wf_sensor *amps; - int fake_volts : 1; - int quadratic : 1; + unsigned int fake_volts : 1; + unsigned int quadratic : 1;struct wf_sensor sens; };#define to_smu_cpu_power (c) container_of(c, struct smu_cpu_power_sensor, sens)
drivers/media/i2c/ov5640.c +1 -1
@@ -2704,7 +2704,7 @@ static int ov5640_init_controls(struct ov5640_dev *sensor)/* Auto/manual gain */ ctrls->auto_gain =v4l2_ctrl_new_std (hdl, ops,V4L2_CID_AUTOGAIN ,0 ,1 ,1 ,1 ); - ctrls->gain =v4l2_ctrl_new_std (hdl, ops,V4L2_CID_GAIN , + ctrls->gain =v4l2_ctrl_new_std (hdl, ops,V4L2_CID_ANALOGUE_GAIN ,0 ,1023 ,1 ,0 ); ctrls->saturation = v4l2_ctrl_new_std(hdl, ops, V4L2_CID_SATURATION,
drivers/net/ethernet/broadcom/bnxt/bnxt.c +12 -11
@@ -2747,7 +2747,7 @@ static int bnxt_alloc_ring(struct bnxt *bp, struct bnxt_ring_mem_info *rmem)static void bnxt_free_tpa_info (struct bnxt *bp) { -int i; +int i, j;for (i =0 ; i < bp->rx_nr_rings; i++) {struct bnxt_rx_ring_info *rxr = &bp->rx_ring[i];
@@ -2755,8 +2755,10 @@ static void bnxt_free_tpa_info(struct bnxt *bp)kfree (rxr->rx_tpa_idx_map); rxr->rx_tpa_idx_map =NULL ;if (rxr->rx_tpa) { -kfree (rxr->rx_tpa[0 ].agg_arr); - rxr->rx_tpa[0 ].agg_arr =NULL ; +for (j =0 ; j < bp->max_tpa; j++) { +kfree (rxr->rx_tpa[j].agg_arr); + rxr->rx_tpa[j].agg_arr =NULL ; + } }kfree (rxr->rx_tpa); rxr->rx_tpa =NULL ;
@@ -2765,14 +2767,13 @@ static void bnxt_free_tpa_info(struct bnxt *bp)static int bnxt_alloc_tpa_info (struct bnxt *bp) { -int i, j, total_aggs =0 ; +int i, j; bp->max_tpa =MAX_TPA ;if (bp->flags &BNXT_FLAG_CHIP_P5 ) {if (!bp->max_tpa_v2)return 0 ; bp->max_tpa =max_t (u16, bp->max_tpa_v2,MAX_TPA_P5 ); - total_aggs = bp->max_tpa *MAX_SKB_FRAGS ; }for (i =0 ; i < bp->rx_nr_rings; i++) {
@@ -2786,12 +2787,12 @@ static int bnxt_alloc_tpa_info(struct bnxt *bp)if (!(bp->flags &BNXT_FLAG_CHIP_P5 ))continue ; - agg =kcalloc (total_aggs,sizeof (*agg),GFP_KERNEL ); - rxr->rx_tpa[0 ].agg_arr = agg; -if (!agg) -return -ENOMEM ; -for (j =1 ; j < bp->max_tpa; j++) - rxr->rx_tpa[j].agg_arr = agg + j *MAX_SKB_FRAGS ; +for (j =0 ; j < bp->max_tpa; j++) { + agg =kcalloc (MAX_SKB_FRAGS ,sizeof (*agg),GFP_KERNEL ); +if (!agg) +return -ENOMEM ; + rxr->rx_tpa[j].agg_arr = agg; + } rxr->rx_tpa_idx_map =kzalloc (sizeof (*rxr->rx_tpa_idx_map),GFP_KERNEL );if (!rxr->rx_tpa_idx_map)
drivers/net/phy/microchip.c +32 -0
@@ -326,6 +326,37 @@ static int lan88xx_config_aneg(struct phy_device *phydev)return genphy_config_aneg (phydev); } +static void lan88xx_link_change_notify (struct phy_device *phydev) +{ +int temp; + +/* At forced 100 F/H mode, chip may fail to set mode correctly +* when cable is switched between long(~50+m) and short one. +* As workaround, set to 10 before setting to 100 +* at forced 100 F/H mode. +*/ +if (!phydev->autoneg && phydev->speed ==100 ) { +/* disable phy interrupt */ + temp =phy_read (phydev,LAN88XX_INT_MASK ); + temp &= ~LAN88XX_INT_MASK_MDINTPIN_EN_ ; +phy_write (phydev,LAN88XX_INT_MASK , temp); + + temp =phy_read (phydev,MII_BMCR ); + temp &= ~(BMCR_SPEED100 |BMCR_SPEED1000 ); +phy_write (phydev,MII_BMCR , temp);/* set to 10 first */ + temp |=BMCR_SPEED100 ; +phy_write (phydev,MII_BMCR , temp);/* set to 100 later */ + +/* clear pending interrupt generated while workaround */ + temp =phy_read (phydev,LAN88XX_INT_STS ); + +/* enable phy interrupt back */ + temp =phy_read (phydev,LAN88XX_INT_MASK ); + temp |=LAN88XX_INT_MASK_MDINTPIN_EN_ ; +phy_write (phydev,LAN88XX_INT_MASK , temp); + } +} +static struct phy_driver microchip_phy_driver[] = { { .phy_id =0x0007c130 ,
@@ -339,6 +370,7 @@ static struct phy_driver microchip_phy_driver[] = { .config_init = lan88xx_config_init, .config_aneg = lan88xx_config_aneg, + .link_change_notify = lan88xx_link_change_notify, .ack_interrupt = lan88xx_phy_ack_interrupt, .config_intr = lan88xx_phy_config_intr,
drivers/net/usb/lan78xx.c +76 -113
464 lines not on this page · raw message
drivers/nfc/fdp/i2c.c +4 -0
@@ -255,6 +255,9 @@ static void fdp_nci_i2c_read_device_properties(struct device *dev, len,sizeof (**fw_vsc_cfg), GFP_KERNEL); +if (!*fw_vsc_cfg) + goto alloc_err; + r =device_property_read_u8_array (dev,FDP_DP_FW_VSC_CFG_NAME , *fw_vsc_cfg, len);
@@ -268,6 +271,7 @@ static void fdp_nci_i2c_read_device_properties(struct device *dev, *fw_vsc_cfg =NULL ; } +alloc_err:dev_dbg (dev,"Clock type: %d, clock frequency: %d, VSC: %s" , *clock_type, *clock_freq, *fw_vsc_cfg !=NULL ?"yes" :"no" ); }
drivers/s390/block/dasd_diag.c +6 -1
@@ -644,12 +644,17 @@ static void dasd_diag_setup_blk_queue(struct dasd_block *block)blk_queue_segment_boundary (q,PAGE_SIZE -1 ); } +static int dasd_diag_pe_handler (struct dasd_device *device,__u8 tbvpm) +{ +return dasd_generic_verify_path (device, tbvpm); +} +static struct dasd_discipline dasd_diag_discipline = { .owner =THIS_MODULE , .name ="DIAG" , .ebcname ="DIAG" , .check_device = dasd_diag_check_device, - .verify_path = dasd_generic_verify_path, + .pe_handler = dasd_diag_pe_handler, .fill_geometry = dasd_diag_fill_geometry, .setup_blk_queue = dasd_diag_setup_blk_queue, .start_IO = dasd_start_diag,
drivers/s390/block/dasd_fba.c +6 -1
@@ -803,13 +803,18 @@ static void dasd_fba_setup_blk_queue(struct dasd_block *block)blk_queue_flag_set (QUEUE_FLAG_DISCARD , q); } +static int dasd_fba_pe_handler (struct dasd_device *device,__u8 tbvpm) +{ +return dasd_generic_verify_path (device, tbvpm); +} +static struct dasd_discipline dasd_fba_discipline = { .owner =THIS_MODULE , .name ="FBA " , .ebcname ="FBA " , .check_device = dasd_fba_check_characteristics, .do_analysis = dasd_fba_do_analysis, - .verify_path = dasd_generic_verify_path, + .pe_handler = dasd_fba_pe_handler, .setup_blk_queue = dasd_fba_setup_blk_queue, .fill_geometry = dasd_fba_fill_geometry, .start_IO = dasd_start_IO,
drivers/s390/block/dasd_int.h +0 -1
@@ -298,7 +298,6 @@ struct dasd_discipline {* e.g. verify that new path is compatible with the current * configuration. */ -int (*verify_path)(struct dasd_device *,__u8 );int (*pe_handler)(struct dasd_device *,__u8 );/*
drivers/scsi/hosts.c +2 -0
@@ -179,6 +179,7 @@ void scsi_remove_host(struct Scsi_Host *shost)scsi_forget_host (shost);mutex_unlock (&shost->scan_mutex);scsi_proc_host_rm (shost); +scsi_proc_hostdir_rm (shost->hostt);spin_lock_irqsave (shost->host_lock, flags);if (scsi_host_set_state (shost,SHOST_DEL ))
@@ -318,6 +319,7 @@ static void scsi_host_dev_release(struct device *dev)struct Scsi_Host *shost =dev_to_shost (dev);struct device *parent = dev->parent; +/* In case scsi_remove_host() has not been called. */ scsi_proc_hostdir_rm (shost->hostt);/* Wait for functions invoked through call_rcu(&shost->rcu, ...) */
drivers/scsi/megaraid/megaraid_sas.h +2 -0
@@ -1515,6 +1515,8 @@ struct megasas_ctrl_info {#define MEGASAS_MAX_LD_IDS (MEGASAS_MAX_LD_CHANNELS * \ MEGASAS_MAX_DEV_PER_CHANNEL) +#define MEGASAS_MAX_SUPPORTED_LD_IDS 240 +#define MEGASAS_MAX_SECTORS (2*1024)#define MEGASAS_MAX_SECTORS_IEEE (2*128)#define MEGASAS_DBG_LVL 1
drivers/scsi/megaraid/megaraid_sas_fp.c +1 -1
@@ -359,7 +359,7 @@ u8 MR_ValidateMapInfo(struct megasas_instance *instance, u64 map_id) ld =MR_TargetIdToLdGet (i, drv_map);/* For non existing VDs, iterate to next VD*/ -if (ld >= (MAX_LOGICAL_DRIVES_EXT -1 )) +if (ld >=MEGASAS_MAX_SUPPORTED_LD_IDS )continue ; raid =MR_LdRaidGet (ld, drv_map);
fs/cifs/cifsacl.c +4 -10
@@ -1056,7 +1056,7 @@ static struct cifs_ntsd *get_cifs_acl_by_path(struct cifs_sb_info *cifs_sb,struct cifs_ntsd *pntsd =NULL ;int oplock =0 ;unsigned int xid; -int rc, create_options =0 ; +int rc;struct cifs_tcon *tcon;struct tcon_link *tlink =cifs_sb_tlink (cifs_sb);struct cifs_fid fid;
@@ -1068,13 +1068,10 @@ static struct cifs_ntsd *get_cifs_acl_by_path(struct cifs_sb_info *cifs_sb, tcon =tlink_tcon (tlink); xid =get_xid (); -if (backup_cred (cifs_sb)) - create_options |=CREATE_OPEN_BACKUP_INTENT ; - oparms.tcon = tcon; oparms.cifs_sb = cifs_sb; oparms.desired_access =READ_CONTROL ; - oparms.create_options = create_options; + oparms.create_options =cifs_create_options (cifs_sb,0 ); oparms.disposition =FILE_OPEN ; oparms.path = path; oparms.fid = &fid;
@@ -1119,7 +1116,7 @@ int set_cifs_acl(struct cifs_ntsd *pnntsd, __u32 acllen, {int oplock =0 ;unsigned int xid; -int rc, access_flags, create_options =0 ; +int rc, access_flags;struct cifs_tcon *tcon;struct cifs_sb_info *cifs_sb =CIFS_SB (inode->i_sb);struct tcon_link *tlink =cifs_sb_tlink (cifs_sb);
@@ -1132,9 +1129,6 @@ int set_cifs_acl(struct cifs_ntsd *pnntsd, __u32 acllen, tcon =tlink_tcon (tlink); xid =get_xid (); -if (backup_cred (cifs_sb)) - create_options |=CREATE_OPEN_BACKUP_INTENT ; -if (aclflag ==CIFS_ACL_OWNER || aclflag ==CIFS_ACL_GROUP ) access_flags =WRITE_OWNER ;else
@@ -1143,7 +1137,7 @@ int set_cifs_acl(struct cifs_ntsd *pnntsd, __u32 acllen, oparms.tcon = tcon; oparms.cifs_sb = cifs_sb; oparms.desired_access = access_flags; - oparms.create_options = create_options; + oparms.create_options =cifs_create_options (cifs_sb,0 ); oparms.disposition =FILE_OPEN ; oparms.path = path; oparms.fid = &fid;
fs/cifs/cifsfs.c +1 -1
@@ -275,7 +275,7 @@ cifs_statfs(struct dentry *dentry, struct kstatfs *buf) buf->f_ffree =0 ;/* unlimited */ if (server->ops->queryfs) - rc = server->ops->queryfs (xid, tcon, buf); + rc = server->ops->queryfs (xid, tcon, cifs_sb, buf);free_xid (xid);return rc;
fs/cifs/cifsglob.h +4 -2
@@ -300,7 +300,8 @@ struct smb_version_operations { const char *, struct dfs_info3_param **, unsigned int *, const struct nls_table *, int);/* informational QFS call */ -void (*qfs_tcon)(const unsigned int ,struct cifs_tcon *); +void (*qfs_tcon)(const unsigned int ,struct cifs_tcon *, +struct cifs_sb_info *);/* check if a path is accessible or not */ int (*is_path_accessible)(const unsigned int ,struct cifs_tcon *,struct cifs_sb_info *,const char *);
@@ -408,7 +409,7 @@ struct smb_version_operations { struct cifsInodeInfo *);/* query remote filesystem */ int (*queryfs)(const unsigned int ,struct cifs_tcon *, -struct kstatfs *); +struct cifs_sb_info *,struct kstatfs *);/* send mandatory brlock to the server */ int (*mand_lock)(const unsigned int ,struct cifsFileInfo *,__u64 ,__u64 ,__u32 ,int ,int ,bool );
@@ -489,6 +490,7 @@ struct smb_version_operations {/* ioctl passthrough for query_info */ int (*ioctl_query_info)(const unsigned int xid,struct cifs_tcon *tcon, +struct cifs_sb_info *cifs_sb,__le16 *path,int is_dir,unsigned long p);/* make unix special files (block, char, fifo, socket) */
fs/cifs/cifsproto.h +8 -0
@@ -600,4 +600,12 @@ static inline int get_dfs_path(const unsigned int xid, struct cifs_ses *ses, }#endif +static inline int cifs_create_options (struct cifs_sb_info *cifs_sb,int options) +{ +if (backup_cred (cifs_sb)) +return options |CREATE_OPEN_BACKUP_INTENT ; +else +return options; +} +#endif /* _CIFSPROTO_H */
fs/cifs/connect.c +1 -1
@@ -4319,7 +4319,7 @@ static int mount_get_conns(struct smb_vol *vol, struct cifs_sb_info *cifs_sb,/* do not care if a following call succeed - informational */ if (!tcon->pipe && server->ops->qfs_tcon) { - server->ops->qfs_tcon (*xid, tcon); + server->ops->qfs_tcon (*xid, tcon, cifs_sb);if (cifs_sb->mnt_cifs_flags &CIFS_MOUNT_RO_CACHE ) {if (tcon->fsDevInfo.DeviceCharacteristics &cpu_to_le32 (FILE_READ_ONLY_DEVICE ))
fs/cifs/dir.c +1 -4
@@ -357,13 +357,10 @@ cifs_do_create(struct inode *inode, struct dentry *direntry, unsigned int xid,if (!tcon->unix_ext && (mode &S_IWUGO ) ==0 ) create_options |=CREATE_OPTION_READONLY ; -if (backup_cred (cifs_sb)) - create_options |=CREATE_OPEN_BACKUP_INTENT ; - oparms.tcon = tcon; oparms.cifs_sb = cifs_sb; oparms.desired_access = desired_access; - oparms.create_options = create_options; + oparms.create_options =cifs_create_options (cifs_sb, create_options); oparms.disposition = disposition; oparms.path = full_path; oparms.fid = fid;
fs/cifs/file.c +2 -8
@@ -223,9 +223,6 @@ cifs_nt_open(char *full_path, struct inode *inode, struct cifs_sb_info *cifs_sb,if (!buf)return -ENOMEM ; -if (backup_cred (cifs_sb)) - create_options |=CREATE_OPEN_BACKUP_INTENT ; -/* O_SYNC also has bit for O_DSYNC so following check picks up either */ if (f_flags &O_SYNC ) create_options |=CREATE_WRITE_THROUGH ;
@@ -236,7 +233,7 @@ cifs_nt_open(char *full_path, struct inode *inode, struct cifs_sb_info *cifs_sb, oparms.tcon = tcon; oparms.cifs_sb = cifs_sb; oparms.desired_access = desired_access; - oparms.create_options = create_options; + oparms.create_options =cifs_create_options (cifs_sb, create_options); oparms.disposition = disposition; oparms.path = full_path; oparms.fid = fid;
@@ -751,9 +748,6 @@ cifs_reopen_file(struct cifsFileInfo *cfile, bool can_flush) desired_access =cifs_convert_flags (cfile->f_flags); -if (backup_cred (cifs_sb)) - create_options |=CREATE_OPEN_BACKUP_INTENT ; -/* O_SYNC also has bit for O_DSYNC so following check picks up either */ if (cfile->f_flags &O_SYNC ) create_options |=CREATE_WRITE_THROUGH ;
@@ -767,7 +761,7 @@ cifs_reopen_file(struct cifsFileInfo *cfile, bool can_flush) oparms.tcon = tcon; oparms.cifs_sb = cifs_sb; oparms.desired_access = desired_access; - oparms.create_options = create_options; + oparms.create_options =cifs_create_options (cifs_sb, create_options); oparms.disposition = disposition; oparms.path = full_path; oparms.fid = &cfile->fid;
fs/cifs/inode.c +3 -5
@@ -472,9 +472,7 @@ cifs_sfu_type(struct cifs_fattr *fattr, const char *path, oparms.tcon = tcon; oparms.cifs_sb = cifs_sb; oparms.desired_access =GENERIC_READ ; - oparms.create_options =CREATE_NOT_DIR ; -if (backup_cred (cifs_sb)) - oparms.create_options |=CREATE_OPEN_BACKUP_INTENT ; + oparms.create_options =cifs_create_options (cifs_sb,CREATE_NOT_DIR ); oparms.disposition =FILE_OPEN ; oparms.path = path; oparms.fid = &fid;
@@ -1225,7 +1223,7 @@ cifs_rename_pending_delete(const char *full_path, struct dentry *dentry, oparms.tcon = tcon; oparms.cifs_sb = cifs_sb; oparms.desired_access =DELETE |FILE_WRITE_ATTRIBUTES ; - oparms.create_options =CREATE_NOT_DIR ; + oparms.create_options =cifs_create_options (cifs_sb,CREATE_NOT_DIR ); oparms.disposition =FILE_OPEN ; oparms.path = full_path; oparms.fid = &fid;
@@ -1763,7 +1761,7 @@ cifs_do_rename(const unsigned int xid, struct dentry *from_dentry, oparms.cifs_sb = cifs_sb;/* open the file to be renamed -- we need DELETE perms */ oparms.desired_access =DELETE ; - oparms.create_options =CREATE_NOT_DIR ; + oparms.create_options =cifs_create_options (cifs_sb,CREATE_NOT_DIR ); oparms.disposition =FILE_OPEN ; oparms.path = from_path; oparms.fid = &fid;
fs/cifs/ioctl.c +1 -1
@@ -65,7 +65,7 @@ static long cifs_ioctl_query_info(unsigned int xid, struct file *filep,if (tcon->ses->server->ops->ioctl_query_info) rc = tcon->ses->server->ops->ioctl_query_info ( - xid, tcon, utf16_path, + xid, tcon, cifs_sb, utf16_path, filep->private_data ?0 :1 , p);else rc = -EOPNOTSUPP ;
fs/cifs/link.c +4 -14
@@ -318,7 +318,7 @@ cifs_query_mf_symlink(unsigned int xid, struct cifs_tcon *tcon, oparms.tcon = tcon; oparms.cifs_sb = cifs_sb; oparms.desired_access =GENERIC_READ ; - oparms.create_options =CREATE_NOT_DIR ; + oparms.create_options =cifs_create_options (cifs_sb,CREATE_NOT_DIR ); oparms.disposition =FILE_OPEN ; oparms.path = path; oparms.fid = &fid;
@@ -356,15 +356,11 @@ cifs_create_mf_symlink(unsigned int xid, struct cifs_tcon *tcon,struct cifs_fid fid;struct cifs_open_parms oparms;struct cifs_io_parms io_parms; -int create_options =CREATE_NOT_DIR ; - -if (backup_cred (cifs_sb)) - create_options |=CREATE_OPEN_BACKUP_INTENT ; oparms.tcon = tcon; oparms.cifs_sb = cifs_sb; oparms.desired_access =GENERIC_WRITE ; - oparms.create_options = create_options; + oparms.create_options =cifs_create_options (cifs_sb,CREATE_NOT_DIR ); oparms.disposition =FILE_CREATE ; oparms.path = path; oparms.fid = &fid;
@@ -405,9 +401,7 @@ smb3_query_mf_symlink(unsigned int xid, struct cifs_tcon *tcon, oparms.tcon = tcon; oparms.cifs_sb = cifs_sb; oparms.desired_access =GENERIC_READ ; - oparms.create_options =CREATE_NOT_DIR ; -if (backup_cred (cifs_sb)) - oparms.create_options |=CREATE_OPEN_BACKUP_INTENT ; + oparms.create_options =cifs_create_options (cifs_sb,CREATE_NOT_DIR ); oparms.disposition =FILE_OPEN ; oparms.fid = &fid; oparms.reconnect = false;
@@ -460,14 +454,10 @@ smb3_create_mf_symlink(unsigned int xid, struct cifs_tcon *tcon,struct cifs_fid fid;struct cifs_open_parms oparms;struct cifs_io_parms io_parms; -int create_options =CREATE_NOT_DIR ;__le16 *utf16_path;__u8 oplock =SMB2_OPLOCK_LEVEL_NONE ;struct kvec iov[2 ]; -if (backup_cred (cifs_sb)) - create_options |=CREATE_OPEN_BACKUP_INTENT ; -cifs_dbg (FYI ,"%s: path: %s\n" , __func__, path); utf16_path =cifs_convert_path_to_utf16 (path, cifs_sb);
@@ -477,7 +467,7 @@ smb3_create_mf_symlink(unsigned int xid, struct cifs_tcon *tcon, oparms.tcon = tcon; oparms.cifs_sb = cifs_sb; oparms.desired_access =GENERIC_WRITE ; - oparms.create_options = create_options; + oparms.create_options =cifs_create_options (cifs_sb,CREATE_NOT_DIR ); oparms.disposition =FILE_CREATE ; oparms.fid = &fid; oparms.reconnect = false;
fs/cifs/smb1ops.c +9 -10
@@ -504,7 +504,8 @@ cifs_negotiate_rsize(struct cifs_tcon *tcon, struct smb_vol *volume_info) }static void -cifs_qfs_tcon (const unsigned int xid,struct cifs_tcon *tcon) +cifs_qfs_tcon (const unsigned int xid,struct cifs_tcon *tcon, +struct cifs_sb_info *cifs_sb) {CIFSSMBQFSDeviceInfo (xid, tcon);CIFSSMBQFSAttributeInfo (xid, tcon);
@@ -565,7 +566,7 @@ cifs_query_path_info(const unsigned int xid, struct cifs_tcon *tcon, oparms.tcon = tcon; oparms.cifs_sb = cifs_sb; oparms.desired_access =FILE_READ_ATTRIBUTES ; - oparms.create_options =0 ; + oparms.create_options =cifs_create_options (cifs_sb,0 ); oparms.disposition =FILE_OPEN ; oparms.path = full_path; oparms.fid = &fid;
@@ -793,7 +794,7 @@ smb_set_file_info(struct inode *inode, const char *full_path, oparms.tcon = tcon; oparms.cifs_sb = cifs_sb; oparms.desired_access =SYNCHRONIZE |FILE_WRITE_ATTRIBUTES ; - oparms.create_options =CREATE_NOT_DIR ; + oparms.create_options =cifs_create_options (cifs_sb,CREATE_NOT_DIR ); oparms.disposition =FILE_OPEN ; oparms.path = full_path; oparms.fid = &fid;
@@ -872,7 +873,7 @@ cifs_oplock_response(struct cifs_tcon *tcon, struct cifs_fid *fid,static int cifs_queryfs (const unsigned int xid,struct cifs_tcon *tcon, -struct kstatfs *buf) +struct cifs_sb_info *cifs_sb,struct kstatfs *buf) {int rc = -EOPNOTSUPP ;
@@ -970,7 +971,8 @@ cifs_query_symlink(const unsigned int xid, struct cifs_tcon *tcon, oparms.tcon = tcon; oparms.cifs_sb = cifs_sb; oparms.desired_access =FILE_READ_ATTRIBUTES ; - oparms.create_options =OPEN_REPARSE_POINT ; + oparms.create_options =cifs_create_options (cifs_sb, +OPEN_REPARSE_POINT ); oparms.disposition =FILE_OPEN ; oparms.path = full_path; oparms.fid = &fid;
@@ -1029,7 +1031,6 @@ cifs_make_node(unsigned int xid, struct inode *inode,struct cifs_sb_info *cifs_sb =CIFS_SB (inode->i_sb);struct inode *newinode =NULL ;int rc = -EPERM ; -int create_options =CREATE_NOT_DIR |CREATE_OPTION_SPECIAL ;FILE_ALL_INFO *buf =NULL ;struct cifs_io_parms io_parms;__u32 oplock =0 ;
@@ -1090,13 +1091,11 @@ cifs_make_node(unsigned int xid, struct inode *inode, goto out; } -if (backup_cred (cifs_sb)) - create_options |=CREATE_OPEN_BACKUP_INTENT ; - oparms.tcon = tcon; oparms.cifs_sb = cifs_sb; oparms.desired_access =GENERIC_WRITE ; - oparms.create_options = create_options; + oparms.create_options =cifs_create_options (cifs_sb,CREATE_NOT_DIR | +CREATE_OPTION_SPECIAL ); oparms.disposition =FILE_CREATE ; oparms.path = full_path; oparms.fid = &fid;
fs/cifs/smb2inode.c +2 -7
@@ -98,9 +98,7 @@ smb2_compound_op(const unsigned int xid, struct cifs_tcon *tcon, oparms.tcon = tcon; oparms.desired_access = desired_access; oparms.disposition = create_disposition; - oparms.create_options = create_options; -if (backup_cred (cifs_sb)) - oparms.create_options |=CREATE_OPEN_BACKUP_INTENT ; + oparms.create_options =cifs_create_options (cifs_sb, create_options); oparms.fid = &fid; oparms.reconnect = false; oparms.mode = mode;
@@ -456,7 +454,7 @@ smb2_query_path_info(const unsigned int xid, struct cifs_tcon *tcon,/* If it is a root and its handle is cached then use it */ if (!strlen (full_path) && !no_cached_open) { - rc =open_shroot (xid, tcon, &fid); + rc =open_shroot (xid, tcon, cifs_sb, &fid);if (rc) goto out;
@@ -473,9 +471,6 @@ smb2_query_path_info(const unsigned int xid, struct cifs_tcon *tcon, goto out; } -if (backup_cred (cifs_sb)) - create_options |=CREATE_OPEN_BACKUP_INTENT ; -cifs_get_readable_path (tcon, full_path, &cfile); rc = smb2_compound_op(xid, tcon, cifs_sb, full_path, FILE_READ_ATTRIBUTES, FILE_OPEN, create_options,
fs/cifs/smb2ops.c +33 -59
248 lines not on this page · raw message
fs/cifs/smb2proto.h +1 -1
@@ -67,7 +67,7 @@ extern int smb3_handle_read_data(struct TCP_Server_Info *server, struct mid_q_entry *mid);extern int open_shroot (unsigned int xid,struct cifs_tcon *tcon, -struct cifs_fid *pfid); +struct cifs_sb_info *cifs_sb,struct cifs_fid *pfid);extern void close_shroot (struct cached_fid *cfid);extern void move_smb2_info_to_cifs (FILE_ALL_INFO *dst,struct smb2_file_all_info *src);
fs/ext4/fsmap.c +2 -0
@@ -486,6 +486,8 @@ static int ext4_getfsmap_datadev(struct super_block *sb, keys[0 ].fmr_physical = bofs;if (keys[1 ].fmr_physical >= eofs) keys[1 ].fmr_physical = eofs -1 ; +if (keys[1 ].fmr_physical < keys[0 ].fmr_physical) +return 0 ; start_fsb = keys[0 ].fmr_physical; end_fsb = keys[1 ].fmr_physical;
fs/ext4/inline.c +0 -1
@@ -157,7 +157,6 @@ int ext4_find_inline_data_nolock(struct inode *inode) (void *)ext4_raw_inode(&is.iloc));EXT4_I (inode)->i_inline_size =EXT4_MIN_INLINE_DATA_SIZE +le32_to_cpu (is.s.here->e_value_size); -ext4_set_inode_state (inode,EXT4_STATE_MAY_INLINE_DATA ); } out:brelse (is.iloc.bh);
fs/ext4/inode.c +6 -1
@@ -4862,8 +4862,13 @@ static inline int ext4_iget_extra_inode(struct inode *inode,if (EXT4_INODE_HAS_XATTR_SPACE (inode) && *magic ==cpu_to_le32 (EXT4_XATTR_MAGIC )) { +int err; +ext4_set_inode_state (inode,EXT4_STATE_XATTR ); -return ext4_find_inline_data_nolock (inode); + err =ext4_find_inline_data_nolock (inode); +if (!err &&ext4_has_inline_data (inode)) +ext4_set_inode_state (inode,EXT4_STATE_MAY_INLINE_DATA ); +return err; }else EXT4_I (inode)->i_inline_off =0 ;return 0 ;
fs/ext4/ioctl.c +1 -0
@@ -179,6 +179,7 @@ static long swap_inode_boot_loader(struct super_block *sb, ei_bl->i_flags =0 ;inode_set_iversion (inode_bl,1 );i_size_write (inode_bl,0 ); +EXT4_I (inode_bl)->i_disksize = inode_bl->i_size; inode_bl->i_mode =S_IFREG ;if (ext4_has_feature_extents (sb)) {ext4_set_inode_flag (inode_bl,EXT4_INODE_EXTENTS );
fs/ext4/namei.c +27 -9
@@ -1502,11 +1502,10 @@ static struct buffer_head *__ext4_find_entry(struct inode *dir,int has_inline_data =1 ; ret =ext4_find_inline_entry (dir, fname, res_dir, &has_inline_data); -if (has_inline_data) { -if (inlined) - *inlined =1 ; +if (inlined) + *inlined = has_inline_data; +if (has_inline_data) goto cleanup_and_exit; - } } if ((namelen <= 2) && (name[0] == '.') &&
@@ -3630,7 +3629,8 @@ static void ext4_resetent(handle_t *handle, struct ext4_renament *ent,* so the old->de may no longer valid and need to find it again * before reset old inode info. */ - old.bh =ext4_find_entry (old.dir, &old.dentry->d_name, &old.de,NULL ); + old.bh =ext4_find_entry (old.dir, &old.dentry->d_name, &old.de, + &old.inlined);if (IS_ERR (old.bh)) retval =PTR_ERR (old.bh);if (!old.bh)
@@ -3795,9 +3795,20 @@ static int ext4_rename(struct inode *old_dir, struct dentry *old_dentry,return retval; } - old.bh =ext4_find_entry (old.dir, &old.dentry->d_name, &old.de,NULL ); -if (IS_ERR (old.bh)) -return PTR_ERR (old.bh); +/* +* We need to protect against old.inode directory getting converted +* from inline directory format into a normal one. +*/ +if (S_ISDIR (old.inode->i_mode)) +inode_lock_nested (old.inode,I_MUTEX_NONDIR2 ); + + old.bh =ext4_find_entry (old.dir, &old.dentry->d_name, &old.de, + &old.inlined); +if (IS_ERR (old.bh)) { + retval =PTR_ERR (old.bh); + goto unlock_moved_dir; + } +/* * Check for inode number is _not_ due to possible IO errors. * We might rmdir the source, keep it as pwd of some process
@@ -3855,8 +3866,10 @@ static int ext4_rename(struct inode *old_dir, struct dentry *old_dentry, goto end_rename; } retval =ext4_rename_dir_prepare (handle, &old); -if (retval) +if (retval) { +inode_unlock (old.inode); goto end_rename; + } }/* * If we're renaming a file within an inline_data dir and adding or
@@ -3956,6 +3969,11 @@ static int ext4_rename(struct inode *old_dir, struct dentry *old_dentry,brelse (old.dir_bh);brelse (old.bh);brelse (new.bh); + +unlock_moved_dir: +if (S_ISDIR (old.inode->i_mode)) +inode_unlock (old.inode); +return retval; }
fs/ext4/xattr.c +3 -0
@@ -2819,6 +2819,9 @@ int ext4_expand_extra_isize_ea(struct inode *inode, int new_extra_isize, (void *)header, total_ino);EXT4_I (inode)->i_extra_isize = new_extra_isize; +if (ext4_has_inline_data (inode)) + error =ext4_find_inline_data_nolock (inode); + cleanup:if (error && (mnt_count !=le16_to_cpu (sbi->s_es->s_mnt_count))) { ext4_warning(inode->i_sb, "Unable to expand inode %lu. Delete some EAs or run e2fsck.",
fs/file.c +1 -0
@@ -654,6 +654,7 @@ int __close_fd_get_file(unsigned int fd, struct file **res) fdt =files_fdtable (files);if (fd >= fdt->max_fds) goto out_unlock; + fd =array_index_nospec (fd, fdt->max_fds); file = fdt->fd[fd];if (!file) goto out_unlock;
include/asm-generic/vmlinux.lds.h +14 -2
@@ -825,7 +825,12 @@#define TRACEDATA #endif +/* +* Discard .note.GNU-stack, which is emitted as PROGBITS by the compiler. +* Otherwise, the type of .notes section would become PROGBITS instead of NOTES. +*/ #define NOTES \ + /DISCARD/ : { *(.note.GNU-stack) } \ .notes : AT(ADDR(.notes) - LOAD_OFFSET) { \ __start_notes = .; \ KEEP(*(.note.*)) \
@@ -900,10 +905,17 @@* section definitions so that such archs put those in earlier section * definitions. */ +#ifdef RUNTIME_DISCARD_EXIT +#define EXIT_DISCARDS +#else +#define EXIT_DISCARDS \ + EXIT_TEXT \ + EXIT_DATA +#endif +#define DISCARDS \ /DISCARD/ : { \ - EXIT_TEXT \ - EXIT_DATA \ + EXIT_DISCARDS \ EXIT_CALL \ *(.discard) \ *(.discard.*) \
include/linux/irqdomain.h +1 -1
@@ -254,7 +254,7 @@ static inline struct fwnode_handle *irq_domain_alloc_fwnode(phys_addr_t *pa) }void irq_domain_free_fwnode (struct fwnode_handle *fwnode); -struct irq_domain *__irq_domain_add (struct fwnode_handle *fwnode,int size, +struct irq_domain *__irq_domain_add (struct fwnode_handle *fwnode,unsigned int size,irq_hw_number_t hwirq_max,int direct_max,const struct irq_domain_ops *ops,void *host_data);
include/linux/pci_ids.h +2 -0
@@ -3106,6 +3106,8 @@#define PCI_VENDOR_ID_3COM_2 0xa727 +#define PCI_VENDOR_ID_SOLIDRUN 0xd063 +#define PCI_VENDOR_ID_DIGIUM 0xd161#define PCI_DEVICE_ID_DIGIUM_HFC4S 0xb410
include/net/netfilter/nf_tproxy.h +7 -0
@@ -17,6 +17,13 @@ static inline bool nf_tproxy_sk_is_transparent(struct sock *sk)return false; } +static inline void nf_tproxy_twsk_deschedule_put (struct inet_timewait_sock *tw) +{ +local_bh_disable (); +inet_twsk_deschedule_put (tw); +local_bh_enable (); +} +/* assign a socket to the skb -- consumes sk */ static inline void nf_tproxy_assign_sock (struct sk_buff *skb,struct sock *sk) {
kernel/bpf/btf.c +1 -0
@@ -2719,6 +2719,7 @@ static int btf_datasec_resolve(struct btf_verifier_env *env,struct btf *btf = env->btf;u16 i; + env->resolve_mode =RESOLVE_TBD ;for_each_vsi_from (i, v->next_member, v->t, vsi) {u32 var_type_id = vsi->type, type_id, type_size =0 ; const struct btf_type *var_type = btf_type_by_id(env->btf,
kernel/irq/irqdomain.c +43 -19
90 lines not on this page · raw message
net/caif/caif_usb.c +3 -0
@@ -134,6 +134,9 @@ static int cfusbl_device_notify(struct notifier_block *me, unsigned long what,struct usb_device *usbdev;int res; +if (what ==NETDEV_UNREGISTER && dev->reg_state >=NETREG_UNREGISTERED ) +return 0 ; +/* Check whether we have a NCM device, and find its VID/PID. */ if (!(dev->dev.parent && dev->dev.parent->driver &&strcmp (dev->dev.parent->driver->name,"cdc_ncm" ) ==0 ))
net/ipv4/netfilter/nf_tproxy_ipv4.c +1 -1
@@ -38,7 +38,7 @@ nf_tproxy_handle_time_wait4(struct net *net, struct sk_buff *skb, hp->source, lport ? lport : hp->dest, skb->dev, NF_TPROXY_LOOKUP_LISTENER);if (sk2) { -inet_twsk_deschedule_put (inet_twsk (sk)); +nf_tproxy_twsk_deschedule_put (inet_twsk (sk)); sk = sk2; } }
net/ipv6/ila/ila_xlat.c +1 -0
@@ -477,6 +477,7 @@ int ila_xlat_nl_cmd_get_mapping(struct sk_buff *skb, struct genl_info *info)rcu_read_lock (); + ret = -ESRCH ; ila =ila_lookup_by_params (&xp, ilan);if (ila) { ret = ila_dump_info(ila,
net/ipv6/netfilter/nf_tproxy_ipv6.c +1 -1
@@ -63,7 +63,7 @@ nf_tproxy_handle_time_wait6(struct sk_buff *skb, int tproto, int thoff, lport ? lport : hp->dest, skb->dev, NF_TPROXY_LOOKUP_LISTENER);if (sk2) { -inet_twsk_deschedule_put (inet_twsk (sk)); +nf_tproxy_twsk_deschedule_put (inet_twsk (sk)); sk = sk2; } }
net/nfc/netlink.c +1 -1
@@ -1454,8 +1454,8 @@ static int nfc_se_io(struct nfc_dev *dev, u32 se_idx,return rc; error: -kfree (cb_context);device_unlock (&dev->dev); +kfree (cb_context);return rc; }
net/smc/af_smc.c +8 -5
@@ -1542,16 +1542,14 @@ static int smc_sendmsg(struct socket *sock, struct msghdr *msg, size_t len) {struct sock *sk = sock->sk;struct smc_sock *smc; -int rc = -EPIPE ; +int rc; smc =smc_sk (sk);lock_sock (sk); -if ((sk->sk_state !=SMC_ACTIVE ) && - (sk->sk_state !=SMC_APPCLOSEWAIT1 ) && - (sk->sk_state !=SMC_INIT )) - goto out; +/* SMC does not support connect with fastopen */ if (msg->msg_flags &MSG_FASTOPEN ) { +/* not connected yet, fallback */ if (sk->sk_state ==SMC_INIT && !smc->connect_nonblock) {smc_switch_to_fallback (smc); smc->fallback_rsn =SMC_CLC_DECL_OPTUNSUPP ;
@@ -1559,6 +1557,11 @@ static int smc_sendmsg(struct socket *sock, struct msghdr *msg, size_t len) rc = -EINVAL ; goto out; } + }else if ((sk->sk_state !=SMC_ACTIVE ) && + (sk->sk_state !=SMC_APPCLOSEWAIT1 ) && + (sk->sk_state !=SMC_INIT )) { + rc = -EPIPE ; + goto out; }if (smc->use_fallback)
tools/testing/selftests/netfilter/nft_nat.sh +2 -0
@@ -404,6 +404,8 @@ EOF echo SERVER-$family | ip netns exec "$ns1" timeout 5 socat -u STDIN TCP-LISTEN:2000 & sc_s=$! + sleep 1 + result=$(ip netns exec "$ns0" timeout 1 socat TCP:$daddr:2000 STDOUT) if [ "$result" = "SERVER-inet" ];then