diff --git a/Makefile b/Makefile
index 5c8ab4c31efe..14472990c4bd 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
 VERSION = 3
 PATCHLEVEL = 18
-SUBLEVEL = 125
+SUBLEVEL = 126
 EXTRAVERSION =
 NAME = Diseased Newt
 
diff --git a/arch/alpha/include/asm/termios.h b/arch/alpha/include/asm/termios.h
index 7fde0f88da88..51ed90be770a 100644
--- a/arch/alpha/include/asm/termios.h
+++ b/arch/alpha/include/asm/termios.h
@@ -72,9 +72,15 @@
 })
 
 #define user_termios_to_kernel_termios(k, u) \
-       copy_from_user(k, u, sizeof(struct termios))
+       copy_from_user(k, u, sizeof(struct termios2))
 
 #define kernel_termios_to_user_termios(u, k) \
+       copy_to_user(u, k, sizeof(struct termios2))
+
+#define user_termios_to_kernel_termios_1(k, u) \
+       copy_from_user(k, u, sizeof(struct termios))
+
+#define kernel_termios_to_user_termios_1(u, k) \
        copy_to_user(u, k, sizeof(struct termios))
 
 #endif /* _ALPHA_TERMIOS_H */
diff --git a/arch/alpha/include/uapi/asm/ioctls.h 
b/arch/alpha/include/uapi/asm/ioctls.h
index f30c94ae1bdb..7ee8ab577e11 100644
--- a/arch/alpha/include/uapi/asm/ioctls.h
+++ b/arch/alpha/include/uapi/asm/ioctls.h
@@ -31,6 +31,11 @@
 #define TCXONC         _IO('t', 30)
 #define TCFLSH         _IO('t', 31)
 
+#define TCGETS2                _IOR('T', 42, struct termios2)
+#define TCSETS2                _IOW('T', 43, struct termios2)
+#define TCSETSW2       _IOW('T', 44, struct termios2)
+#define TCSETSF2       _IOW('T', 45, struct termios2)
+
 #define TIOCSWINSZ     _IOW('t', 103, struct winsize)
 #define TIOCGWINSZ     _IOR('t', 104, struct winsize)
 #define        TIOCSTART       _IO('t', 110)           /* start output, like 
^Q */
diff --git a/arch/alpha/include/uapi/asm/termbits.h 
b/arch/alpha/include/uapi/asm/termbits.h
index 879dd3589921..483c7ec2a879 100644
--- a/arch/alpha/include/uapi/asm/termbits.h
+++ b/arch/alpha/include/uapi/asm/termbits.h
@@ -25,6 +25,19 @@ struct termios {
        speed_t c_ospeed;               /* output speed */
 };
 
+/* Alpha has identical termios and termios2 */
+
+struct termios2 {
+       tcflag_t c_iflag;               /* input mode flags */
+       tcflag_t c_oflag;               /* output mode flags */
+       tcflag_t c_cflag;               /* control mode flags */
+       tcflag_t c_lflag;               /* local mode flags */
+       cc_t c_cc[NCCS];                /* control characters */
+       cc_t c_line;                    /* line discipline (== c_cc[19]) */
+       speed_t c_ispeed;               /* input speed */
+       speed_t c_ospeed;               /* output speed */
+};
+
 /* Alpha has matching termios and ktermios */
 
 struct ktermios {
@@ -147,6 +160,7 @@ struct ktermios {
 #define B3000000  00034
 #define B3500000  00035
 #define B4000000  00036
+#define BOTHER    00037
 
 #define CSIZE  00001400
 #define   CS5  00000000
@@ -164,6 +178,9 @@ struct ktermios {
 #define CMSPAR   010000000000          /* mark or space (stick) parity */
 #define CRTSCTS          020000000000          /* flow control */
 
+#define CIBAUD 07600000
+#define IBSHIFT        16
+
 /* c_lflag bits */
 #define ISIG   0x00000080
 #define ICANON 0x00000100
diff --git a/arch/mips/kernel/crash.c b/arch/mips/kernel/crash.c
index 26c7786d1407..e7d886b6a032 100644
--- a/arch/mips/kernel/crash.c
+++ b/arch/mips/kernel/crash.c
@@ -34,6 +34,9 @@ static void crash_shutdown_secondary(void *passed_regs)
        if (!cpu_online(cpu))
                return;
 
+       /* We won't be sent IPIs any more. */
+       set_cpu_online(cpu, false);
+
        local_irq_disable();
        if (!cpu_isset(cpu, cpus_in_crash))
                crash_save_cpu(regs, cpu);
diff --git a/arch/mips/kernel/machine_kexec.c b/arch/mips/kernel/machine_kexec.c
index 50980bf3983e..92bc066e47a3 100644
--- a/arch/mips/kernel/machine_kexec.c
+++ b/arch/mips/kernel/machine_kexec.c
@@ -95,6 +95,9 @@ machine_kexec(struct kimage *image)
                        *ptr = (unsigned long) phys_to_virt(*ptr);
        }
 
+       /* Mark offline BEFORE disabling local irq. */
+       set_cpu_online(smp_processor_id(), false);
+
        /*
         * we do not want to be bothered.
         */
diff --git a/arch/powerpc/boot/crt0.S b/arch/powerpc/boot/crt0.S
index 14de4f8778a7..8539ac93b0de 100644
--- a/arch/powerpc/boot/crt0.S
+++ b/arch/powerpc/boot/crt0.S
@@ -47,8 +47,10 @@ p_end:               .long   _end
 p_pstack:      .long   _platform_stack_top
 #endif
 
-       .weak   _zimage_start
        .globl  _zimage_start
+       /* Clang appears to require the .weak directive to be after the symbol
+        * is defined. See https://bugs.llvm.org/show_bug.cgi?id=38921  */
+       .weak   _zimage_start
 _zimage_start:
        .globl  _zimage_start_lib
 _zimage_start_lib:
diff --git a/arch/powerpc/mm/tlb_nohash.c b/arch/powerpc/mm/tlb_nohash.c
index f38ea4df6a85..4014b6dc8c09 100644
--- a/arch/powerpc/mm/tlb_nohash.c
+++ b/arch/powerpc/mm/tlb_nohash.c
@@ -479,6 +479,9 @@ static void setup_page_sizes(void)
                for (psize = 0; psize < MMU_PAGE_COUNT; ++psize) {
                        struct mmu_psize_def *def = &mmu_psize_defs[psize];
 
+                       if (!def->shift)
+                               continue;
+
                        if (tlb1ps & (1U << (def->shift - 10))) {
                                def->flags |= MMU_PAGE_SIZE_DIRECT;
 
diff --git a/arch/sparc/kernel/perf_event.c b/arch/sparc/kernel/perf_event.c
index af53c25da2e7..73ad975cae97 100644
--- a/arch/sparc/kernel/perf_event.c
+++ b/arch/sparc/kernel/perf_event.c
@@ -23,6 +23,7 @@
 #include <asm/cpudata.h>
 #include <asm/uaccess.h>
 #include <linux/atomic.h>
+#include <linux/sched_clock.h>
 #include <asm/nmi.h>
 #include <asm/pcr.h>
 #include <asm/cacheflush.h>
@@ -919,6 +920,8 @@ static void read_in_all_counters(struct cpu_hw_events *cpuc)
                        sparc_perf_event_update(cp, &cp->hw,
                                                cpuc->current_idx[i]);
                        cpuc->current_idx[i] = PIC_NO_INDEX;
+                       if (cp->hw.state & PERF_HES_STOPPED)
+                               cp->hw.state |= PERF_HES_ARCH;
                }
        }
 }
@@ -951,10 +954,12 @@ static void calculate_single_pcr(struct cpu_hw_events 
*cpuc)
 
                enc = perf_event_get_enc(cpuc->events[i]);
                cpuc->pcr[0] &= ~mask_for_index(idx);
-               if (hwc->state & PERF_HES_STOPPED)
+               if (hwc->state & PERF_HES_ARCH) {
                        cpuc->pcr[0] |= nop_for_index(idx);
-               else
+               } else {
                        cpuc->pcr[0] |= event_encoding(enc, idx);
+                       hwc->state = 0;
+               }
        }
 out:
        cpuc->pcr[0] |= cpuc->event[0]->hw.config_base;
@@ -980,6 +985,9 @@ static void calculate_multiple_pcrs(struct cpu_hw_events 
*cpuc)
 
                cpuc->current_idx[i] = idx;
 
+               if (cp->hw.state & PERF_HES_ARCH)
+                       continue;
+
                sparc_pmu_start(cp, PERF_EF_RELOAD);
        }
 out:
@@ -1071,6 +1079,8 @@ static void sparc_pmu_start(struct perf_event *event, int 
flags)
        event->hw.state = 0;
 
        sparc_pmu_enable_event(cpuc, &event->hw, idx);
+
+       perf_event_update_userpage(event);
 }
 
 static void sparc_pmu_stop(struct perf_event *event, int flags)
@@ -1363,9 +1373,9 @@ static int sparc_pmu_add(struct perf_event *event, int 
ef_flags)
        cpuc->events[n0] = event->hw.event_base;
        cpuc->current_idx[n0] = PIC_NO_INDEX;
 
-       event->hw.state = PERF_HES_UPTODATE;
+       event->hw.state = PERF_HES_UPTODATE | PERF_HES_STOPPED;
        if (!(ef_flags & PERF_EF_START))
-               event->hw.state |= PERF_HES_STOPPED;
+               event->hw.state |= PERF_HES_ARCH;
 
        /*
         * If group events scheduling transaction was started,
@@ -1577,6 +1587,8 @@ static int __kprobes perf_event_nmi_handler(struct 
notifier_block *self,
        struct perf_sample_data data;
        struct cpu_hw_events *cpuc;
        struct pt_regs *regs;
+       u64 finish_clock;
+       u64 start_clock;
        int i;
 
        if (!atomic_read(&active_events))
@@ -1590,6 +1602,8 @@ static int __kprobes perf_event_nmi_handler(struct 
notifier_block *self,
                return NOTIFY_DONE;
        }
 
+       start_clock = sched_clock();
+
        regs = args->regs;
 
        cpuc = this_cpu_ptr(&cpu_hw_events);
@@ -1628,6 +1642,10 @@ static int __kprobes perf_event_nmi_handler(struct 
notifier_block *self,
                        sparc_pmu_stop(event, 0);
        }
 
+       finish_clock = sched_clock();
+
+       perf_sample_event_took(finish_clock - start_clock);
+
        return NOTIFY_STOP;
 }
 
diff --git a/arch/x86/boot/tools/build.c b/arch/x86/boot/tools/build.c
index a7661c430cd9..523db6ce88dd 100644
--- a/arch/x86/boot/tools/build.c
+++ b/arch/x86/boot/tools/build.c
@@ -391,6 +391,13 @@ int main(int argc, char ** argv)
                die("Unable to mmap '%s': %m", argv[2]);
        /* Number of 16-byte paragraphs, including space for a 4-byte CRC */
        sys_size = (sz + 15 + 4) / 16;
+#ifdef CONFIG_EFI_STUB
+       /*
+        * COFF requires minimum 32-byte alignment of sections, and
+        * adding a signature is problematic without that alignment.
+        */
+       sys_size = (sys_size + 1) & ~1;
+#endif
 
        /* Patch the setup code with the appropriate size parameters */
        buf[0x1f1] = setup_sectors-1;
diff --git a/arch/x86/kernel/check.c b/arch/x86/kernel/check.c
index 83a7995625a6..2c989db325e4 100644
--- a/arch/x86/kernel/check.c
+++ b/arch/x86/kernel/check.c
@@ -30,6 +30,11 @@ static __init int set_corruption_check(char *arg)
        ssize_t ret;
        unsigned long val;
 
+       if (!arg) {
+               pr_err("memory_corruption_check config string not provided\n");
+               return -EINVAL;
+       }
+
        ret = kstrtoul(arg, 10, &val);
        if (ret)
                return ret;
@@ -44,6 +49,11 @@ static __init int set_corruption_check_period(char *arg)
        ssize_t ret;
        unsigned long val;
 
