Magellan Linux

Annotation of /trunk/kernel-alx/patches-4.14/0154-4.14.55-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3238 - (hide annotations) (download)
Fri Nov 9 12:14:58 2018 UTC (5 years, 7 months ago) by niro
File size: 73528 byte(s)
-added up to patches-4.14.79
1 niro 3238 diff --git a/Makefile b/Makefile
2     index de0955d8dfa3..0700feaaa6cf 100644
3     --- a/Makefile
4     +++ b/Makefile
5     @@ -1,7 +1,7 @@
6     # SPDX-License-Identifier: GPL-2.0
7     VERSION = 4
8     PATCHLEVEL = 14
9     -SUBLEVEL = 54
10     +SUBLEVEL = 55
11     EXTRAVERSION =
12     NAME = Petit Gorille
13    
14     diff --git a/arch/s390/kernel/entry.S b/arch/s390/kernel/entry.S
15     index be20b1f73384..e928c2af6a10 100644
16     --- a/arch/s390/kernel/entry.S
17     +++ b/arch/s390/kernel/entry.S
18     @@ -1244,7 +1244,7 @@ cleanup_critical:
19     jl 0f
20     clg %r9,BASED(.Lcleanup_table+104) # .Lload_fpu_regs_end
21     jl .Lcleanup_load_fpu_regs
22     -0: BR_EX %r14
23     +0: BR_EX %r14,%r11
24    
25     .align 8
26     .Lcleanup_table:
27     @@ -1280,7 +1280,7 @@ cleanup_critical:
28     ni __SIE_PROG0C+3(%r9),0xfe # no longer in SIE
29     lctlg %c1,%c1,__LC_USER_ASCE # load primary asce
30     larl %r9,sie_exit # skip forward to sie_exit
31     - BR_EX %r14
32     + BR_EX %r14,%r11
33     #endif
34    
35     .Lcleanup_system_call:
36     diff --git a/block/blk-lib.c b/block/blk-lib.c
37     index 63fb971d6574..2bc544ce3d2e 100644
38     --- a/block/blk-lib.c
39     +++ b/block/blk-lib.c
40     @@ -275,6 +275,40 @@ static unsigned int __blkdev_sectors_to_bio_pages(sector_t nr_sects)
41     return min(pages, (sector_t)BIO_MAX_PAGES);
42     }
43    
44     +static int __blkdev_issue_zero_pages(struct block_device *bdev,
45     + sector_t sector, sector_t nr_sects, gfp_t gfp_mask,
46     + struct bio **biop)
47     +{
48     + struct request_queue *q = bdev_get_queue(bdev);
49     + struct bio *bio = *biop;
50     + int bi_size = 0;
51     + unsigned int sz;
52     +
53     + if (!q)
54     + return -ENXIO;
55     +
56     + while (nr_sects != 0) {
57     + bio = next_bio(bio, __blkdev_sectors_to_bio_pages(nr_sects),
58     + gfp_mask);
59     + bio->bi_iter.bi_sector = sector;
60     + bio_set_dev(bio, bdev);
61     + bio_set_op_attrs(bio, REQ_OP_WRITE, 0);
62     +
63     + while (nr_sects != 0) {
64     + sz = min((sector_t) PAGE_SIZE, nr_sects << 9);
65     + bi_size = bio_add_page(bio, ZERO_PAGE(0), sz, 0);
66     + nr_sects -= bi_size >> 9;
67     + sector += bi_size >> 9;
68     + if (bi_size < sz)
69     + break;
70     + }
71     + cond_resched();
72     + }
73     +
74     + *biop = bio;
75     + return 0;
76     +}
77     +
78     /**
79     * __blkdev_issue_zeroout - generate number of zero filed write bios
80     * @bdev: blockdev to issue
81     @@ -288,12 +322,6 @@ static unsigned int __blkdev_sectors_to_bio_pages(sector_t nr_sects)
82     * Zero-fill a block range, either using hardware offload or by explicitly
83     * writing zeroes to the device.
84     *
85     - * Note that this function may fail with -EOPNOTSUPP if the driver signals
86     - * zeroing offload support, but the device fails to process the command (for
87     - * some devices there is no non-destructive way to verify whether this
88     - * operation is actually supported). In this case the caller should call
89     - * retry the call to blkdev_issue_zeroout() and the fallback path will be used.
90     - *
91     * If a device is using logical block provisioning, the underlying space will
92     * not be released if %flags contains BLKDEV_ZERO_NOUNMAP.
93     *
94     @@ -305,9 +333,6 @@ int __blkdev_issue_zeroout(struct block_device *bdev, sector_t sector,
95     unsigned flags)
96     {
97     int ret;
98     - int bi_size = 0;
99     - struct bio *bio = *biop;
100     - unsigned int sz;
101     sector_t bs_mask;
102    
103     bs_mask = (bdev_logical_block_size(bdev) >> 9) - 1;
104     @@ -317,30 +342,10 @@ int __blkdev_issue_zeroout(struct block_device *bdev, sector_t sector,
105     ret = __blkdev_issue_write_zeroes(bdev, sector, nr_sects, gfp_mask,
106     biop, flags);
107     if (ret != -EOPNOTSUPP || (flags & BLKDEV_ZERO_NOFALLBACK))
108     - goto out;
109     -
110     - ret = 0;
111     - while (nr_sects != 0) {
112     - bio = next_bio(bio, __blkdev_sectors_to_bio_pages(nr_sects),
113     - gfp_mask);
114     - bio->bi_iter.bi_sector = sector;
115     - bio_set_dev(bio, bdev);
116     - bio_set_op_attrs(bio, REQ_OP_WRITE, 0);
117     -
118     - while (nr_sects != 0) {
119     - sz = min((sector_t) PAGE_SIZE, nr_sects << 9);
120     - bi_size = bio_add_page(bio, ZERO_PAGE(0), sz, 0);
121     - nr_sects -= bi_size >> 9;
122     - sector += bi_size >> 9;
123     - if (bi_size < sz)
124     - break;
125     - }
126     - cond_resched();
127     - }
128     + return ret;
129    
130     - *biop = bio;
131     -out:
132     - return ret;
133     + return __blkdev_issue_zero_pages(bdev, sector, nr_sects, gfp_mask,
134     + biop);
135     }
136     EXPORT_SYMBOL(__blkdev_issue_zeroout);
137    
138     @@ -360,18 +365,49 @@ EXPORT_SYMBOL(__blkdev_issue_zeroout);
139     int blkdev_issue_zeroout(struct block_device *bdev, sector_t sector,
140     sector_t nr_sects, gfp_t gfp_mask, unsigned flags)
141     {
142     - int ret;
143     - struct bio *bio = NULL;
144     + int ret = 0;
145     + sector_t bs_mask;
146     + struct bio *bio;
147     struct blk_plug plug;
148     + bool try_write_zeroes = !!bdev_write_zeroes_sectors(bdev);
149    
150     + bs_mask = (bdev_logical_block_size(bdev) >> 9) - 1;
151     + if ((sector | nr_sects) & bs_mask)
152     + return -EINVAL;
153     +
154     +retry:
155     + bio = NULL;
156     blk_start_plug(&plug);
157     - ret = __blkdev_issue_zeroout(bdev, sector, nr_sects, gfp_mask,
158     - &bio, flags);
159     + if (try_write_zeroes) {
160     + ret = __blkdev_issue_write_zeroes(bdev, sector, nr_sects,
161     + gfp_mask, &bio, flags);
162     + } else if (!(flags & BLKDEV_ZERO_NOFALLBACK)) {
163     + ret = __blkdev_issue_zero_pages(bdev, sector, nr_sects,
164     + gfp_mask, &bio);
165     + } else {
166     + /* No zeroing offload support */
167     + ret = -EOPNOTSUPP;
168     + }
169     if (ret == 0 && bio) {
170     ret = submit_bio_wait(bio);
171     bio_put(bio);
172     }
173     blk_finish_plug(&plug);
174     + if (ret && try_write_zeroes) {
175     + if (!(flags & BLKDEV_ZERO_NOFALLBACK)) {
176     + try_write_zeroes = false;
177     + goto retry;
178     + }
179     + if (!bdev_write_zeroes_sectors(bdev)) {
180     + /*
181     + * Zeroing offload support was indicated, but the
182     + * device reported ILLEGAL REQUEST (for some devices
183     + * there is no non-destructive way to verify whether
184     + * WRITE ZEROES is actually supported).
185     + */
186     + ret = -EOPNOTSUPP;
187     + }
188     + }
189    
190     return ret;
191     }
192     diff --git a/drivers/block/drbd/drbd_worker.c b/drivers/block/drbd/drbd_worker.c
193     index 03471b3fce86..c2042f822b03 100644
194     --- a/drivers/block/drbd/drbd_worker.c
195     +++ b/drivers/block/drbd/drbd_worker.c
196     @@ -282,8 +282,8 @@ void drbd_request_endio(struct bio *bio)
197     what = COMPLETED_OK;
198     }
199    
200     - bio_put(req->private_bio);
201     req->private_bio = ERR_PTR(blk_status_to_errno(bio->bi_status));
202     + bio_put(bio);
203    
204     /* not req_mod(), we need irqsave here! */
205     spin_lock_irqsave(&device->resource->req_lock, flags);
206     diff --git a/drivers/dax/super.c b/drivers/dax/super.c
207     index c4cd034a3820..6c179c2a9ff9 100644
208     --- a/drivers/dax/super.c
209     +++ b/drivers/dax/super.c
210     @@ -73,42 +73,50 @@ EXPORT_SYMBOL_GPL(fs_dax_get_by_bdev);
211    
212     /**
213     * __bdev_dax_supported() - Check if the device supports dax for filesystem
214     - * @sb: The superblock of the device
215     + * @bdev: block device to check
216     * @blocksize: The block size of the device
217     *
218     * This is a library function for filesystems to check if the block device
219     * can be mounted with dax option.
220     *
221     - * Return: negative errno if unsupported, 0 if supported.
222     + * Return: true if supported, false if unsupported
223     */
224     -int __bdev_dax_supported(struct super_block *sb, int blocksize)
225     +bool __bdev_dax_supported(struct block_device *bdev, int blocksize)
226     {
227     - struct block_device *bdev = sb->s_bdev;
228     struct dax_device *dax_dev;
229     + struct request_queue *q;
230     pgoff_t pgoff;
231     int err, id;
232     void *kaddr;
233     pfn_t pfn;
234     long len;
235     + char buf[BDEVNAME_SIZE];
236    
237     if (blocksize != PAGE_SIZE) {
238     - pr_err("VFS (%s): error: unsupported blocksize for dax\n",
239     - sb->s_id);
240     - return -EINVAL;
241     + pr_debug("%s: error: unsupported blocksize for dax\n",
242     + bdevname(bdev, buf));
243     + return false;
244     + }
245     +
246     + q = bdev_get_queue(bdev);
247     + if (!q || !blk_queue_dax(q)) {
248     + pr_debug("%s: error: request queue doesn't support dax\n",
249     + bdevname(bdev, buf));
250     + return false;
251     }
252    
253     err = bdev_dax_pgoff(bdev, 0, PAGE_SIZE, &pgoff);
254     if (err) {
255     - pr_err("VFS (%s): error: unaligned partition for dax\n",
256     - sb->s_id);
257     - return err;
258     + pr_debug("%s: error: unaligned partition for dax\n",
259     + bdevname(bdev, buf));
260     + return false;
261     }
262    
263     dax_dev = dax_get_by_host(bdev->bd_disk->disk_name);
264     if (!dax_dev) {
265     - pr_err("VFS (%s): error: device does not support dax\n",
266     - sb->s_id);
267     - return -EOPNOTSUPP;
268     + pr_debug("%s: error: device does not support dax\n",
269     + bdevname(bdev, buf));
270     + return false;
271     }
272    
273     id = dax_read_lock();
274     @@ -118,12 +126,12 @@ int __bdev_dax_supported(struct super_block *sb, int blocksize)
275     put_dax(dax_dev);
276    
277     if (len < 1) {
278     - pr_err("VFS (%s): error: dax access failed (%ld)",
279     - sb->s_id, len);
280     - return len < 0 ? len : -EIO;
281     + pr_debug("%s: error: dax access failed (%ld)\n",
282     + bdevname(bdev, buf), len);
283     + return false;
284     }
285    
286     - return 0;
287     + return true;
288     }
289     EXPORT_SYMBOL_GPL(__bdev_dax_supported);
290     #endif
291     diff --git a/drivers/gpu/drm/drm_property.c b/drivers/gpu/drm/drm_property.c
292     index bc5128203056..78e630771214 100644
293     --- a/drivers/gpu/drm/drm_property.c
294     +++ b/drivers/gpu/drm/drm_property.c
295     @@ -516,7 +516,7 @@ static void drm_property_free_blob(struct kref *kref)
296    
297     drm_mode_object_unregister(blob->dev, &blob->base);
298    
299     - kfree(blob);
300     + kvfree(blob);
301     }
302    
303     /**
304     @@ -543,7 +543,7 @@ drm_property_create_blob(struct drm_device *dev, size_t length,
305     if (!length || length > ULONG_MAX - sizeof(struct drm_property_blob))
306     return ERR_PTR(-EINVAL);
307    
308     - blob = kzalloc(sizeof(struct drm_property_blob)+length, GFP_KERNEL);
309     + blob = kvzalloc(sizeof(struct drm_property_blob)+length, GFP_KERNEL);
310     if (!blob)
311     return ERR_PTR(-ENOMEM);
312    
313     @@ -559,7 +559,7 @@ drm_property_create_blob(struct drm_device *dev, size_t length,
314     ret = __drm_mode_object_add(dev, &blob->base, DRM_MODE_OBJECT_BLOB,
315     true, drm_property_free_blob);
316     if (ret) {
317     - kfree(blob);
318     + kvfree(blob);
319     return ERR_PTR(-EINVAL);
320     }
321    
322     diff --git a/drivers/gpu/drm/udl/udl_fb.c b/drivers/gpu/drm/udl/udl_fb.c
323     index 2ebdc6d5a76e..d5583190f3e4 100644
324     --- a/drivers/gpu/drm/udl/udl_fb.c
325     +++ b/drivers/gpu/drm/udl/udl_fb.c
326     @@ -137,7 +137,10 @@ int udl_handle_damage(struct udl_framebuffer *fb, int x, int y,
327    
328     if (cmd > (char *) urb->transfer_buffer) {
329     /* Send partial buffer remaining before exiting */
330     - int len = cmd - (char *) urb->transfer_buffer;
331     + int len;
332     + if (cmd < (char *) urb->transfer_buffer + urb->transfer_buffer_length)
333     + *cmd++ = 0xAF;
334     + len = cmd - (char *) urb->transfer_buffer;
335     ret = udl_submit_urb(dev, urb, len);
336     bytes_sent += len;
337     } else
338     diff --git a/drivers/gpu/drm/udl/udl_transfer.c b/drivers/gpu/drm/udl/udl_transfer.c
339     index 0c87b1ac6b68..b992644c17e6 100644
340     --- a/drivers/gpu/drm/udl/udl_transfer.c
341     +++ b/drivers/gpu/drm/udl/udl_transfer.c
342     @@ -153,11 +153,11 @@ static void udl_compress_hline16(
343     raw_pixels_count_byte = cmd++; /* we'll know this later */
344     raw_pixel_start = pixel;
345    
346     - cmd_pixel_end = pixel + (min(MAX_CMD_PIXELS + 1,
347     - min((int)(pixel_end - pixel) / bpp,
348     - (int)(cmd_buffer_end - cmd) / 2))) * bpp;
349     + cmd_pixel_end = pixel + min3(MAX_CMD_PIXELS + 1UL,
350     + (unsigned long)(pixel_end - pixel) / bpp,
351     + (unsigned long)(cmd_buffer_end - 1 - cmd) / 2) * bpp;
352    
353     - prefetch_range((void *) pixel, (cmd_pixel_end - pixel) * bpp);
354     + prefetch_range((void *) pixel, cmd_pixel_end - pixel);
355     pixel_val16 = get_pixel_val16(pixel, bpp);
356    
357     while (pixel < cmd_pixel_end) {
358     @@ -193,6 +193,9 @@ static void udl_compress_hline16(
359     if (pixel > raw_pixel_start) {
360     /* finalize last RAW span */
361     *raw_pixels_count_byte = ((pixel-raw_pixel_start) / bpp) & 0xFF;
362     + } else {
363     + /* undo unused byte */
364     + cmd--;
365     }
366    
367     *cmd_pixels_count_byte = ((pixel - cmd_pixel_start) / bpp) & 0xFF;
368     diff --git a/drivers/hid/hid-debug.c b/drivers/hid/hid-debug.c
369     index 5271db593478..ae8c8e66a6c4 100644
370     --- a/drivers/hid/hid-debug.c
371     +++ b/drivers/hid/hid-debug.c
372     @@ -1154,6 +1154,8 @@ static ssize_t hid_debug_events_read(struct file *file, char __user *buffer,
373     goto out;
374     if (list->tail > list->head) {
375     len = list->tail - list->head;
376     + if (len > count)
377     + len = count;
378    
379     if (copy_to_user(buffer + ret, &list->hid_debug_buf[list->head], len)) {
380     ret = -EFAULT;
381     @@ -1163,6 +1165,8 @@ static ssize_t hid_debug_events_read(struct file *file, char __user *buffer,
382     list->head += len;
383     } else {
384     len = HID_DEBUG_BUFSIZE - list->head;
385     + if (len > count)
386     + len = count;
387    
388     if (copy_to_user(buffer, &list->hid_debug_buf[list->head], len)) {
389     ret = -EFAULT;
390     @@ -1170,7 +1174,9 @@ static ssize_t hid_debug_events_read(struct file *file, char __user *buffer,
391     }
392     list->head = 0;
393     ret += len;
394     - goto copy_rest;
395     + count -= len;
396     + if (count > 0)
397     + goto copy_rest;
398     }
399    
400     }
401     diff --git a/drivers/hid/i2c-hid/i2c-hid.c b/drivers/hid/i2c-hid/i2c-hid.c
402     index 3535073a9a7d..d92827556389 100644
403     --- a/drivers/hid/i2c-hid/i2c-hid.c
404     +++ b/drivers/hid/i2c-hid/i2c-hid.c
405     @@ -476,7 +476,7 @@ static void i2c_hid_get_input(struct i2c_hid *ihid)
406     return;
407     }
408    
409     - if ((ret_size > size) || (ret_size <= 2)) {
410     + if ((ret_size > size) || (ret_size < 2)) {
411     dev_err(&ihid->client->dev, "%s: incomplete report (%d/%d)\n",
412     __func__, size, ret_size);
413     return;
414     diff --git a/drivers/hid/usbhid/hiddev.c b/drivers/hid/usbhid/hiddev.c
415     index 7d749b19c27c..cf307bdc3d53 100644
416     --- a/drivers/hid/usbhid/hiddev.c
417     +++ b/drivers/hid/usbhid/hiddev.c
418     @@ -36,6 +36,7 @@
419     #include <linux/hiddev.h>
420     #include <linux/compat.h>
421     #include <linux/vmalloc.h>
422     +#include <linux/nospec.h>
423     #include "usbhid.h"
424    
425     #ifdef CONFIG_USB_DYNAMIC_MINORS
426     @@ -469,10 +470,14 @@ static noinline int hiddev_ioctl_usage(struct hiddev *hiddev, unsigned int cmd,
427    
428     if (uref->field_index >= report->maxfield)
429     goto inval;
430     + uref->field_index = array_index_nospec(uref->field_index,
431     + report->maxfield);
432    
433     field = report->field[uref->field_index];
434     if (uref->usage_index >= field->maxusage)
435     goto inval;
436     + uref->usage_index = array_index_nospec(uref->usage_index,
437     + field->maxusage);
438    
439     uref->usage_code = field->usage[uref->usage_index].hid;
440    
441     @@ -499,6 +504,8 @@ static noinline int hiddev_ioctl_usage(struct hiddev *hiddev, unsigned int cmd,
442    
443     if (uref->field_index >= report->maxfield)
444     goto inval;
445     + uref->field_index = array_index_nospec(uref->field_index,
446     + report->maxfield);
447    
448     field = report->field[uref->field_index];
449    
450     @@ -753,6 +760,8 @@ static long hiddev_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
451    
452     if (finfo.field_index >= report->maxfield)
453     break;
454     + finfo.field_index = array_index_nospec(finfo.field_index,
455     + report->maxfield);
456    
457     field = report->field[finfo.field_index];
458     memset(&finfo, 0, sizeof(finfo));
459     @@ -797,6 +806,8 @@ static long hiddev_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
460    
461     if (cinfo.index >= hid->maxcollection)
462     break;
463     + cinfo.index = array_index_nospec(cinfo.index,
464     + hid->maxcollection);
465    
466     cinfo.type = hid->collection[cinfo.index].type;
467     cinfo.usage = hid->collection[cinfo.index].usage;
468     diff --git a/drivers/md/dm-table.c b/drivers/md/dm-table.c
469     index 4287fc9f3527..f9cd81375f28 100644
470     --- a/drivers/md/dm-table.c
471     +++ b/drivers/md/dm-table.c
472     @@ -883,9 +883,7 @@ EXPORT_SYMBOL_GPL(dm_table_set_type);
473     static int device_supports_dax(struct dm_target *ti, struct dm_dev *dev,
474     sector_t start, sector_t len, void *data)
475     {
476     - struct request_queue *q = bdev_get_queue(dev->bdev);
477     -
478     - return q && blk_queue_dax(q);
479     + return bdev_dax_supported(dev->bdev, PAGE_SIZE);
480     }
481    
482     static bool dm_table_supports_dax(struct dm_table *t)
483     @@ -1813,6 +1811,11 @@ void dm_table_set_restrictions(struct dm_table *t, struct request_queue *q,
484     }
485     blk_queue_write_cache(q, wc, fua);
486    
487     + if (dm_table_supports_dax(t))
488     + queue_flag_set_unlocked(QUEUE_FLAG_DAX, q);
489     + else
490     + queue_flag_clear_unlocked(QUEUE_FLAG_DAX, q);
491     +
492     if (dm_table_supports_dax_write_cache(t))
493     dax_write_cache(t->md->dax_dev, true);
494    
495     diff --git a/drivers/md/dm.c b/drivers/md/dm.c
496     index 1dfc855ac708..24ec6e039448 100644
497     --- a/drivers/md/dm.c
498     +++ b/drivers/md/dm.c
499     @@ -961,8 +961,7 @@ static long dm_dax_direct_access(struct dax_device *dax_dev, pgoff_t pgoff,
500     if (len < 1)
501     goto out;
502     nr_pages = min(len, nr_pages);
503     - if (ti->type->direct_access)
504     - ret = ti->type->direct_access(ti, pgoff, nr_pages, kaddr, pfn);
505     + ret = ti->type->direct_access(ti, pgoff, nr_pages, kaddr, pfn);
506    
507     out:
508     dm_put_live_table(md, srcu_idx);
509     @@ -2050,9 +2049,6 @@ int dm_setup_md_queue(struct mapped_device *md, struct dm_table *t)
510     */
511     bioset_free(md->queue->bio_split);
512     md->queue->bio_split = NULL;
513     -
514     - if (type == DM_TYPE_DAX_BIO_BASED)
515     - queue_flag_set_unlocked(QUEUE_FLAG_DAX, md->queue);
516     break;
517     case DM_TYPE_NONE:
518     WARN_ON_ONCE(true);
519     diff --git a/drivers/media/i2c/cx25840/cx25840-core.c b/drivers/media/i2c/cx25840/cx25840-core.c
520     index 39f51daa7558..c5642813eff1 100644
521     --- a/drivers/media/i2c/cx25840/cx25840-core.c
522     +++ b/drivers/media/i2c/cx25840/cx25840-core.c
523     @@ -463,8 +463,13 @@ static void cx23885_initialize(struct i2c_client *client)
524     {
525     DEFINE_WAIT(wait);
526     struct cx25840_state *state = to_state(i2c_get_clientdata(client));
527     + u32 clk_freq = 0;
528     struct workqueue_struct *q;
529    
530     + /* cx23885 sets hostdata to clk_freq pointer */
531     + if (v4l2_get_subdev_hostdata(&state->sd))
532     + clk_freq = *((u32 *)v4l2_get_subdev_hostdata(&state->sd));
533     +
534     /*
535     * Come out of digital power down
536     * The CX23888, at least, needs this, otherwise registers aside from
537     @@ -500,8 +505,13 @@ static void cx23885_initialize(struct i2c_client *client)
538     * 50.0 MHz * (0xb + 0xe8ba26/0x2000000)/4 = 5 * 28.636363 MHz
539     * 572.73 MHz before post divide
540     */
541     - /* HVR1850 or 50MHz xtal */
542     - cx25840_write(client, 0x2, 0x71);
543     + if (clk_freq == 25000000) {
544     + /* 888/ImpactVCBe or 25Mhz xtal */
545     + ; /* nothing to do */
546     + } else {
547     + /* HVR1850 or 50MHz xtal */
548     + cx25840_write(client, 0x2, 0x71);
549     + }
550     cx25840_write4(client, 0x11c, 0x01d1744c);
551     cx25840_write4(client, 0x118, 0x00000416);
552     cx25840_write4(client, 0x404, 0x0010253e);
553     @@ -544,9 +554,15 @@ static void cx23885_initialize(struct i2c_client *client)
554     /* HVR1850 */
555     switch (state->id) {
556     case CX23888_AV:
557     - /* 888/HVR1250 specific */
558     - cx25840_write4(client, 0x10c, 0x13333333);
559     - cx25840_write4(client, 0x108, 0x00000515);
560     + if (clk_freq == 25000000) {
561     + /* 888/ImpactVCBe or 25MHz xtal */
562     + cx25840_write4(client, 0x10c, 0x01b6db7b);
563     + cx25840_write4(client, 0x108, 0x00000512);
564     + } else {
565     + /* 888/HVR1250 or 50MHz xtal */
566     + cx25840_write4(client, 0x10c, 0x13333333);
567     + cx25840_write4(client, 0x108, 0x00000515);
568     + }
569     break;
570     default:
571     cx25840_write4(client, 0x10c, 0x002be2c9);
572     @@ -576,7 +592,7 @@ static void cx23885_initialize(struct i2c_client *client)
573     * 368.64 MHz before post divide
574     * 122.88 MHz / 0xa = 12.288 MHz
575     */
576     - /* HVR1850 or 50MHz xtal */
577     + /* HVR1850 or 50MHz xtal or 25MHz xtal */
578     cx25840_write4(client, 0x114, 0x017dbf48);
579     cx25840_write4(client, 0x110, 0x000a030e);
580     break;
581     diff --git a/drivers/media/v4l2-core/videobuf2-core.c b/drivers/media/v4l2-core/videobuf2-core.c
582     index 6d9adcaa26ba..ffbb178c6918 100644
583     --- a/drivers/media/v4l2-core/videobuf2-core.c
584     +++ b/drivers/media/v4l2-core/videobuf2-core.c
585     @@ -1689,6 +1689,15 @@ static void __vb2_queue_cancel(struct vb2_queue *q)
586     for (i = 0; i < q->num_buffers; ++i) {
587     struct vb2_buffer *vb = q->bufs[i];
588    
589     + if (vb->state == VB2_BUF_STATE_PREPARED ||
590     + vb->state == VB2_BUF_STATE_QUEUED) {
591     + unsigned int plane;
592     +
593     + for (plane = 0; plane < vb->num_planes; ++plane)
594     + call_void_memop(vb, finish,
595     + vb->planes[plane].mem_priv);
596     + }
597     +
598     if (vb->state != VB2_BUF_STATE_DEQUEUED) {
599     vb->state = VB2_BUF_STATE_PREPARED;
600     call_void_vb_qop(vb, buf_finish, vb);
601     diff --git a/drivers/mtd/chips/cfi_cmdset_0002.c b/drivers/mtd/chips/cfi_cmdset_0002.c
602     index ac76c10c042f..af3d207c9cc4 100644
603     --- a/drivers/mtd/chips/cfi_cmdset_0002.c
604     +++ b/drivers/mtd/chips/cfi_cmdset_0002.c
605     @@ -42,7 +42,7 @@
606     #define AMD_BOOTLOC_BUG
607     #define FORCE_WORD_WRITE 0
608    
609     -#define MAX_WORD_RETRIES 3
610     +#define MAX_RETRIES 3
611    
612     #define SST49LF004B 0x0060
613     #define SST49LF040B 0x0050
614     @@ -1647,7 +1647,7 @@ static int __xipram do_write_oneword(struct map_info *map, struct flchip *chip,
615     map_write( map, CMD(0xF0), chip->start );
616     /* FIXME - should have reset delay before continuing */
617    
618     - if (++retry_cnt <= MAX_WORD_RETRIES)
619     + if (++retry_cnt <= MAX_RETRIES)
620     goto retry;
621    
622     ret = -EIO;
623     @@ -2106,7 +2106,7 @@ static int do_panic_write_oneword(struct map_info *map, struct flchip *chip,
624     map_write(map, CMD(0xF0), chip->start);
625     /* FIXME - should have reset delay before continuing */
626    
627     - if (++retry_cnt <= MAX_WORD_RETRIES)
628     + if (++retry_cnt <= MAX_RETRIES)
629     goto retry;
630    
631     ret = -EIO;
632     @@ -2241,6 +2241,7 @@ static int __xipram do_erase_chip(struct map_info *map, struct flchip *chip)
633     unsigned long int adr;
634     DECLARE_WAITQUEUE(wait, current);
635     int ret = 0;
636     + int retry_cnt = 0;
637    
638     adr = cfi->addr_unlock1;
639    
640     @@ -2258,6 +2259,7 @@ static int __xipram do_erase_chip(struct map_info *map, struct flchip *chip)
641     ENABLE_VPP(map);
642     xip_disable(map, chip, adr);
643    
644     + retry:
645     cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL);
646     cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi, cfi->device_type, NULL);
647     cfi_send_gen_cmd(0x80, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL);
648     @@ -2294,12 +2296,13 @@ static int __xipram do_erase_chip(struct map_info *map, struct flchip *chip)
649     chip->erase_suspended = 0;
650     }
651    
652     - if (chip_ready(map, adr))
653     + if (chip_good(map, adr, map_word_ff(map)))
654     break;
655    
656     if (time_after(jiffies, timeo)) {
657     printk(KERN_WARNING "MTD %s(): software timeout\n",
658     __func__ );
659     + ret = -EIO;
660     break;
661     }
662    
663     @@ -2307,12 +2310,15 @@ static int __xipram do_erase_chip(struct map_info *map, struct flchip *chip)
664     UDELAY(map, chip, adr, 1000000/HZ);
665     }
666     /* Did we succeed? */
667     - if (!chip_good(map, adr, map_word_ff(map))) {
668     + if (ret) {
669     /* reset on all failures. */
670     map_write( map, CMD(0xF0), chip->start );
671     /* FIXME - should have reset delay before continuing */
672    
673     - ret = -EIO;
674     + if (++retry_cnt <= MAX_RETRIES) {
675     + ret = 0;
676     + goto retry;
677     + }
678     }
679    
680     chip->state = FL_READY;
681     @@ -2331,6 +2337,7 @@ static int __xipram do_erase_oneblock(struct map_info *map, struct flchip *chip,
682     unsigned long timeo = jiffies + HZ;
683     DECLARE_WAITQUEUE(wait, current);
684     int ret = 0;
685     + int retry_cnt = 0;
686    
687     adr += chip->start;
688    
689     @@ -2348,6 +2355,7 @@ static int __xipram do_erase_oneblock(struct map_info *map, struct flchip *chip,
690     ENABLE_VPP(map);
691     xip_disable(map, chip, adr);
692    
693     + retry:
694     cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL);
695     cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi, cfi->device_type, NULL);
696     cfi_send_gen_cmd(0x80, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL);
697     @@ -2384,7 +2392,7 @@ static int __xipram do_erase_oneblock(struct map_info *map, struct flchip *chip,
698     chip->erase_suspended = 0;
699     }
700    
701     - if (chip_ready(map, adr)) {
702     + if (chip_good(map, adr, map_word_ff(map))) {
703     xip_enable(map, chip, adr);
704     break;
705     }
706     @@ -2393,6 +2401,7 @@ static int __xipram do_erase_oneblock(struct map_info *map, struct flchip *chip,
707     xip_enable(map, chip, adr);
708     printk(KERN_WARNING "MTD %s(): software timeout\n",
709     __func__ );
710     + ret = -EIO;
711     break;
712     }
713    
714     @@ -2400,12 +2409,15 @@ static int __xipram do_erase_oneblock(struct map_info *map, struct flchip *chip,
715     UDELAY(map, chip, adr, 1000000/HZ);
716     }
717     /* Did we succeed? */
718     - if (!chip_good(map, adr, map_word_ff(map))) {
719     + if (ret) {
720     /* reset on all failures. */
721     map_write( map, CMD(0xF0), chip->start );
722     /* FIXME - should have reset delay before continuing */
723    
724     - ret = -EIO;
725     + if (++retry_cnt <= MAX_RETRIES) {
726     + ret = 0;
727     + goto retry;
728     + }
729     }
730    
731     chip->state = FL_READY;
732     diff --git a/drivers/mtd/nand/mxc_nand.c b/drivers/mtd/nand/mxc_nand.c
733     index 53e5e0337c3e..fcb575d55b89 100644
734     --- a/drivers/mtd/nand/mxc_nand.c
735     +++ b/drivers/mtd/nand/mxc_nand.c
736     @@ -48,7 +48,7 @@
737     #define NFC_V1_V2_CONFIG (host->regs + 0x0a)
738     #define NFC_V1_V2_ECC_STATUS_RESULT (host->regs + 0x0c)
739     #define NFC_V1_V2_RSLTMAIN_AREA (host->regs + 0x0e)
740     -#define NFC_V1_V2_RSLTSPARE_AREA (host->regs + 0x10)
741     +#define NFC_V21_RSLTSPARE_AREA (host->regs + 0x10)
742     #define NFC_V1_V2_WRPROT (host->regs + 0x12)
743     #define NFC_V1_UNLOCKSTART_BLKADDR (host->regs + 0x14)
744     #define NFC_V1_UNLOCKEND_BLKADDR (host->regs + 0x16)
745     @@ -1119,6 +1119,9 @@ static void preset_v2(struct mtd_info *mtd)
746     writew(config1, NFC_V1_V2_CONFIG1);
747     /* preset operation */
748    
749     + /* spare area size in 16-bit half-words */
750     + writew(mtd->oobsize / 2, NFC_V21_RSLTSPARE_AREA);
751     +
752     /* Unlock the internal RAM Buffer */
753     writew(0x2, NFC_V1_V2_CONFIG);
754    
755     diff --git a/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c b/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c
756     index 5b4f05805006..519a021c0a25 100644
757     --- a/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c
758     +++ b/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c
759     @@ -2863,7 +2863,7 @@ static int dpaa_remove(struct platform_device *pdev)
760     struct device *dev;
761     int err;
762    
763     - dev = pdev->dev.parent;
764     + dev = &pdev->dev;
765     net_dev = dev_get_drvdata(dev);
766    
767     priv = netdev_priv(net_dev);
768     diff --git a/drivers/scsi/sg.c b/drivers/scsi/sg.c
769     index 17a4cc138b00..4d49fb8f2bbc 100644
770     --- a/drivers/scsi/sg.c
771     +++ b/drivers/scsi/sg.c
772     @@ -51,6 +51,7 @@ static int sg_version_num = 30536; /* 2 digits for each component */
773     #include <linux/atomic.h>
774     #include <linux/ratelimit.h>
775     #include <linux/uio.h>
776     +#include <linux/cred.h> /* for sg_check_file_access() */
777    
778     #include "scsi.h"
779     #include <scsi/scsi_dbg.h>
780     @@ -210,6 +211,33 @@ static void sg_device_destroy(struct kref *kref);
781     sdev_prefix_printk(prefix, (sdp)->device, \
782     (sdp)->disk->disk_name, fmt, ##a)
783    
784     +/*
785     + * The SCSI interfaces that use read() and write() as an asynchronous variant of
786     + * ioctl(..., SG_IO, ...) are fundamentally unsafe, since there are lots of ways
787     + * to trigger read() and write() calls from various contexts with elevated
788     + * privileges. This can lead to kernel memory corruption (e.g. if these
789     + * interfaces are called through splice()) and privilege escalation inside
790     + * userspace (e.g. if a process with access to such a device passes a file
791     + * descriptor to a SUID binary as stdin/stdout/stderr).
792     + *
793     + * This function provides protection for the legacy API by restricting the
794     + * calling context.
795     + */
796     +static int sg_check_file_access(struct file *filp, const char *caller)
797     +{
798     + if (filp->f_cred != current_real_cred()) {
799     + pr_err_once("%s: process %d (%s) changed security contexts after opening file descriptor, this is not allowed.\n",
800     + caller, task_tgid_vnr(current), current->comm);
801     + return -EPERM;
802     + }
803     + if (uaccess_kernel()) {
804     + pr_err_once("%s: process %d (%s) called from kernel context, this is not allowed.\n",
805     + caller, task_tgid_vnr(current), current->comm);
806     + return -EACCES;
807     + }
808     + return 0;
809     +}
810     +
811     static int sg_allow_access(struct file *filp, unsigned char *cmd)
812     {
813     struct sg_fd *sfp = filp->private_data;
814     @@ -394,6 +422,14 @@ sg_read(struct file *filp, char __user *buf, size_t count, loff_t * ppos)
815     struct sg_header *old_hdr = NULL;
816     int retval = 0;
817    
818     + /*
819     + * This could cause a response to be stranded. Close the associated
820     + * file descriptor to free up any resources being held.
821     + */
822     + retval = sg_check_file_access(filp, __func__);
823     + if (retval)
824     + return retval;
825     +
826     if ((!(sfp = (Sg_fd *) filp->private_data)) || (!(sdp = sfp->parentdp)))
827     return -ENXIO;
828     SCSI_LOG_TIMEOUT(3, sg_printk(KERN_INFO, sdp,
829     @@ -581,9 +617,11 @@ sg_write(struct file *filp, const char __user *buf, size_t count, loff_t * ppos)
830     struct sg_header old_hdr;
831     sg_io_hdr_t *hp;
832     unsigned char cmnd[SG_MAX_CDB_SIZE];
833     + int retval;
834    
835     - if (unlikely(uaccess_kernel()))
836     - return -EINVAL;
837     + retval = sg_check_file_access(filp, __func__);
838     + if (retval)
839     + return retval;
840    
841     if ((!(sfp = (Sg_fd *) filp->private_data)) || (!(sdp = sfp->parentdp)))
842     return -ENXIO;
843     diff --git a/drivers/staging/comedi/drivers/quatech_daqp_cs.c b/drivers/staging/comedi/drivers/quatech_daqp_cs.c
844     index 802f51e46405..171960568356 100644
845     --- a/drivers/staging/comedi/drivers/quatech_daqp_cs.c
846     +++ b/drivers/staging/comedi/drivers/quatech_daqp_cs.c
847     @@ -642,7 +642,7 @@ static int daqp_ao_insn_write(struct comedi_device *dev,
848     /* Make sure D/A update mode is direct update */
849     outb(0, dev->iobase + DAQP_AUX_REG);
850    
851     - for (i = 0; i > insn->n; i++) {
852     + for (i = 0; i < insn->n; i++) {
853     unsigned int val = data[i];
854     int ret;
855    
856     diff --git a/drivers/target/target_core_pr.c b/drivers/target/target_core_pr.c
857     index 4ba5004a069e..fd6ce9996488 100644
858     --- a/drivers/target/target_core_pr.c
859     +++ b/drivers/target/target_core_pr.c
860     @@ -3729,11 +3729,16 @@ core_scsi3_pri_read_keys(struct se_cmd *cmd)
861     * Check for overflow of 8byte PRI READ_KEYS payload and
862     * next reservation key list descriptor.
863     */
864     - if ((add_len + 8) > (cmd->data_length - 8))
865     - break;
866     -
867     - put_unaligned_be64(pr_reg->pr_res_key, &buf[off]);
868     - off += 8;
869     + if (off + 8 <= cmd->data_length) {
870     + put_unaligned_be64(pr_reg->pr_res_key, &buf[off]);
871     + off += 8;
872     + }
873     + /*
874     + * SPC5r17: 6.16.2 READ KEYS service action
875     + * The ADDITIONAL LENGTH field indicates the number of bytes in
876     + * the Reservation key list. The contents of the ADDITIONAL
877     + * LENGTH field are not altered based on the allocation length
878     + */
879     add_len += 8;
880     }
881     spin_unlock(&dev->t10_pr.registration_lock);
882     diff --git a/drivers/vfio/vfio_iommu_type1.c b/drivers/vfio/vfio_iommu_type1.c
883     index fb4e6a7ee521..d639378e36ac 100644
884     --- a/drivers/vfio/vfio_iommu_type1.c
885     +++ b/drivers/vfio/vfio_iommu_type1.c
886     @@ -339,18 +339,16 @@ static int vaddr_get_pfn(struct mm_struct *mm, unsigned long vaddr,
887     struct page *page[1];
888     struct vm_area_struct *vma;
889     struct vm_area_struct *vmas[1];
890     + unsigned int flags = 0;
891     int ret;
892    
893     + if (prot & IOMMU_WRITE)
894     + flags |= FOLL_WRITE;
895     +
896     + down_read(&mm->mmap_sem);
897     if (mm == current->mm) {
898     - ret = get_user_pages_longterm(vaddr, 1, !!(prot & IOMMU_WRITE),
899     - page, vmas);
900     + ret = get_user_pages_longterm(vaddr, 1, flags, page, vmas);
901     } else {
902     - unsigned int flags = 0;
903     -
904     - if (prot & IOMMU_WRITE)
905     - flags |= FOLL_WRITE;
906     -
907     - down_read(&mm->mmap_sem);
908     ret = get_user_pages_remote(NULL, mm, vaddr, 1, flags, page,
909     vmas, NULL);
910     /*
911     @@ -364,8 +362,8 @@ static int vaddr_get_pfn(struct mm_struct *mm, unsigned long vaddr,
912     ret = -EOPNOTSUPP;
913     put_page(page[0]);
914     }
915     - up_read(&mm->mmap_sem);
916     }
917     + up_read(&mm->mmap_sem);
918    
919     if (ret == 1) {
920     *pfn = page_to_pfn(page[0]);
921     diff --git a/fs/cifs/cifsglob.h b/fs/cifs/cifsglob.h
922     index 33d6eb58ce34..f29cdb1cdeb7 100644
923     --- a/fs/cifs/cifsglob.h
924     +++ b/fs/cifs/cifsglob.h
925     @@ -1340,6 +1340,7 @@ typedef int (mid_handle_t)(struct TCP_Server_Info *server,
926     /* one of these for every pending CIFS request to the server */
927     struct mid_q_entry {
928     struct list_head qhead; /* mids waiting on reply from this server */
929     + struct kref refcount;
930     struct TCP_Server_Info *server; /* server corresponding to this mid */
931     __u64 mid; /* multiplex id */
932     __u32 pid; /* process id */
933     diff --git a/fs/cifs/cifsproto.h b/fs/cifs/cifsproto.h
934     index 762d513a5087..ccdb42f71b2e 100644
935     --- a/fs/cifs/cifsproto.h
936     +++ b/fs/cifs/cifsproto.h
937     @@ -76,6 +76,7 @@ extern struct mid_q_entry *AllocMidQEntry(const struct smb_hdr *smb_buffer,
938     struct TCP_Server_Info *server);
939     extern void DeleteMidQEntry(struct mid_q_entry *midEntry);
940     extern void cifs_delete_mid(struct mid_q_entry *mid);
941     +extern void cifs_mid_q_entry_release(struct mid_q_entry *midEntry);
942     extern void cifs_wake_up_task(struct mid_q_entry *mid);
943     extern int cifs_handle_standard(struct TCP_Server_Info *server,
944     struct mid_q_entry *mid);
945     diff --git a/fs/cifs/cifssmb.c b/fs/cifs/cifssmb.c
946     index 7fd39ea6e22e..b5a436583469 100644
947     --- a/fs/cifs/cifssmb.c
948     +++ b/fs/cifs/cifssmb.c
949     @@ -150,8 +150,14 @@ cifs_reconnect_tcon(struct cifs_tcon *tcon, int smb_command)
950     * greater than cifs socket timeout which is 7 seconds
951     */
952     while (server->tcpStatus == CifsNeedReconnect) {
953     - wait_event_interruptible_timeout(server->response_q,
954     - (server->tcpStatus != CifsNeedReconnect), 10 * HZ);
955     + rc = wait_event_interruptible_timeout(server->response_q,
956     + (server->tcpStatus != CifsNeedReconnect),
957     + 10 * HZ);
958     + if (rc < 0) {
959     + cifs_dbg(FYI, "%s: aborting reconnect due to a received"
960     + " signal by the process\n", __func__);
961     + return -ERESTARTSYS;
962     + }
963    
964     /* are we still trying to reconnect? */
965     if (server->tcpStatus != CifsNeedReconnect)
966     diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c
967     index f7db2fedfa8c..fd24c72bd2cd 100644
968     --- a/fs/cifs/connect.c
969     +++ b/fs/cifs/connect.c
970     @@ -889,6 +889,7 @@ cifs_demultiplex_thread(void *p)
971     continue;
972     server->total_read += length;
973    
974     + mid_entry = NULL;
975     if (server->ops->is_transform_hdr &&
976     server->ops->receive_transform &&
977     server->ops->is_transform_hdr(buf)) {
978     @@ -903,8 +904,11 @@ cifs_demultiplex_thread(void *p)
979     length = mid_entry->receive(server, mid_entry);
980     }
981    
982     - if (length < 0)
983     + if (length < 0) {
984     + if (mid_entry)
985     + cifs_mid_q_entry_release(mid_entry);
986     continue;
987     + }
988    
989     if (server->large_buf)
990     buf = server->bigbuf;
991     @@ -920,6 +924,8 @@ cifs_demultiplex_thread(void *p)
992    
993     if (!mid_entry->multiRsp || mid_entry->multiEnd)
994     mid_entry->callback(mid_entry);
995     +
996     + cifs_mid_q_entry_release(mid_entry);
997     } else if (server->ops->is_oplock_break &&
998     server->ops->is_oplock_break(buf, server)) {
999     cifs_dbg(FYI, "Received oplock break\n");
1000     diff --git a/fs/cifs/smb1ops.c b/fs/cifs/smb1ops.c
1001     index a723df3e0197..d8cd82001c1c 100644
1002     --- a/fs/cifs/smb1ops.c
1003     +++ b/fs/cifs/smb1ops.c
1004     @@ -105,6 +105,7 @@ cifs_find_mid(struct TCP_Server_Info *server, char *buffer)
1005     if (compare_mid(mid->mid, buf) &&
1006     mid->mid_state == MID_REQUEST_SUBMITTED &&
1007     le16_to_cpu(mid->command) == buf->Command) {
1008     + kref_get(&mid->refcount);
1009     spin_unlock(&GlobalMid_Lock);
1010     return mid;
1011     }
1012     diff --git a/fs/cifs/smb2ops.c b/fs/cifs/smb2ops.c
1013     index 36bc9a7eb8ea..83267ac3a3f0 100644
1014     --- a/fs/cifs/smb2ops.c
1015     +++ b/fs/cifs/smb2ops.c
1016     @@ -202,6 +202,7 @@ smb2_find_mid(struct TCP_Server_Info *server, char *buf)
1017     if ((mid->mid == wire_mid) &&
1018     (mid->mid_state == MID_REQUEST_SUBMITTED) &&
1019     (mid->command == shdr->Command)) {
1020     + kref_get(&mid->refcount);
1021     spin_unlock(&GlobalMid_Lock);
1022     return mid;
1023     }
1024     @@ -635,6 +636,8 @@ smb2_set_ea(const unsigned int xid, struct cifs_tcon *tcon,
1025    
1026     rc = SMB2_set_ea(xid, tcon, fid.persistent_fid, fid.volatile_fid, ea,
1027     len);
1028     + kfree(ea);
1029     +
1030     SMB2_close(xid, tcon, fid.persistent_fid, fid.volatile_fid);
1031    
1032     return rc;
1033     diff --git a/fs/cifs/smb2pdu.c b/fs/cifs/smb2pdu.c
1034     index 5247b40e57f6..0480cd9a9e81 100644
1035     --- a/fs/cifs/smb2pdu.c
1036     +++ b/fs/cifs/smb2pdu.c
1037     @@ -153,7 +153,7 @@ smb2_hdr_assemble(struct smb2_sync_hdr *shdr, __le16 smb2_cmd,
1038     static int
1039     smb2_reconnect(__le16 smb2_command, struct cifs_tcon *tcon)
1040     {
1041     - int rc = 0;
1042     + int rc;
1043     struct nls_table *nls_codepage;
1044     struct cifs_ses *ses;
1045     struct TCP_Server_Info *server;
1046     @@ -164,10 +164,10 @@ smb2_reconnect(__le16 smb2_command, struct cifs_tcon *tcon)
1047     * for those three - in the calling routine.
1048     */
1049     if (tcon == NULL)
1050     - return rc;
1051     + return 0;
1052    
1053     if (smb2_command == SMB2_TREE_CONNECT)
1054     - return rc;
1055     + return 0;
1056    
1057     if (tcon->tidStatus == CifsExiting) {
1058     /*
1059     @@ -210,8 +210,14 @@ smb2_reconnect(__le16 smb2_command, struct cifs_tcon *tcon)
1060     return -EAGAIN;
1061     }
1062    
1063     - wait_event_interruptible_timeout(server->response_q,
1064     - (server->tcpStatus != CifsNeedReconnect), 10 * HZ);
1065     + rc = wait_event_interruptible_timeout(server->response_q,
1066     + (server->tcpStatus != CifsNeedReconnect),
1067     + 10 * HZ);
1068     + if (rc < 0) {
1069     + cifs_dbg(FYI, "%s: aborting reconnect due to a received"
1070     + " signal by the process\n", __func__);
1071     + return -ERESTARTSYS;
1072     + }
1073    
1074     /* are we still trying to reconnect? */
1075     if (server->tcpStatus != CifsNeedReconnect)
1076     @@ -229,7 +235,7 @@ smb2_reconnect(__le16 smb2_command, struct cifs_tcon *tcon)
1077     }
1078    
1079     if (!tcon->ses->need_reconnect && !tcon->need_reconnect)
1080     - return rc;
1081     + return 0;
1082    
1083     nls_codepage = load_nls_default();
1084    
1085     @@ -332,7 +338,10 @@ smb2_plain_req_init(__le16 smb2_command, struct cifs_tcon *tcon,
1086     return rc;
1087    
1088     /* BB eventually switch this to SMB2 specific small buf size */
1089     - *request_buf = cifs_small_buf_get();
1090     + if (smb2_command == SMB2_SET_INFO)
1091     + *request_buf = cifs_buf_get();
1092     + else
1093     + *request_buf = cifs_small_buf_get();
1094     if (*request_buf == NULL) {
1095     /* BB should we add a retry in here if not a writepage? */
1096     return -ENOMEM;
1097     @@ -3162,7 +3171,7 @@ send_set_info(const unsigned int xid, struct cifs_tcon *tcon,
1098     }
1099    
1100     rc = SendReceive2(xid, ses, iov, num, &resp_buftype, flags, &rsp_iov);
1101     - cifs_small_buf_release(req);
1102     + cifs_buf_release(req);
1103     rsp = (struct smb2_set_info_rsp *)rsp_iov.iov_base;
1104    
1105     if (rc != 0)
1106     diff --git a/fs/cifs/smb2transport.c b/fs/cifs/smb2transport.c
1107     index bf49cb73b9e6..a41fc4a63a59 100644
1108     --- a/fs/cifs/smb2transport.c
1109     +++ b/fs/cifs/smb2transport.c
1110     @@ -548,6 +548,7 @@ smb2_mid_entry_alloc(const struct smb2_sync_hdr *shdr,
1111    
1112     temp = mempool_alloc(cifs_mid_poolp, GFP_NOFS);
1113     memset(temp, 0, sizeof(struct mid_q_entry));
1114     + kref_init(&temp->refcount);
1115     temp->mid = le64_to_cpu(shdr->MessageId);
1116     temp->pid = current->pid;
1117     temp->command = shdr->Command; /* Always LE */
1118     diff --git a/fs/cifs/transport.c b/fs/cifs/transport.c
1119     index 7efbab013957..a10f51dfa7f5 100644
1120     --- a/fs/cifs/transport.c
1121     +++ b/fs/cifs/transport.c
1122     @@ -56,6 +56,7 @@ AllocMidQEntry(const struct smb_hdr *smb_buffer, struct TCP_Server_Info *server)
1123    
1124     temp = mempool_alloc(cifs_mid_poolp, GFP_NOFS);
1125     memset(temp, 0, sizeof(struct mid_q_entry));
1126     + kref_init(&temp->refcount);
1127     temp->mid = get_mid(smb_buffer);
1128     temp->pid = current->pid;
1129     temp->command = cpu_to_le16(smb_buffer->Command);
1130     @@ -77,6 +78,21 @@ AllocMidQEntry(const struct smb_hdr *smb_buffer, struct TCP_Server_Info *server)
1131     return temp;
1132     }
1133    
1134     +static void _cifs_mid_q_entry_release(struct kref *refcount)
1135     +{
1136     + struct mid_q_entry *mid = container_of(refcount, struct mid_q_entry,
1137     + refcount);
1138     +
1139     + mempool_free(mid, cifs_mid_poolp);
1140     +}
1141     +
1142     +void cifs_mid_q_entry_release(struct mid_q_entry *midEntry)
1143     +{
1144     + spin_lock(&GlobalMid_Lock);
1145     + kref_put(&midEntry->refcount, _cifs_mid_q_entry_release);
1146     + spin_unlock(&GlobalMid_Lock);
1147     +}
1148     +
1149     void
1150     DeleteMidQEntry(struct mid_q_entry *midEntry)
1151     {
1152     @@ -105,7 +121,7 @@ DeleteMidQEntry(struct mid_q_entry *midEntry)
1153     }
1154     }
1155     #endif
1156     - mempool_free(midEntry, cifs_mid_poolp);
1157     + cifs_mid_q_entry_release(midEntry);
1158     }
1159    
1160     void
1161     diff --git a/fs/ext2/super.c b/fs/ext2/super.c
1162     index 1458706bd2ec..726e680a3368 100644
1163     --- a/fs/ext2/super.c
1164     +++ b/fs/ext2/super.c
1165     @@ -953,8 +953,7 @@ static int ext2_fill_super(struct super_block *sb, void *data, int silent)
1166     blocksize = BLOCK_SIZE << le32_to_cpu(sbi->s_es->s_log_block_size);
1167    
1168     if (sbi->s_mount_opt & EXT2_MOUNT_DAX) {
1169     - err = bdev_dax_supported(sb, blocksize);
1170     - if (err)
1171     + if (!bdev_dax_supported(sb->s_bdev, blocksize))
1172     goto failed_mount;
1173     }
1174    
1175     diff --git a/fs/ext4/balloc.c b/fs/ext4/balloc.c
1176     index 58db8109defa..9c9eafd6bd76 100644
1177     --- a/fs/ext4/balloc.c
1178     +++ b/fs/ext4/balloc.c
1179     @@ -184,7 +184,6 @@ static int ext4_init_block_bitmap(struct super_block *sb,
1180     unsigned int bit, bit_max;
1181     struct ext4_sb_info *sbi = EXT4_SB(sb);
1182     ext4_fsblk_t start, tmp;
1183     - int flex_bg = 0;
1184     struct ext4_group_info *grp;
1185    
1186     J_ASSERT_BH(bh, buffer_locked(bh));
1187     @@ -217,22 +216,19 @@ static int ext4_init_block_bitmap(struct super_block *sb,
1188    
1189     start = ext4_group_first_block_no(sb, block_group);
1190    
1191     - if (ext4_has_feature_flex_bg(sb))
1192     - flex_bg = 1;
1193     -
1194     /* Set bits for block and inode bitmaps, and inode table */
1195     tmp = ext4_block_bitmap(sb, gdp);
1196     - if (!flex_bg || ext4_block_in_group(sb, tmp, block_group))
1197     + if (ext4_block_in_group(sb, tmp, block_group))
1198     ext4_set_bit(EXT4_B2C(sbi, tmp - start), bh->b_data);
1199    
1200     tmp = ext4_inode_bitmap(sb, gdp);
1201     - if (!flex_bg || ext4_block_in_group(sb, tmp, block_group))
1202     + if (ext4_block_in_group(sb, tmp, block_group))
1203     ext4_set_bit(EXT4_B2C(sbi, tmp - start), bh->b_data);
1204    
1205     tmp = ext4_inode_table(sb, gdp);
1206     for (; tmp < ext4_inode_table(sb, gdp) +
1207     sbi->s_itb_per_group; tmp++) {
1208     - if (!flex_bg || ext4_block_in_group(sb, tmp, block_group))
1209     + if (ext4_block_in_group(sb, tmp, block_group))
1210     ext4_set_bit(EXT4_B2C(sbi, tmp - start), bh->b_data);
1211     }
1212    
1213     @@ -455,7 +451,16 @@ ext4_read_block_bitmap_nowait(struct super_block *sb, ext4_group_t block_group)
1214     goto verify;
1215     }
1216     ext4_lock_group(sb, block_group);
1217     - if (desc->bg_flags & cpu_to_le16(EXT4_BG_BLOCK_UNINIT)) {
1218     + if (ext4_has_group_desc_csum(sb) &&
1219     + (desc->bg_flags & cpu_to_le16(EXT4_BG_BLOCK_UNINIT))) {
1220     + if (block_group == 0) {
1221     + ext4_unlock_group(sb, block_group);
1222     + unlock_buffer(bh);
1223     + ext4_error(sb, "Block bitmap for bg 0 marked "
1224     + "uninitialized");
1225     + err = -EFSCORRUPTED;
1226     + goto out;
1227     + }
1228     err = ext4_init_block_bitmap(sb, bh, block_group, desc);
1229     set_bitmap_uptodate(bh);
1230     set_buffer_uptodate(bh);
1231     diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h
1232     index 58a0304566db..0abb30d19fa1 100644
1233     --- a/fs/ext4/ext4.h
1234     +++ b/fs/ext4/ext4.h
1235     @@ -1542,11 +1542,6 @@ static inline struct ext4_inode_info *EXT4_I(struct inode *inode)
1236     static inline int ext4_valid_inum(struct super_block *sb, unsigned long ino)
1237     {
1238     return ino == EXT4_ROOT_INO ||
1239     - ino == EXT4_USR_QUOTA_INO ||
1240     - ino == EXT4_GRP_QUOTA_INO ||
1241     - ino == EXT4_BOOT_LOADER_INO ||
1242     - ino == EXT4_JOURNAL_INO ||
1243     - ino == EXT4_RESIZE_INO ||
1244     (ino >= EXT4_FIRST_INO(sb) &&
1245     ino <= le32_to_cpu(EXT4_SB(sb)->s_es->s_inodes_count));
1246     }
1247     @@ -3049,9 +3044,6 @@ extern struct buffer_head *ext4_get_first_inline_block(struct inode *inode,
1248     extern int ext4_inline_data_fiemap(struct inode *inode,
1249     struct fiemap_extent_info *fieinfo,
1250     int *has_inline, __u64 start, __u64 len);
1251     -extern int ext4_try_to_evict_inline_data(handle_t *handle,
1252     - struct inode *inode,
1253     - int needed);
1254     extern int ext4_inline_data_truncate(struct inode *inode, int *has_inline);
1255    
1256     extern int ext4_convert_inline_data(struct inode *inode);
1257     diff --git a/fs/ext4/ext4_extents.h b/fs/ext4/ext4_extents.h
1258     index 8ecf84b8f5a1..a284fb28944b 100644
1259     --- a/fs/ext4/ext4_extents.h
1260     +++ b/fs/ext4/ext4_extents.h
1261     @@ -103,6 +103,7 @@ struct ext4_extent_header {
1262     };
1263    
1264     #define EXT4_EXT_MAGIC cpu_to_le16(0xf30a)
1265     +#define EXT4_MAX_EXTENT_DEPTH 5
1266    
1267     #define EXT4_EXTENT_TAIL_OFFSET(hdr) \
1268     (sizeof(struct ext4_extent_header) + \
1269     diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c
1270     index 883e89a903d1..5592b7726241 100644
1271     --- a/fs/ext4/extents.c
1272     +++ b/fs/ext4/extents.c
1273     @@ -881,6 +881,12 @@ ext4_find_extent(struct inode *inode, ext4_lblk_t block,
1274    
1275     eh = ext_inode_hdr(inode);
1276     depth = ext_depth(inode);
1277     + if (depth < 0 || depth > EXT4_MAX_EXTENT_DEPTH) {
1278     + EXT4_ERROR_INODE(inode, "inode has invalid extent depth: %d",
1279     + depth);
1280     + ret = -EFSCORRUPTED;
1281     + goto err;
1282     + }
1283    
1284     if (path) {
1285     ext4_ext_drop_refs(path);
1286     diff --git a/fs/ext4/ialloc.c b/fs/ext4/ialloc.c
1287     index f420124ac035..95341bc2b3b7 100644
1288     --- a/fs/ext4/ialloc.c
1289     +++ b/fs/ext4/ialloc.c
1290     @@ -155,7 +155,16 @@ ext4_read_inode_bitmap(struct super_block *sb, ext4_group_t block_group)
1291     }
1292    
1293     ext4_lock_group(sb, block_group);
1294     - if (desc->bg_flags & cpu_to_le16(EXT4_BG_INODE_UNINIT)) {
1295     + if (ext4_has_group_desc_csum(sb) &&
1296     + (desc->bg_flags & cpu_to_le16(EXT4_BG_INODE_UNINIT))) {
1297     + if (block_group == 0) {
1298     + ext4_unlock_group(sb, block_group);
1299     + unlock_buffer(bh);
1300     + ext4_error(sb, "Inode bitmap for bg 0 marked "
1301     + "uninitialized");
1302     + err = -EFSCORRUPTED;
1303     + goto out;
1304     + }
1305     memset(bh->b_data, 0, (EXT4_INODES_PER_GROUP(sb) + 7) / 8);
1306     ext4_mark_bitmap_end(EXT4_INODES_PER_GROUP(sb),
1307     sb->s_blocksize * 8, bh->b_data);
1308     @@ -1000,7 +1009,8 @@ struct inode *__ext4_new_inode(handle_t *handle, struct inode *dir,
1309    
1310     /* recheck and clear flag under lock if we still need to */
1311     ext4_lock_group(sb, group);
1312     - if (gdp->bg_flags & cpu_to_le16(EXT4_BG_BLOCK_UNINIT)) {
1313     + if (ext4_has_group_desc_csum(sb) &&
1314     + (gdp->bg_flags & cpu_to_le16(EXT4_BG_BLOCK_UNINIT))) {
1315     gdp->bg_flags &= cpu_to_le16(~EXT4_BG_BLOCK_UNINIT);
1316     ext4_free_group_clusters_set(sb, gdp,
1317     ext4_free_clusters_after_init(sb, group, gdp));
1318     diff --git a/fs/ext4/inline.c b/fs/ext4/inline.c
1319     index 8f5dc243effd..7d498f4a3f90 100644
1320     --- a/fs/ext4/inline.c
1321     +++ b/fs/ext4/inline.c
1322     @@ -443,6 +443,7 @@ static int ext4_destroy_inline_data_nolock(handle_t *handle,
1323    
1324     memset((void *)ext4_raw_inode(&is.iloc)->i_block,
1325     0, EXT4_MIN_INLINE_DATA_SIZE);
1326     + memset(ei->i_data, 0, EXT4_MIN_INLINE_DATA_SIZE);
1327    
1328     if (ext4_has_feature_extents(inode->i_sb)) {
1329     if (S_ISDIR(inode->i_mode) ||
1330     @@ -892,11 +893,11 @@ int ext4_da_write_inline_data_begin(struct address_space *mapping,
1331     flags |= AOP_FLAG_NOFS;
1332    
1333     if (ret == -ENOSPC) {
1334     + ext4_journal_stop(handle);
1335     ret = ext4_da_convert_inline_data_to_extent(mapping,
1336     inode,
1337     flags,
1338     fsdata);
1339     - ext4_journal_stop(handle);
1340     if (ret == -ENOSPC &&
1341     ext4_should_retry_alloc(inode->i_sb, &retries))
1342     goto retry_journal;
1343     @@ -1864,42 +1865,6 @@ int ext4_inline_data_fiemap(struct inode *inode,
1344     return (error < 0 ? error : 0);
1345     }
1346    
1347     -/*
1348     - * Called during xattr set, and if we can sparse space 'needed',
1349     - * just create the extent tree evict the data to the outer block.
1350     - *
1351     - * We use jbd2 instead of page cache to move data to the 1st block
1352     - * so that the whole transaction can be committed as a whole and
1353     - * the data isn't lost because of the delayed page cache write.
1354     - */
1355     -int ext4_try_to_evict_inline_data(handle_t *handle,
1356     - struct inode *inode,
1357     - int needed)
1358     -{
1359     - int error;
1360     - struct ext4_xattr_entry *entry;
1361     - struct ext4_inode *raw_inode;
1362     - struct ext4_iloc iloc;
1363     -
1364     - error = ext4_get_inode_loc(inode, &iloc);
1365     - if (error)
1366     - return error;
1367     -
1368     - raw_inode = ext4_raw_inode(&iloc);
1369     - entry = (struct ext4_xattr_entry *)((void *)raw_inode +
1370     - EXT4_I(inode)->i_inline_off);
1371     - if (EXT4_XATTR_LEN(entry->e_name_len) +
1372     - EXT4_XATTR_SIZE(le32_to_cpu(entry->e_value_size)) < needed) {
1373     - error = -ENOSPC;
1374     - goto out;
1375     - }
1376     -
1377     - error = ext4_convert_inline_data_nolock(handle, inode, &iloc);
1378     -out:
1379     - brelse(iloc.bh);
1380     - return error;
1381     -}
1382     -
1383     int ext4_inline_data_truncate(struct inode *inode, int *has_inline)
1384     {
1385     handle_t *handle;
1386     diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
1387     index bd6453e78992..c2efe4d2ad87 100644
1388     --- a/fs/ext4/inode.c
1389     +++ b/fs/ext4/inode.c
1390     @@ -401,9 +401,9 @@ static int __check_block_validity(struct inode *inode, const char *func,
1391     if (!ext4_data_block_valid(EXT4_SB(inode->i_sb), map->m_pblk,
1392     map->m_len)) {
1393     ext4_error_inode(inode, func, line, map->m_pblk,
1394     - "lblock %lu mapped to illegal pblock "
1395     + "lblock %lu mapped to illegal pblock %llu "
1396     "(length %d)", (unsigned long) map->m_lblk,
1397     - map->m_len);
1398     + map->m_pblk, map->m_len);
1399     return -EFSCORRUPTED;
1400     }
1401     return 0;
1402     @@ -4455,7 +4455,8 @@ static int __ext4_get_inode_loc(struct inode *inode,
1403     int inodes_per_block, inode_offset;
1404    
1405     iloc->bh = NULL;
1406     - if (!ext4_valid_inum(sb, inode->i_ino))
1407     + if (inode->i_ino < EXT4_ROOT_INO ||
1408     + inode->i_ino > le32_to_cpu(EXT4_SB(sb)->s_es->s_inodes_count))
1409     return -EFSCORRUPTED;
1410    
1411     iloc->block_group = (inode->i_ino - 1) / EXT4_INODES_PER_GROUP(sb);
1412     diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c
1413     index 701085620cd8..048c586d9a8b 100644
1414     --- a/fs/ext4/mballoc.c
1415     +++ b/fs/ext4/mballoc.c
1416     @@ -2456,7 +2456,8 @@ int ext4_mb_add_groupinfo(struct super_block *sb, ext4_group_t group,
1417     * initialize bb_free to be able to skip
1418     * empty groups without initialization
1419     */
1420     - if (desc->bg_flags & cpu_to_le16(EXT4_BG_BLOCK_UNINIT)) {
1421     + if (ext4_has_group_desc_csum(sb) &&
1422     + (desc->bg_flags & cpu_to_le16(EXT4_BG_BLOCK_UNINIT))) {
1423     meta_group_info[i]->bb_free =
1424     ext4_free_clusters_after_init(sb, group, desc);
1425     } else {
1426     @@ -3023,7 +3024,8 @@ ext4_mb_mark_diskspace_used(struct ext4_allocation_context *ac,
1427     #endif
1428     ext4_set_bits(bitmap_bh->b_data, ac->ac_b_ex.fe_start,
1429     ac->ac_b_ex.fe_len);
1430     - if (gdp->bg_flags & cpu_to_le16(EXT4_BG_BLOCK_UNINIT)) {
1431     + if (ext4_has_group_desc_csum(sb) &&
1432     + (gdp->bg_flags & cpu_to_le16(EXT4_BG_BLOCK_UNINIT))) {
1433     gdp->bg_flags &= cpu_to_le16(~EXT4_BG_BLOCK_UNINIT);
1434     ext4_free_group_clusters_set(sb, gdp,
1435     ext4_free_clusters_after_init(sb,
1436     diff --git a/fs/ext4/super.c b/fs/ext4/super.c
1437     index ec74d06fa24a..fc32a67a7a19 100644
1438     --- a/fs/ext4/super.c
1439     +++ b/fs/ext4/super.c
1440     @@ -2301,6 +2301,7 @@ static int ext4_check_descriptors(struct super_block *sb,
1441     struct ext4_sb_info *sbi = EXT4_SB(sb);
1442     ext4_fsblk_t first_block = le32_to_cpu(sbi->s_es->s_first_data_block);
1443     ext4_fsblk_t last_block;
1444     + ext4_fsblk_t last_bg_block = sb_block + ext4_bg_num_gdb(sb, 0) + 1;
1445     ext4_fsblk_t block_bitmap;
1446     ext4_fsblk_t inode_bitmap;
1447     ext4_fsblk_t inode_table;
1448     @@ -2333,6 +2334,14 @@ static int ext4_check_descriptors(struct super_block *sb,
1449     if (!sb_rdonly(sb))
1450     return 0;
1451     }
1452     + if (block_bitmap >= sb_block + 1 &&
1453     + block_bitmap <= last_bg_block) {
1454     + ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: "
1455     + "Block bitmap for group %u overlaps "
1456     + "block group descriptors", i);
1457     + if (!sb_rdonly(sb))
1458     + return 0;
1459     + }
1460     if (block_bitmap < first_block || block_bitmap > last_block) {
1461     ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: "
1462     "Block bitmap for group %u not in group "
1463     @@ -2347,6 +2356,14 @@ static int ext4_check_descriptors(struct super_block *sb,
1464     if (!sb_rdonly(sb))
1465     return 0;
1466     }
1467     + if (inode_bitmap >= sb_block + 1 &&
1468     + inode_bitmap <= last_bg_block) {
1469     + ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: "
1470     + "Inode bitmap for group %u overlaps "
1471     + "block group descriptors", i);
1472     + if (!sb_rdonly(sb))
1473     + return 0;
1474     + }
1475     if (inode_bitmap < first_block || inode_bitmap > last_block) {
1476     ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: "
1477     "Inode bitmap for group %u not in group "
1478     @@ -2361,6 +2378,14 @@ static int ext4_check_descriptors(struct super_block *sb,
1479     if (!sb_rdonly(sb))
1480     return 0;
1481     }
1482     + if (inode_table >= sb_block + 1 &&
1483     + inode_table <= last_bg_block) {
1484     + ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: "
1485     + "Inode table for group %u overlaps "
1486     + "block group descriptors", i);
1487     + if (!sb_rdonly(sb))
1488     + return 0;
1489     + }
1490     if (inode_table < first_block ||
1491     inode_table + sbi->s_itb_per_group - 1 > last_block) {
1492     ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: "
1493     @@ -3070,13 +3095,22 @@ static ext4_group_t ext4_has_uninit_itable(struct super_block *sb)
1494     ext4_group_t group, ngroups = EXT4_SB(sb)->s_groups_count;
1495     struct ext4_group_desc *gdp = NULL;
1496    
1497     + if (!ext4_has_group_desc_csum(sb))
1498     + return ngroups;
1499     +
1500     for (group = 0; group < ngroups; group++) {
1501     gdp = ext4_get_group_desc(sb, group, NULL);
1502     if (!gdp)
1503     continue;
1504    
1505     - if (!(gdp->bg_flags & cpu_to_le16(EXT4_BG_INODE_ZEROED)))
1506     + if (gdp->bg_flags & cpu_to_le16(EXT4_BG_INODE_ZEROED))
1507     + continue;
1508     + if (group != 0)
1509     break;
1510     + ext4_error(sb, "Inode table for bg 0 marked as "
1511     + "needing zeroing");
1512     + if (sb_rdonly(sb))
1513     + return ngroups;
1514     }
1515    
1516     return group;
1517     @@ -3715,6 +3749,13 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent)
1518     le32_to_cpu(es->s_log_block_size));
1519     goto failed_mount;
1520     }
1521     + if (le32_to_cpu(es->s_log_cluster_size) >
1522     + (EXT4_MAX_CLUSTER_LOG_SIZE - EXT4_MIN_BLOCK_LOG_SIZE)) {
1523     + ext4_msg(sb, KERN_ERR,
1524     + "Invalid log cluster size: %u",
1525     + le32_to_cpu(es->s_log_cluster_size));
1526     + goto failed_mount;
1527     + }
1528    
1529     if (le16_to_cpu(sbi->s_es->s_reserved_gdt_blocks) > (blocksize / 4)) {
1530     ext4_msg(sb, KERN_ERR,
1531     @@ -3729,8 +3770,7 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent)
1532     " that may contain inline data");
1533     goto failed_mount;
1534     }
1535     - err = bdev_dax_supported(sb, blocksize);
1536     - if (err)
1537     + if (!bdev_dax_supported(sb->s_bdev, blocksize))
1538     goto failed_mount;
1539     }
1540    
1541     @@ -3777,6 +3817,11 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent)
1542     } else {
1543     sbi->s_inode_size = le16_to_cpu(es->s_inode_size);
1544     sbi->s_first_ino = le32_to_cpu(es->s_first_ino);
1545     + if (sbi->s_first_ino < EXT4_GOOD_OLD_FIRST_INO) {
1546     + ext4_msg(sb, KERN_ERR, "invalid first ino: %u",
1547     + sbi->s_first_ino);
1548     + goto failed_mount;
1549     + }
1550     if ((sbi->s_inode_size < EXT4_GOOD_OLD_INODE_SIZE) ||
1551     (!is_power_of_2(sbi->s_inode_size)) ||
1552     (sbi->s_inode_size > blocksize)) {
1553     @@ -3853,13 +3898,6 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent)
1554     "block size (%d)", clustersize, blocksize);
1555     goto failed_mount;
1556     }
1557     - if (le32_to_cpu(es->s_log_cluster_size) >
1558     - (EXT4_MAX_CLUSTER_LOG_SIZE - EXT4_MIN_BLOCK_LOG_SIZE)) {
1559     - ext4_msg(sb, KERN_ERR,
1560     - "Invalid log cluster size: %u",
1561     - le32_to_cpu(es->s_log_cluster_size));
1562     - goto failed_mount;
1563     - }
1564     sbi->s_cluster_bits = le32_to_cpu(es->s_log_cluster_size) -
1565     le32_to_cpu(es->s_log_block_size);
1566     sbi->s_clusters_per_group =
1567     @@ -3880,10 +3918,10 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent)
1568     }
1569     } else {
1570     if (clustersize != blocksize) {
1571     - ext4_warning(sb, "fragment/cluster size (%d) != "
1572     - "block size (%d)", clustersize,
1573     - blocksize);
1574     - clustersize = blocksize;
1575     + ext4_msg(sb, KERN_ERR,
1576     + "fragment/cluster size (%d) != "
1577     + "block size (%d)", clustersize, blocksize);
1578     + goto failed_mount;
1579     }
1580     if (sbi->s_blocks_per_group > blocksize * 8) {
1581     ext4_msg(sb, KERN_ERR,
1582     @@ -3937,6 +3975,13 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent)
1583     ext4_blocks_count(es));
1584     goto failed_mount;
1585     }
1586     + if ((es->s_first_data_block == 0) && (es->s_log_block_size == 0) &&
1587     + (sbi->s_cluster_ratio == 1)) {
1588     + ext4_msg(sb, KERN_WARNING, "bad geometry: first data "
1589     + "block is 0 with a 1k block and cluster size");
1590     + goto failed_mount;
1591     + }
1592     +
1593     blocks_count = (ext4_blocks_count(es) -
1594     le32_to_cpu(es->s_first_data_block) +
1595     EXT4_BLOCKS_PER_GROUP(sb) - 1);
1596     @@ -3972,6 +4017,14 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent)
1597     ret = -ENOMEM;
1598     goto failed_mount;
1599     }
1600     + if (((u64)sbi->s_groups_count * sbi->s_inodes_per_group) !=
1601     + le32_to_cpu(es->s_inodes_count)) {
1602     + ext4_msg(sb, KERN_ERR, "inodes count not valid: %u vs %llu",
1603     + le32_to_cpu(es->s_inodes_count),
1604     + ((u64)sbi->s_groups_count * sbi->s_inodes_per_group));
1605     + ret = -EINVAL;
1606     + goto failed_mount;
1607     + }
1608    
1609     bgl_lock_init(sbi->s_blockgroup_lock);
1610    
1611     @@ -4700,6 +4753,14 @@ static int ext4_commit_super(struct super_block *sb, int sync)
1612    
1613     if (!sbh || block_device_ejected(sb))
1614     return error;
1615     +
1616     + /*
1617     + * The superblock bh should be mapped, but it might not be if the
1618     + * device was hot-removed. Not much we can do but fail the I/O.
1619     + */
1620     + if (!buffer_mapped(sbh))
1621     + return error;
1622     +
1623     /*
1624     * If the file system is mounted read-only, don't update the
1625     * superblock write time. This avoids updating the superblock
1626     diff --git a/fs/ext4/xattr.c b/fs/ext4/xattr.c
1627     index ed1cf24a7831..c7c8c16ccd93 100644
1628     --- a/fs/ext4/xattr.c
1629     +++ b/fs/ext4/xattr.c
1630     @@ -229,12 +229,12 @@ __ext4_xattr_check_block(struct inode *inode, struct buffer_head *bh,
1631     {
1632     int error = -EFSCORRUPTED;
1633    
1634     - if (buffer_verified(bh))
1635     - return 0;
1636     -
1637     if (BHDR(bh)->h_magic != cpu_to_le32(EXT4_XATTR_MAGIC) ||
1638     BHDR(bh)->h_blocks != cpu_to_le32(1))
1639     goto errout;
1640     + if (buffer_verified(bh))
1641     + return 0;
1642     +
1643     error = -EFSBADCRC;
1644     if (!ext4_xattr_block_csum_verify(inode, bh))
1645     goto errout;
1646     @@ -1559,7 +1559,7 @@ static int ext4_xattr_set_entry(struct ext4_xattr_info *i,
1647     handle_t *handle, struct inode *inode,
1648     bool is_block)
1649     {
1650     - struct ext4_xattr_entry *last;
1651     + struct ext4_xattr_entry *last, *next;
1652     struct ext4_xattr_entry *here = s->here;
1653     size_t min_offs = s->end - s->base, name_len = strlen(i->name);
1654     int in_inode = i->in_inode;
1655     @@ -1594,7 +1594,13 @@ static int ext4_xattr_set_entry(struct ext4_xattr_info *i,
1656    
1657     /* Compute min_offs and last. */
1658     last = s->first;
1659     - for (; !IS_LAST_ENTRY(last); last = EXT4_XATTR_NEXT(last)) {
1660     + for (; !IS_LAST_ENTRY(last); last = next) {
1661     + next = EXT4_XATTR_NEXT(last);
1662     + if ((void *)next >= s->end) {
1663     + EXT4_ERROR_INODE(inode, "corrupted xattr entries");
1664     + ret = -EFSCORRUPTED;
1665     + goto out;
1666     + }
1667     if (!last->e_value_inum && last->e_value_size) {
1668     size_t offs = le16_to_cpu(last->e_value_offs);
1669     if (offs < min_offs)
1670     @@ -2205,23 +2211,8 @@ int ext4_xattr_ibody_inline_set(handle_t *handle, struct inode *inode,
1671     if (EXT4_I(inode)->i_extra_isize == 0)
1672     return -ENOSPC;
1673     error = ext4_xattr_set_entry(i, s, handle, inode, false /* is_block */);
1674     - if (error) {
1675     - if (error == -ENOSPC &&
1676     - ext4_has_inline_data(inode)) {
1677     - error = ext4_try_to_evict_inline_data(handle, inode,
1678     - EXT4_XATTR_LEN(strlen(i->name) +
1679     - EXT4_XATTR_SIZE(i->value_len)));
1680     - if (error)
1681     - return error;
1682     - error = ext4_xattr_ibody_find(inode, i, is);
1683     - if (error)
1684     - return error;
1685     - error = ext4_xattr_set_entry(i, s, handle, inode,
1686     - false /* is_block */);
1687     - }
1688     - if (error)
1689     - return error;
1690     - }
1691     + if (error)
1692     + return error;
1693     header = IHDR(inode, ext4_raw_inode(&is->iloc));
1694     if (!IS_LAST_ENTRY(s->first)) {
1695     header->h_magic = cpu_to_le32(EXT4_XATTR_MAGIC);
1696     @@ -2650,6 +2641,11 @@ static int ext4_xattr_make_inode_space(handle_t *handle, struct inode *inode,
1697     last = IFIRST(header);
1698     /* Find the entry best suited to be pushed into EA block */
1699     for (; !IS_LAST_ENTRY(last); last = EXT4_XATTR_NEXT(last)) {
1700     + /* never move system.data out of the inode */
1701     + if ((last->e_name_len == 4) &&
1702     + (last->e_name_index == EXT4_XATTR_INDEX_SYSTEM) &&
1703     + !memcmp(last->e_name, "data", 4))
1704     + continue;
1705     total_size = EXT4_XATTR_LEN(last->e_name_len);
1706     if (!last->e_value_inum)
1707     total_size += EXT4_XATTR_SIZE(
1708     diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
1709     index 29c5f799890c..72c6a9e9a9b4 100644
1710     --- a/fs/f2fs/file.c
1711     +++ b/fs/f2fs/file.c
1712     @@ -2694,11 +2694,16 @@ static ssize_t f2fs_file_write_iter(struct kiocb *iocb, struct iov_iter *from)
1713     inode_lock(inode);
1714     ret = generic_write_checks(iocb, from);
1715     if (ret > 0) {
1716     + bool preallocated = false;
1717     + size_t target_size = 0;
1718     int err;
1719    
1720     if (iov_iter_fault_in_readable(from, iov_iter_count(from)))
1721     set_inode_flag(inode, FI_NO_PREALLOC);
1722    
1723     + preallocated = true;
1724     + target_size = iocb->ki_pos + iov_iter_count(from);
1725     +
1726     err = f2fs_preallocate_blocks(iocb, from);
1727     if (err) {
1728     clear_inode_flag(inode, FI_NO_PREALLOC);
1729     @@ -2710,6 +2715,10 @@ static ssize_t f2fs_file_write_iter(struct kiocb *iocb, struct iov_iter *from)
1730     blk_finish_plug(&plug);
1731     clear_inode_flag(inode, FI_NO_PREALLOC);
1732    
1733     + /* if we couldn't write data, we should deallocate blocks. */
1734     + if (preallocated && i_size_read(inode) < target_size)
1735     + f2fs_truncate(inode);
1736     +
1737     if (ret > 0)
1738     f2fs_update_iostat(F2FS_I_SB(inode), APP_WRITE_IO, ret);
1739     }
1740     diff --git a/fs/jbd2/transaction.c b/fs/jbd2/transaction.c
1741     index 07793e25c976..e42736c1fdc8 100644
1742     --- a/fs/jbd2/transaction.c
1743     +++ b/fs/jbd2/transaction.c
1744     @@ -1366,6 +1366,13 @@ int jbd2_journal_dirty_metadata(handle_t *handle, struct buffer_head *bh)
1745     if (jh->b_transaction == transaction &&
1746     jh->b_jlist != BJ_Metadata) {
1747     jbd_lock_bh_state(bh);
1748     + if (jh->b_transaction == transaction &&
1749     + jh->b_jlist != BJ_Metadata)
1750     + pr_err("JBD2: assertion failure: h_type=%u "
1751     + "h_line_no=%u block_no=%llu jlist=%u\n",
1752     + handle->h_type, handle->h_line_no,
1753     + (unsigned long long) bh->b_blocknr,
1754     + jh->b_jlist);
1755     J_ASSERT_JH(jh, jh->b_transaction != transaction ||
1756     jh->b_jlist == BJ_Metadata);
1757     jbd_unlock_bh_state(bh);
1758     @@ -1385,11 +1392,11 @@ int jbd2_journal_dirty_metadata(handle_t *handle, struct buffer_head *bh)
1759     * of the transaction. This needs to be done
1760     * once a transaction -bzzz
1761     */
1762     - jh->b_modified = 1;
1763     if (handle->h_buffer_credits <= 0) {
1764     ret = -ENOSPC;
1765     goto out_unlock_bh;
1766     }
1767     + jh->b_modified = 1;
1768     handle->h_buffer_credits--;
1769     }
1770    
1771     diff --git a/fs/userfaultfd.c b/fs/userfaultfd.c
1772     index 5aa392eae1c3..f6ed92524a03 100644
1773     --- a/fs/userfaultfd.c
1774     +++ b/fs/userfaultfd.c
1775     @@ -220,24 +220,26 @@ static inline bool userfaultfd_huge_must_wait(struct userfaultfd_ctx *ctx,
1776     unsigned long reason)
1777     {
1778     struct mm_struct *mm = ctx->mm;
1779     - pte_t *pte;
1780     + pte_t *ptep, pte;
1781     bool ret = true;
1782    
1783     VM_BUG_ON(!rwsem_is_locked(&mm->mmap_sem));
1784    
1785     - pte = huge_pte_offset(mm, address, vma_mmu_pagesize(vma));
1786     - if (!pte)
1787     + ptep = huge_pte_offset(mm, address, vma_mmu_pagesize(vma));
1788     +
1789     + if (!ptep)
1790     goto out;
1791    
1792     ret = false;
1793     + pte = huge_ptep_get(ptep);
1794    
1795     /*
1796     * Lockless access: we're in a wait_event so it's ok if it
1797     * changes under us.
1798     */
1799     - if (huge_pte_none(*pte))
1800     + if (huge_pte_none(pte))
1801     ret = true;
1802     - if (!huge_pte_write(*pte) && (reason & VM_UFFD_WP))
1803     + if (!huge_pte_write(pte) && (reason & VM_UFFD_WP))
1804     ret = true;
1805     out:
1806     return ret;
1807     diff --git a/fs/xfs/xfs_ioctl.c b/fs/xfs/xfs_ioctl.c
1808     index aa75389be8cf..79a9a0def7db 100644
1809     --- a/fs/xfs/xfs_ioctl.c
1810     +++ b/fs/xfs/xfs_ioctl.c
1811     @@ -1101,7 +1101,8 @@ xfs_ioctl_setattr_dax_invalidate(
1812     if (fa->fsx_xflags & FS_XFLAG_DAX) {
1813     if (!(S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode)))
1814     return -EINVAL;
1815     - if (bdev_dax_supported(sb, sb->s_blocksize) < 0)
1816     + if (!bdev_dax_supported(xfs_find_bdev_for_inode(VFS_I(ip)),
1817     + sb->s_blocksize))
1818     return -EINVAL;
1819     }
1820    
1821     diff --git a/fs/xfs/xfs_iops.c b/fs/xfs/xfs_iops.c
1822     index f24e5b6cfc86..1daa965f1e08 100644
1823     --- a/fs/xfs/xfs_iops.c
1824     +++ b/fs/xfs/xfs_iops.c
1825     @@ -1184,6 +1184,30 @@ static const struct inode_operations xfs_inline_symlink_inode_operations = {
1826     .update_time = xfs_vn_update_time,
1827     };
1828    
1829     +/* Figure out if this file actually supports DAX. */
1830     +static bool
1831     +xfs_inode_supports_dax(
1832     + struct xfs_inode *ip)
1833     +{
1834     + struct xfs_mount *mp = ip->i_mount;
1835     +
1836     + /* Only supported on non-reflinked files. */
1837     + if (!S_ISREG(VFS_I(ip)->i_mode) || xfs_is_reflink_inode(ip))
1838     + return false;
1839     +
1840     + /* DAX mount option or DAX iflag must be set. */
1841     + if (!(mp->m_flags & XFS_MOUNT_DAX) &&
1842     + !(ip->i_d.di_flags2 & XFS_DIFLAG2_DAX))
1843     + return false;
1844     +
1845     + /* Block size must match page size */
1846     + if (mp->m_sb.sb_blocksize != PAGE_SIZE)
1847     + return false;
1848     +
1849     + /* Device has to support DAX too. */
1850     + return xfs_find_daxdev_for_inode(VFS_I(ip)) != NULL;
1851     +}
1852     +
1853     STATIC void
1854     xfs_diflags_to_iflags(
1855     struct inode *inode,
1856     @@ -1202,11 +1226,7 @@ xfs_diflags_to_iflags(
1857     inode->i_flags |= S_SYNC;
1858     if (flags & XFS_DIFLAG_NOATIME)
1859     inode->i_flags |= S_NOATIME;
1860     - if (S_ISREG(inode->i_mode) &&
1861     - ip->i_mount->m_sb.sb_blocksize == PAGE_SIZE &&
1862     - !xfs_is_reflink_inode(ip) &&
1863     - (ip->i_mount->m_flags & XFS_MOUNT_DAX ||
1864     - ip->i_d.di_flags2 & XFS_DIFLAG2_DAX))
1865     + if (xfs_inode_supports_dax(ip))
1866     inode->i_flags |= S_DAX;
1867     }
1868    
1869     diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c
1870     index f663022353c0..0b0282d2f011 100644
1871     --- a/fs/xfs/xfs_super.c
1872     +++ b/fs/xfs/xfs_super.c
1873     @@ -1640,11 +1640,17 @@ xfs_fs_fill_super(
1874     sb->s_flags |= SB_I_VERSION;
1875    
1876     if (mp->m_flags & XFS_MOUNT_DAX) {
1877     + bool rtdev_is_dax = false, datadev_is_dax;
1878     +
1879     xfs_warn(mp,
1880     "DAX enabled. Warning: EXPERIMENTAL, use at your own risk");
1881    
1882     - error = bdev_dax_supported(sb, sb->s_blocksize);
1883     - if (error) {
1884     + datadev_is_dax = bdev_dax_supported(mp->m_ddev_targp->bt_bdev,
1885     + sb->s_blocksize);
1886     + if (mp->m_rtdev_targp)
1887     + rtdev_is_dax = bdev_dax_supported(
1888     + mp->m_rtdev_targp->bt_bdev, sb->s_blocksize);
1889     + if (!rtdev_is_dax && !datadev_is_dax) {
1890     xfs_alert(mp,
1891     "DAX unsupported by block device. Turning off DAX.");
1892     mp->m_flags &= ~XFS_MOUNT_DAX;
1893     diff --git a/include/linux/dax.h b/include/linux/dax.h
1894     index 895e16fcc62d..07d6bc1f90a3 100644
1895     --- a/include/linux/dax.h
1896     +++ b/include/linux/dax.h
1897     @@ -40,10 +40,10 @@ static inline void put_dax(struct dax_device *dax_dev)
1898    
1899     int bdev_dax_pgoff(struct block_device *, sector_t, size_t, pgoff_t *pgoff);
1900     #if IS_ENABLED(CONFIG_FS_DAX)
1901     -int __bdev_dax_supported(struct super_block *sb, int blocksize);
1902     -static inline int bdev_dax_supported(struct super_block *sb, int blocksize)
1903     +bool __bdev_dax_supported(struct block_device *bdev, int blocksize);
1904     +static inline bool bdev_dax_supported(struct block_device *bdev, int blocksize)
1905     {
1906     - return __bdev_dax_supported(sb, blocksize);
1907     + return __bdev_dax_supported(bdev, blocksize);
1908     }
1909    
1910     static inline struct dax_device *fs_dax_get_by_host(const char *host)
1911     @@ -58,9 +58,10 @@ static inline void fs_put_dax(struct dax_device *dax_dev)
1912    
1913     struct dax_device *fs_dax_get_by_bdev(struct block_device *bdev);
1914     #else
1915     -static inline int bdev_dax_supported(struct super_block *sb, int blocksize)
1916     +static inline bool bdev_dax_supported(struct block_device *bdev,
1917     + int blocksize)
1918     {
1919     - return -EOPNOTSUPP;
1920     + return false;
1921     }
1922    
1923     static inline struct dax_device *fs_dax_get_by_host(const char *host)
1924     diff --git a/include/linux/mm.h b/include/linux/mm.h
1925     index f23215854c80..a26cf767407e 100644
1926     --- a/include/linux/mm.h
1927     +++ b/include/linux/mm.h
1928     @@ -2549,6 +2549,7 @@ enum mf_action_page_type {
1929     MF_MSG_POISONED_HUGE,
1930     MF_MSG_HUGE,
1931     MF_MSG_FREE_HUGE,
1932     + MF_MSG_NON_PMD_HUGE,
1933     MF_MSG_UNMAP_FAILED,
1934     MF_MSG_DIRTY_SWAPCACHE,
1935     MF_MSG_CLEAN_SWAPCACHE,
1936     diff --git a/include/trace/events/sched.h b/include/trace/events/sched.h
1937     index da10aa21bebc..d447f24df970 100644
1938     --- a/include/trace/events/sched.h
1939     +++ b/include/trace/events/sched.h
1940     @@ -435,7 +435,9 @@ TRACE_EVENT(sched_pi_setprio,
1941     memcpy(__entry->comm, tsk->comm, TASK_COMM_LEN);
1942     __entry->pid = tsk->pid;
1943     __entry->oldprio = tsk->prio;
1944     - __entry->newprio = pi_task ? pi_task->prio : tsk->prio;
1945     + __entry->newprio = pi_task ?
1946     + min(tsk->normal_prio, pi_task->prio) :
1947     + tsk->normal_prio;
1948     /* XXX SCHED_DEADLINE bits missing */
1949     ),
1950    
1951     diff --git a/kernel/irq/irqdesc.c b/kernel/irq/irqdesc.c
1952     index 82afb7ed369f..e97bbae947f0 100644
1953     --- a/kernel/irq/irqdesc.c
1954     +++ b/kernel/irq/irqdesc.c
1955     @@ -27,7 +27,7 @@ static struct lock_class_key irq_desc_lock_class;
1956     #if defined(CONFIG_SMP)
1957     static int __init irq_affinity_setup(char *str)
1958     {
1959     - zalloc_cpumask_var(&irq_default_affinity, GFP_NOWAIT);
1960     + alloc_bootmem_cpumask_var(&irq_default_affinity);
1961     cpulist_parse(str, irq_default_affinity);
1962     /*
1963     * Set at least the boot cpu. We don't want to end up with
1964     @@ -40,10 +40,8 @@ __setup("irqaffinity=", irq_affinity_setup);
1965    
1966     static void __init init_irq_default_affinity(void)
1967     {
1968     -#ifdef CONFIG_CPUMASK_OFFSTACK
1969     - if (!irq_default_affinity)
1970     + if (!cpumask_available(irq_default_affinity))
1971     zalloc_cpumask_var(&irq_default_affinity, GFP_NOWAIT);
1972     -#endif
1973     if (cpumask_empty(irq_default_affinity))
1974     cpumask_setall(irq_default_affinity);
1975     }
1976     diff --git a/kernel/trace/trace_functions_graph.c b/kernel/trace/trace_functions_graph.c
1977     index 23c0b0cb5fb9..169b3c44ee97 100644
1978     --- a/kernel/trace/trace_functions_graph.c
1979     +++ b/kernel/trace/trace_functions_graph.c
1980     @@ -831,6 +831,7 @@ print_graph_entry_leaf(struct trace_iterator *iter,
1981     struct ftrace_graph_ret *graph_ret;
1982     struct ftrace_graph_ent *call;
1983     unsigned long long duration;
1984     + int cpu = iter->cpu;
1985     int i;
1986    
1987     graph_ret = &ret_entry->ret;
1988     @@ -839,7 +840,6 @@ print_graph_entry_leaf(struct trace_iterator *iter,
1989    
1990     if (data) {
1991     struct fgraph_cpu_data *cpu_data;
1992     - int cpu = iter->cpu;
1993    
1994     cpu_data = per_cpu_ptr(data->cpu_data, cpu);
1995    
1996     @@ -869,6 +869,9 @@ print_graph_entry_leaf(struct trace_iterator *iter,
1997    
1998     trace_seq_printf(s, "%ps();\n", (void *)call->func);
1999    
2000     + print_graph_irq(iter, graph_ret->func, TRACE_GRAPH_RET,
2001     + cpu, iter->ent->pid, flags);
2002     +
2003     return trace_handle_return(s);
2004     }
2005    
2006     diff --git a/mm/hugetlb.c b/mm/hugetlb.c
2007     index b1f841a9edd4..dfd2947e046e 100644
2008     --- a/mm/hugetlb.c
2009     +++ b/mm/hugetlb.c
2010     @@ -2159,6 +2159,7 @@ static void __init gather_bootmem_prealloc(void)
2011     */
2012     if (hstate_is_gigantic(h))
2013     adjust_managed_page_count(page, 1 << h->order);
2014     + cond_resched();
2015     }
2016     }
2017    
2018     diff --git a/mm/memory-failure.c b/mm/memory-failure.c
2019     index 1cd3b3569af8..345e69d88b37 100644
2020     --- a/mm/memory-failure.c
2021     +++ b/mm/memory-failure.c
2022     @@ -508,6 +508,7 @@ static const char * const action_page_types[] = {
2023     [MF_MSG_POISONED_HUGE] = "huge page already hardware poisoned",
2024     [MF_MSG_HUGE] = "huge page",
2025     [MF_MSG_FREE_HUGE] = "free huge page",
2026     + [MF_MSG_NON_PMD_HUGE] = "non-pmd-sized huge page",
2027     [MF_MSG_UNMAP_FAILED] = "unmapping failed page",
2028     [MF_MSG_DIRTY_SWAPCACHE] = "dirty swapcache page",
2029     [MF_MSG_CLEAN_SWAPCACHE] = "clean swapcache page",
2030     @@ -1090,6 +1091,21 @@ static int memory_failure_hugetlb(unsigned long pfn, int trapno, int flags)
2031     return 0;
2032     }
2033    
2034     + /*
2035     + * TODO: hwpoison for pud-sized hugetlb doesn't work right now, so
2036     + * simply disable it. In order to make it work properly, we need
2037     + * make sure that:
2038     + * - conversion of a pud that maps an error hugetlb into hwpoison
2039     + * entry properly works, and
2040     + * - other mm code walking over page table is aware of pud-aligned
2041     + * hwpoison entries.
2042     + */
2043     + if (huge_page_size(page_hstate(head)) > PMD_SIZE) {
2044     + action_result(pfn, MF_MSG_NON_PMD_HUGE, MF_IGNORED);
2045     + res = -EBUSY;
2046     + goto out;
2047     + }
2048     +
2049     if (!hwpoison_user_mappings(p, pfn, trapno, flags, &head)) {
2050     action_result(pfn, MF_MSG_UNMAP_FAILED, MF_IGNORED);
2051     res = -EBUSY;
2052     diff --git a/mm/vmstat.c b/mm/vmstat.c
2053     index e085b13c572e..4bb13e72ac97 100644
2054     --- a/mm/vmstat.c
2055     +++ b/mm/vmstat.c
2056     @@ -1770,11 +1770,9 @@ static void vmstat_update(struct work_struct *w)
2057     * to occur in the future. Keep on running the
2058     * update worker thread.
2059     */
2060     - preempt_disable();
2061     queue_delayed_work_on(smp_processor_id(), mm_percpu_wq,
2062     this_cpu_ptr(&vmstat_work),
2063     round_jiffies_relative(sysctl_stat_interval));
2064     - preempt_enable();
2065     }
2066     }
2067    
2068     diff --git a/net/netfilter/nf_log.c b/net/netfilter/nf_log.c
2069     index 8bb152a7cca4..276324abfa60 100644
2070     --- a/net/netfilter/nf_log.c
2071     +++ b/net/netfilter/nf_log.c
2072     @@ -458,14 +458,17 @@ static int nf_log_proc_dostring(struct ctl_table *table, int write,
2073     rcu_assign_pointer(net->nf.nf_loggers[tindex], logger);
2074     mutex_unlock(&nf_log_mutex);
2075     } else {
2076     + struct ctl_table tmp = *table;
2077     +
2078     + tmp.data = buf;
2079     mutex_lock(&nf_log_mutex);
2080     logger = nft_log_dereference(net->nf.nf_loggers[tindex]);
2081     if (!logger)
2082     - table->data = "NONE";
2083     + strlcpy(buf, "NONE", sizeof(buf));
2084     else
2085     - table->data = logger->name;
2086     - r = proc_dostring(table, write, buffer, lenp, ppos);
2087     + strlcpy(buf, logger->name, sizeof(buf));
2088     mutex_unlock(&nf_log_mutex);
2089     + r = proc_dostring(&tmp, write, buffer, lenp, ppos);
2090     }
2091    
2092     return r;
2093     diff --git a/scripts/Kbuild.include b/scripts/Kbuild.include
2094     index 97769465de13..fcbbecf92395 100644
2095     --- a/scripts/Kbuild.include
2096     +++ b/scripts/Kbuild.include
2097     @@ -8,6 +8,7 @@ squote := '
2098     empty :=
2099     space := $(empty) $(empty)
2100     space_escape := _-_SPACE_-_
2101     +pound := \#
2102    
2103     ###
2104     # Name of target with a '.' as filename prefix. foo/bar.o => foo/.bar.o
2105     @@ -251,11 +252,11 @@ endif
2106    
2107     # Replace >$< with >$$< to preserve $ when reloading the .cmd file
2108     # (needed for make)
2109     -# Replace >#< with >\#< to avoid starting a comment in the .cmd file
2110     +# Replace >#< with >$(pound)< to avoid starting a comment in the .cmd file
2111     # (needed for make)
2112     # Replace >'< with >'\''< to be able to enclose the whole string in '...'
2113     # (needed for the shell)
2114     -make-cmd = $(call escsq,$(subst \#,\\\#,$(subst $$,$$$$,$(cmd_$(1)))))
2115     +make-cmd = $(call escsq,$(subst $(pound),$$(pound),$(subst $$,$$$$,$(cmd_$(1)))))
2116    
2117     # Find any prerequisites that is newer than target or that does not exist.
2118     # PHONY targets skipped in both cases.
2119     diff --git a/tools/build/Build.include b/tools/build/Build.include
2120     index 418871d02ebf..a4bbb984941d 100644
2121     --- a/tools/build/Build.include
2122     +++ b/tools/build/Build.include
2123     @@ -12,6 +12,7 @@
2124     # Convenient variables
2125     comma := ,
2126     squote := '
2127     +pound := \#
2128    
2129     ###
2130     # Name of target with a '.' as filename prefix. foo/bar.o => foo/.bar.o
2131     @@ -43,11 +44,11 @@ echo-cmd = $(if $($(quiet)cmd_$(1)),\
2132     ###
2133     # Replace >$< with >$$< to preserve $ when reloading the .cmd file
2134     # (needed for make)
2135     -# Replace >#< with >\#< to avoid starting a comment in the .cmd file
2136     +# Replace >#< with >$(pound)< to avoid starting a comment in the .cmd file
2137     # (needed for make)
2138     # Replace >'< with >'\''< to be able to enclose the whole string in '...'
2139     # (needed for the shell)
2140     -make-cmd = $(call escsq,$(subst \#,\\\#,$(subst $$,$$$$,$(cmd_$(1)))))
2141     +make-cmd = $(call escsq,$(subst $(pound),$$(pound),$(subst $$,$$$$,$(cmd_$(1)))))
2142    
2143     ###
2144     # Find any prerequisites that is newer than target or that does not exist.
2145     diff --git a/tools/objtool/Makefile b/tools/objtool/Makefile
2146     index e6acc281dd37..8ae824dbfca3 100644
2147     --- a/tools/objtool/Makefile
2148     +++ b/tools/objtool/Makefile
2149     @@ -35,7 +35,7 @@ CFLAGS += -Wall -Werror $(WARNINGS) -fomit-frame-pointer -O2 -g $(INCLUDES)
2150     LDFLAGS += -lelf $(LIBSUBCMD)
2151    
2152     # Allow old libelf to be used:
2153     -elfshdr := $(shell echo '\#include <libelf.h>' | $(CC) $(CFLAGS) -x c -E - | grep elf_getshdr)
2154     +elfshdr := $(shell echo '$(pound)include <libelf.h>' | $(CC) $(CFLAGS) -x c -E - | grep elf_getshdr)
2155     CFLAGS += $(if $(elfshdr),,-DLIBELF_USE_DEPRECATED)
2156    
2157     AWK = awk
2158     diff --git a/tools/scripts/Makefile.include b/tools/scripts/Makefile.include
2159     index 654efd9768fd..5f3f1f44ed0a 100644
2160     --- a/tools/scripts/Makefile.include
2161     +++ b/tools/scripts/Makefile.include
2162     @@ -101,3 +101,5 @@ ifneq ($(silent),1)
2163     QUIET_INSTALL = @printf ' INSTALL %s\n' $1;
2164     endif
2165     endif
2166     +
2167     +pound := \#