Linux 4.14.193
Greg Kroah-Hartman
maintainerI'm announcing the release of the 4.14.193 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:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Makefile | 2 arch/arm/include/asm/percpu.h | 2 arch/arm/kernel/head-common.S | 1 drivers/char/random.c | 1 drivers/scsi/libsas/sas_ata.c | 1 drivers/scsi/libsas/sas_discover.c | 32 ++++++--------- drivers/scsi/libsas/sas_expander.c | 8 ++- drivers/scsi/libsas/sas_internal.h | 1 drivers/scsi/libsas/sas_port.c | 3 - fs/ext4/inode.c | 5 ++ include/linux/prandom.h | 78 +++++++++++++++++++++++++++++++++++++ include/linux/random.h | 63 +---------------------------- include/scsi/libsas.h | 3 - include/scsi/scsi_transport_sas.h | 1 kernel/time/timer.c | 8 +++ lib/random32.c | 2 16 files changed, 123 insertions(+), 88 deletions(-)
Geert Uytterhoeven (1):
ARM: 8702/1: head-common.S: Clear lr before jumping to start_kernel()
Greg Kroah-Hartman (2):
Revert "scsi: libsas: direct call probe and destruct" Linux 4.14.193
Grygorii Strashko (1):
ARM: percpu.h: fix build error
Jiang Ying (1):
ext4: fix direct I/O read error
Linus Torvalds (2):
random32: remove net_rand_state from the latent entropy gcc plugin
random32: move the pseudo-random 32-bit definitions to prandom.h
Willy Tarreau (2):
random32: update the net random state on interrupt and activity
random: fix circular include dependency on arm64 after addition of percpu.h
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 4 PATCHLEVEL = 14 -SUBLEVEL = 192 +SUBLEVEL = 193 EXTRAVERSION = NAME = Petit Gorille
arch/arm/include/asm/percpu.h +2 -0
@@ -16,6 +16,8 @@#ifndef _ASM_ARM_PERCPU_H_#define _ASM_ARM_PERCPU_H_ +#include <asm/thread_info.h> +/* * Same as asm-generic/percpu.h, except that we store the per cpu offset * in the TPIDRPRW. TPIDRPRW only exists on V6K and V7
arch/arm/kernel/head-common.S +1 -0
@@ -101,6 +101,7 @@ __mmap_switched: str r2, [r6] @ Save atags pointer cmp r7, #0 strne r0, [r7] @ Save control register values + mov lr, #0 b start_kernel ENDPROC(__mmap_switched)
drivers/char/random.c +1 -0
@@ -1246,6 +1246,7 @@ void add_interrupt_randomness(int irq, int irq_flags)fast_mix (fast_pool);add_interrupt_bench (cycles); +this_cpu_add (net_rand_state.s1, fast_pool->pool[cycles &3 ]);if (unlikely (crng_init ==0 )) { if ((fast_pool->count >= 64) &&
drivers/scsi/libsas/sas_ata.c +1 -0
@@ -730,6 +730,7 @@ int sas_discover_sata(struct domain_device *dev)if (res)return res; +sas_discover_event (dev->port,DISCE_PROBE );return 0 ; }
drivers/scsi/libsas/sas_discover.c +14 -18
@@ -221,9 +221,13 @@ void sas_notify_lldd_dev_gone(struct domain_device *dev) } } -static void sas_probe_devices (struct asd_sas_port *port) +static void sas_probe_devices (struct work_struct *work) {struct domain_device *dev, *n; +struct sas_discovery_event *ev =to_sas_discovery_event (work); +struct asd_sas_port *port = ev->port; + +clear_bit (DISCE_PROBE , &port->disc.pending);/* devices must be domain members before link recovery and probe */ list_for_each_entry (dev, &port->disco_list, disco_list_node) {
@@ -299,6 +303,7 @@ int sas_discover_end_dev(struct domain_device *dev) res =sas_notify_lldd_dev_found (dev);if (res)return res; +sas_discover_event (dev->port,DISCE_PROBE );return 0 ; }
@@ -357,9 +362,13 @@ static void sas_unregister_common_dev(struct asd_sas_port *port, struct domain_dsas_put_device (dev); } -void sas_destruct_devices (struct asd_sas_port *port) +static void sas_destruct_devices (struct work_struct *work) {struct domain_device *dev, *n; +struct sas_discovery_event *ev =to_sas_discovery_event (work); +struct asd_sas_port *port = ev->port; + +clear_bit (DISCE_DESTRUCT , &port->disc.pending);list_for_each_entry_safe (dev, n, &port->destroy_list, disco_list_node) {list_del_init (&dev->disco_list_node);
@@ -370,16 +379,6 @@ void sas_destruct_devices(struct asd_sas_port *port) } } -static void sas_destruct_ports (struct asd_sas_port *port) -{ -struct sas_port *sas_port, *p; - -list_for_each_entry_safe (sas_port, p, &port->sas_port_del_list, del_list) { -list_del_init (&sas_port->del_list); -sas_port_delete (sas_port); - } -} -void sas_unregister_dev (struct asd_sas_port *port,struct domain_device *dev) { if (!test_bit(SAS_DEV_DESTROY, &dev->state) &&
@@ -394,6 +393,7 @@ void sas_unregister_dev(struct asd_sas_port *port, struct domain_device *dev)if (!test_and_set_bit (SAS_DEV_DESTROY , &dev->state)) {sas_rphy_unlink (dev->rphy);list_move_tail (&dev->disco_list_node, &port->destroy_list); +sas_discover_event (dev->port,DISCE_DESTRUCT ); } }
@@ -499,8 +499,6 @@ static void sas_discover_domain(struct work_struct *work) port->port_dev =NULL ; } -sas_probe_devices (port); -SAS_DPRINTK ("DONE DISCOVERY on port %d, pid:%d, result:%d\n" , port->id,task_pid_nr (current), error); }
@@ -534,10 +532,6 @@ static void sas_revalidate_domain(struct work_struct *work) port->id, task_pid_nr(current), res); out:mutex_unlock (&ha->disco_mutex); - -sas_destruct_devices (port); -sas_destruct_ports (port); -sas_probe_devices (port); }/* ---------- Events ---------- */
@@ -593,8 +587,10 @@ void sas_init_disc(struct sas_discovery *disc, struct asd_sas_port *port)static const work_func_t sas_event_fns[DISC_NUM_EVENTS ] = { [DISCE_DISCOVER_DOMAIN ] = sas_discover_domain, [DISCE_REVALIDATE_DOMAIN ] = sas_revalidate_domain, + [DISCE_PROBE ] = sas_probe_devices, [DISCE_SUSPEND ] = sas_suspend_devices, [DISCE_RESUME ] = sas_resume_devices, + [DISCE_DESTRUCT ] = sas_destruct_devices, }; disc->pending =0 ;
drivers/scsi/libsas/sas_expander.c +5 -3
@@ -1946,8 +1946,7 @@ static void sas_unregister_devs_sas_addr(struct domain_device *parent,sas_port_delete_phy (phy->port, phy->phy);sas_device_set_phy (found, phy->port);if (phy->port->num_phys ==0 ) -list_add_tail (&phy->port->del_list, - &parent->port->sas_port_del_list); +sas_port_delete (phy->port); phy->port =NULL ; } }
@@ -2157,7 +2156,7 @@ int sas_ex_revalidate_domain(struct domain_device *port_dev)struct domain_device *dev =NULL ; res =sas_find_bcast_dev (port_dev, &dev); -if (res ==0 && dev) { +while (res ==0 && dev) {struct expander_device *ex = &dev->ex_dev;int i =0 , phy_id;
@@ -2169,6 +2168,9 @@ int sas_ex_revalidate_domain(struct domain_device *port_dev) res =sas_rediscover (dev, phy_id); i = phy_id +1 ; }while (i < ex->num_phys); + + dev =NULL ; + res =sas_find_bcast_dev (port_dev, &dev); }return res; }
drivers/scsi/libsas/sas_internal.h +0 -1
@@ -98,7 +98,6 @@ int sas_try_ata_reset(struct asd_sas_phy *phy);void sas_hae_reset (struct work_struct *work);void sas_free_device (struct kref *kref); -void sas_destruct_devices (struct asd_sas_port *port);#ifdef CONFIG_SCSI_SAS_HOST_SMP extern void sas_smp_host_handler (struct bsg_job *job,struct Scsi_Host *shost);
drivers/scsi/libsas/sas_port.c +0 -3
@@ -66,7 +66,6 @@ static void sas_resume_port(struct asd_sas_phy *phy) rc =sas_notify_lldd_dev_found (dev);if (rc) {sas_unregister_dev (port, dev); -sas_destruct_devices (port);continue ; }
@@ -220,7 +219,6 @@ void sas_deform_port(struct asd_sas_phy *phy, int gone)if (port->num_phys ==1 ) {sas_unregister_domain_devices (port, gone); -sas_destruct_devices (port);sas_port_delete (port->port); port->port =NULL ; }else {
@@ -325,7 +323,6 @@ static void sas_init_port(struct asd_sas_port *port,INIT_LIST_HEAD (&port->dev_list);INIT_LIST_HEAD (&port->disco_list);INIT_LIST_HEAD (&port->destroy_list); -INIT_LIST_HEAD (&port->sas_port_del_list);spin_lock_init (&port->phy_list_lock);INIT_LIST_HEAD (&port->phy_list); port->ha = sas_ha;
fs/ext4/inode.c +5 -0
@@ -3794,6 +3794,11 @@ static ssize_t ext4_direct_IO_read(struct kiocb *iocb, struct iov_iter *iter)struct inode *inode = mapping->host;size_t count =iov_iter_count (iter);ssize_t ret; +loff_t offset = iocb->ki_pos; +loff_t size =i_size_read (inode); + +if (offset >= size) +return 0 ;/* * Shared inode_lock is enough for us - it protects against concurrent
include/linux/prandom.h new file +78 -0
78 lines not on this page · raw message
include/linux/random.h +4 -59
75 lines not on this page · raw message
include/scsi/libsas.h +2 -1
@@ -87,8 +87,10 @@ enum discover_event {DISCE_DISCOVER_DOMAIN =0U ,DISCE_REVALIDATE_DOMAIN =1 ,DISCE_PORT_GONE =2 , +DISCE_PROBE =3 ,DISCE_SUSPEND =4 ,DISCE_RESUME =5 , +DISCE_DESTRUCT =6 , DISC_NUM_EVENTS = 7, };
@@ -267,7 +269,6 @@ struct asd_sas_port {struct list_head dev_list;struct list_head disco_list;struct list_head destroy_list; -struct list_head sas_port_del_list;enum sas_linkrate linkrate;struct sas_work work;
include/scsi/scsi_transport_sas.h +0 -1
@@ -156,7 +156,6 @@ struct sas_port {struct mutex phy_list_mutex;struct list_head phy_list; -struct list_head del_list;/* libsas only */ };#define dev_to_sas_port (d) \
kernel/time/timer.c +8 -0
@@ -44,6 +44,7 @@#include <linux/sched/debug.h> #include <linux/slab.h> #include <linux/compat.h> +#include <linux/random.h> #include <linux/uaccess.h> #include <asm/unistd.h>
@@ -1595,6 +1596,13 @@ void update_process_times(int user_tick)scheduler_tick ();if (IS_ENABLED (CONFIG_POSIX_TIMERS ))run_posix_cpu_timers (p); + +/* The current CPU might make use of net randoms without receiving IRQs +* to renew them often enough. Let's update the net_rand_state from a +* non-constant value that's not affine to the number of calls to make +* sure it's updated when there's some activity (we don't care in idle). +*/ +this_cpu_add (net_rand_state.s1,rol32 (jiffies,24 ) + user_tick); }/**
lib/random32.c +1 -1
@@ -48,7 +48,7 @@ static inline void prandom_state_selftest(void) }#endif -static DEFINE_PER_CPU(struct rnd_state, net_rand_state) __latent_entropy; +DEFINE_PER_CPU(struct rnd_state, net_rand_state);/** * prandom_u32_state - seeded pseudo-random number generator.