+       if (!arg) {
+               pr_err("memory_corruption_check_period config string not 
provided\n");
+               return -EINVAL;
+       }
+
        ret = kstrtoul(arg, 10, &val);
        if (ret)
                return ret;
@@ -58,6 +68,11 @@ static __init int set_corruption_check_size(char *arg)
        char *end;
        unsigned size;
 
+       if (!arg) {
+               pr_err("memory_corruption_check_size config string not 
provided\n");
+               return -EINVAL;
+       }
+
        size = memparse(arg, &end);
 
        if (*end == '\0')
diff --git a/arch/xtensa/kernel/head.S b/arch/xtensa/kernel/head.S
index 288b61f080fe..64140998e117 100644
--- a/arch/xtensa/kernel/head.S
+++ b/arch/xtensa/kernel/head.S
@@ -88,9 +88,12 @@ _SetupMMU:
        initialize_mmu
 #if defined(CONFIG_MMU) && XCHAL_HAVE_PTP_MMU && XCHAL_HAVE_SPANNING_WAY
        rsr     a2, excsave1
-       movi    a3, 0x08000000
+       movi    a3, XCHAL_KSEG_PADDR
+       bltu    a2, a3, 1f
+       sub     a2, a2, a3
+       movi    a3, XCHAL_KSEG_SIZE
        bgeu    a2, a3, 1f
-       movi    a3, 0xd0000000
+       movi    a3, XCHAL_KSEG_CACHED_VADDR
        add     a2, a2, a3
        wsr     a2, excsave1
 1:
diff --git a/crypto/lrw.c b/crypto/lrw.c
index 6f9908a7ebcb..d38a382b09eb 100644
--- a/crypto/lrw.c
+++ b/crypto/lrw.c
@@ -132,7 +132,12 @@ static inline int get_index128(be128 *block)
                return x + ffz(val);
        }
 
-       return x;
+       /*
+        * If we get here, then x == 128 and we are incrementing the counter
+        * from all ones to all zeros. This means we must return index 127, i.e.
+        * the one corresponding to key2*{ 1,...,1 }.
+        */
+       return 127;
 }
 
 static int crypt(struct blkcipher_desc *d,
diff --git a/drivers/block/ataflop.c b/drivers/block/ataflop.c
index 2104b1b4ccda..9ab759bcebd5 100644
--- a/drivers/block/ataflop.c
+++ b/drivers/block/ataflop.c
@@ -1933,6 +1933,11 @@ static int __init atari_floppy_init (void)
                unit[i].disk = alloc_disk(1);
                if (!unit[i].disk)
                        goto Enomem;
+
+               unit[i].disk->queue = blk_init_queue(do_fd_request,
+                                                    &ataflop_lock);
+               if (!unit[i].disk->queue)
+                       goto Enomem;
        }
 
        if (UseTrackbuffer < 0)
@@ -1964,10 +1969,6 @@ static int __init atari_floppy_init (void)
                sprintf(unit[i].disk->disk_name, "fd%d", i);
                unit[i].disk->fops = &floppy_fops;
                unit[i].disk->private_data = &unit[i];
-               unit[i].disk->queue = blk_init_queue(do_fd_request,
-                                       &ataflop_lock);
-               if (!unit[i].disk->queue)
-                       goto Enomem;
                set_capacity(unit[i].disk, MAX_DISK_SIZE * 2);
                add_disk(unit[i].disk);
        }
@@ -1982,13 +1983,17 @@ static int __init atari_floppy_init (void)
 
        return 0;
 Enomem:
-       while (i--) {
-               struct request_queue *q = unit[i].disk->queue;
+       do {
+               struct gendisk *disk = unit[i].disk;
 
-               put_disk(unit[i].disk);
-               if (q)
-                       blk_cleanup_queue(q);
-       }
+               if (disk) {
+                       if (disk->queue) {
+                               blk_cleanup_queue(disk->queue);
+                               disk->queue = NULL;
+                       }
+                       put_disk(unit[i].disk);
+               }
+       } while (i--);
 
        unregister_blkdev(FLOPPY_MAJOR, "fd");
        return -ENOMEM;
diff --git a/drivers/block/swim.c b/drivers/block/swim.c
index 6b44bbe528b7..d1e2bb55163b 100644
--- a/drivers/block/swim.c
+++ b/drivers/block/swim.c
@@ -868,8 +868,17 @@ static int swim_floppy_init(struct swim_priv *swd)
 
 exit_put_disks:
        unregister_blkdev(FLOPPY_MAJOR, "fd");
-       while (drive--)
-               put_disk(swd->unit[drive].disk);
+       do {
+               struct gendisk *disk = swd->unit[drive].disk;
+
+               if (disk) {
+                       if (disk->queue) {
+                               blk_cleanup_queue(disk->queue);
+                               disk->queue = NULL;
+                       }
+                       put_disk(disk);
+               }
+       } while (drive--);
        return err;
 }
 
diff --git a/drivers/cdrom/cdrom.c b/drivers/cdrom/cdrom.c
index 81fb29741dc1..2bd91d4943e1 100644
--- a/drivers/cdrom/cdrom.c
+++ b/drivers/cdrom/cdrom.c
@@ -2424,7 +2424,7 @@ static int cdrom_ioctl_select_disc(struct 
cdrom_device_info *cdi,
                return -ENOSYS;
 
        if (arg != CDSL_CURRENT && arg != CDSL_NONE) {
-               if ((int)arg >= cdi->capacity)
+               if (arg >= cdi->capacity)
                        return -EINVAL;
        }
 
diff --git a/drivers/gpu/drm/omapdrm/omap_dmm_tiler.c 
b/drivers/gpu/drm/omapdrm/omap_dmm_tiler.c
index eb5b0f1d2a10..91be4e23a90f 100644
--- a/drivers/gpu/drm/omapdrm/omap_dmm_tiler.c
+++ b/drivers/gpu/drm/omapdrm/omap_dmm_tiler.c
@@ -256,6 +256,17 @@ static int dmm_txn_commit(struct dmm_txn *txn, bool wait)
        }
 
        txn->last_pat->next_pa = 0;
+       /* ensure that the written descriptors are visible to DMM */
+       wmb();
+
+       /*
+        * NOTE: the wmb() above should be enough, but there seems to be a bug
+        * in OMAP's memory barrier implementation, which in some rare cases may
+        * cause the writes not to be observable after wmb().
+        */
+
+       /* read back to ensure the data is in RAM */
+       readl(&txn->last_pat->next_pa);
 
        /* write to PAT_DESCR to clear out any pending transaction */
        writel(0x0, dmm->base + reg[PAT_DESCR][engine->id]);
diff --git a/drivers/iio/adc/at91_adc.c b/drivers/iio/adc/at91_adc.c
index 0047db49ee5e..dc438141b75b 100644
--- a/drivers/iio/adc/at91_adc.c
+++ b/drivers/iio/adc/at91_adc.c
@@ -245,12 +245,14 @@ static irqreturn_t at91_adc_trigger_handler(int irq, void 
*p)
        struct iio_poll_func *pf = p;
        struct iio_dev *idev = pf->indio_dev;
        struct at91_adc_state *st = iio_priv(idev);
+       struct iio_chan_spec const *chan;
        int i, j = 0;
 
        for (i = 0; i < idev->masklength; i++) {
                if (!test_bit(i, idev->active_scan_mask))
                        continue;
-               st->buffer[j] = at91_adc_readl(st, AT91_ADC_CHAN(st, i));
+               chan = idev->channels + i;
+               st->buffer[j] = at91_adc_readl(st, AT91_ADC_CHAN(st, 
chan->channel));
                j++;
        }
 
@@ -276,6 +278,8 @@ static void handle_adc_eoc_trigger(int irq, struct iio_dev 
*idev)
                iio_trigger_poll(idev->trig);
        } else {
                st->last_value = at91_adc_readl(st, AT91_ADC_CHAN(st, 
st->chnb));
+               /* Needed to ACK the DRDY interruption */
+               at91_adc_readl(st, AT91_ADC_LCDR);
                st->done = true;
                wake_up_interruptible(&st->wq_data_avail);
        }
diff --git a/drivers/md/bcache/btree.c b/drivers/md/bcache/btree.c
index 5a8c4017be66..d7cd3078e9f2 100644
--- a/drivers/md/bcache/btree.c
+++ b/drivers/md/bcache/btree.c
@@ -2372,7 +2372,7 @@ static int refill_keybuf_fn(struct btree_op *op, struct 
btree *b,
        struct keybuf *buf = refill->buf;
        int ret = MAP_CONTINUE;
 
-       if (bkey_cmp(k, refill->end) >= 0) {
+       if (bkey_cmp(k, refill->end) > 0) {
                ret = MAP_DONE;
                goto out;
        }
diff --git a/drivers/md/dm-ioctl.c b/drivers/md/dm-ioctl.c
index 63d64ca80bc0..e98dde920140 100644
--- a/drivers/md/dm-ioctl.c
+++ b/drivers/md/dm-ioctl.c
@@ -1681,8 +1681,7 @@ static void free_params(struct dm_ioctl *param, size_t 
param_size, int param_fla
 }
 
 static int copy_params(struct dm_ioctl __user *user, struct dm_ioctl 
*param_kernel,
-                      int ioctl_flags,
-                      struct dm_ioctl **param, int *param_flags)
+                      int ioctl_flags, struct dm_ioctl **param, int 
*param_flags)
 {
        struct dm_ioctl *dmi;
        int secure_data;
@@ -1730,18 +1729,13 @@ static int copy_params(struct dm_ioctl __user *user, 
struct dm_ioctl *param_kern
                return -ENOMEM;
        }
 
-       if (copy_from_user(dmi, user, param_kernel->data_size))
-               goto bad;
+       /* Copy from param_kernel (which was already copied from user) */
+       memcpy(dmi, param_kernel, minimum_data_size);
 
-data_copied:
-       /*
-        * Abort if something changed the ioctl data while it was being copied.
-        */
-       if (dmi->data_size != param_kernel->data_size) {
-               DMERR("rejecting ioctl: data size modified while processing 
parameters");
+       if (copy_from_user(&dmi->data, (char __user *)user + minimum_data_size,
+                          param_kernel->data_size - minimum_data_size))
                goto bad;
-       }
-
+data_copied:
        /* Wipe the user buffer so we do not return it to userspace */
        if (secure_data && clear_user(user, param_kernel->data_size))
                goto bad;
diff --git a/drivers/md/dm.c b/drivers/md/dm.c
index 00c86ff3c721..3955df0ba1ce 100644
--- a/drivers/md/dm.c
+++ b/drivers/md/dm.c
@@ -2589,7 +2589,6 @@ static void __dm_destroy(struct mapped_device *md, bool 
wait)
        might_sleep();
 
        spin_lock(&_minor_lock);
-       map = dm_get_live_table(md, &srcu_idx);
        idr_replace(&_minor_idr, MINOR_ALLOCED, MINOR(disk_devt(dm_disk(md))));
        set_bit(DMF_FREEING, &md->flags);
        spin_unlock(&_minor_lock);
diff --git a/drivers/media/i2c/tvp5150.c b/drivers/media/i2c/tvp5150.c
index 193e7d6c29c8..44227a9631a9 100644
--- a/drivers/media/i2c/tvp5150.c
+++ b/drivers/media/i2c/tvp5150.c
@@ -864,9 +864,6 @@ static int tvp5150_s_crop(struct v4l2_subdev *sd, const 
struct v4l2_crop *a)
 
        /* tvp5150 has some special limits */
        rect.left = clamp(rect.left, 0, TVP5150_MAX_CROP_LEFT);
-       rect.width = clamp_t(unsigned int, rect.width,
-                            TVP5150_H_MAX - TVP5150_MAX_CROP_LEFT - rect.left,
-                            TVP5150_H_MAX - rect.left);
        rect.top = clamp(rect.top, 0, TVP5150_MAX_CROP_TOP);
 
        /* Calculate height based on current standard */
@@ -880,9 +877,16 @@ static int tvp5150_s_crop(struct v4l2_subdev *sd, const 
struct v4l2_crop *a)
        else
                hmax = TVP5150_V_MAX_OTHERS;
 
-       rect.height = clamp_t(unsigned int, rect.height,
+       /*
+        * alignments:
+        *  - width = 2 due to UYVY colorspace
+        *  - height, image = no special alignment
+        */
+       v4l_bound_align_image(&rect.width,
+                             TVP5150_H_MAX - TVP5150_MAX_CROP_LEFT - rect.left,
+                             TVP5150_H_MAX - rect.left, 1, &rect.height,
                              hmax - TVP5150_MAX_CROP_TOP - rect.top,
-                             hmax - rect.top);
+                             hmax - rect.top, 0, 0);
 
        tvp5150_write(sd, TVP5150_VERT_BLANKING_START, rect.top);
        tvp5150_write(sd, TVP5150_VERT_BLANKING_STOP,
diff --git a/drivers/media/pci/cx23885/altera-ci.c 
b/drivers/media/pci/cx23885/altera-ci.c
index 2bbbf545b042..a7681719de76 100644
--- a/drivers/media/pci/cx23885/altera-ci.c
+++ b/drivers/media/pci/cx23885/altera-ci.c
@@ -662,6 +662,10 @@ static int altera_hw_filt_init(struct altera_ci_config 
*config, int hw_filt_nr)
                }
 
                temp_int = append_internal(inter);
+               if (!temp_int) {
+                       ret = -ENOMEM;
+                       goto err;
+               }
                inter->filts_used = 1;
                inter->dev = config->dev;
                inter->fpga_rw = config->fpga_rw;
@@ -696,6 +700,7 @@ err:
                     __func__, ret);
 
        kfree(pid_filt);
+       kfree(inter);
 
        return ret;
 }
@@ -731,6 +736,10 @@ int altera_ci_init(struct altera_ci_config *config, int 
ci_nr)
                }
 
                temp_int = append_internal(inter);
