Linux 4.19.271
Greg Kroah-Hartman
maintainerI'm announcing the release of the 4.19.271 kernel.
All users of the 4.19 kernel series must upgrade.
The updated 4.19.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-4.19.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
------------
Makefile | 2 arch/x86/kernel/fpu/init.c | 7 drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c | 6 drivers/firmware/google/gsmi.c | 7 drivers/infiniband/ulp/srp/ib_srp.h | 8 drivers/mmc/host/sunxi-mmc.c | 8 drivers/staging/comedi/drivers/adv_pci1760.c | 2 drivers/tty/serial/atmel_serial.c | 8 drivers/tty/serial/pch_uart.c | 2 drivers/usb/core/hub.c | 13 drivers/usb/gadget/function/f_ncm.c | 4 drivers/usb/gadget/legacy/webcam.c | 3 drivers/usb/host/ehci-fsl.c | 2 drivers/usb/host/xhci-pci.c | 2 drivers/usb/host/xhci-ring.c | 5 drivers/usb/host/xhci.c | 13 drivers/usb/host/xhci.h | 1 drivers/usb/misc/iowarrior.c | 2 drivers/usb/serial/cp210x.c | 1 drivers/usb/serial/option.c | 17 + drivers/usb/storage/uas-detect.h | 13 drivers/usb/storage/unusual_uas.h | 7 drivers/usb/typec/altmodes/displayport.c | 22 - fs/cifs/smb2pdu.c | 15 fs/ext4/ext4.h | 8 fs/ext4/extents.c | 139 ++------ fs/ext4/extents_status.c | 389 +------------------------ fs/ext4/extents_status.h | 76 ---- fs/ext4/inode.c | 92 +---- fs/ext4/super.c | 8 fs/f2fs/extent_cache.c | 3 fs/nfs/filelayout/filelayout.c | 8 fs/nilfs2/btree.c | 15 include/trace/events/ext4.h | 39 -- kernel/sys.c | 2 net/core/ethtool.c | 3 36 files changed, 237 insertions(+), 715 deletions(-)
Alexander Stein (1):
usb: host: ehci-fsl: Fix module alias
Ali Mirghasemi (1):
USB: serial: option: add Quectel EC200U modem
Daniel Scally (1):
usb: gadget: g_webcam: Send color matching descriptor per frame
Daniil Tatianin (1):
net/ethtool/ioctl: return -EOPNOTSUPP if we have no phy stats
Duke Xin(辛安文) (5):
USB: serial: option: add Quectel EM05-G (GR) modem
USB: serial: option: add Quectel EM05-G (CS) modem
USB: serial: option: add Quectel EM05-G (RS) modem
USB: serial: option: add Quectel EM05CN (SG) modem
USB: serial: option: add Quectel EM05CN modem
Enzo Matsumiya (1):
cifs: do not include page data when checking signature
Flavio Suligoi (1):
usb: core: hub: disable autosuspend for TI TUSB8041
Greg Kroah-Hartman (7):
prlimit: do_prlimit needs to have a speculation check
USB: misc: iowarrior: fix up header size for USB_DEVICE_ID_CODEMERCS_IOW100 Revert "ext4: fix delayed allocation bug in ext4_clu_mapped for bigalloc + inline" Revert "ext4: fix reserved cluster accounting at delayed write time" Revert "ext4: add new pending reservation mechanism"
Revert "ext4: generalize extents status tree search functions"
Linux 4.19.271
Ian Abbott (1):
comedi: adv_pci1760: Fix PWM instruction handling
Ilpo Järvinen (1):
serial: pch_uart: Pass correct sg to dma_unmap_sg()
Jaegeuk Kim (1):
f2fs: let's avoid panic if extent_tree is not created
Jimmy Hu (1):
usb: xhci: Check endpoint is valid before dereferencing it
Jiri Slaby (SUSE) (1):
RDMA/srp: Move large values to a new enum for gcc13
Juhyung Park (1):
usb-storage: apply IGNORE_UAS only for HIKSEMI MD202 on RTL9210
Khazhismel Kumykov (1):
gsmi: fix null-deref in gsmi_get_variable
Maciej Żenczykowski (1):
usb: gadget: f_ncm: fix potential NULL ptr deref in ncm_bitrate()
Mathias Nyman (2):
xhci: Fix null pointer dereference when host dies
xhci: Add a flag to disable USB3 lpm on a xhci root port level.
Michael Adler (1):
USB: serial: cp210x: add SCALANCE LPE-9000 device id
Olga Kornievskaia (1):
pNFS/filelayout: Fix coalescing test for single DS
Prashant Malani (2):
usb: typec: altmodes/displayport: Add pin assignment helper
usb: typec: altmodes/displayport: Fix pin assignment calculation
Ricardo Ribalda (1):
xhci-pci: set the dma max_seg_size
Ryusuke Konishi (1):
nilfs2: fix general protection fault in nilfs_btree_insert()
Samuel Holland (1):
mmc: sunxi-mmc: Fix clock refcount imbalance during unbind
Shawn.Shao (1):
Add exception protection processing for vd in axi_chan_handle_err function
Tobias Schramm (1):
serial: atmel: fix incorrect baudrate setup
YingChi Long (1):
x86/fpu: Use _Alignof to avoid undefined behavior in TYPE_ALIGN
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 4 PATCHLEVEL = 19 -SUBLEVEL = 270 +SUBLEVEL = 271 EXTRAVERSION = NAME = "People's Front"
arch/x86/kernel/fpu/init.c +2 -5
@@ -138,9 +138,6 @@ static void __init fpu__init_system_generic(void)unsigned int fpu_kernel_xstate_size;EXPORT_SYMBOL_GPL (fpu_kernel_xstate_size); -/* Get alignment of the TYPE. */ -#define TYPE_ALIGN (TYPE ) offsetof(struct { char x; TYPE test; }, test) -/* * Enforce that 'MEMBER' is the last field of 'TYPE'. *
@@ -148,8 +145,8 @@ EXPORT_SYMBOL_GPL(fpu_kernel_xstate_size);* because that's how C aligns structs. */ #define CHECK_MEMBER_AT_END_OF (TYPE ,MEMBER ) \ - BUILD_BUG_ON(sizeof(TYPE) != ALIGN(offsetofend(TYPE, MEMBER), \ - TYPE_ALIGN(TYPE))) + BUILD_BUG_ON(sizeof(TYPE) != \ + ALIGN(offsetofend(TYPE, MEMBER), _Alignof(TYPE)))/* * We append the 'struct fpu' to the task_struct:
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c +6 -0
@@ -551,6 +551,11 @@ static noinline void axi_chan_handle_err(struct axi_dma_chan *chan, u32 status)/* The bad descriptor currently is in the head of vc list */ vd =vchan_next_desc (&chan->vc); +if (!vd) { +dev_err (chan2dev (chan),"BUG: %s, IRQ with no descriptors\n" , +axi_chan_name (chan)); + goto out; + }/* Remove the completed descriptor from issued list */ list_del (&vd->node);
@@ -565,6 +570,7 @@ static noinline void axi_chan_handle_err(struct axi_dma_chan *chan, u32 status)/* Try to restart the controller */ axi_chan_start_first_queued (chan); +out:spin_unlock_irqrestore (&chan->vc.lock, flags); }
drivers/firmware/google/gsmi.c +4 -3
@@ -343,9 +343,10 @@ static efi_status_t gsmi_get_variable(efi_char16_t *name,memcpy (data, gsmi_dev.data_buf->start, *data_size);/* All variables are have the following attributes */ - *attr =EFI_VARIABLE_NON_VOLATILE | -EFI_VARIABLE_BOOTSERVICE_ACCESS | -EFI_VARIABLE_RUNTIME_ACCESS ; +if (attr) + *attr =EFI_VARIABLE_NON_VOLATILE | +EFI_VARIABLE_BOOTSERVICE_ACCESS | +EFI_VARIABLE_RUNTIME_ACCESS ; }spin_unlock_irqrestore (&gsmi_dev.lock, flags);
drivers/infiniband/ulp/srp/ib_srp.h +5 -3
@@ -63,12 +63,14 @@ enum {SRP_DEFAULT_CMD_SQ_SIZE =SRP_DEFAULT_QUEUE_SIZE -SRP_RSP_SQ_SIZE -SRP_TSK_MGMT_SQ_SIZE , -SRP_TAG_NO_REQ = ~0U , -SRP_TAG_TSK_MGMT =1U <<31 , - SRP_MAX_PAGES_PER_MR = 512, }; +enum { +SRP_TAG_NO_REQ = ~0U , +SRP_TAG_TSK_MGMT =BIT (31 ), +}; +enum srp_target_state {SRP_TARGET_SCANNING , SRP_TARGET_LIVE,
drivers/mmc/host/sunxi-mmc.c +5 -3
@@ -1441,9 +1441,11 @@ static int sunxi_mmc_remove(struct platform_device *pdev)struct sunxi_mmc_host *host =mmc_priv (mmc);mmc_remove_host (mmc); -pm_runtime_force_suspend (&pdev->dev); -disable_irq (host->irq); -sunxi_mmc_disable (host); +pm_runtime_disable (&pdev->dev); +if (!pm_runtime_status_suspended (&pdev->dev)) { +disable_irq (host->irq); +sunxi_mmc_disable (host); + }dma_free_coherent (&pdev->dev,PAGE_SIZE , host->sg_cpu, host->sg_dma);mmc_free_host (mmc);
drivers/staging/comedi/drivers/adv_pci1760.c +1 -1
@@ -59,7 +59,7 @@#define PCI1760_CMD_CLR_IMB2 0x00/* Clears IMB2 */ #define PCI1760_CMD_SET_DO 0x01/* Set output state */ #define PCI1760_CMD_GET_DO 0x02/* Read output status */ -#define PCI1760_CMD_GET_STATUS 0x03/* Read current status */ +#define PCI1760_CMD_GET_STATUS 0x07/* Read current status */ #define PCI1760_CMD_GET_FW_VER 0x0e/* Read firmware version */ #define PCI1760_CMD_GET_HW_VER 0x0f/* Read hardware version */ #define PCI1760_CMD_SET_PWM_HI (x) (0x10 + (x) * 2)/* Set "hi" period */
drivers/tty/serial/atmel_serial.c +1 -7
@@ -2511,13 +2511,7 @@ static void __init atmel_console_get_options(struct uart_port *port, int *baud,else if (mr ==ATMEL_US_PAR_ODD ) *parity ='o' ; -/* -* The serial core only rounds down when matching this to a -* supported baud rate. Make sure we don't end up slightly -* lower than one of those, as it would make us fall through -* to a much lower baud rate than we really want. -*/ - *baud = port->uartclk / (16 * (quot -1 )); + *baud = port->uartclk / (16 * quot); }static int __init atmel_console_setup (struct console *co,char *options)
drivers/tty/serial/pch_uart.c +1 -1
@@ -792,7 +792,7 @@ static void pch_dma_tx_complete(void *arg) } xmit->tail &=UART_XMIT_SIZE -1 ;async_tx_ack (priv->desc_tx); -dma_unmap_sg (port->dev, sg, priv->orig_nent,DMA_TO_DEVICE ); +dma_unmap_sg (port->dev, priv->sg_tx_p, priv->orig_nent,DMA_TO_DEVICE ); priv->tx_dma_use =0 ; priv->nent =0 ; priv->orig_nent =0 ;
drivers/usb/core/hub.c +13 -0
@@ -40,6 +40,9 @@#define USB_PRODUCT_USB5534B 0x5534#define USB_VENDOR_CYPRESS 0x04b4#define USB_PRODUCT_CY7C65632 0x6570 +#define USB_VENDOR_TEXAS_INSTRUMENTS 0x0451 +#define USB_PRODUCT_TUSB8041_USB3 0x8140 +#define USB_PRODUCT_TUSB8041_USB2 0x8142#define HUB_QUIRK_CHECK_PORT_AUTOSUSPEND 0x01#define HUB_QUIRK_DISABLE_AUTOSUSPEND 0x02
@@ -5515,6 +5518,16 @@ static const struct usb_device_id hub_id_table[] = { .idVendor = USB_VENDOR_GENESYS_LOGIC, .bInterfaceClass = USB_CLASS_HUB, .driver_info = HUB_QUIRK_CHECK_PORT_AUTOSUSPEND}, + { .match_flags = USB_DEVICE_ID_MATCH_VENDOR + | USB_DEVICE_ID_MATCH_PRODUCT, + .idVendor = USB_VENDOR_TEXAS_INSTRUMENTS, + .idProduct = USB_PRODUCT_TUSB8041_USB2, + .driver_info = HUB_QUIRK_DISABLE_AUTOSUSPEND}, + { .match_flags = USB_DEVICE_ID_MATCH_VENDOR + | USB_DEVICE_ID_MATCH_PRODUCT, + .idVendor = USB_VENDOR_TEXAS_INSTRUMENTS, + .idProduct = USB_PRODUCT_TUSB8041_USB3, + .driver_info = HUB_QUIRK_DISABLE_AUTOSUSPEND}, { .match_flags = USB_DEVICE_ID_MATCH_DEV_CLASS, .bDeviceClass = USB_CLASS_HUB}, { .match_flags = USB_DEVICE_ID_MATCH_INT_CLASS,
drivers/usb/gadget/function/f_ncm.c +3 -1
@@ -86,7 +86,9 @@ static inline struct f_ncm *func_to_ncm(struct usb_function *f)/* peak (theoretical) bulk transfer rate in bits-per-second */ static inline unsigned ncm_bitrate (struct usb_gadget *g) { -if (gadget_is_superspeed (g) && g->speed >=USB_SPEED_SUPER_PLUS ) +if (!g) +return 0 ; +else if (gadget_is_superspeed (g) && g->speed >=USB_SPEED_SUPER_PLUS )return 4250000000U ;else if (gadget_is_superspeed (g) && g->speed ==USB_SPEED_SUPER )return 3750000000U ;
drivers/usb/gadget/legacy/webcam.c +3 -0
@@ -292,6 +292,7 @@ static const struct uvc_descriptor_header * const uvc_fs_streaming_cls[] = { (const struct uvc_descriptor_header *) &uvc_format_yuv, (const struct uvc_descriptor_header *) &uvc_frame_yuv_360p, (const struct uvc_descriptor_header *) &uvc_frame_yuv_720p, + (const struct uvc_descriptor_header *) &uvc_color_matching, (const struct uvc_descriptor_header *) &uvc_format_mjpg, (const struct uvc_descriptor_header *) &uvc_frame_mjpg_360p, (const struct uvc_descriptor_header *) &uvc_frame_mjpg_720p,
@@ -304,6 +305,7 @@ static const struct uvc_descriptor_header * const uvc_hs_streaming_cls[] = { (const struct uvc_descriptor_header *) &uvc_format_yuv, (const struct uvc_descriptor_header *) &uvc_frame_yuv_360p, (const struct uvc_descriptor_header *) &uvc_frame_yuv_720p, + (const struct uvc_descriptor_header *) &uvc_color_matching, (const struct uvc_descriptor_header *) &uvc_format_mjpg, (const struct uvc_descriptor_header *) &uvc_frame_mjpg_360p, (const struct uvc_descriptor_header *) &uvc_frame_mjpg_720p,
@@ -316,6 +318,7 @@ static const struct uvc_descriptor_header * const uvc_ss_streaming_cls[] = { (const struct uvc_descriptor_header *) &uvc_format_yuv, (const struct uvc_descriptor_header *) &uvc_frame_yuv_360p, (const struct uvc_descriptor_header *) &uvc_frame_yuv_720p, + (const struct uvc_descriptor_header *) &uvc_color_matching, (const struct uvc_descriptor_header *) &uvc_format_mjpg, (const struct uvc_descriptor_header *) &uvc_frame_mjpg_360p, (const struct uvc_descriptor_header *) &uvc_frame_mjpg_720p,
drivers/usb/host/ehci-fsl.c +1 -1
@@ -28,7 +28,7 @@#include "ehci-fsl.h" #define DRIVER_DESC "Freescale EHCI Host controller driver" -#define DRV_NAME "ehci-fsl" +#define DRV_NAME "fsl-ehci"static struct hc_driver __read_mostly fsl_ehci_hc_driver;
drivers/usb/host/xhci-pci.c +2 -0
@@ -378,6 +378,8 @@ static int xhci_pci_probe(struct pci_dev *dev, const struct pci_device_id *id)/* USB-2 and USB-3 roothubs initialized, allow runtime pm suspend */ pm_runtime_put_noidle (&dev->dev); +dma_set_max_seg_size (&dev->dev,UINT_MAX ); +return 0 ; put_usb3_hcd:
drivers/usb/host/xhci-ring.c +4 -1
@@ -896,7 +896,10 @@ static void xhci_kill_endpoint_urbs(struct xhci_hcd *xhci,struct xhci_virt_ep *ep;struct xhci_ring *ring; - ep = &xhci->devs[slot_id]->eps[ep_index]; + ep =xhci_get_virt_ep (xhci, slot_id, ep_index); +if (!ep) +return ; +if ((ep->ep_state &EP_HAS_STREAMS ) || (ep->ep_state &EP_GETTING_NO_STREAMS )) {int stream_id;
drivers/usb/host/xhci.c +13 -0
@@ -3830,6 +3830,7 @@ static void xhci_free_dev(struct usb_hcd *hcd, struct usb_device *udev)struct xhci_hcd *xhci =hcd_to_xhci (hcd);struct xhci_virt_device *virt_dev;struct xhci_slot_ctx *slot_ctx; +unsigned long flags;int i, ret;/*
@@ -3859,7 +3860,11 @@ static void xhci_free_dev(struct usb_hcd *hcd, struct usb_device *udev)xhci_debugfs_remove_slot (xhci, udev->slot_id); virt_dev->udev =NULL ;xhci_disable_slot (xhci, udev->slot_id); + +spin_lock_irqsave (&xhci->lock, flags);xhci_free_virt_device (xhci, udev->slot_id); +spin_unlock_irqrestore (&xhci->lock, flags); + }int xhci_disable_slot (struct xhci_hcd *xhci,u32 slot_id)
@@ -4912,6 +4917,7 @@ static int xhci_enable_usb3_lpm_timeout(struct usb_hcd *hcd, struct usb_device *udev, enum usb3_link_state state) { struct xhci_hcd *xhci; +struct xhci_port *port;u16 hub_encoded_timeout;int mel;int ret;
@@ -4925,6 +4931,13 @@ static int xhci_enable_usb3_lpm_timeout(struct usb_hcd *hcd, !xhci->devs[udev->slot_id])return USB3_LPM_DISABLED ; +/* If connected to root port then check port can handle lpm */ +if (udev->parent && !udev->parent->parent) { + port = xhci->usb3_rhub.ports[udev->portnum -1 ]; +if (port->lpm_incapable) +return USB3_LPM_DISABLED ; + } + hub_encoded_timeout =xhci_calculate_lpm_timeout (hcd, udev, state); mel =calculate_max_exit_latency (udev, state, hub_encoded_timeout);if (mel <0 ) {
drivers/usb/host/xhci.h +1 -0
@@ -1723,6 +1723,7 @@ struct xhci_port {int hcd_portnum;struct xhci_hub *rhub;struct xhci_port_cap *port_cap; + unsigned int lpm_incapable:1; };struct xhci_hub {
drivers/usb/misc/iowarrior.c +1 -1
@@ -832,7 +832,7 @@ static int iowarrior_probe(struct usb_interface *interface,break ;case USB_DEVICE_ID_CODEMERCS_IOW100 : - dev->report_size =13 ; + dev->report_size =12 ;break ; } }
drivers/usb/serial/cp210x.c +1 -0
@@ -61,6 +61,7 @@ static const struct usb_device_id id_table[] = { { USB_DEVICE(0x0846, 0x1100) }, /* NetGear Managed Switch M4100 series, M5300 series, M7100 series */ { USB_DEVICE(0x08e6, 0x5501) }, /* Gemalto Prox-PU/CU contactless smartcard reader */ { USB_DEVICE(0x08FD, 0x000A) }, /* Digianswer A/S , ZigBee/802.15.4 MAC Device */ + { USB_DEVICE(0x0908, 0x0070) }, /* Siemens SCALANCE LPE-9000 USB Serial Console */ { USB_DEVICE(0x0908, 0x01FF) }, /* Siemens RUGGEDCOM USB Serial Console */ { USB_DEVICE(0x0988, 0x0578) }, /* Teraoka AD2000 */ { USB_DEVICE(0x0B00, 0x3070) }, /* Ingenico 3070 */
drivers/usb/serial/option.c +17 -0
@@ -255,10 +255,16 @@ static void option_instat_callback(struct urb *urb);#define QUECTEL_PRODUCT_EP06 0x0306#define QUECTEL_PRODUCT_EM05G 0x030a#define QUECTEL_PRODUCT_EM060K 0x030b +#define QUECTEL_PRODUCT_EM05G_CS 0x030c +#define QUECTEL_PRODUCT_EM05CN_SG 0x0310#define QUECTEL_PRODUCT_EM05G_SG 0x0311 +#define QUECTEL_PRODUCT_EM05CN 0x0312 +#define QUECTEL_PRODUCT_EM05G_GR 0x0313 +#define QUECTEL_PRODUCT_EM05G_RS 0x0314#define QUECTEL_PRODUCT_EM12 0x0512#define QUECTEL_PRODUCT_RM500Q 0x0800#define QUECTEL_PRODUCT_RM520N 0x0801 +#define QUECTEL_PRODUCT_EC200U 0x0901#define QUECTEL_PRODUCT_EC200S_CN 0x6002#define QUECTEL_PRODUCT_EC200T 0x6026#define QUECTEL_PRODUCT_RM500K 0x7001
@@ -1159,8 +1165,18 @@ static const struct usb_device_id option_ids[] = { { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EP06, 0xff, 0xff, 0xff), .driver_info = RSVD(1) | RSVD(2) | RSVD(3) | RSVD(4) | NUMEP2 }, { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EP06, 0xff, 0, 0) }, + { USB_DEVICE_INTERFACE_CLASS(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM05CN, 0xff), + .driver_info = RSVD(6) | ZLP }, + { USB_DEVICE_INTERFACE_CLASS(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM05CN_SG, 0xff), + .driver_info = RSVD(6) | ZLP }, { USB_DEVICE_INTERFACE_CLASS(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM05G, 0xff), .driver_info = RSVD(6) | ZLP }, + { USB_DEVICE_INTERFACE_CLASS(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM05G_GR, 0xff), + .driver_info = RSVD(6) | ZLP }, + { USB_DEVICE_INTERFACE_CLASS(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM05G_CS, 0xff), + .driver_info = RSVD(6) | ZLP }, + { USB_DEVICE_INTERFACE_CLASS(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM05G_RS, 0xff), + .driver_info = RSVD(6) | ZLP }, { USB_DEVICE_INTERFACE_CLASS(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM05G_SG, 0xff), .driver_info = RSVD(6) | ZLP }, { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM060K, 0xff, 0x00, 0x40) },
@@ -1180,6 +1196,7 @@ static const struct usb_device_id option_ids[] = { { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM520N, 0xff, 0xff, 0x30) }, { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM520N, 0xff, 0, 0x40) }, { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM520N, 0xff, 0, 0) }, + { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC200U, 0xff, 0, 0) }, { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC200S_CN, 0xff, 0, 0) }, { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC200T, 0xff, 0, 0) }, { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM500K, 0xff, 0x00, 0x00) },
drivers/usb/storage/uas-detect.h +13 -0
@@ -116,6 +116,19 @@ static int uas_use_uas_driver(struct usb_interface *intf,if (le16_to_cpu (udev->descriptor.idVendor) ==0x0bc2 ) flags |=US_FL_NO_ATA_1X ; +/* +* RTL9210-based enclosure from HIKSEMI, MD202 reportedly have issues +* with UAS. This isn't distinguishable with just idVendor and +* idProduct, use manufacturer and product too. +* +* Reported-by: Hongling Zeng <[email protected]> +*/ +if (le16_to_cpu (udev->descriptor.idVendor) ==0x0bda && +le16_to_cpu (udev->descriptor.idProduct) ==0x9210 && + (udev->manufacturer && !strcmp (udev->manufacturer,"HIKSEMI" )) && + (udev->product && !strcmp (udev->product,"MD202" ))) + flags |=US_FL_IGNORE_UAS ; +usb_stor_adjust_quirks (udev, &flags);if (flags &US_FL_IGNORE_UAS ) {
drivers/usb/storage/unusual_uas.h +0 -7
@@ -83,13 +83,6 @@ UNUSUAL_DEV(0x0bc2, 0x331a, 0x0000, 0x9999, USB_SC_DEVICE, USB_PR_DEVICE, NULL, US_FL_NO_REPORT_LUNS), -/* Reported-by: Hongling Zeng <[email protected]> */ -UNUSUAL_DEV (0x0bda ,0x9210 ,0x0000 ,0x9999 , -"Hiksemi" , -"External HDD" , -USB_SC_DEVICE ,USB_PR_DEVICE ,NULL , -US_FL_IGNORE_UAS ), -/* Reported-by: Benjamin Tissoires <[email protected]> */ UNUSUAL_DEV(0x13fd, 0x3940, 0x0000, 0x9999, "Initio Corporation",
drivers/usb/typec/altmodes/displayport.c +14 -8
@@ -411,6 +411,18 @@ static const char * const pin_assignments[] = { [DP_PIN_ASSIGN_F] = "F", }; +/* +* Helper function to extract a peripheral's currently supported +* Pin Assignments from its DisplayPort alternate mode state. +*/ +static u8 get_current_pin_assignments (struct dp_altmode *dp) +{ +if (DP_CONF_CURRENTLY (dp->data.conf) ==DP_CONF_DFP_D ) +return DP_CAP_PIN_ASSIGN_DFP_D (dp->alt->vdo); +else +return DP_CAP_PIN_ASSIGN_UFP_D (dp->alt->vdo); +} +static ssize_t pin_assignment_store (struct device *dev,struct device_attribute *attr,const char *buf,size_t size)
@@ -437,10 +449,7 @@ pin_assignment_store(struct device *dev, struct device_attribute *attr, goto out_unlock; } -if (DP_CONF_CURRENTLY (dp->data.conf) ==DP_CONF_DFP_D ) - assignments =DP_CAP_UFP_D_PIN_ASSIGN (dp->alt->vdo); -else - assignments =DP_CAP_DFP_D_PIN_ASSIGN (dp->alt->vdo); + assignments =get_current_pin_assignments (dp);if (!(DP_CONF_GET_PIN_ASSIGN (conf) & assignments)) { ret = -EINVAL ;
@@ -477,10 +486,7 @@ static ssize_t pin_assignment_show(struct device *dev, cur =get_count_order (DP_CONF_GET_PIN_ASSIGN (dp->data.conf)); -if (DP_CONF_CURRENTLY (dp->data.conf) ==DP_CONF_DFP_D ) - assignments =DP_CAP_UFP_D_PIN_ASSIGN (dp->alt->vdo); -else - assignments =DP_CAP_DFP_D_PIN_ASSIGN (dp->alt->vdo); + assignments =get_current_pin_assignments (dp);for (i =0 ; assignments; assignments >>=1 , i++) {if (assignments &1 ) {
fs/cifs/smb2pdu.c +9 -6
@@ -3152,12 +3152,15 @@ smb2_readv_callback(struct mid_q_entry *mid) (struct smb2_sync_hdr *)rdata->iov[0 ].iov_base;unsigned int credits_received =0 ;struct smb_rqst rqst = { .rq_iov = &rdata->iov[1 ], - .rq_nvec =1 , - .rq_pages = rdata->pages, - .rq_offset = rdata->page_offset, - .rq_npages = rdata->nr_pages, - .rq_pagesz = rdata->pagesz, - .rq_tailsz = rdata->tailsz }; + .rq_nvec =1 , }; + +if (rdata->got_bytes) { + rqst.rq_pages = rdata->pages; + rqst.rq_offset = rdata->page_offset; + rqst.rq_npages = rdata->nr_pages; + rqst.rq_pagesz = rdata->pagesz; + rqst.rq_tailsz = rdata->tailsz; + } cifs_dbg(FYI, "%s: mid=%llu state=%d result=%d bytes=%u\n", __func__, mid->mid, mid->mid_state, rdata->result,
fs/ext4/ext4.h +4 -4
@@ -1041,9 +1041,6 @@ struct ext4_inode_info {ext4_lblk_t i_da_metadata_calc_last_lblock;int i_da_metadata_calc_len; -/* pending cluster reservations for bigalloc file systems */ -struct ext4_pending_tree i_pending_tree; -/* on-disk additional length */ __u16 i_extra_isize;
@@ -3231,6 +3228,10 @@ extern struct ext4_ext_path *ext4_find_extent(struct inode *, ext4_lblk_t, int flags);extern void ext4_ext_drop_refs (struct ext4_ext_path *);extern int ext4_ext_check_inode (struct inode *inode); +extern int ext4_find_delalloc_range (struct inode *inode, +ext4_lblk_t lblk_start, +ext4_lblk_t lblk_end); +extern int ext4_find_delalloc_cluster (struct inode *inode,ext4_lblk_t lblk);extern ext4_lblk_t ext4_ext_next_allocated_block (struct ext4_ext_path *path);extern int ext4_fiemap (struct inode *inode,struct fiemap_extent_info *fieinfo,__u64 start,__u64 len);
@@ -3241,7 +3242,6 @@ extern int ext4_swap_extents(handle_t *handle, struct inode *inode1, struct inode *inode2, ext4_lblk_t lblk1, ext4_lblk_t lblk2, ext4_lblk_t count, int mark_unwritten,int *err); -extern int ext4_clu_mapped (struct inode *inode,ext4_lblk_t lclu);/* move_extent.c */ extern void ext4_double_down_write_data_sem(struct inode *first,
fs/ext4/extents.c +40 -99
178 lines not on this page · raw message
fs/ext4/extents_status.c +18 -371
438 lines not on this page · raw message
fs/ext4/extents_status.h +3 -73
100 lines not on this page · raw message
fs/ext4/inode.c +23 -69
133 lines not on this page · raw message
fs/ext4/super.c +0 -8
@@ -1095,7 +1095,6 @@ static struct inode *ext4_alloc_inode(struct super_block *sb) ei->i_da_metadata_calc_len =0 ; ei->i_da_metadata_calc_last_lblock =0 ;spin_lock_init (&(ei->i_block_reservation_lock)); -ext4_init_pending_tree (&ei->i_pending_tree);#ifdef CONFIG_QUOTA ei->i_reserved_quota =0 ;memset (&ei->i_dquot,0 ,sizeof (ei->i_dquot));
@@ -6190,10 +6189,6 @@ static int __init ext4_init_fs(void)if (err)return err; - err =ext4_init_pending (); -if (err) - goto out6; - err =ext4_init_pageio ();if (err) goto out5;
@@ -6232,8 +6227,6 @@ static int __init ext4_init_fs(void) out4:ext4_exit_pageio (); out5: -ext4_exit_pending (); -out6:ext4_exit_es ();return err;
@@ -6251,7 +6244,6 @@ static void __exit ext4_exit_fs(void)ext4_exit_system_zone ();ext4_exit_pageio ();ext4_exit_es (); -ext4_exit_pending (); }MODULE_AUTHOR ("Remy Card, Stephen Tweedie, Andrew Morton, Andreas Dilger, Theodore Ts'o and others" );
fs/f2fs/extent_cache.c +2 -1
@@ -375,7 +375,8 @@ static bool f2fs_lookup_extent_tree(struct inode *inode, pgoff_t pgofs,struct extent_node *en;bool ret = false; -f2fs_bug_on (sbi, !et); +if (!et) +return false;trace_f2fs_lookup_extent_tree_start (inode, pgofs);
fs/nfs/filelayout/filelayout.c +8 -0
@@ -837,6 +837,12 @@ filelayout_alloc_lseg(struct pnfs_layout_hdr *layoutid,return &fl->generic_hdr; } +static bool +filelayout_lseg_is_striped (const struct nfs4_filelayout_segment *flseg) +{ +return flseg->num_fh >1 ; +} +/* * filelayout_pg_test(). Called by nfs_can_coalesce_requests() *
@@ -857,6 +863,8 @@ filelayout_pg_test(struct nfs_pageio_descriptor *pgio, struct nfs_page *prev, size =pnfs_generic_pg_test (pgio, prev, req);if (!size)return 0 ; +else if (!filelayout_lseg_is_striped (FILELAYOUT_LSEG (pgio->pg_lseg))) +return size;/* see if req and prev are in the same stripe */ if (prev) {
fs/nilfs2/btree.c +12 -3
@@ -480,9 +480,18 @@ static int __nilfs_btree_get_block(const struct nilfs_bmap *btree, __u64 ptr, ret =nilfs_btnode_submit_block (btnc, ptr,0 ,REQ_OP_READ ,0 , &bh, &submit_ptr);if (ret) { -if (ret != -EEXIST ) -return ret; - goto out_check; +if (likely (ret == -EEXIST )) + goto out_check; +if (ret == -ENOENT ) { +/* +* Block address translation failed due to invalid +* value of 'ptr'. In this case, return internal code +* -EINVAL (broken bmap) to notify bmap layer of fatal +* metadata corruption. +*/ + ret = -EINVAL ; + } +return ret; }if (ra) {
include/trace/events/ext4.h +2 -37
@@ -2290,7 +2290,7 @@ TRACE_EVENT(ext4_es_remove_extent, __entry->lblk, __entry->len) ); -TRACE_EVENT(ext4_es_find_extent_range_enter, +TRACE_EVENT(ext4_es_find_delayed_extent_range_enter, TP_PROTO(struct inode *inode, ext4_lblk_t lblk), TP_ARGS(inode, lblk),
@@ -2312,7 +2312,7 @@ TRACE_EVENT(ext4_es_find_extent_range_enter, (unsigned long) __entry->ino, __entry->lblk) ); -TRACE_EVENT(ext4_es_find_extent_range_exit, +TRACE_EVENT(ext4_es_find_delayed_extent_range_exit, TP_PROTO(struct inode *inode, struct extent_status *es), TP_ARGS(inode, es),
@@ -2532,41 +2532,6 @@ TRACE_EVENT(ext4_es_shrink, __entry->scan_time, __entry->nr_skipped, __entry->retried) ); -TRACE_EVENT (ext4_es_insert_delayed_block, - TP_PROTO(struct inode *inode, struct extent_status *es, - bool allocated), - -TP_ARGS (inode, es, allocated), - -TP_STRUCT__entry ( - __field( dev_t, dev ) - __field( ino_t, ino ) - __field( ext4_lblk_t, lblk ) - __field( ext4_lblk_t, len ) - __field( ext4_fsblk_t, pblk ) - __field( char, status ) -__field ( bool, allocated ) - ), - -TP_fast_assign ( - __entry->dev = inode->i_sb->s_dev; - __entry->ino = inode->i_ino; - __entry->lblk = es->es_lblk; - __entry->len = es->es_len; - __entry->pblk = ext4_es_pblock(es); - __entry->status = ext4_es_status(es); - __entry->allocated = allocated; - ), - -TP_printk ("dev %d,%d ino %lu es [%u/%u) mapped %llu status %s " -"allocated %d" , -MAJOR (__entry->dev),MINOR (__entry->dev), - (unsigned long ) __entry->ino, - __entry->lblk, __entry->len, - __entry->pblk,show_extent_status (__entry->status), - __entry->allocated) -); -/* fsmap traces */ DECLARE_EVENT_CLASS(ext4_fsmap_class, TP_PROTO(struct super_block *sb, u32 keydev, u32 agno, u64 bno, u64 len,
kernel/sys.c +2 -0
@@ -1530,6 +1530,8 @@ int do_prlimit(struct task_struct *tsk, unsigned int resource,if (resource >=RLIM_NLIMITS )return -EINVAL ; + resource =array_index_nospec (resource,RLIM_NLIMITS ); +if (new_rlim) {if (new_rlim->rlim_cur > new_rlim->rlim_max)return -EINVAL ;
net/core/ethtool.c +2 -1
@@ -2023,7 +2023,8 @@ static int ethtool_get_phy_stats(struct net_device *dev, void __user *useraddr)return n_stats;if (n_stats >S32_MAX /sizeof (u64))return -ENOMEM ; -WARN_ON_ONCE (!n_stats); +if (WARN_ON_ONCE (!n_stats)) +return -EOPNOTSUPP ;if (copy_from_user (&stats, useraddr,sizeof (stats)))return -EFAULT ;