Linux 4.14.62
Greg KH
maintainerI'm announcing the release of the 4.14.62 kernel.
All users of the 4.14 kernel series must upgrade.
The updated 4.14.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-4.14.y
and can be browsed at the normal kernel.org git web browser:
http://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Makefile | 2 - drivers/i2c/busses/i2c-imx.c | 3 - drivers/idle/intel_idle.c | 7 +++- drivers/nvme/host/pci.c | 64 ++++++++++++++++---------------------- drivers/nvme/target/fc.c | 44 ++++++++++++++++++++------ drivers/pci/pci-acpi.c | 2 - drivers/scsi/qla2xxx/qla_attr.c | 1 drivers/scsi/qla2xxx/qla_gbl.h | 1 drivers/scsi/qla2xxx/qla_gs.c | 4 ++ drivers/scsi/qla2xxx/qla_init.c | 7 +--- drivers/scsi/qla2xxx/qla_inline.h | 2 + drivers/scsi/qla2xxx/qla_mid.c | 5 ++ drivers/scsi/qla2xxx/qla_os.c | 7 ++-- fs/btrfs/extent_io.c | 3 + fs/ext4/super.c | 4 +- fs/jfs/xattr.c | 10 +++-- fs/xfs/libxfs/xfs_attr_leaf.c | 5 +- fs/xfs/xfs_icache.c | 58 ++++++++++++++++++++++++++++++---- include/linux/ring_buffer.h | 1 kernel/irq/manage.c | 9 ++++- kernel/softirq.c | 2 - kernel/time/tick-sched.c | 2 - kernel/trace/ring_buffer.c | 16 +++++++++ kernel/trace/trace.c | 6 +++ net/netlink/af_netlink.c | 4 +- 25 files changed, 191 insertions(+), 78 deletions(-)
Anil Gurumurthy (1):
scsi: qla2xxx: Return error when TMF returns
Anna-Maria Gleixner (1):
nohz: Fix local_timer_softirq_pending()
Dave Chinner (2):
xfs: catch inode allocation state mismatch corruption
xfs: validate cached inodes are free when allocated
Dmitry Safonov (1):
netlink: Don't shift on 64 for ngroups
Eric Sandeen (1):
xfs: don't call xfs_da_shrink_inode with NULL bp
Esben Haabendal (1):
i2c: imx: Fix reinit_completion() use
Filipe Manana (1):
Btrfs: fix file data corruption after cloning a range and fsync
Frederic Weisbecker (1):
nohz: Fix missing tick reprogram when interrupting an inline softirq
Greg Kroah-Hartman (1):
Linux 4.14.62
James Smart (1):
nvmet-fc: fix target sgl list on large transfers
Keith Busch (1):
nvme-pci: Fix queue double allocations
Len Brown (1):
intel_idle: Graceful probe failure when MWAIT is disabled
Masami Hiramatsu (1):
ring_buffer: tracing: Inherit the tracing setting to next ring buffer
Quinn Tran (3):
scsi: qla2xxx: Fix unintialized List head crash
scsi: qla2xxx: Fix NPIV deletion by calling wait_for_sess_deletion
scsi: qla2xxx: Fix ISP recovery on unload
Sagi Grimberg (1):
nvme-pci: allocate device queues storage space at probe
Shankara Pailoor (1):
jfs: Fix inconsistency between memory allocation and ea_buf->max_size
Theodore Ts'o (1):
ext4: fix false negatives *and* false positives in ext4_check_descriptors()
Thomas Gleixner (1):
genirq: Make force irq threading setup more robust
Vitaly Kuznetsov (1):
ACPI / PCI: Bail early in acpi_pci_add_bus() if there is no ACPI handle
Greg KH
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 4 PATCHLEVEL = 14 -SUBLEVEL = 61 +SUBLEVEL = 62 EXTRAVERSION = NAME = Petit Gorille
drivers/i2c/busses/i2c-imx.c +1 -2
@@ -376,6 +376,7 @@ static int i2c_imx_dma_xfer(struct imx_i2c_struct *i2c_imx, goto err_desc; } +reinit_completion (&dma->cmd_complete); txdesc->callback = i2c_imx_dma_callback; txdesc->callback_param = i2c_imx;if (dma_submit_error (dmaengine_submit (txdesc))) {
@@ -619,7 +620,6 @@ static int i2c_imx_dma_write(struct imx_i2c_struct *i2c_imx,* The first byte must be transmitted by the CPU. */ imx_i2c_write_reg (msgs->addr <<1 , i2c_imx,IMX_I2C_I2DR ); -reinit_completion (&i2c_imx->dma->cmd_complete); time_left =wait_for_completion_timeout ( &i2c_imx->dma->cmd_complete,msecs_to_jiffies (DMA_TIMEOUT ));
@@ -678,7 +678,6 @@ static int i2c_imx_dma_read(struct imx_i2c_struct *i2c_imx,if (result)return result; -reinit_completion (&i2c_imx->dma->cmd_complete); time_left =wait_for_completion_timeout ( &i2c_imx->dma->cmd_complete,msecs_to_jiffies (DMA_TIMEOUT ));
drivers/idle/intel_idle.c +6 -1
@@ -1061,7 +1061,7 @@ static const struct idle_cpu idle_cpu_dnv = { };#define ICPU (model, cpu) \ - { X86_VENDOR_INTEL, 6, model, X86_FEATURE_MWAIT, (unsigned long)&cpu } + { X86_VENDOR_INTEL, 6, model, X86_FEATURE_ANY, (unsigned long)&cpu }static const struct x86_cpu_id intel_idle_ids[]__initconst = {ICPU (INTEL_FAM6_NEHALEM_EP , idle_cpu_nehalem),
@@ -1125,6 +1125,11 @@ static int __init intel_idle_probe(void)return -ENODEV ; } +if (!boot_cpu_has (X86_FEATURE_MWAIT )) { +pr_debug ("Please enable MWAIT in BIOS SETUP\n" ); +return -ENODEV ; + } +if (boot_cpu_data.cpuid_level <CPUID_MWAIT_LEAF )return -ENODEV ;
drivers/nvme/host/pci.c +28 -36
183 lines not on this page · raw message
drivers/nvme/target/fc.c +35 -9
87 lines not on this page · raw message
drivers/pci/pci-acpi.c +1 -1
@@ -624,7 +624,7 @@ void acpi_pci_add_bus(struct pci_bus *bus)union acpi_object *obj;struct pci_host_bridge *bridge; -if (acpi_pci_disabled || !bus->bridge) +if (acpi_pci_disabled || !bus->bridge || !ACPI_HANDLE (bus->bridge))return ;acpi_pci_slot_enumerate (bus);
drivers/scsi/qla2xxx/qla_attr.c +1 -0
@@ -2142,6 +2142,7 @@ qla24xx_vport_delete(struct fc_vport *fc_vport)msleep (1000 );qla24xx_disable_vp (vha); +qla2x00_wait_for_sess_deletion (vha); vha->flags.delete_progress =1 ;
drivers/scsi/qla2xxx/qla_gbl.h +1 -0
@@ -200,6 +200,7 @@ void qla2x00_handle_login_done_event(struct scsi_qla_host *, fc_port_t *, uint16_t *);int qla24xx_post_gnl_work (struct scsi_qla_host *,fc_port_t *);int qla24xx_async_abort_cmd (srb_t *); +void qla2x00_wait_for_sess_deletion (scsi_qla_host_t *);/* * Global Functions in qla_mid.c source file.
drivers/scsi/qla2xxx/qla_gs.c +4 -0
@@ -3368,6 +3368,10 @@ int qla24xx_async_gpnid(scsi_qla_host_t *vha, port_id_t *id)return rval; done_free_sp: +spin_lock_irqsave (&vha->hw->vport_slock, flags); +list_del (&sp->elem); +spin_unlock_irqrestore (&vha->hw->vport_slock, flags); +if (sp->u.iocb_cmd.u.ctarg.req) { dma_free_coherent(&vha->hw->pdev->dev, sizeof(struct ct_sns_pkt),
drivers/scsi/qla2xxx/qla_init.c +3 -4
@@ -1326,11 +1326,10 @@ qla2x00_async_tm_cmd(fc_port_t *fcport, uint32_t flags, uint32_t lun,wait_for_completion (&tm_iocb->u.tmf.comp); - rval = tm_iocb->u.tmf.comp_status ==CS_COMPLETE ? -QLA_SUCCESS :QLA_FUNCTION_FAILED ; + rval = tm_iocb->u.tmf.data; -if ((rval !=QLA_SUCCESS ) || tm_iocb->u.tmf.data) { -ql_dbg (ql_dbg_taskm, vha,0x8030 , +if (rval !=QLA_SUCCESS ) { +ql_log (ql_log_warn, vha,0x8030 ,"TM IOCB failed (%x).\n" , rval); }
drivers/scsi/qla2xxx/qla_inline.h +2 -0
@@ -221,6 +221,8 @@ qla2xxx_get_qpair_sp(struct qla_qpair *qpair, fc_port_t *fcport, gfp_t flag) sp->fcport = fcport; sp->iocbs =1 ; sp->vha = qpair->vha; +INIT_LIST_HEAD (&sp->elem); + done:if (!sp)QLA_QPAIR_MARK_NOT_BUSY (qpair);
drivers/scsi/qla2xxx/qla_mid.c +5 -0
@@ -152,10 +152,15 @@ qla24xx_disable_vp(scsi_qla_host_t *vha) {unsigned long flags;int ret; +fc_port_t *fcport; ret =qla24xx_control_vp (vha,VCE_COMMAND_DISABLE_VPS_LOGO_ALL );atomic_set (&vha->loop_state,LOOP_DOWN );atomic_set (&vha->loop_down_timer,LOOP_DOWN_TIME ); +list_for_each_entry (fcport, &vha->vp_fcports, list) + fcport->logout_on_delete =0 ; + +qla2x00_mark_all_devices_lost (vha,0 );/* Remove port id from vp target map */ spin_lock_irqsave (&vha->hw->vport_slock, flags);
drivers/scsi/qla2xxx/qla_os.c +4 -3
@@ -1136,7 +1136,7 @@ static inline int test_fcport_count(scsi_qla_host_t *vha)* qla2x00_wait_for_sess_deletion can only be called from remove_one. * it has dependency on UNLOADING flag to stop device discovery */ -static void +void qla2x00_wait_for_sess_deletion (scsi_qla_host_t *vha) {qla2x00_mark_all_devices_lost (vha,0 );
@@ -5794,8 +5794,9 @@ qla2x00_do_dpc(void *data)set_bit (ISP_ABORT_NEEDED , &base_vha->dpc_flags); } -if (test_and_clear_bit (ISP_ABORT_NEEDED , - &base_vha->dpc_flags)) { +if (test_and_clear_bit + (ISP_ABORT_NEEDED , &base_vha->dpc_flags) && + !test_bit (UNLOADING , &base_vha->dpc_flags)) {ql_dbg (ql_dbg_dpc, base_vha,0x4007 ,"ISP abort scheduled.\n" );
fs/btrfs/extent_io.c +3 -0
@@ -4280,6 +4280,7 @@ int try_release_extent_mapping(struct extent_map_tree *map,struct extent_map *em;u64 start =page_offset (page);u64 end = start +PAGE_SIZE -1 ; +struct btrfs_inode *btrfs_inode =BTRFS_I (page->mapping->host);if (gfpflags_allow_blocking (mask) && page->mapping->host->i_size >SZ_16M ) {
@@ -4302,6 +4303,8 @@ int try_release_extent_mapping(struct extent_map_tree *map, extent_map_end(em) - 1, EXTENT_LOCKED | EXTENT_WRITEBACK, 0, NULL)) { +set_bit (BTRFS_INODE_NEEDS_FULL_SYNC , + &btrfs_inode->runtime_flags);remove_extent_mapping (map, em);/* once for the rb tree */ free_extent_map (em);
fs/ext4/super.c +2 -2
@@ -2301,7 +2301,7 @@ static int ext4_check_descriptors(struct super_block *sb,struct ext4_sb_info *sbi =EXT4_SB (sb);ext4_fsblk_t first_block =le32_to_cpu (sbi->s_es->s_first_data_block);ext4_fsblk_t last_block; -ext4_fsblk_t last_bg_block = sb_block +ext4_bg_num_gdb (sb,0 ) +1 ; +ext4_fsblk_t last_bg_block = sb_block +ext4_bg_num_gdb (sb,0 );ext4_fsblk_t block_bitmap;ext4_fsblk_t inode_bitmap;ext4_fsblk_t inode_table;
@@ -4038,13 +4038,13 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent) goto failed_mount2; } } + sbi->s_gdb_count = db_count;if (!ext4_check_descriptors (sb, logical_sb_block, &first_not_zeroed)) {ext4_msg (sb,KERN_ERR ,"group descriptors corrupted!" ); ret = -EFSCORRUPTED ; goto failed_mount2; } - sbi->s_gdb_count = db_count;get_random_bytes (&sbi->s_next_generation,sizeof (u32));spin_lock_init (&sbi->s_next_gen_lock);
fs/jfs/xattr.c +6 -4
@@ -491,15 +491,17 @@ static int ea_get(struct inode *inode, struct ea_buffer *ea_buf, int min_size)if (size >PSIZE ) {/* * To keep the rest of the code simple. Allocate a -* contiguous buffer to work with +* contiguous buffer to work with. Make the buffer large +* enough to make use of the whole extent. */ - ea_buf->xattr =kmalloc (size,GFP_KERNEL ); + ea_buf->max_size = (size + sb->s_blocksize -1 ) & + ~(sb->s_blocksize -1 ); + + ea_buf->xattr =kmalloc (ea_buf->max_size,GFP_KERNEL );if (ea_buf->xattr ==NULL )return -ENOMEM ; ea_buf->flag =EA_MALLOC ; - ea_buf->max_size = (size + sb->s_blocksize -1 ) & - ~(sb->s_blocksize -1 );if (ea_size ==0 )return 0 ;
fs/xfs/libxfs/xfs_attr_leaf.c +2 -3
@@ -785,9 +785,8 @@ xfs_attr_shortform_to_leaf(xfs_da_args_t *args)ASSERT (blkno ==0 ); error =xfs_attr3_leaf_create (args, blkno, &bp);if (error) { - error =xfs_da_shrink_inode (args,0 , bp); - bp =NULL ; -if (error) +/* xfs_attr3_leaf_create may not have instantiated a block */ +if (bp && (xfs_da_shrink_inode (args,0 , bp) !=0 )) goto out;xfs_idata_realloc (dp, size,XFS_ATTR_FORK );/* try to put */ memcpy (ifp->if_u1.if_data, tmpbuffer, size);/* it back */
fs/xfs/xfs_icache.c +51 -7
79 lines not on this page · raw message
include/linux/ring_buffer.h +1 -0
@@ -160,6 +160,7 @@ void ring_buffer_record_enable(struct ring_buffer *buffer);void ring_buffer_record_off (struct ring_buffer *buffer);void ring_buffer_record_on (struct ring_buffer *buffer);int ring_buffer_record_is_on (struct ring_buffer *buffer); +int ring_buffer_record_is_set_on (struct ring_buffer *buffer);void ring_buffer_record_disable_cpu (struct ring_buffer *buffer,int cpu);void ring_buffer_record_enable_cpu (struct ring_buffer *buffer,int cpu);
kernel/irq/manage.c +8 -1
@@ -1030,6 +1030,13 @@ static int irq_setup_forced_threading(struct irqaction *new)if (new->flags & (IRQF_NO_THREAD |IRQF_PERCPU |IRQF_ONESHOT ))return 0 ; +/* +* No further action required for interrupts which are requested as +* threaded interrupts already +*/ +if (new->handler == irq_default_primary_handler) +return 0 ; + new->flags |=IRQF_ONESHOT ;/*
@@ -1037,7 +1044,7 @@ static int irq_setup_forced_threading(struct irqaction *new)* thread handler. We force thread them as well by creating a * secondary action. */ -if (new->handler != irq_default_primary_handler && new->thread_fn) { +if (new->handler && new->thread_fn) {/* Allocate the secondary action */ new->secondary =kzalloc (sizeof (struct irqaction ),GFP_KERNEL );if (!new->secondary)
kernel/softirq.c +1 -1
@@ -382,7 +382,7 @@ static inline void tick_irq_exit(void)/* Make sure that timer wheel updates are propagated */ if ((idle_cpu (cpu) && !need_resched ()) ||tick_nohz_full_cpu (cpu)) { -if (!in_interrupt ()) +if (!in_irq ())tick_nohz_irq_exit (); }#endif
kernel/time/tick-sched.c +1 -1
@@ -676,7 +676,7 @@ static void tick_nohz_restart(struct tick_sched *ts, ktime_t now)static inline bool local_timer_softirq_pending (void ) { -return local_softirq_pending () &TIMER_SOFTIRQ ; +return local_softirq_pending () &BIT (TIMER_SOFTIRQ ); } static ktime_t tick_nohz_stop_sched_tick(struct tick_sched *ts,
kernel/trace/ring_buffer.c +16 -0
@@ -3109,6 +3109,22 @@ int ring_buffer_record_is_on(struct ring_buffer *buffer)return !atomic_read (&buffer->record_disabled); } +/** +* ring_buffer_record_is_set_on - return true if the ring buffer is set writable +* @buffer: The ring buffer to see if write is set enabled +* +* Returns true if the ring buffer is set writable by ring_buffer_record_on(). +* Note that this does NOT mean it is in a writable state. +* +* It may return true when the ring buffer has been disabled by +* ring_buffer_record_disable(), as that is a temporary disabling of +* the ring buffer. +*/ +int ring_buffer_record_is_set_on (struct ring_buffer *buffer) +{ +return !(atomic_read (&buffer->record_disabled) &RB_BUFFER_OFF ); +} +/** * ring_buffer_record_disable_cpu - stop all writes into the cpu_buffer * @buffer: The ring buffer to stop writes to.
kernel/trace/trace.c +6 -0
@@ -1366,6 +1366,12 @@ update_max_tr(struct trace_array *tr, struct task_struct *tsk, int cpu)arch_spin_lock (&tr->max_lock); +/* Inherit the recordable setting from trace_buffer */ +if (ring_buffer_record_is_set_on (tr->trace_buffer.buffer)) +ring_buffer_record_on (tr->max_buffer.buffer); +else +ring_buffer_record_off (tr->max_buffer.buffer); + buf = tr->trace_buffer.buffer; tr->trace_buffer.buffer = tr->max_buffer.buffer; tr->max_buffer.buffer = buf;
net/netlink/af_netlink.c +2 -2
@@ -981,8 +981,8 @@ static int netlink_bind(struct socket *sock, struct sockaddr *addr,if (nlk->ngroups ==0 ) groups =0 ; -else - groups &= (1ULL << nlk->ngroups) -1 ; +else if (nlk->ngroups <8 *sizeof (groups)) + groups &= (1UL << nlk->ngroups) -1 ; bound = nlk->bound;if (bound) {