+               if (!temp_int) {
+                       ret = -ENOMEM;
+                       goto err;
+               }
                inter->cis_used = 1;
                inter->dev = config->dev;
                inter->fpga_rw = config->fpga_rw;
@@ -799,6 +808,7 @@ err:
        ci_dbg_print("%s: Cannot initialize CI: Error %d.\n", __func__, ret);
 
        kfree(state);
+       kfree(inter);
 
        return ret;
 }
diff --git a/drivers/media/usb/em28xx/em28xx-cards.c 
b/drivers/media/usb/em28xx/em28xx-cards.c
index 71fa51e7984e..26765ce30f38 100644
--- a/drivers/media/usb/em28xx/em28xx-cards.c
+++ b/drivers/media/usb/em28xx/em28xx-cards.c
@@ -2001,13 +2001,13 @@ struct em28xx_board em28xx_boards[] = {
                .input           = { {
                        .type     = EM28XX_VMUX_COMPOSITE1,
                        .vmux     = TVP5150_COMPOSITE1,
-                       .amux     = EM28XX_AUDIO_SRC_LINE,
+                       .amux     = EM28XX_AMUX_LINE_IN,
                        .gpio     = terratec_av350_unmute_gpio,
 
                }, {
                        .type     = EM28XX_VMUX_SVIDEO,
                        .vmux     = TVP5150_SVIDEO,
-                       .amux     = EM28XX_AUDIO_SRC_LINE,
+                       .amux     = EM28XX_AMUX_LINE_IN,
                        .gpio     = terratec_av350_unmute_gpio,
                } },
        },
diff --git a/drivers/media/usb/em28xx/em28xx-video.c 
b/drivers/media/usb/em28xx/em28xx-video.c
index e0f4be8c5a19..5818872ba47d 100644
--- a/drivers/media/usb/em28xx/em28xx-video.c
+++ b/drivers/media/usb/em28xx/em28xx-video.c
@@ -1141,6 +1141,8 @@ static void em28xx_ctrl_notify(struct v4l2_ctrl *ctrl, 
void *priv)
 {
        struct em28xx *dev = priv;
 
+       dev->v4l2->field_count = 0;
+
        /*
         * In the case of non-AC97 volume controls, we still need
         * to do some setups at em28xx, in order to mute/unmute
@@ -1280,9 +1282,9 @@ static int vidioc_try_fmt_vid_cap(struct file *file, void 
*priv,
 
        fmt = format_by_fourcc(f->fmt.pix.pixelformat);
        if (!fmt) {
-               em28xx_videodbg("Fourcc format (%08x) invalid.\n",
-                               f->fmt.pix.pixelformat);
-               return -EINVAL;
+               fmt = &format[0];
+               em28xx_videodbg("Fourcc format (%08x) invalid. Using default 
(%08x).\n",
+                               f->fmt.pix.pixelformat, fmt->fourcc);
        }
 
        if (dev->board.is_em2800) {
diff --git a/drivers/misc/genwqe/card_base.h b/drivers/misc/genwqe/card_base.h
index c64d7cad1085..5c0ee3a9959e 100644
--- a/drivers/misc/genwqe/card_base.h
+++ b/drivers/misc/genwqe/card_base.h
@@ -405,7 +405,7 @@ struct genwqe_file {
        struct file *filp;
 
        struct fasync_struct *async_queue;
-       struct task_struct *owner;
+       struct pid *opener;
        struct list_head list;          /* entry in list of open files */
 
        spinlock_t map_lock;            /* lock for dma_mappings */
diff --git a/drivers/misc/genwqe/card_dev.c b/drivers/misc/genwqe/card_dev.c
index 5918586f2f76..bba6abbea80f 100644
--- a/drivers/misc/genwqe/card_dev.c
+++ b/drivers/misc/genwqe/card_dev.c
@@ -52,7 +52,7 @@ static void genwqe_add_file(struct genwqe_dev *cd, struct 
genwqe_file *cfile)
 {
        unsigned long flags;
 
-       cfile->owner = current;
+       cfile->opener = get_pid(task_tgid(current));
        spin_lock_irqsave(&cd->file_lock, flags);
        list_add(&cfile->list, &cd->file_list);
        spin_unlock_irqrestore(&cd->file_lock, flags);
@@ -65,6 +65,7 @@ static int genwqe_del_file(struct genwqe_dev *cd, struct 
genwqe_file *cfile)
        spin_lock_irqsave(&cd->file_lock, flags);
        list_del(&cfile->list);
        spin_unlock_irqrestore(&cd->file_lock, flags);
+       put_pid(cfile->opener);
 
        return 0;
 }
@@ -275,7 +276,7 @@ static int genwqe_kill_fasync(struct genwqe_dev *cd, int 
sig)
        return files;
 }
 
-static int genwqe_force_sig(struct genwqe_dev *cd, int sig)
+static int genwqe_terminate(struct genwqe_dev *cd)
 {
        unsigned int files = 0;
        unsigned long flags;
@@ -283,7 +284,7 @@ static int genwqe_force_sig(struct genwqe_dev *cd, int sig)
 
        spin_lock_irqsave(&cd->file_lock, flags);
        list_for_each_entry(cfile, &cd->file_list, list) {
-               force_sig(sig, cfile->owner);
+               kill_pid(cfile->opener, SIGKILL, 1);
                files++;
        }
        spin_unlock_irqrestore(&cd->file_lock, flags);
@@ -1356,7 +1357,7 @@ static int genwqe_inform_and_stop_processes(struct 
genwqe_dev *cd)
                dev_warn(&pci_dev->dev,
                         "[%s] send SIGKILL and wait ...\n", __func__);
 
-               rc = genwqe_force_sig(cd, SIGKILL); /* force terminate */
+               rc = genwqe_terminate(cd);
                if (rc) {
                        /* Give kill_timout more seconds to end processes */
                        for (i = 0; (i < genwqe_kill_timeout) &&
diff --git a/drivers/mmc/host/sdhci-pci-o2micro.c 
b/drivers/mmc/host/sdhci-pci-o2micro.c
index e2ec108dba0e..a4b614a75ac0 100644
--- a/drivers/mmc/host/sdhci-pci-o2micro.c
+++ b/drivers/mmc/host/sdhci-pci-o2micro.c
@@ -336,6 +336,9 @@ int sdhci_pci_o2_probe(struct sdhci_pci_chip *chip)
                pci_write_config_byte(chip->pdev, O2_SD_LOCK_WP, scratch);
                break;
        case PCI_DEVICE_ID_O2_SEABIRD0:
+               if (chip->pdev->revision == 0x01)
+                       chip->quirks |= SDHCI_QUIRK_DELAY_AFTER_POWER;
+               /* fall through */
        case PCI_DEVICE_ID_O2_SEABIRD1:
                /* UnLock WP */
                ret = pci_read_config_byte(chip->pdev,
diff --git a/drivers/mtd/devices/Kconfig b/drivers/mtd/devices/Kconfig
index c49d0b127fef..0b84840cdbb0 100644
--- a/drivers/mtd/devices/Kconfig
+++ b/drivers/mtd/devices/Kconfig
@@ -200,7 +200,7 @@ comment "Disk-On-Chip Device Drivers"
 config MTD_DOCG3
        tristate "M-Systems Disk-On-Chip G3"
        select BCH
-       select BCH_CONST_PARAMS
+       select BCH_CONST_PARAMS if !MTD_NAND_BCH
        select BITREVERSE
        ---help---
          This provides an MTD device driver for the M-Systems DiskOnChip
diff --git a/drivers/net/ethernet/qlogic/qla3xxx.c 
b/drivers/net/ethernet/qlogic/qla3xxx.c
index c2f09af5c25b..a51506b6901c 100644
--- a/drivers/net/ethernet/qlogic/qla3xxx.c
+++ b/drivers/net/ethernet/qlogic/qla3xxx.c
@@ -382,8 +382,6 @@ static void fm93c56a_select(struct ql3_adapter *qdev)
 
        qdev->eeprom_cmd_data = AUBURN_EEPROM_CS_1;
        ql_write_nvram_reg(qdev, spir, ISP_NVRAM_MASK | qdev->eeprom_cmd_data);
-       ql_write_nvram_reg(qdev, spir,
-                          ((ISP_NVRAM_MASK << 16) | qdev->eeprom_cmd_data));
 }
 
 /*
diff --git a/drivers/net/tun.c b/drivers/net/tun.c
index 3067f840210e..7448ebe2c383 100644
--- a/drivers/net/tun.c
+++ b/drivers/net/tun.c
@@ -1423,6 +1423,8 @@ static void tun_setup(struct net_device *dev)
  */
 static int tun_validate(struct nlattr *tb[], struct nlattr *data[])
 {
+       if (!data)
+               return 0;
        return -EINVAL;
 }
 
diff --git a/drivers/net/wireless/ath/ath10k/wmi.c 
b/drivers/net/wireless/ath/ath10k/wmi.c
index 8a091485960d..6386c5d6252c 100644
--- a/drivers/net/wireless/ath/ath10k/wmi.c
+++ b/drivers/net/wireless/ath/ath10k/wmi.c
@@ -751,6 +751,12 @@ int ath10k_wmi_cmd_send(struct ath10k *ar, struct sk_buff 
*skb, u32 cmd_id)
        if (ret)
                dev_kfree_skb_any(skb);
 
+       if (ret == -EAGAIN) {
+               ath10k_warn(ar, "wmi command %d timeout, restarting hardware\n",
+                           cmd_id);
+               queue_work(ar->workqueue, &ar->restart_work);
+       }
+
        return ret;
 }
 
diff --git a/drivers/pcmcia/ricoh.h b/drivers/pcmcia/ricoh.h
index 01098c841f87..8ac7b138c094 100644
--- a/drivers/pcmcia/ricoh.h
+++ b/drivers/pcmcia/ricoh.h
@@ -119,6 +119,10 @@
 #define  RL5C4XX_MISC_CONTROL           0x2F /* 8 bit */
 #define  RL5C4XX_ZV_ENABLE              0x08
 
+/* Misc Control 3 Register */
+#define RL5C4XX_MISC3                  0x00A2 /* 16 bit */
+#define  RL5C47X_MISC3_CB_CLKRUN_DIS   BIT(1)
+
 #ifdef __YENTA_H
 
 #define rl_misc(socket)                ((socket)->private[0])
@@ -156,6 +160,35 @@ static void ricoh_set_zv(struct yenta_socket *socket)
         }
 }
 
+static void ricoh_set_clkrun(struct yenta_socket *socket, bool quiet)
+{
+       u16 misc3;
+
+       /*
+        * RL5C475II likely has this setting, too, however no datasheet
+        * is publicly available for this chip
+        */
+       if (socket->dev->device != PCI_DEVICE_ID_RICOH_RL5C476 &&
+           socket->dev->device != PCI_DEVICE_ID_RICOH_RL5C478)
+               return;
+
+       if (socket->dev->revision < 0x80)
+               return;
+
+       misc3 = config_readw(socket, RL5C4XX_MISC3);
+       if (misc3 & RL5C47X_MISC3_CB_CLKRUN_DIS) {
+               if (!quiet)
+                       dev_dbg(&socket->dev->dev,
+                               "CLKRUN feature already disabled\n");
+       } else if (disable_clkrun) {
+               if (!quiet)
+                       dev_info(&socket->dev->dev,
+                                "Disabling CLKRUN feature\n");
+               misc3 |= RL5C47X_MISC3_CB_CLKRUN_DIS;
+               config_writew(socket, RL5C4XX_MISC3, misc3);
+       }
+}
+
 static void ricoh_save_state(struct yenta_socket *socket)
 {
        rl_misc(socket) = config_readw(socket, RL5C4XX_MISC);
@@ -172,6 +205,7 @@ static void ricoh_restore_state(struct yenta_socket *socket)
        config_writew(socket, RL5C4XX_16BIT_IO_0, rl_io(socket));
        config_writew(socket, RL5C4XX_16BIT_MEM_0, rl_mem(socket));
        config_writew(socket, RL5C4XX_CONFIG, rl_config(socket));
+       ricoh_set_clkrun(socket, true);
 }
 
 
@@ -197,6 +231,7 @@ static int ricoh_override(struct yenta_socket *socket)
        config_writew(socket, RL5C4XX_CONFIG, config);
 
        ricoh_set_zv(socket);
+       ricoh_set_clkrun(socket, false);
 
        return 0;
 }
diff --git a/drivers/pcmcia/yenta_socket.c b/drivers/pcmcia/yenta_socket.c
index 8a23ccb41213..a359410bbbc8 100644
--- a/drivers/pcmcia/yenta_socket.c
+++ b/drivers/pcmcia/yenta_socket.c
@@ -26,7 +26,8 @@
 
 static bool disable_clkrun;
 module_param(disable_clkrun, bool, 0444);
-MODULE_PARM_DESC(disable_clkrun, "If PC card doesn't function properly, please 
try this option");
+MODULE_PARM_DESC(disable_clkrun,
+                "If PC card doesn't function properly, please try this option 
(TI and Ricoh bridges only)");
 
 static bool isa_probe = 1;
 module_param(isa_probe, bool, 0444);
diff --git a/drivers/scsi/esp_scsi.c b/drivers/scsi/esp_scsi.c
index 55548dc5cec3..cc674370b4b0 100644
--- a/drivers/scsi/esp_scsi.c
+++ b/drivers/scsi/esp_scsi.c
@@ -1316,6 +1316,7 @@ static int esp_data_bytes_sent(struct esp *esp, struct 
esp_cmd_entry *ent,
 
        bytes_sent = esp->data_dma_len;
        bytes_sent -= ecount;
+       bytes_sent -= esp->send_cmd_residual;
 
        if (!(ent->flags & ESP_CMD_FLAG_WRITE))
                bytes_sent -= fifo_cnt;
diff --git a/drivers/scsi/esp_scsi.h b/drivers/scsi/esp_scsi.h
index cd68805e8d78..20b229b53639 100644
--- a/drivers/scsi/esp_scsi.h
+++ b/drivers/scsi/esp_scsi.h
@@ -524,6 +524,8 @@ struct esp {
 
        void                    *dma;
        int                     dmarev;
+
+       u32                     send_cmd_residual;
 };
 
 /* A front-end driver for the ESP chip should do the following in
diff --git a/drivers/scsi/lpfc/lpfc_sli.c b/drivers/scsi/lpfc/lpfc_sli.c
index cdade5828a5d..fcae6f66a5a6 100644
--- a/drivers/scsi/lpfc/lpfc_sli.c
+++ b/drivers/scsi/lpfc/lpfc_sli.c
@@ -3441,6 +3441,7 @@ lpfc_sli_handle_slow_ring_event_s4(struct lpfc_hba *phba,
        struct hbq_dmabuf *dmabuf;
        struct lpfc_cq_event *cq_event;
        unsigned long iflag;
+       int count = 0;
 
        spin_lock_irqsave(&phba->hbalock, iflag);
        phba->hba_flag &= ~HBA_SP_QUEUE_EVT;
@@ -3462,16 +3463,22 @@ lpfc_sli_handle_slow_ring_event_s4(struct lpfc_hba 
*phba,
                        if (irspiocbq)
                                lpfc_sli_sp_handle_rspiocb(phba, pring,
                                                           irspiocbq);
+                       count++;
                        break;
                case CQE_CODE_RECEIVE:
                case CQE_CODE_RECEIVE_V1:
                        dmabuf = container_of(cq_event, struct hbq_dmabuf,
                                              cq_event);
                        lpfc_sli4_handle_received_buffer(phba, dmabuf);
+                       count++;
                        break;
                default:
                        break;
                }
+
+               /* Limit the number of events to 64 to avoid soft lockups */
+               if (count == 64)
+                       break;
        }
 }
 
diff --git a/drivers/scsi/mac_esp.c b/drivers/scsi/mac_esp.c
index 79fb6a4f661f..ec9d1a7f3dad 100644
--- a/drivers/scsi/mac_esp.c
+++ b/drivers/scsi/mac_esp.c
@@ -426,6 +426,8 @@ static void mac_esp_send_pio_cmd(struct esp *esp, u32 addr, 
u32 esp_count,
                        scsi_esp_cmd(esp, ESP_CMD_TI);
                }
        }
+
+       esp->send_cmd_residual = esp_count;
 }
 
 static int mac_esp_irq_pending(struct esp *esp)
diff --git a/drivers/tc/tc.c b/drivers/tc/tc.c
index 946562389ca8..748a6122b3b3 100644
--- a/drivers/tc/tc.c
+++ b/drivers/tc/tc.c
@@ -2,7 +2,7 @@
  *     TURBOchannel bus services.
  *
  *     Copyright (c) Harald Koerfgen, 1998
- *     Copyright (c) 2001, 2003, 2005, 2006  Maciej W. Rozycki
+ *     Copyright (c) 2001, 2003, 2005, 2006, 2018  Maciej W. Rozycki
  *     Copyright (c) 2005  James Simmons
  *
  *     This file is subject to the terms and conditions of the GNU
@@ -10,6 +10,7 @@
  *     directory of this archive for more details.
  */
 #include <linux/compiler.h>
+#include <linux/dma-mapping.h>
 #include <linux/errno.h>
 #include <linux/init.h>
 #include <linux/ioport.h>
@@ -93,6 +94,11 @@ static void __init tc_bus_add_devices(struct tc_bus *tbus)
                tdev->dev.bus = &tc_bus_type;
                tdev->slot = slot;
 
+               /* TURBOchannel has 34-bit DMA addressing (16GiB space). */
+               tdev->dma_mask = DMA_BIT_MASK(34);
+               tdev->dev.dma_mask = &tdev->dma_mask;
+               tdev->dev.coherent_dma_mask = DMA_BIT_MASK(34);
+
                for (i = 0; i < 8; i++) {
                        tdev->firmware[i] =
                                readb(module + offset + TC_FIRM_VER + 4 * i);
diff --git a/drivers/tty/serial/kgdboc.c b/drivers/tty/serial/kgdboc.c
index a260cde743e2..2db68dfe497d 100644
--- a/drivers/tty/serial/kgdboc.c
+++ b/drivers/tty/serial/kgdboc.c
@@ -133,6 +133,11 @@ static void kgdboc_unregister_kbd(void)
 
 static int kgdboc_option_setup(char *opt)
 {
+       if (!opt) {
+               pr_err("kgdboc: config string not provided\n");
+               return -EINVAL;
+       }
+
        if (strlen(opt) >= MAX_CONFIG_LEN) {
                printk(KERN_ERR "kgdboc: config string too long\n");
                return -ENOSPC;
diff --git a/drivers/tty/tty_io.c b/drivers/tty/tty_io.c
index dacf8d5a0268..73c813939487 100644
--- a/drivers/tty/tty_io.c
+++ b/drivers/tty/tty_io.c
@@ -357,7 +357,7 @@ struct tty_driver *tty_find_polling_driver(char *name, int 
*line)
        mutex_lock(&tty_mutex);
        /* Search through the tty devices to look for a match */
        list_for_each_entry(p, &tty_drivers, tty_drivers) {
-               if (strncmp(name, p->name, len) != 0)
+               if (!len || strncmp(name, p->name, len) != 0)
                        continue;
                stp = str;
                if (*stp == ',')
diff --git a/drivers/tty/tty_ioctl.c b/drivers/tty/tty_ioctl.c
index e43b6e559b3d..6d255bffb536 100644
--- a/drivers/tty/tty_ioctl.c
+++ b/drivers/tty/tty_ioctl.c
@@ -327,7 +327,7 @@ speed_t tty_termios_baud_rate(struct ktermios *termios)
                else
                        cbaud += 15;
        }
-       return baud_table[cbaud];
+       return cbaud >= n_baud_table ? 0 : baud_table[cbaud];
 }
 EXPORT_SYMBOL(tty_termios_baud_rate);
 
@@ -363,7 +363,7 @@ speed_t tty_termios_input_baud_rate(struct ktermios 
*termios)
                else
                        cbaud += 15;
        }
-       return baud_table[cbaud];
+       return cbaud >= n_baud_table ? 0 : baud_table[cbaud];
 #else
        return tty_termios_baud_rate(termios);
 #endif
diff --git a/drivers/uio/uio.c b/drivers/uio/uio.c
index 86055f663a01..db292c085399 100644
--- a/drivers/uio/uio.c
+++ b/drivers/uio/uio.c
@@ -249,6 +249,8 @@ static struct class uio_class = {
        .dev_groups = uio_groups,
 };
 
+bool uio_class_registered;
+
 /*
  * device functions
  */
@@ -771,6 +773,9 @@ static int init_uio_class(void)
                printk(KERN_ERR "class_register failed for uio\n");
                goto err_class_register;
        }
+
+       uio_class_registered = true;
+
        return 0;
 
 err_class_register:
@@ -781,6 +786,7 @@ exit:
 
 static void release_uio_class(void)
 {
+       uio_class_registered = false;
        class_unregister(&uio_class);
        uio_major_cleanup();
 }
@@ -800,6 +806,9 @@ int __uio_register_device(struct module *owner,
        struct uio_device *idev;
        int ret = 0;
 
+       if (!uio_class_registered)
+               return -EPROBE_DEFER;
+
        if (!parent || !info || !info->name || !info->version)
                return -EINVAL;
 
diff --git a/drivers/usb/chipidea/otg.h b/drivers/usb/chipidea/otg.h
index 9ecb598e48f0..a5557c70034a 100644
--- a/drivers/usb/chipidea/otg.h
+++ b/drivers/usb/chipidea/otg.h
@@ -20,7 +20,8 @@ void ci_handle_vbus_change(struct ci_hdrc *ci);
 static inline void ci_otg_queue_work(struct ci_hdrc *ci)
 {
        disable_irq_nosync(ci->irq);
-       queue_work(ci->wq, &ci->work);
+       if (queue_work(ci->wq, &ci->work) == false)
+               enable_irq(ci->irq);
 }
 
 #endif /* __DRIVERS_USB_CHIPIDEA_OTG_H */
diff --git a/drivers/video/fbdev/aty/mach64_accel.c 
b/drivers/video/fbdev/aty/mach64_accel.c
index 182bd680141f..e9dfe0e40b8b 100644
--- a/drivers/video/fbdev/aty/mach64_accel.c
+++ b/drivers/video/fbdev/aty/mach64_accel.c
@@ -126,7 +126,7 @@ void aty_init_engine(struct atyfb_par *par, struct fb_info 
*info)
 
        /* set host attributes */
        wait_for_fifo(13, par);
-       aty_st_le32(HOST_CNTL, 0, par);
+       aty_st_le32(HOST_CNTL, HOST_BYTE_ALIGN, par);
 
        /* set pattern attributes */
        aty_st_le32(PAT_REG0, 0, par);
@@ -232,7 +232,8 @@ void atyfb_copyarea(struct fb_info *info, const struct 
fb_copyarea *area)
                rotation = rotation24bpp(dx, direction);
        }
 
-       wait_for_fifo(4, par);
+       wait_for_fifo(5, par);
+       aty_st_le32(DP_PIX_WIDTH, par->crtc.dp_pix_width, par);
        aty_st_le32(DP_SRC, FRGD_SRC_BLIT, par);
        aty_st_le32(SRC_Y_X, (sx << 16) | sy, par);
        aty_st_le32(SRC_HEIGHT1_WIDTH1, (width << 16) | area->height, par);
@@ -268,7 +269,8 @@ void atyfb_fillrect(struct fb_info *info, const struct 
fb_fillrect *rect)
                rotation = rotation24bpp(dx, DST_X_LEFT_TO_RIGHT);
        }
 
-       wait_for_fifo(3, par);
+       wait_for_fifo(4, par);
+       aty_st_le32(DP_PIX_WIDTH, par->crtc.dp_pix_width, par);
        aty_st_le32(DP_FRGD_CLR, color, par);
        aty_st_le32(DP_SRC,
                    BKGD_SRC_BKGD_CLR | FRGD_SRC_FRGD_CLR | MONO_SRC_ONE,
@@ -283,7 +285,7 @@ void atyfb_imageblit(struct fb_info *info, const struct 
fb_image *image)
 {
        struct atyfb_par *par = (struct atyfb_par *) info->par;
        u32 src_bytes, dx = image->dx, dy = image->dy, width = image->width;
-       u32 pix_width_save, pix_width, host_cntl, rotation = 0, src, mix;
+       u32 pix_width, rotation = 0, src, mix;
 
        if (par->asleep)
                return;
@@ -295,8 +297,7 @@ void atyfb_imageblit(struct fb_info *info, const struct 
fb_image *image)
                return;
        }
 
-       pix_width = pix_width_save = aty_ld_le32(DP_PIX_WIDTH, par);
-       host_cntl = aty_ld_le32(HOST_CNTL, par) | HOST_BYTE_ALIGN;
+       pix_width = par->crtc.dp_pix_width;
 
        switch (image->depth) {
        case 1:
@@ -344,7 +345,7 @@ void atyfb_imageblit(struct fb_info *info, const struct 
fb_image *image)
                 * since Rage 3D IIc we have DP_HOST_TRIPLE_EN bit
                 * this hwaccelerated triple has an issue with not aligned data
                 */
-               if (M64_HAS(HW_TRIPLE) && image->width % 8 == 0)
+               if (image->depth == 1 && M64_HAS(HW_TRIPLE) && image->width % 8 
== 0)
                        pix_width |= DP_HOST_TRIPLE_EN;
        }
 
@@ -369,19 +370,18 @@ void atyfb_imageblit(struct fb_info *info, const struct 
fb_image *image)
                mix = FRGD_MIX_D_XOR_S | BKGD_MIX_D;
        }
 
-       wait_for_fifo(6, par);
-       aty_st_le32(DP_WRITE_MASK, 0xFFFFFFFF, par);
+       wait_for_fifo(5, par);
        aty_st_le32(DP_PIX_WIDTH, pix_width, par);
        aty_st_le32(DP_MIX, mix, par);
        aty_st_le32(DP_SRC, src, par);
-       aty_st_le32(HOST_CNTL, host_cntl, par);
+       aty_st_le32(HOST_CNTL, HOST_BYTE_ALIGN, par);
        aty_st_le32(DST_CNTL, DST_Y_TOP_TO_BOTTOM | DST_X_LEFT_TO_RIGHT | 
rotation, par);
 
        draw_rect(dx, dy, width, image->height, par);
        src_bytes = (((image->width * image->depth) + 7) / 8) * image->height;
 
        /* manual triple each pixel */
-       if (info->var.bits_per_pixel == 24 && !(pix_width & DP_HOST_TRIPLE_EN)) 
{
+       if (image->depth == 1 && info->var.bits_per_pixel == 24 && !(pix_width 
& DP_HOST_TRIPLE_EN)) {
                int inbit, outbit, mult24, byte_id_in_dword, width;
                u8 *pbitmapin = (u8*)image->data, *pbitmapout;
                u32 hostdword;
@@ -414,7 +414,7 @@ void atyfb_imageblit(struct fb_info *info, const struct 
fb_image *image)
                                }
                        }
                        wait_for_fifo(1, par);
-                       aty_st_le32(HOST_DATA0, hostdword, par);
+                       aty_st_le32(HOST_DATA0, le32_to_cpu(hostdword), par);
                }
        } else {
                u32 *pbitmap, dwords = (src_bytes + 3) / 4;
@@ -423,8 +423,4 @@ void atyfb_imageblit(struct fb_info *info, const struct 
fb_image *image)
                        aty_st_le32(HOST_DATA0, get_unaligned_le32(pbitmap), 
par);
                }
        }
-
-       /* restore pix_width */
-       wait_for_fifo(1, par);
-       aty_st_le32(DP_PIX_WIDTH, pix_width_save, par);
 }
diff --git a/drivers/w1/masters/omap_hdq.c b/drivers/w1/masters/omap_hdq.c
index 9900e8ec7393..8612816dfb32 100644
--- a/drivers/w1/masters/omap_hdq.c
+++ b/drivers/w1/masters/omap_hdq.c
@@ -622,6 +622,8 @@ static int omap_hdq_remove(struct platform_device *pdev)
        /* remove module dependency */
        pm_runtime_disable(&pdev->dev);
 
+       w1_remove_master_device(&omap_w1_master);
+
        return 0;
 }
 
diff --git a/fs/cifs/cifs_debug.c b/fs/cifs/cifs_debug.c
index 1b3a00a1eb8a..12ff7b8234da 100644
--- a/fs/cifs/cifs_debug.c
+++ b/fs/cifs/cifs_debug.c
@@ -271,6 +271,9 @@ static ssize_t cifs_stats_proc_write(struct file *file,
                atomic_set(&totBufAllocCount, 0);
                atomic_set(&totSmBufAllocCount, 0);
 #endif /* CONFIG_CIFS_STATS2 */
+               atomic_set(&tcpSesReconnectCount, 0);
+               atomic_set(&tconInfoReconnectCount, 0);
+
                spin_lock(&GlobalMid_Lock);
                GlobalMaxActiveXid = 0;
                GlobalCurrentXid = 0;
diff --git a/fs/cifs/cifs_spnego.c b/fs/cifs/cifs_spnego.c
index 79450fa66d16..8cb5ea391c07 100644
--- a/fs/cifs/cifs_spnego.c
+++ b/fs/cifs/cifs_spnego.c
@@ -147,8 +147,10 @@ cifs_get_spnego_key(struct cifs_ses *sesInfo)
                sprintf(dp, ";sec=krb5");
        else if (server->sec_mskerberos)
                sprintf(dp, ";sec=mskrb5");
-       else
-               goto out;
+       else {
+               cifs_dbg(VFS, "unknown or missing server auth type, use 
krb5\n");
+               sprintf(dp, ";sec=krb5");
+       }
 
        dp = description + strlen(description);
        sprintf(dp, ";uid=0x%x",
diff --git a/fs/cifs/inode.c b/fs/cifs/inode.c
index ff226cc6d391..e603a3a28bae 100644
--- a/fs/cifs/inode.c
+++ b/fs/cifs/inode.c
@@ -741,7 +741,15 @@ cifs_get_inode_info(struct inode **inode, const char 
*full_path,
        } else if (rc == -EREMOTE) {
                cifs_create_dfs_fattr(&fattr, sb);
                rc = 0;
-       } else if (rc == -EACCES && backup_cred(cifs_sb)) {
+       } else if ((rc == -EACCES) && backup_cred(cifs_sb) &&
+                  (strcmp(server->vals->version_string, SMB1_VERSION_STRING)
+                     == 0)) {
+                       /*
+                        * For SMB2 and later the backup intent flag is already
+                        * sent if needed on open and there is no path based
+                        * FindFirst operation to use to retry with
+                        */
+
                        srchinf = kzalloc(sizeof(struct cifs_search_info),
                                                GFP_KERNEL);
                        if (srchinf == NULL) {
diff --git a/fs/configfs/symlink.c b/fs/configfs/symlink.c
index 52fc4e25a7cb..49bb542e1085 100644
--- a/fs/configfs/symlink.c
+++ b/fs/configfs/symlink.c
@@ -64,7 +64,7 @@ static void fill_item_path(struct config_item * item, char * 
buffer, int length)
 
                /* back up enough to print this bus id with '/' */
                length -= cur;
-               strncpy(buffer + length,config_item_name(p),cur);
+               memcpy(buffer + length, config_item_name(p), cur);
                *(buffer + --length) = '/';
        }
 }
diff --git a/fs/cramfs/inode.c b/fs/cramfs/inode.c
index 355c522f3585..a6c9c2d66af1 100644
--- a/fs/cramfs/inode.c
+++ b/fs/cramfs/inode.c
@@ -185,7 +185,8 @@ static void *cramfs_read(struct super_block *sb, unsigned 
int offset, unsigned i
                        continue;
                blk_offset = (blocknr - buffer_blocknr[i]) << PAGE_CACHE_SHIFT;
                blk_offset += offset;
-               if (blk_offset + len > BUFFER_SIZE)
+               if (blk_offset > BUFFER_SIZE ||
+                   blk_offset + len > BUFFER_SIZE)
                        continue;
                return read_buffers[i] + blk_offset;
        }
diff --git a/fs/ext4/inline.c b/fs/ext4/inline.c
index fe19a2612b44..a555039ba7f3 100644
--- a/fs/ext4/inline.c
+++ b/fs/ext4/inline.c
@@ -850,7 +850,7 @@ int ext4_da_write_inline_data_begin(struct address_space 
*mapping,
        handle_t *handle;
        struct page *page;
        struct ext4_iloc iloc;
-       int retries;
+       int retries = 0;
 
        ret = ext4_get_inode_loc(inode, &iloc);
        if (ret)
diff --git a/fs/ext4/move_extent.c b/fs/ext4/move_extent.c
index 4d1049517e4a..ebe809bac808 100644
--- a/fs/ext4/move_extent.c
+++ b/fs/ext4/move_extent.c
@@ -533,9 +533,13 @@ mext_check_arguments(struct inode *orig_inode,
                        orig_inode->i_ino, donor_inode->i_ino);
                return -EINVAL;
        }
-       if (orig_eof < orig_start + *len - 1)
+       if (orig_eof <= orig_start)
+               *len = 0;
+       else if (orig_eof < orig_start + *len - 1)
                *len = orig_eof - orig_start;
-       if (donor_eof < donor_start + *len - 1)
+       if (donor_eof <= donor_start)
+               *len = 0;
+       else if (donor_eof < donor_start + *len - 1)
                *len = donor_eof - donor_start;
        if (!*len) {
                ext4_debug("ext4 move extent: len should not be 0 "
diff --git a/fs/ext4/namei.c b/fs/ext4/namei.c
index 3217ca0e8dd4..08980dd9b387 100644
--- a/fs/ext4/namei.c
+++ b/fs/ext4/namei.c
@@ -122,6 +122,7 @@ static struct buffer_head *__ext4_read_dirblock(struct 
inode *inode,
        if (!is_dx_block && type == INDEX) {
                ext4_error_inode(inode, __func__, line, block,
                       "directory leaf block found instead of index block");
+               brelse(bh);
                return ERR_PTR(-EIO);
        }
        if (!ext4_has_metadata_csum(inode->i_sb) ||
@@ -2604,7 +2605,9 @@ int ext4_orphan_add(handle_t *handle, struct inode *inode)
                        list_del_init(&EXT4_I(inode)->i_orphan);
                        mutex_unlock(&sbi->s_orphan_lock);
                }
-       }
+       } else
+               brelse(iloc.bh);
+
        jbd_debug(4, "superblock will point to %lu\n", inode->i_ino);
        jbd_debug(4, "orphan inode %lu will point to %d\n",
                        inode->i_ino, NEXT_ORPHAN(inode));
diff --git a/fs/ext4/resize.c b/fs/ext4/resize.c
index 1a46ed4b6653..089fe8469bbc 100644
--- a/fs/ext4/resize.c
+++ b/fs/ext4/resize.c
@@ -429,16 +429,18 @@ static int set_flexbg_block_bitmap(struct super_block 
*sb, handle_t *handle,
 
                BUFFER_TRACE(bh, "get_write_access");
                err = ext4_journal_get_write_access(handle, bh);
-               if (err)
+               if (err) {
+                       brelse(bh);
                        return err;
+               }
                ext4_debug("mark block bitmap %#04llx (+%llu/%u)\n", block,
                           block - start, count2);
                ext4_set_bits(bh->b_data, block - start, count2);
 
                err = ext4_handle_dirty_metadata(handle, NULL, bh);
+               brelse(bh);
                if (unlikely(err))
                        return err;
-               brelse(bh);
        }
 
        return 0;
@@ -575,7 +577,6 @@ handle_bb:
                bh = bclean(handle, sb, block);
                if (IS_ERR(bh)) {
                        err = PTR_ERR(bh);
-                       bh = NULL;
                        goto out;
                }
                overhead = ext4_group_overhead_blocks(sb, group);
@@ -587,9 +588,9 @@ handle_bb:
                ext4_mark_bitmap_end(group_data[i].blocks_count,
                                     sb->s_blocksize * 8, bh->b_data);
                err = ext4_handle_dirty_metadata(handle, NULL, bh);
+               brelse(bh);
                if (err)
                        goto out;
-               brelse(bh);
 
 handle_ib:
                if (bg_flags[i] & EXT4_BG_INODE_UNINIT)
@@ -604,18 +605,16 @@ handle_ib:
                bh = bclean(handle, sb, block);
                if (IS_ERR(bh)) {
                        err = PTR_ERR(bh);
-                       bh = NULL;
                        goto out;
                }
 
                ext4_mark_bitmap_end(EXT4_INODES_PER_GROUP(sb),
                                     sb->s_blocksize * 8, bh->b_data);
                err = ext4_handle_dirty_metadata(handle, NULL, bh);
+               brelse(bh);
                if (err)
                        goto out;
-               brelse(bh);
        }
-       bh = NULL;
 
        /* Mark group tables in block bitmap */
        for (j = 0; j < GROUP_TABLE_COUNT; j++) {
@@ -646,7 +645,6 @@ handle_ib:
        }
 
 out:
-       brelse(bh);
        err2 = ext4_journal_stop(handle);
        if (err2 && !err)
                err = err2;
@@ -846,6 +844,7 @@ static int add_new_gdb(handle_t *handle, struct inode 
*inode,
        err = ext4_handle_dirty_metadata(handle, NULL, gdb_bh);
        if (unlikely(err)) {
                ext4_std_error(sb, err);
+               iloc.bh = NULL;
                goto exit_inode;
        }
        brelse(dind);
@@ -897,6 +896,7 @@ static int add_new_gdb_meta_bg(struct super_block *sb,
                                     sizeof(struct buffer_head *),
                                     GFP_NOFS);
        if (!n_group_desc) {
+               brelse(gdb_bh);
                err = -ENOMEM;
                ext4_warning(sb, "not enough memory for %lu groups",
                             gdb_num + 1);
@@ -912,8 +912,6 @@ static int add_new_gdb_meta_bg(struct super_block *sb,
        ext4_kvfree(o_group_desc);
        BUFFER_TRACE(gdb_bh, "get_write_access");
        err = ext4_journal_get_write_access(handle, gdb_bh);
-       if (unlikely(err))
-               brelse(gdb_bh);
        return err;
 }
 
@@ -1095,8 +1093,10 @@ static void update_backups(struct super_block *sb, int 
blk_off, char *data,
                           backup_block, backup_block -
                           ext4_group_first_block_no(sb, group));
                BUFFER_TRACE(bh, "get_write_access");
-               if ((err = ext4_journal_get_write_access(handle, bh)))
+               if ((err = ext4_journal_get_write_access(handle, bh))) {
+                       brelse(bh);
                        break;
+               }
                lock_buffer(bh);
                memcpy(bh->b_data, data, size);
                if (rest)
@@ -1993,7 +1993,7 @@ retry:
 
        err = ext4_alloc_flex_bg_array(sb, n_group + 1);
        if (err)
-               return err;
+               goto out;
 
        err = ext4_mb_alloc_groupinfo(sb, n_group + 1);
        if (err)
@@ -2029,6 +2029,10 @@ retry:
                n_blocks_count_retry = 0;
                free_flex_gd(flex_gd);
                flex_gd = NULL;
+               if (resize_inode) {
+                       iput(resize_inode);
+                       resize_inode = NULL;
+               }
                goto retry;
        }
 
diff --git a/fs/ext4/super.c b/fs/ext4/super.c
index e55d36b04b50..c81c04288dcd 100644
--- a/fs/ext4/super.c
+++ b/fs/ext4/super.c
@@ -3976,6 +3976,14 @@ static int ext4_fill_super(struct super_block *sb, void 
*data, int silent)
        sbi->s_groups_count = blocks_count;
        sbi->s_blockfile_groups = min_t(ext4_group_t, sbi->s_groups_count,
                        (EXT4_MAX_BLOCK_FILE_PHYS / EXT4_BLOCKS_PER_GROUP(sb)));
+       if (((u64)sbi->s_groups_count * sbi->s_inodes_per_group) !=
+           le32_to_cpu(es->s_inodes_count)) {
+               ext4_msg(sb, KERN_ERR, "inodes count not valid: %u vs %llu",
+                        le32_to_cpu(es->s_inodes_count),
+                        ((u64)sbi->s_groups_count * sbi->s_inodes_per_group));
+               ret = -EINVAL;
+               goto failed_mount;
+       }
        db_count = (sbi->s_groups_count + EXT4_DESC_PER_BLOCK(sb) - 1) /
                   EXT4_DESC_PER_BLOCK(sb);
        if (EXT4_HAS_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_META_BG)) {
@@ -3995,14 +4003,6 @@ static int ext4_fill_super(struct super_block *sb, void 
*data, int silent)
                ret = -ENOMEM;
                goto failed_mount;
        }
-       if (((u64)sbi->s_groups_count * sbi->s_inodes_per_group) !=
-           le32_to_cpu(es->s_inodes_count)) {
-               ext4_msg(sb, KERN_ERR, "inodes count not valid: %u vs %llu",
-                        le32_to_cpu(es->s_inodes_count),
-                        ((u64)sbi->s_groups_count * sbi->s_inodes_per_group));
-               ret = -EINVAL;
-               goto failed_mount;
-       }
 
        if (ext4_proc_root)
                sbi->s_proc = proc_mkdir(sb->s_id, ext4_proc_root);
diff --git a/fs/ext4/xattr.c b/fs/ext4/xattr.c
index 9b4f642d6dea..758f8b5bb66a 100644
--- a/fs/ext4/xattr.c
+++ b/fs/ext4/xattr.c
@@ -1162,6 +1162,8 @@ ext4_xattr_set_handle(handle_t *handle, struct inode 
*inode, int name_index,
                        error = ext4_xattr_block_set(handle, inode, &i, &bs);
                } else if (error == -ENOSPC) {
                        if (EXT4_I(inode)->i_file_acl && !bs.s.base) {
+                               brelse(bs.bh);
+                               bs.bh = NULL;
                                error = ext4_xattr_block_find(inode, &i, &bs);
                                if (error)
                                        goto cleanup;
@@ -1487,6 +1489,8 @@ cleanup:
        kfree(buffer);
        if (is)
                brelse(is->iloc.bh);
+       if (bs)
+               brelse(bs->bh);
        kfree(is);
        kfree(bs);
        brelse(bh);
diff --git a/fs/fuse/dev.c b/fs/fuse/dev.c
index 0834f5640875..0560de4732fd 100644
--- a/fs/fuse/dev.c
+++ b/fs/fuse/dev.c
@@ -1675,8 +1675,10 @@ static int fuse_retrieve(struct fuse_conn *fc, struct 
inode *inode,
        req->in.args[1].size = total_len;
 
        err = fuse_request_send_notify_reply(fc, req, outarg->notify_unique);
-       if (err)
+       if (err) {
                fuse_retrieve_end(fc, req);
+               fuse_put_request(fc, req);
+       }
 
        return err;
 }
diff --git a/fs/gfs2/ops_fstype.c b/fs/gfs2/ops_fstype.c
index d3eae244076e..a4569cafa3bb 100644
--- a/fs/gfs2/ops_fstype.c
+++ b/fs/gfs2/ops_fstype.c
@@ -1358,6 +1358,9 @@ static struct dentry *gfs2_mount_meta(struct 
file_system_type *fs_type,
        struct path path;
        int error;
 
+       if (!dev_name || !*dev_name)
+               return ERR_PTR(-EINVAL);
+
        error = kern_path(dev_name, LOOKUP_FOLLOW, &path);
        if (error) {
                pr_warn("path_lookup on %s returned error %d\n",
diff --git a/fs/jbd2/checkpoint.c b/fs/jbd2/checkpoint.c
index 8c44654ce274..4fa0a006d522 100644
--- a/fs/jbd2/checkpoint.c
+++ b/fs/jbd2/checkpoint.c
@@ -254,8 +254,8 @@ restart:
                bh = jh2bh(jh);
 
                if (buffer_locked(bh)) {
-                       spin_unlock(&journal->j_list_lock);
                        get_bh(bh);
+                       spin_unlock(&journal->j_list_lock);
                        wait_on_buffer(bh);
                        /* the journal_head may have gone by now */
                        BUFFER_TRACE(bh, "brelse");
@@ -336,8 +336,8 @@ restart2:
                jh = transaction->t_checkpoint_io_list;
                bh = jh2bh(jh);
                if (buffer_locked(bh)) {
-                       spin_unlock(&journal->j_list_lock);
                        get_bh(bh);
+                       spin_unlock(&journal->j_list_lock);
                        wait_on_buffer(bh);
                        /* the journal_head may have gone by now */
                        BUFFER_TRACE(bh, "brelse");
diff --git a/fs/jffs2/super.c b/fs/jffs2/super.c
index 10902f70883d..f3194e5147fd 100644
--- a/fs/jffs2/super.c
+++ b/fs/jffs2/super.c
@@ -285,10 +285,8 @@ static int jffs2_fill_super(struct super_block *sb, void 
*data, int silent)
        sb->s_fs_info = c;
 
        ret = jffs2_parse_options(c, data);
-       if (ret) {
-               kfree(c);
+       if (ret)
                return -EINVAL;
-       }
 
        /* Initialize JFFS2 superblock locks, the further initialization will
         * be done later */
diff --git a/fs/lockd/host.c b/fs/lockd/host.c
index 969d589c848d..ec7a4ecf48a0 100644
--- a/fs/lockd/host.c
+++ b/fs/lockd/host.c
@@ -339,7 +339,7 @@ struct nlm_host *nlmsvc_lookup_host(const struct svc_rqst 
*rqstp,
        };
        struct lockd_net *ln = net_generic(net, lockd_net_id);
 
-       dprintk("lockd: %s(host='%*s', vers=%u, proto=%s)\n", __func__,
+       dprintk("lockd: %s(host='%.*s', vers=%u, proto=%s)\n", __func__,
                        (int)hostname_len, hostname, rqstp->rq_vers,
                        (rqstp->rq_prot == IPPROTO_UDP ? "udp" : "tcp"));
 
diff --git a/fs/namespace.c b/fs/namespace.c
index df76ec5f22cb..baf55fcd7394 100644
--- a/fs/namespace.c
+++ b/fs/namespace.c
@@ -1478,8 +1478,13 @@ static int do_umount(struct mount *mnt, int flags)
 
        namespace_lock();
        lock_mount_hash();
-       event++;
 
+       /* Recheck MNT_LOCKED with the locks held */
+       retval = -EINVAL;
+       if (mnt->mnt.mnt_flags & MNT_LOCKED)
+               goto out;
+
+       event++;
        if (flags & MNT_DETACH) {
                if (!list_empty(&mnt->mnt_list))
                        umount_tree(mnt, UMOUNT_PROPAGATE);
@@ -1493,6 +1498,7 @@ static int do_umount(struct mount *mnt, int flags)
                        retval = 0;
                }
        }
+out:
        unlock_mount_hash();
        namespace_unlock();
        return retval;
@@ -1571,7 +1577,7 @@ SYSCALL_DEFINE2(umount, char __user *, name, int, flags)
                goto dput_and_out;
        if (!check_mnt(mnt))
                goto dput_and_out;
-       if (mnt->mnt.mnt_flags & MNT_LOCKED)
+       if (mnt->mnt.mnt_flags & MNT_LOCKED) /* Check optimistically */
                goto dput_and_out;
        retval = -EPERM;
        if (flags & MNT_FORCE && !capable(CAP_SYS_ADMIN))
@@ -1655,8 +1661,14 @@ struct mount *copy_tree(struct mount *mnt, struct dentry 
*dentry,
                        struct mount *t = NULL;
                        if (!(flag & CL_COPY_UNBINDABLE) &&
                            IS_MNT_UNBINDABLE(s)) {
-                               s = skip_mnt_tree(s);
-                               continue;
+                               if (s->mnt.mnt_flags & MNT_LOCKED) {
+                                       /* Both unbindable and locked. */
+                                       q = ERR_PTR(-EPERM);
+                                       goto out;
+                               } else {
+                                       s = skip_mnt_tree(s);
+                                       continue;
+                               }
                        }
                        if (!(flag & CL_COPY_MNT_NS_FILE) &&
                            is_mnt_ns_file(s->mnt.mnt_root)) {
@@ -1716,7 +1728,7 @@ void drop_collected_mounts(struct vfsmount *mnt)
 {
        namespace_lock();
        lock_mount_hash();
-       umount_tree(real_mount(mnt), UMOUNT_SYNC);
+       umount_tree(real_mount(mnt), 0);
        unlock_mount_hash();
        namespace_unlock();
 }
diff --git a/fs/nfs/nfs4client.c b/fs/nfs/nfs4client.c
index eb8777eb4d2b..40bc71e7e789 100644
--- a/fs/nfs/nfs4client.c
+++ b/fs/nfs/nfs4client.c
@@ -891,10 +891,10 @@ EXPORT_SYMBOL_GPL(nfs4_set_ds_client);
 
 /*
  * Session has been established, and the client marked ready.
- * Set the mount rsize and wsize with negotiated fore channel
- * attributes which will be bound checked in nfs_server_set_fsinfo.
+ * Limit the mount rsize, wsize and dtsize using negotiated fore
+ * channel attributes.
  */
-static void nfs4_session_set_rwsize(struct nfs_server *server)
+static void nfs4_session_limit_rwsize(struct nfs_server *server)
 {
 #ifdef CONFIG_NFS_V4_1
        struct nfs4_session *sess;
@@ -907,9 +907,11 @@ static void nfs4_session_set_rwsize(struct nfs_server 
*server)
        server_resp_sz = sess->fc_attrs.max_resp_sz - nfs41_maxread_overhead;
        server_rqst_sz = sess->fc_attrs.max_rqst_sz - nfs41_maxwrite_overhead;
 
-       if (!server->rsize || server->rsize > server_resp_sz)
+       if (server->dtsize > server_resp_sz)
+               server->dtsize = server_resp_sz;
+       if (server->rsize > server_resp_sz)
                server->rsize = server_resp_sz;
-       if (!server->wsize || server->wsize > server_rqst_sz)
+       if (server->wsize > server_rqst_sz)
                server->wsize = server_rqst_sz;
 #endif /* CONFIG_NFS_V4_1 */
 }
@@ -956,12 +958,12 @@ static int nfs4_server_common_setup(struct nfs_server 
*server,
                        (unsigned long long) server->fsid.minor);
        nfs_display_fhandle(mntfh, "Pseudo-fs root FH");
 
-       nfs4_session_set_rwsize(server);
-
        error = nfs_probe_fsinfo(server, mntfh, fattr);
        if (error < 0)
                goto out;
 
+       nfs4_session_limit_rwsize(server);
+
        if (server->namelen == 0 || server->namelen > NFS4_MAXNAMLEN)
                server->namelen = NFS4_MAXNAMLEN;
 
diff --git a/fs/ocfs2/dir.c b/fs/ocfs2/dir.c
index 0717662b4aef..0165e4ff163c 100644
--- a/fs/ocfs2/dir.c
+++ b/fs/ocfs2/dir.c
@@ -1906,8 +1906,7 @@ static int ocfs2_dir_foreach_blk_el(struct inode *inode,
                                /* On error, skip the f_pos to the
                                   next block. */
                                ctx->pos = (ctx->pos | (sb->s_blocksize - 1)) + 
1;
-                               brelse(bh);
-                               continue;
+                               break;
                        }
                        if (le64_to_cpu(de->inode)) {
                                unsigned char d_type = DT_UNKNOWN;
diff --git a/include/linux/ceph/libceph.h b/include/linux/ceph/libceph.h
index 07bc359b88ac..3a24f073c30a 100644
--- a/include/linux/ceph/libceph.h
+++ b/include/linux/ceph/libceph.h
@@ -67,7 +67,13 @@ struct ceph_options {
 
 #define CEPH_MSG_MAX_FRONT_LEN (16*1024*1024)
 #define CEPH_MSG_MAX_MIDDLE_LEN        (16*1024*1024)
-#define CEPH_MSG_MAX_DATA_LEN  (16*1024*1024)
+
+/*
+ * Handle the largest possible rbd object in one message.
+ * There is no limit on the size of cephfs objects, but it has to obey
+ * rsize and wsize mount options anyway.
+ */
+#define CEPH_MSG_MAX_DATA_LEN  (32*1024*1024)
 
 #define CEPH_AUTH_NAME_DEFAULT   "guest"
 
diff --git a/include/linux/tc.h b/include/linux/tc.h
index f92511e57cdb..a60639f37963 100644
--- a/include/linux/tc.h
+++ b/include/linux/tc.h
@@ -84,6 +84,7 @@ struct tc_dev {
                                           device. */
        struct device   dev;            /* Generic device interface. */
        struct resource resource;       /* Address space of this device. */
+       u64             dma_mask;       /* DMA addressable range. */
        char            vendor[9];
        char            name[9];
        char            firmware[9];
diff --git a/kernel/bounds.c b/kernel/bounds.c
index e1d1d1952bfa..c37f68d758db 100644
--- a/kernel/bounds.c
+++ b/kernel/bounds.c
@@ -12,7 +12,7 @@
 #include <linux/log2.h>
 #include <linux/spinlock_types.h>
 
-void foo(void)
+int main(void)
 {
        /* The enum constants to put into include/generated/bounds.h */
        DEFINE(NR_PAGEFLAGS, __NR_PAGEFLAGS);
@@ -22,4 +22,6 @@ void foo(void)
 #endif
        DEFINE(SPINLOCK_SIZE, sizeof(spinlock_t));
        /* End of constants */
+
+       return 0;
 }
diff --git a/kernel/kprobes.c b/kernel/kprobes.c
index 44cce4d45b82..6f315921eeaf 100644
--- a/kernel/kprobes.c
+++ b/kernel/kprobes.c
@@ -665,9 +665,10 @@ static void unoptimize_kprobe(struct kprobe *p, bool force)
 }
 
 /* Cancel unoptimizing for reusing */
-static void reuse_unused_kprobe(struct kprobe *ap)
+static int reuse_unused_kprobe(struct kprobe *ap)
 {
        struct optimized_kprobe *op;
+       int ret;
 
        BUG_ON(!kprobe_unused(ap));
        /*
@@ -681,8 +682,12 @@ static void reuse_unused_kprobe(struct kprobe *ap)
        /* Enable the probe again */
        ap->flags &= ~KPROBE_FLAG_DISABLED;
        /* Optimize it again (remove from op->list) */
-       BUG_ON(!kprobe_optready(ap));
+       ret = kprobe_optready(ap);
+       if (ret)
+               return ret;
+
        optimize_kprobe(ap);
+       return 0;
 }
 
 /* Remove optimized instructions */
@@ -893,11 +898,16 @@ static void __disarm_kprobe(struct kprobe *p, bool reopt)
 #define kprobe_disarmed(p)                     kprobe_disabled(p)
 #define wait_for_kprobe_optimizer()            do {} while (0)
 
-/* There should be no unused kprobes can be reused without optimization */
-static void reuse_unused_kprobe(struct kprobe *ap)
+static int reuse_unused_kprobe(struct kprobe *ap)
 {
+       /*
+        * If the optimized kprobe is NOT supported, the aggr kprobe is
+        * released at the same time that the last aggregated kprobe is
+        * unregistered.
+        * Thus there should be no chance to reuse unused kprobe.
+        */
        printk(KERN_ERR "Error: There should be no unused kprobe here.\n");
-       BUG_ON(kprobe_unused(ap));
+       return -EINVAL;
 }
 
 static void free_aggr_kprobe(struct kprobe *p)
@@ -1275,9 +1285,12 @@ static int register_aggr_kprobe(struct kprobe *orig_p, 
struct kprobe *p)
                        goto out;
                }
                init_aggr_kprobe(ap, orig_p);
-       } else if (kprobe_unused(ap))
+       } else if (kprobe_unused(ap)) {
                /* This probe is going to die. Rescue it */
-               reuse_unused_kprobe(ap);
+               ret = reuse_unused_kprobe(ap);
+               if (ret)
+                       goto out;
+       }
 
        if (kprobe_gone(ap)) {
                /*
diff --git a/kernel/locking/lockdep.c b/kernel/locking/lockdep.c
index f99008534275..fb90ca3a296e 100644
--- a/kernel/locking/lockdep.c
+++ b/kernel/locking/lockdep.c
@@ -3808,7 +3808,7 @@ void lock_contended(struct lockdep_map *lock, unsigned 
long ip)
 {
        unsigned long flags;
 
-       if (unlikely(!lock_stat))
+       if (unlikely(!lock_stat || !debug_locks))
                return;
 
        if (unlikely(current->lockdep_recursion))
@@ -3828,7 +3828,7 @@ void lock_acquired(struct lockdep_map *lock, unsigned 
long ip)
 {
        unsigned long flags;
 
-       if (unlikely(!lock_stat))
+       if (unlikely(!lock_stat || !debug_locks))
                return;
 
        if (unlikely(current->lockdep_recursion))
diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c
index 3100e0dd560e..b0299e4b5193 100644
--- a/kernel/printk/printk.c
+++ b/kernel/printk/printk.c
@@ -844,7 +844,12 @@ static void __init log_buf_len_update(unsigned size)
 /* save requested log_buf_len since it's too early to process it */
 static int __init log_buf_len_setup(char *str)
 {
-       unsigned size = memparse(str, &str);
+       unsigned int size;
+
+       if (!str)
+               return -EINVAL;
+
+       size = memparse(str, &str);
 
        log_buf_len_update(size);
 
diff --git a/kernel/signal.c b/kernel/signal.c
index 839504ac04d5..a05b0ed5d77f 100644
--- a/kernel/signal.c
+++ b/kernel/signal.c
@@ -1042,7 +1042,7 @@ static int __send_signal(int sig, struct siginfo *info, 
struct task_struct *t,
 
        result = TRACE_SIGNAL_IGNORED;
        if (!prepare_signal(sig, t,
-                       from_ancestor_ns || (info == SEND_SIG_FORCED)))
+                       from_ancestor_ns || (info == SEND_SIG_PRIV) || (info == 
SEND_SIG_FORCED)))
                goto ret;
 
        pending = group ? &t->signal->shared_pending : &t->pending;
diff --git a/lib/debug_locks.c b/lib/debug_locks.c
index 96c4c633d95e..124fdf238b3d 100644
--- a/lib/debug_locks.c
+++ b/lib/debug_locks.c
@@ -37,7 +37,7 @@ EXPORT_SYMBOL_GPL(debug_locks_silent);
  */
 int debug_locks_off(void)
 {
-       if (__debug_locks_off()) {
+       if (debug_locks && __debug_locks_off()) {
                if (!debug_locks_silent) {
                        console_verbose();
                        return 1;
diff --git a/mm/hugetlb.c b/mm/hugetlb.c
index 63a6518f0bec..73b820981e2e 100644
--- a/mm/hugetlb.c
+++ b/mm/hugetlb.c
@@ -2576,7 +2576,7 @@ static int is_hugetlb_entry_hwpoisoned(pte_t pte)
 int copy_hugetlb_page_range(struct mm_struct *dst, struct mm_struct *src,
                            struct vm_area_struct *vma)
 {
-       pte_t *src_pte, *dst_pte, entry;
+       pte_t *src_pte, *dst_pte, entry, dst_entry;
        struct page *ptepage;
        unsigned long addr;
        int cow;
@@ -2604,15 +2604,30 @@ int copy_hugetlb_page_range(struct mm_struct *dst, 
struct mm_struct *src,
                        break;
                }
 
-               /* If the pagetables are shared don't copy or take references */
-               if (dst_pte == src_pte)
+               /*
+                * If the pagetables are shared don't copy or take references.
+                * dst_pte == src_pte is the common case of src/dest sharing.
+                *
+                * However, src could have 'unshared' and dst shares with
+                * another vma.  If dst_pte !none, this implies sharing.
+                * Check here before taking page table lock, and once again
+                * after taking the lock below.
+                */
+               dst_entry = huge_ptep_get(dst_pte);
+               if ((dst_pte == src_pte) || !huge_pte_none(dst_entry))
                        continue;
 
                dst_ptl = huge_pte_lock(h, dst, dst_pte);
                src_ptl = huge_pte_lockptr(h, src, src_pte);
                spin_lock_nested(src_ptl, SINGLE_DEPTH_NESTING);
                entry = huge_ptep_get(src_pte);
-               if (huge_pte_none(entry)) { /* skip none entry */
+               dst_entry = huge_ptep_get(dst_pte);
+               if (huge_pte_none(entry) || !huge_pte_none(dst_entry)) {
+                       /*
+                        * Skip if src entry none.  Also, skip in the
+                        * unlikely case dst entry !none as this implies
+                        * sharing with another vma.
+                        */
                        ;
                } else if (unlikely(is_hugetlb_entry_migration(entry) ||
                                    is_hugetlb_entry_hwpoisoned(entry))) {
diff --git a/net/9p/protocol.c b/net/9p/protocol.c
index ab9127ec5b7a..bceb6999614f 100644
--- a/net/9p/protocol.c
+++ b/net/9p/protocol.c
@@ -45,10 +45,15 @@ p9pdu_writef(struct p9_fcall *pdu, int proto_version, const 
char *fmt, ...);
 void p9stat_free(struct p9_wstat *stbuf)
 {
        kfree(stbuf->name);
+       stbuf->name = NULL;
        kfree(stbuf->uid);
+       stbuf->uid = NULL;
        kfree(stbuf->gid);
+       stbuf->gid = NULL;
        kfree(stbuf->muid);
+       stbuf->muid = NULL;
        kfree(stbuf->extension);
+       stbuf->extension = NULL;
 }
 EXPORT_SYMBOL(p9stat_free);
 
diff --git a/net/ipv4/cipso_ipv4.c b/net/ipv4/cipso_ipv4.c
index a5e2646c859d..871b69ea2c41 100644
--- a/net/ipv4/cipso_ipv4.c
+++ b/net/ipv4/cipso_ipv4.c
@@ -1580,7 +1580,7 @@ static int cipso_v4_parsetag_loc(const struct 
cipso_v4_doi *doi_def,
  *
  * Description:
  * Parse the packet's IP header looking for a CIPSO option.  Returns a pointer
- * to the start of the CIPSO option on success, NULL if one if not found.
+ * to the start of the CIPSO option on success, NULL if one is not found.
  *
  */
 unsigned char *cipso_v4_optptr(const struct sk_buff *skb)
@@ -1590,10 +1590,8 @@ unsigned char *cipso_v4_optptr(const struct sk_buff *skb)
        int optlen;
        int taglen;
 
-       for (optlen = iph->ihl*4 - sizeof(struct iphdr); optlen > 0; ) {
+       for (optlen = iph->ihl*4 - sizeof(struct iphdr); optlen > 1; ) {
                switch (optptr[0]) {
-               case IPOPT_CIPSO:
-                       return optptr;
                case IPOPT_END:
                        return NULL;
                case IPOPT_NOOP:
@@ -1602,6 +1600,11 @@ unsigned char *cipso_v4_optptr(const struct sk_buff *skb)
                default:
                        taglen = optptr[1];
                }
+               if (!taglen || taglen > optlen)
+                       return NULL;
+               if (optptr[0] == IPOPT_CIPSO)
+                       return optptr;
+
                optlen -= taglen;
                optptr += taglen;
        }
diff --git a/net/sunrpc/svc_xprt.c b/net/sunrpc/svc_xprt.c
index c179ca2a5aa4..b8680aa23d4f 100644
--- a/net/sunrpc/svc_xprt.c
+++ b/net/sunrpc/svc_xprt.c
@@ -902,7 +902,7 @@ static void call_xpt_users(struct svc_xprt *xprt)
        spin_lock(&xprt->xpt_lock);
        while (!list_empty(&xprt->xpt_users)) {
                u = list_first_entry(&xprt->xpt_users, struct svc_xpt_user, 
list);
-               list_del(&u->list);
+               list_del_init(&u->list);
                u->callback(u);
        }
        spin_unlock(&xprt->xpt_lock);
diff --git a/net/sunrpc/xdr.c b/net/sunrpc/xdr.c
index 2a81e77c4477..6de975ae7f5b 100644
--- a/net/sunrpc/xdr.c
+++ b/net/sunrpc/xdr.c
@@ -638,11 +638,10 @@ void xdr_truncate_encode(struct xdr_stream *xdr, size_t 
len)
                /* xdr->iov should already be NULL */
                return;
        }
-       if (fraglen) {
+       if (fraglen)
                xdr->end = head->iov_base + head->iov_len;
-               xdr->page_ptr--;
-       }
        /* (otherwise assume xdr->end is already set) */
+       xdr->page_ptr--;
        head->iov_len = len;
        buf->len = len;
        xdr->p = head->iov_base + head->iov_len;
diff --git a/security/integrity/ima/ima_fs.c b/security/integrity/ima/ima_fs.c
index d30afe461070..cc5b47ae7519 100644
--- a/security/integrity/ima/ima_fs.c
+++ b/security/integrity/ima/ima_fs.c
@@ -26,14 +26,14 @@
 #include "ima.h"
 
 static int valid_policy = 1;
-#define TMPBUFLEN 12
+
 static ssize_t ima_show_htable_value(char __user *buf, size_t count,
                                     loff_t *ppos, atomic_long_t *val)
 {
-       char tmpbuf[TMPBUFLEN];
+       char tmpbuf[32];        /* greater than largest 'long' string value */
        ssize_t len;
 
-       len = scnprintf(tmpbuf, TMPBUFLEN, "%li\n", atomic_long_read(val));
+       len = scnprintf(tmpbuf, sizeof(tmpbuf), "%li\n", atomic_long_read(val));
        return simple_read_from_buffer(buf, count, ppos, tmpbuf, len);
 }
 
diff --git a/sound/pci/ca0106/ca0106.h b/sound/pci/ca0106/ca0106.h
index 04402c14cb23..9847b669cf3c 100644
--- a/sound/pci/ca0106/ca0106.h
+++ b/sound/pci/ca0106/ca0106.h
@@ -582,7 +582,7 @@
 #define SPI_PL_BIT_R_R         (2<<7)  /* right channel = right */
 #define SPI_PL_BIT_R_C         (3<<7)  /* right channel = (L+R)/2 */
 #define SPI_IZD_REG            2
-#define SPI_IZD_BIT            (1<<4)  /* infinite zero detect */
+#define SPI_IZD_BIT            (0<<4)  /* infinite zero detect */
 
 #define SPI_FMT_REG            3
 #define SPI_FMT_BIT_RJ         (0<<0)  /* right justified mode */
diff --git a/tools/perf/util/trace-event-info.c 
b/tools/perf/util/trace-event-info.c
index eb72716017ac..078dba0da0d3 100644
--- a/tools/perf/util/trace-event-info.c
+++ b/tools/perf/util/trace-event-info.c
@@ -513,12 +513,14 @@ struct tracing_data *tracing_data_get(struct list_head 
*pattrs,
                         "/tmp/perf-XXXXXX");
                if (!mkstemp(tdata->temp_file)) {
                        pr_debug("Can't make temp file");
+                       free(tdata);
                        return NULL;
                }
 
                temp_fd = open(tdata->temp_file, O_RDWR);
                if (temp_fd < 0) {
                        pr_debug("Can't read '%s'", tdata->temp_file);
+                       free(tdata);
                        return NULL;
                }
 
diff --git a/tools/perf/util/trace-event-read.c 
b/tools/perf/util/trace-event-read.c
index 54d9e9b548a8..495e014df4fe 100644
--- a/tools/perf/util/trace-event-read.c
+++ b/tools/perf/util/trace-event-read.c
@@ -336,9 +336,12 @@ static int read_event_files(struct pevent *pevent)
                for (x=0; x < count; x++) {
                        size = read8(pevent);
                        ret = read_event_file(pevent, sys, size);
-                       if (ret)
+                       if (ret) {
+                               free(sys);
                                return ret;
+                       }
                }
+               free(sys);
        }
        return 0;
 }
diff --git 
a/tools/testing/selftests/ftrace/test.d/trigger/inter-event/trigger-synthetic-event-syntax.tc
 
b/tools/testing/selftests/ftrace/test.d/trigger/inter-event/trigger-synthetic-event-syntax.tc
new file mode 100644
index 000000000000..88e6c3f43006
--- /dev/null
+++ 
b/tools/testing/selftests/ftrace/test.d/trigger/inter-event/trigger-synthetic-event-syntax.tc
@@ -0,0 +1,80 @@
+#!/bin/sh
+# SPDX-License-Identifier: GPL-2.0
+# description: event trigger - test synthetic_events syntax parser
+
+do_reset() {
+    reset_trigger
+    echo > set_event
+    clear_trace
+}
+
+fail() { #msg
+    do_reset
+    echo $1
+    exit_fail
+}
+
+if [ ! -f set_event ]; then
+    echo "event tracing is not supported"
+    exit_unsupported
+fi
+
+if [ ! -f synthetic_events ]; then
+    echo "synthetic event is not supported"
+    exit_unsupported
+fi
+
+reset_tracer
+do_reset
+
+echo "Test synthetic_events syntax parser"
+
+echo > synthetic_events
+
+# synthetic event must have a field
+! echo "myevent" >> synthetic_events
+echo "myevent u64 var1" >> synthetic_events
+
+# synthetic event must be found in synthetic_events
+grep "myevent[[:space:]]u64 var1" synthetic_events
+
+# it is not possible to add same name event
+! echo "myevent u64 var2" >> synthetic_events
+
+# Non-append open will cleanup all events and add new one
+echo "myevent u64 var2" > synthetic_events
+
+# multiple fields with different spaces
+echo "myevent u64 var1; u64 var2;" > synthetic_events
+grep "myevent[[:space:]]u64 var1; u64 var2" synthetic_events
+echo "myevent u64 var1 ; u64 var2 ;" > synthetic_events
+grep "myevent[[:space:]]u64 var1; u64 var2" synthetic_events
+echo "myevent u64 var1 ;u64 var2" > synthetic_events
+grep "myevent[[:space:]]u64 var1; u64 var2" synthetic_events
+
+# test field types
+echo "myevent u32 var" > synthetic_events
+echo "myevent u16 var" > synthetic_events
+echo "myevent u8 var" > synthetic_events
+echo "myevent s64 var" > synthetic_events
+echo "myevent s32 var" > synthetic_events
+echo "myevent s16 var" > synthetic_events
+echo "myevent s8 var" > synthetic_events
+
+echo "myevent char var" > synthetic_events
+echo "myevent int var" > synthetic_events
+echo "myevent long var" > synthetic_events
+echo "myevent pid_t var" > synthetic_events
+
+echo "myevent unsigned char var" > synthetic_events
+echo "myevent unsigned int var" > synthetic_events
+echo "myevent unsigned long var" > synthetic_events
+grep "myevent[[:space:]]unsigned long var" synthetic_events
+
+# test string type
+echo "myevent char var[10]" > synthetic_events
+grep "myevent[[:space:]]char\[10\] var" synthetic_events
+
+do_reset
+
+exit 0

Reply via email to