Gentoo Archives: gentoo-commits

From: "Mike Pagano (mpagano)" <mpagano@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] linux-patches r2180 - genpatches-2.6/trunk/3.4
Date: Mon, 30 Jul 2012 17:06:02
Message-Id: 20120730170551.5AB2B2004B@flycatcher.gentoo.org
1 Author: mpagano
2 Date: 2012-07-30 17:05:50 +0000 (Mon, 30 Jul 2012)
3 New Revision: 2180
4
5 Added:
6 genpatches-2.6/trunk/3.4/1006_linux-3.4.7.patch
7 Modified:
8 genpatches-2.6/trunk/3.4/0000_README
9 Log:
10 Linux patch 3.4.7
11
12 Modified: genpatches-2.6/trunk/3.4/0000_README
13 ===================================================================
14 --- genpatches-2.6/trunk/3.4/0000_README 2012-07-26 18:54:57 UTC (rev 2179)
15 +++ genpatches-2.6/trunk/3.4/0000_README 2012-07-30 17:05:50 UTC (rev 2180)
16 @@ -63,6 +63,10 @@
17 From: http://www.kernel.org
18 Desc: Linux 3.4.6
19
20 +Patch: 1006_linux-3.4.7.patch
21 +From: http://www.kernel.org
22 +Desc: Linux 3.4.7
23 +
24 Patch: 1700_correct-bnx2-firware-ver-mips.patch
25 From: https://bugs.gentoo.org/show_bug.cgi?id=424609
26 Desc: Correct firmware version for bnx2 on mips
27
28 Added: genpatches-2.6/trunk/3.4/1006_linux-3.4.7.patch
29 ===================================================================
30 --- genpatches-2.6/trunk/3.4/1006_linux-3.4.7.patch (rev 0)
31 +++ genpatches-2.6/trunk/3.4/1006_linux-3.4.7.patch 2012-07-30 17:05:50 UTC (rev 2180)
32 @@ -0,0 +1,802 @@
33 +diff --git a/Makefile b/Makefile
34 +index 5d0edcb..e17a98c 100644
35 +--- a/Makefile
36 ++++ b/Makefile
37 +@@ -1,6 +1,6 @@
38 + VERSION = 3
39 + PATCHLEVEL = 4
40 +-SUBLEVEL = 6
41 ++SUBLEVEL = 7
42 + EXTRAVERSION =
43 + NAME = Saber-toothed Squirrel
44 +
45 +diff --git a/arch/arm/plat-s5p/clock.c b/arch/arm/plat-s5p/clock.c
46 +index f68a9bb..b042795 100644
47 +--- a/arch/arm/plat-s5p/clock.c
48 ++++ b/arch/arm/plat-s5p/clock.c
49 +@@ -38,6 +38,7 @@ struct clk clk_ext_xtal_mux = {
50 + struct clk clk_xusbxti = {
51 + .name = "xusbxti",
52 + .id = -1,
53 ++ .rate = 24000000,
54 + };
55 +
56 + struct clk s5p_clk_27m = {
57 +diff --git a/arch/mips/include/asm/thread_info.h b/arch/mips/include/asm/thread_info.h
58 +index 0d85d8e..abb13e8 100644
59 +--- a/arch/mips/include/asm/thread_info.h
60 ++++ b/arch/mips/include/asm/thread_info.h
61 +@@ -60,6 +60,8 @@ struct thread_info {
62 + register struct thread_info *__current_thread_info __asm__("$28");
63 + #define current_thread_info() __current_thread_info
64 +
65 ++#endif /* !__ASSEMBLY__ */
66 ++
67 + /* thread information allocation */
68 + #if defined(CONFIG_PAGE_SIZE_4KB) && defined(CONFIG_32BIT)
69 + #define THREAD_SIZE_ORDER (1)
70 +@@ -97,8 +99,6 @@ register struct thread_info *__current_thread_info __asm__("$28");
71 +
72 + #define free_thread_info(info) kfree(info)
73 +
74 +-#endif /* !__ASSEMBLY__ */
75 +-
76 + #define PREEMPT_ACTIVE 0x10000000
77 +
78 + /*
79 +diff --git a/arch/mips/kernel/vmlinux.lds.S b/arch/mips/kernel/vmlinux.lds.S
80 +index 924da5e..df243a6 100644
81 +--- a/arch/mips/kernel/vmlinux.lds.S
82 ++++ b/arch/mips/kernel/vmlinux.lds.S
83 +@@ -1,5 +1,6 @@
84 + #include <asm/asm-offsets.h>
85 + #include <asm/page.h>
86 ++#include <asm/thread_info.h>
87 + #include <asm-generic/vmlinux.lds.h>
88 +
89 + #undef mips
90 +@@ -72,7 +73,7 @@ SECTIONS
91 + .data : { /* Data */
92 + . = . + DATAOFFSET; /* for CONFIG_MAPPED_KERNEL */
93 +
94 +- INIT_TASK_DATA(PAGE_SIZE)
95 ++ INIT_TASK_DATA(THREAD_SIZE)
96 + NOSAVE_DATA
97 + CACHELINE_ALIGNED_DATA(1 << CONFIG_MIPS_L1_CACHE_SHIFT)
98 + READ_MOSTLY_DATA(1 << CONFIG_MIPS_L1_CACHE_SHIFT)
99 +diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
100 +index 054677b..973c238 100644
101 +--- a/drivers/hid/hid-core.c
102 ++++ b/drivers/hid/hid-core.c
103 +@@ -1391,6 +1391,7 @@ static const struct hid_device_id hid_have_special_driver[] = {
104 + { HID_USB_DEVICE(USB_VENDOR_ID_ASUS, USB_DEVICE_ID_ASUS_T91MT) },
105 + { HID_USB_DEVICE(USB_VENDOR_ID_ASUS, USB_DEVICE_ID_ASUSTEK_MULTITOUCH_YFO) },
106 + { HID_USB_DEVICE(USB_VENDOR_ID_BELKIN, USB_DEVICE_ID_FLIP_KVM) },
107 ++ { HID_USB_DEVICE(USB_VENDOR_ID_BAANTO, USB_DEVICE_ID_BAANTO_MT_190W2), },
108 + { HID_USB_DEVICE(USB_VENDOR_ID_BTC, USB_DEVICE_ID_BTC_EMPREX_REMOTE) },
109 + { HID_USB_DEVICE(USB_VENDOR_ID_BTC, USB_DEVICE_ID_BTC_EMPREX_REMOTE_2) },
110 + { HID_USB_DEVICE(USB_VENDOR_ID_CANDO, USB_DEVICE_ID_CANDO_PIXCIR_MULTI_TOUCH) },
111 +diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
112 +index dfd4098..bb1abf8 100644
113 +--- a/drivers/hid/hid-ids.h
114 ++++ b/drivers/hid/hid-ids.h
115 +@@ -160,6 +160,9 @@
116 + #define USB_VENDOR_ID_AVERMEDIA 0x07ca
117 + #define USB_DEVICE_ID_AVER_FM_MR800 0xb800
118 +
119 ++#define USB_VENDOR_ID_BAANTO 0x2453
120 ++#define USB_DEVICE_ID_BAANTO_MT_190W2 0x0100
121 ++
122 + #define USB_VENDOR_ID_BELKIN 0x050d
123 + #define USB_DEVICE_ID_FLIP_KVM 0x3201
124 +
125 +@@ -650,6 +653,9 @@
126 + #define USB_DEVICE_ID_SAMSUNG_IR_REMOTE 0x0001
127 + #define USB_DEVICE_ID_SAMSUNG_WIRELESS_KBD_MOUSE 0x0600
128 +
129 ++#define USB_VENDOR_ID_SENNHEISER 0x1395
130 ++#define USB_DEVICE_ID_SENNHEISER_BTD500USB 0x002c
131 ++
132 + #define USB_VENDOR_ID_SIGMA_MICRO 0x1c4f
133 + #define USB_DEVICE_ID_SIGMA_MICRO_KEYBOARD 0x0002
134 +
135 +diff --git a/drivers/hid/hid-input.c b/drivers/hid/hid-input.c
136 +index 002781c..21e473e 100644
137 +--- a/drivers/hid/hid-input.c
138 ++++ b/drivers/hid/hid-input.c
139 +@@ -290,6 +290,9 @@ static const struct hid_device_id hid_battery_quirks[] = {
140 + { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE,
141 + USB_DEVICE_ID_APPLE_ALU_WIRELESS_2011_ANSI),
142 + HID_BATTERY_QUIRK_PERCENT | HID_BATTERY_QUIRK_FEATURE },
143 ++ { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE,
144 ++ USB_DEVICE_ID_APPLE_ALU_WIRELESS_ANSI),
145 ++ HID_BATTERY_QUIRK_PERCENT | HID_BATTERY_QUIRK_FEATURE },
146 + {}
147 + };
148 +
149 +diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c
150 +index 543896d..a6197f5 100644
151 +--- a/drivers/hid/hid-multitouch.c
152 ++++ b/drivers/hid/hid-multitouch.c
153 +@@ -783,6 +783,10 @@ static const struct hid_device_id mt_devices[] = {
154 + HID_USB_DEVICE(USB_VENDOR_ID_ATMEL,
155 + USB_DEVICE_ID_ATMEL_MXT_DIGITIZER) },
156 +
157 ++ /* Baanto multitouch devices */
158 ++ { .driver_data = MT_CLS_DEFAULT,
159 ++ HID_USB_DEVICE(USB_VENDOR_ID_BAANTO,
160 ++ USB_DEVICE_ID_BAANTO_MT_190W2) },
161 + /* Cando panels */
162 + { .driver_data = MT_CLS_DUAL_INRANGE_CONTACTNUMBER,
163 + HID_USB_DEVICE(USB_VENDOR_ID_CANDO,
164 +diff --git a/drivers/hid/usbhid/hid-quirks.c b/drivers/hid/usbhid/hid-quirks.c
165 +index 782c639..82f61ee 100644
166 +--- a/drivers/hid/usbhid/hid-quirks.c
167 ++++ b/drivers/hid/usbhid/hid-quirks.c
168 +@@ -76,6 +76,7 @@ static const struct hid_blacklist {
169 + { USB_VENDOR_ID_PRODIGE, USB_DEVICE_ID_PRODIGE_CORDLESS, HID_QUIRK_NOGET },
170 + { USB_VENDOR_ID_QUANTA, USB_DEVICE_ID_PIXART_IMAGING_INC_OPTICAL_TOUCH_SCREEN, HID_QUIRK_NOGET },
171 + { USB_VENDOR_ID_QUANTA, USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH_3008, HID_QUIRK_NOGET },
172 ++ { USB_VENDOR_ID_SENNHEISER, USB_DEVICE_ID_SENNHEISER_BTD500USB, HID_QUIRK_NOGET },
173 + { USB_VENDOR_ID_SUN, USB_DEVICE_ID_RARITAN_KVM_DONGLE, HID_QUIRK_NOGET },
174 + { USB_VENDOR_ID_SYMBOL, USB_DEVICE_ID_SYMBOL_SCANNER_1, HID_QUIRK_NOGET },
175 + { USB_VENDOR_ID_SYMBOL, USB_DEVICE_ID_SYMBOL_SCANNER_2, HID_QUIRK_NOGET },
176 +diff --git a/drivers/md/dm-raid1.c b/drivers/md/dm-raid1.c
177 +index d039de8..b58b7a3 100644
178 +--- a/drivers/md/dm-raid1.c
179 ++++ b/drivers/md/dm-raid1.c
180 +@@ -1084,6 +1084,7 @@ static int mirror_ctr(struct dm_target *ti, unsigned int argc, char **argv)
181 + ti->split_io = dm_rh_get_region_size(ms->rh);
182 + ti->num_flush_requests = 1;
183 + ti->num_discard_requests = 1;
184 ++ ti->discard_zeroes_data_unsupported = 1;
185 +
186 + ms->kmirrord_wq = alloc_workqueue("kmirrord",
187 + WQ_NON_REENTRANT | WQ_MEM_RECLAIM, 0);
188 +@@ -1214,7 +1215,7 @@ static int mirror_end_io(struct dm_target *ti, struct bio *bio,
189 + * We need to dec pending if this was a write.
190 + */
191 + if (rw == WRITE) {
192 +- if (!(bio->bi_rw & REQ_FLUSH))
193 ++ if (!(bio->bi_rw & (REQ_FLUSH | REQ_DISCARD)))
194 + dm_rh_dec(ms->rh, map_context->ll);
195 + return error;
196 + }
197 +diff --git a/drivers/md/dm-region-hash.c b/drivers/md/dm-region-hash.c
198 +index 7771ed2..69732e0 100644
199 +--- a/drivers/md/dm-region-hash.c
200 ++++ b/drivers/md/dm-region-hash.c
201 +@@ -404,6 +404,9 @@ void dm_rh_mark_nosync(struct dm_region_hash *rh, struct bio *bio)
202 + return;
203 + }
204 +
205 ++ if (bio->bi_rw & REQ_DISCARD)
206 ++ return;
207 ++
208 + /* We must inform the log that the sync count has changed. */
209 + log->type->set_region_sync(log, region, 0);
210 +
211 +@@ -524,7 +527,7 @@ void dm_rh_inc_pending(struct dm_region_hash *rh, struct bio_list *bios)
212 + struct bio *bio;
213 +
214 + for (bio = bios->head; bio; bio = bio->bi_next) {
215 +- if (bio->bi_rw & REQ_FLUSH)
216 ++ if (bio->bi_rw & (REQ_FLUSH | REQ_DISCARD))
217 + continue;
218 + rh_inc(rh, dm_rh_bio_to_region(rh, bio));
219 + }
220 +diff --git a/drivers/md/dm-thin.c b/drivers/md/dm-thin.c
221 +index eb3d138..e0a0ebe 100644
222 +--- a/drivers/md/dm-thin.c
223 ++++ b/drivers/md/dm-thin.c
224 +@@ -1240,7 +1240,10 @@ static void process_discard(struct thin_c *tc, struct bio *bio)
225 +
226 + cell_release_singleton(cell, bio);
227 + cell_release_singleton(cell2, bio);
228 +- remap_and_issue(tc, bio, lookup_result.block);
229 ++ if ((!lookup_result.shared) && pool->pf.discard_passdown)
230 ++ remap_and_issue(tc, bio, lookup_result.block);
231 ++ else
232 ++ bio_endio(bio, 0);
233 + }
234 + break;
235 +
236 +@@ -2575,6 +2578,7 @@ static int thin_ctr(struct dm_target *ti, unsigned argc, char **argv)
237 + if (tc->pool->pf.discard_enabled) {
238 + ti->discards_supported = 1;
239 + ti->num_discard_requests = 1;
240 ++ ti->discard_zeroes_data_unsupported = 1;
241 + }
242 +
243 + dm_put(pool_md);
244 +diff --git a/drivers/md/md.c b/drivers/md/md.c
245 +index 2b30ffd..9ee8ce3 100644
246 +--- a/drivers/md/md.c
247 ++++ b/drivers/md/md.c
248 +@@ -3744,8 +3744,8 @@ array_state_show(struct mddev *mddev, char *page)
249 + return sprintf(page, "%s\n", array_states[st]);
250 + }
251 +
252 +-static int do_md_stop(struct mddev * mddev, int ro, int is_open);
253 +-static int md_set_readonly(struct mddev * mddev, int is_open);
254 ++static int do_md_stop(struct mddev * mddev, int ro, struct block_device *bdev);
255 ++static int md_set_readonly(struct mddev * mddev, struct block_device *bdev);
256 + static int do_md_run(struct mddev * mddev);
257 + static int restart_array(struct mddev *mddev);
258 +
259 +@@ -3761,14 +3761,14 @@ array_state_store(struct mddev *mddev, const char *buf, size_t len)
260 + /* stopping an active array */
261 + if (atomic_read(&mddev->openers) > 0)
262 + return -EBUSY;
263 +- err = do_md_stop(mddev, 0, 0);
264 ++ err = do_md_stop(mddev, 0, NULL);
265 + break;
266 + case inactive:
267 + /* stopping an active array */
268 + if (mddev->pers) {
269 + if (atomic_read(&mddev->openers) > 0)
270 + return -EBUSY;
271 +- err = do_md_stop(mddev, 2, 0);
272 ++ err = do_md_stop(mddev, 2, NULL);
273 + } else
274 + err = 0; /* already inactive */
275 + break;
276 +@@ -3776,7 +3776,7 @@ array_state_store(struct mddev *mddev, const char *buf, size_t len)
277 + break; /* not supported yet */
278 + case readonly:
279 + if (mddev->pers)
280 +- err = md_set_readonly(mddev, 0);
281 ++ err = md_set_readonly(mddev, NULL);
282 + else {
283 + mddev->ro = 1;
284 + set_disk_ro(mddev->gendisk, 1);
285 +@@ -3786,7 +3786,7 @@ array_state_store(struct mddev *mddev, const char *buf, size_t len)
286 + case read_auto:
287 + if (mddev->pers) {
288 + if (mddev->ro == 0)
289 +- err = md_set_readonly(mddev, 0);
290 ++ err = md_set_readonly(mddev, NULL);
291 + else if (mddev->ro == 1)
292 + err = restart_array(mddev);
293 + if (err == 0) {
294 +@@ -5124,15 +5124,17 @@ void md_stop(struct mddev *mddev)
295 + }
296 + EXPORT_SYMBOL_GPL(md_stop);
297 +
298 +-static int md_set_readonly(struct mddev *mddev, int is_open)
299 ++static int md_set_readonly(struct mddev *mddev, struct block_device *bdev)
300 + {
301 + int err = 0;
302 + mutex_lock(&mddev->open_mutex);
303 +- if (atomic_read(&mddev->openers) > is_open) {
304 ++ if (atomic_read(&mddev->openers) > !!bdev) {
305 + printk("md: %s still in use.\n",mdname(mddev));
306 + err = -EBUSY;
307 + goto out;
308 + }
309 ++ if (bdev)
310 ++ sync_blockdev(bdev);
311 + if (mddev->pers) {
312 + __md_stop_writes(mddev);
313 +
314 +@@ -5154,18 +5156,26 @@ out:
315 + * 0 - completely stop and dis-assemble array
316 + * 2 - stop but do not disassemble array
317 + */
318 +-static int do_md_stop(struct mddev * mddev, int mode, int is_open)
319 ++static int do_md_stop(struct mddev * mddev, int mode,
320 ++ struct block_device *bdev)
321 + {
322 + struct gendisk *disk = mddev->gendisk;
323 + struct md_rdev *rdev;
324 +
325 + mutex_lock(&mddev->open_mutex);
326 +- if (atomic_read(&mddev->openers) > is_open ||
327 ++ if (atomic_read(&mddev->openers) > !!bdev ||
328 + mddev->sysfs_active) {
329 + printk("md: %s still in use.\n",mdname(mddev));
330 + mutex_unlock(&mddev->open_mutex);
331 + return -EBUSY;
332 + }
333 ++ if (bdev)
334 ++ /* It is possible IO was issued on some other
335 ++ * open file which was closed before we took ->open_mutex.
336 ++ * As that was not the last close __blkdev_put will not
337 ++ * have called sync_blockdev, so we must.
338 ++ */
339 ++ sync_blockdev(bdev);
340 +
341 + if (mddev->pers) {
342 + if (mddev->ro)
343 +@@ -5239,7 +5249,7 @@ static void autorun_array(struct mddev *mddev)
344 + err = do_md_run(mddev);
345 + if (err) {
346 + printk(KERN_WARNING "md: do_md_run() returned %d\n", err);
347 +- do_md_stop(mddev, 0, 0);
348 ++ do_md_stop(mddev, 0, NULL);
349 + }
350 + }
351 +
352 +@@ -6237,11 +6247,11 @@ static int md_ioctl(struct block_device *bdev, fmode_t mode,
353 + goto done_unlock;
354 +
355 + case STOP_ARRAY:
356 +- err = do_md_stop(mddev, 0, 1);
357 ++ err = do_md_stop(mddev, 0, bdev);
358 + goto done_unlock;
359 +
360 + case STOP_ARRAY_RO:
361 +- err = md_set_readonly(mddev, 1);
362 ++ err = md_set_readonly(mddev, bdev);
363 + goto done_unlock;
364 +
365 + case BLKROSET:
366 +diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c
367 +index d1f74ab..d7add9d 100644
368 +--- a/drivers/md/raid1.c
369 ++++ b/drivers/md/raid1.c
370 +@@ -1821,8 +1821,14 @@ static void sync_request_write(struct mddev *mddev, struct r1bio *r1_bio)
371 +
372 + if (atomic_dec_and_test(&r1_bio->remaining)) {
373 + /* if we're here, all write(s) have completed, so clean up */
374 +- md_done_sync(mddev, r1_bio->sectors, 1);
375 +- put_buf(r1_bio);
376 ++ int s = r1_bio->sectors;
377 ++ if (test_bit(R1BIO_MadeGood, &r1_bio->state) ||
378 ++ test_bit(R1BIO_WriteError, &r1_bio->state))
379 ++ reschedule_retry(r1_bio);
380 ++ else {
381 ++ put_buf(r1_bio);
382 ++ md_done_sync(mddev, s, 1);
383 ++ }
384 + }
385 + }
386 +
387 +diff --git a/drivers/target/target_core_cdb.c b/drivers/target/target_core_cdb.c
388 +index 30a6770..fa323f8 100644
389 +--- a/drivers/target/target_core_cdb.c
390 ++++ b/drivers/target/target_core_cdb.c
391 +@@ -1107,7 +1107,7 @@ int target_emulate_write_same(struct se_task *task)
392 + if (num_blocks != 0)
393 + range = num_blocks;
394 + else
395 +- range = (dev->transport->get_blocks(dev) - lba);
396 ++ range = (dev->transport->get_blocks(dev) - lba) + 1;
397 +
398 + pr_debug("WRITE_SAME UNMAP: LBA: %llu Range: %llu\n",
399 + (unsigned long long)lba, (unsigned long long)range);
400 +diff --git a/drivers/target/target_core_pr.c b/drivers/target/target_core_pr.c
401 +index c3148b1..89d10e6 100644
402 +--- a/drivers/target/target_core_pr.c
403 ++++ b/drivers/target/target_core_pr.c
404 +@@ -2038,7 +2038,7 @@ static int __core_scsi3_write_aptpl_to_file(
405 + if (IS_ERR(file) || !file || !file->f_dentry) {
406 + pr_err("filp_open(%s) for APTPL metadata"
407 + " failed\n", path);
408 +- return (PTR_ERR(file) < 0 ? PTR_ERR(file) : -ENOENT);
409 ++ return IS_ERR(file) ? PTR_ERR(file) : -ENOENT;
410 + }
411 +
412 + iov[0].iov_base = &buf[0];
413 +@@ -3826,7 +3826,7 @@ int target_scsi3_emulate_pr_out(struct se_task *task)
414 + " SPC-2 reservation is held, returning"
415 + " RESERVATION_CONFLICT\n");
416 + cmd->scsi_sense_reason = TCM_RESERVATION_CONFLICT;
417 +- ret = EINVAL;
418 ++ ret = -EINVAL;
419 + goto out;
420 + }
421 +
422 +@@ -3836,7 +3836,8 @@ int target_scsi3_emulate_pr_out(struct se_task *task)
423 + */
424 + if (!cmd->se_sess) {
425 + cmd->scsi_sense_reason = TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE;
426 +- return -EINVAL;
427 ++ ret = -EINVAL;
428 ++ goto out;
429 + }
430 +
431 + if (cmd->data_length < 24) {
432 +diff --git a/drivers/target/tcm_fc/tfc_cmd.c b/drivers/target/tcm_fc/tfc_cmd.c
433 +index a375f25..da90f64 100644
434 +--- a/drivers/target/tcm_fc/tfc_cmd.c
435 ++++ b/drivers/target/tcm_fc/tfc_cmd.c
436 +@@ -240,6 +240,8 @@ u32 ft_get_task_tag(struct se_cmd *se_cmd)
437 + {
438 + struct ft_cmd *cmd = container_of(se_cmd, struct ft_cmd, se_cmd);
439 +
440 ++ if (cmd->aborted)
441 ++ return ~0;
442 + return fc_seq_exch(cmd->seq)->rxid;
443 + }
444 +
445 +diff --git a/fs/cifs/cifssmb.c b/fs/cifs/cifssmb.c
446 +index 6b79efd..3a75ee5 100644
447 +--- a/fs/cifs/cifssmb.c
448 ++++ b/fs/cifs/cifssmb.c
449 +@@ -89,6 +89,32 @@ static struct {
450 + /* Forward declarations */
451 + static void cifs_readv_complete(struct work_struct *work);
452 +
453 ++#ifdef CONFIG_HIGHMEM
454 ++/*
455 ++ * On arches that have high memory, kmap address space is limited. By
456 ++ * serializing the kmap operations on those arches, we ensure that we don't
457 ++ * end up with a bunch of threads in writeback with partially mapped page
458 ++ * arrays, stuck waiting for kmap to come back. That situation prevents
459 ++ * progress and can deadlock.
460 ++ */
461 ++static DEFINE_MUTEX(cifs_kmap_mutex);
462 ++
463 ++static inline void
464 ++cifs_kmap_lock(void)
465 ++{
466 ++ mutex_lock(&cifs_kmap_mutex);
467 ++}
468 ++
469 ++static inline void
470 ++cifs_kmap_unlock(void)
471 ++{
472 ++ mutex_unlock(&cifs_kmap_mutex);
473 ++}
474 ++#else /* !CONFIG_HIGHMEM */
475 ++#define cifs_kmap_lock() do { ; } while(0)
476 ++#define cifs_kmap_unlock() do { ; } while(0)
477 ++#endif /* CONFIG_HIGHMEM */
478 ++
479 + /* Mark as invalid, all open files on tree connections since they
480 + were closed when session to server was lost */
481 + static void mark_open_files_invalid(struct cifs_tcon *pTcon)
482 +@@ -1557,6 +1583,7 @@ cifs_readv_receive(struct TCP_Server_Info *server, struct mid_q_entry *mid)
483 + eof_index = eof ? (eof - 1) >> PAGE_CACHE_SHIFT : 0;
484 + cFYI(1, "eof=%llu eof_index=%lu", eof, eof_index);
485 +
486 ++ cifs_kmap_lock();
487 + list_for_each_entry_safe(page, tpage, &rdata->pages, lru) {
488 + if (remaining >= PAGE_CACHE_SIZE) {
489 + /* enough data to fill the page */
490 +@@ -1606,6 +1633,7 @@ cifs_readv_receive(struct TCP_Server_Info *server, struct mid_q_entry *mid)
491 + page_cache_release(page);
492 + }
493 + }
494 ++ cifs_kmap_unlock();
495 +
496 + /* issue the read if we have any iovecs left to fill */
497 + if (rdata->nr_iov > 1) {
498 +@@ -2194,7 +2222,9 @@ cifs_async_writev(struct cifs_writedata *wdata)
499 + * and set the iov_len properly for each one. It may also set
500 + * wdata->bytes too.
501 + */
502 ++ cifs_kmap_lock();
503 + wdata->marshal_iov(iov, wdata);
504 ++ cifs_kmap_unlock();
505 +
506 + cFYI(1, "async write at %llu %u bytes", wdata->offset, wdata->bytes);
507 +
508 +diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c
509 +index 402fa0f..87ce8af 100644
510 +--- a/fs/cifs/connect.c
511 ++++ b/fs/cifs/connect.c
512 +@@ -3348,6 +3348,18 @@ void cifs_setup_cifs_sb(struct smb_vol *pvolume_info,
513 + #define CIFS_DEFAULT_NON_POSIX_RSIZE (60 * 1024)
514 + #define CIFS_DEFAULT_NON_POSIX_WSIZE (65536)
515 +
516 ++/*
517 ++ * On hosts with high memory, we can't currently support wsize/rsize that are
518 ++ * larger than we can kmap at once. Cap the rsize/wsize at
519 ++ * LAST_PKMAP * PAGE_SIZE. We'll never be able to fill a read or write request
520 ++ * larger than that anyway.
521 ++ */
522 ++#ifdef CONFIG_HIGHMEM
523 ++#define CIFS_KMAP_SIZE_LIMIT (LAST_PKMAP * PAGE_CACHE_SIZE)
524 ++#else /* CONFIG_HIGHMEM */
525 ++#define CIFS_KMAP_SIZE_LIMIT (1<<24)
526 ++#endif /* CONFIG_HIGHMEM */
527 ++
528 + static unsigned int
529 + cifs_negotiate_wsize(struct cifs_tcon *tcon, struct smb_vol *pvolume_info)
530 + {
531 +@@ -3378,6 +3390,9 @@ cifs_negotiate_wsize(struct cifs_tcon *tcon, struct smb_vol *pvolume_info)
532 + wsize = min_t(unsigned int, wsize,
533 + server->maxBuf - sizeof(WRITE_REQ) + 4);
534 +
535 ++ /* limit to the amount that we can kmap at once */
536 ++ wsize = min_t(unsigned int, wsize, CIFS_KMAP_SIZE_LIMIT);
537 ++
538 + /* hard limit of CIFS_MAX_WSIZE */
539 + wsize = min_t(unsigned int, wsize, CIFS_MAX_WSIZE);
540 +
541 +@@ -3419,6 +3434,9 @@ cifs_negotiate_rsize(struct cifs_tcon *tcon, struct smb_vol *pvolume_info)
542 + if (!(server->capabilities & CAP_LARGE_READ_X))
543 + rsize = min_t(unsigned int, CIFSMaxBufSize, rsize);
544 +
545 ++ /* limit to the amount that we can kmap at once */
546 ++ rsize = min_t(unsigned int, rsize, CIFS_KMAP_SIZE_LIMIT);
547 ++
548 + /* hard limit of CIFS_MAX_RSIZE */
549 + rsize = min_t(unsigned int, rsize, CIFS_MAX_RSIZE);
550 +
551 +diff --git a/fs/cifs/readdir.c b/fs/cifs/readdir.c
552 +index 0a8224d..a4217f0 100644
553 +--- a/fs/cifs/readdir.c
554 ++++ b/fs/cifs/readdir.c
555 +@@ -86,9 +86,12 @@ cifs_readdir_lookup(struct dentry *parent, struct qstr *name,
556 +
557 + dentry = d_lookup(parent, name);
558 + if (dentry) {
559 +- /* FIXME: check for inode number changes? */
560 +- if (dentry->d_inode != NULL)
561 ++ inode = dentry->d_inode;
562 ++ /* update inode in place if i_ino didn't change */
563 ++ if (inode && CIFS_I(inode)->uniqueid == fattr->cf_uniqueid) {
564 ++ cifs_fattr_to_inode(inode, fattr);
565 + return dentry;
566 ++ }
567 + d_drop(dentry);
568 + dput(dentry);
569 + }
570 +diff --git a/fs/exofs/ore.c b/fs/exofs/ore.c
571 +index 49cf230..24a49d4 100644
572 +--- a/fs/exofs/ore.c
573 ++++ b/fs/exofs/ore.c
574 +@@ -735,13 +735,7 @@ static int _prepare_for_striping(struct ore_io_state *ios)
575 + out:
576 + ios->numdevs = devs_in_group;
577 + ios->pages_consumed = cur_pg;
578 +- if (unlikely(ret)) {
579 +- if (length == ios->length)
580 +- return ret;
581 +- else
582 +- ios->length -= length;
583 +- }
584 +- return 0;
585 ++ return ret;
586 + }
587 +
588 + int ore_create(struct ore_io_state *ios)
589 +diff --git a/fs/exofs/ore_raid.c b/fs/exofs/ore_raid.c
590 +index d222c77..fff2070 100644
591 +--- a/fs/exofs/ore_raid.c
592 ++++ b/fs/exofs/ore_raid.c
593 +@@ -461,16 +461,12 @@ static void _mark_read4write_pages_uptodate(struct ore_io_state *ios, int ret)
594 + * ios->sp2d[p][*], xor is calculated the same way. These pages are
595 + * allocated/freed and don't go through cache
596 + */
597 +-static int _read_4_write(struct ore_io_state *ios)
598 ++static int _read_4_write_first_stripe(struct ore_io_state *ios)
599 + {
600 +- struct ore_io_state *ios_read;
601 + struct ore_striping_info read_si;
602 + struct __stripe_pages_2d *sp2d = ios->sp2d;
603 + u64 offset = ios->si.first_stripe_start;
604 +- u64 last_stripe_end;
605 +- unsigned bytes_in_stripe = ios->si.bytes_in_stripe;
606 +- unsigned i, c, p, min_p = sp2d->pages_in_unit, max_p = -1;
607 +- int ret;
608 ++ unsigned c, p, min_p = sp2d->pages_in_unit, max_p = -1;
609 +
610 + if (offset == ios->offset) /* Go to start collect $200 */
611 + goto read_last_stripe;
612 +@@ -478,6 +474,9 @@ static int _read_4_write(struct ore_io_state *ios)
613 + min_p = _sp2d_min_pg(sp2d);
614 + max_p = _sp2d_max_pg(sp2d);
615 +
616 ++ ORE_DBGMSG("stripe_start=0x%llx ios->offset=0x%llx min_p=%d max_p=%d\n",
617 ++ offset, ios->offset, min_p, max_p);
618 ++
619 + for (c = 0; ; c++) {
620 + ore_calc_stripe_info(ios->layout, offset, 0, &read_si);
621 + read_si.obj_offset += min_p * PAGE_SIZE;
622 +@@ -512,6 +511,18 @@ static int _read_4_write(struct ore_io_state *ios)
623 + }
624 +
625 + read_last_stripe:
626 ++ return 0;
627 ++}
628 ++
629 ++static int _read_4_write_last_stripe(struct ore_io_state *ios)
630 ++{
631 ++ struct ore_striping_info read_si;
632 ++ struct __stripe_pages_2d *sp2d = ios->sp2d;
633 ++ u64 offset;
634 ++ u64 last_stripe_end;
635 ++ unsigned bytes_in_stripe = ios->si.bytes_in_stripe;
636 ++ unsigned c, p, min_p = sp2d->pages_in_unit, max_p = -1;
637 ++
638 + offset = ios->offset + ios->length;
639 + if (offset % PAGE_SIZE)
640 + _add_to_r4w_last_page(ios, &offset);
641 +@@ -527,15 +538,15 @@ read_last_stripe:
642 + c = _dev_order(ios->layout->group_width * ios->layout->mirrors_p1,
643 + ios->layout->mirrors_p1, read_si.par_dev, read_si.dev);
644 +
645 +- BUG_ON(ios->si.first_stripe_start + bytes_in_stripe != last_stripe_end);
646 +- /* unaligned IO must be within a single stripe */
647 +-
648 + if (min_p == sp2d->pages_in_unit) {
649 + /* Didn't do it yet */
650 + min_p = _sp2d_min_pg(sp2d);
651 + max_p = _sp2d_max_pg(sp2d);
652 + }
653 +
654 ++ ORE_DBGMSG("offset=0x%llx stripe_end=0x%llx min_p=%d max_p=%d\n",
655 ++ offset, last_stripe_end, min_p, max_p);
656 ++
657 + while (offset < last_stripe_end) {
658 + struct __1_page_stripe *_1ps = &sp2d->_1p_stripes[p];
659 +
660 +@@ -568,6 +579,15 @@ read_last_stripe:
661 + }
662 +
663 + read_it:
664 ++ return 0;
665 ++}
666 ++
667 ++static int _read_4_write_execute(struct ore_io_state *ios)
668 ++{
669 ++ struct ore_io_state *ios_read;
670 ++ unsigned i;
671 ++ int ret;
672 ++
673 + ios_read = ios->ios_read_4_write;
674 + if (!ios_read)
675 + return 0;
676 +@@ -591,6 +611,8 @@ read_it:
677 + }
678 +
679 + _mark_read4write_pages_uptodate(ios_read, ret);
680 ++ ore_put_io_state(ios_read);
681 ++ ios->ios_read_4_write = NULL; /* Might need a reuse at last stripe */
682 + return 0;
683 + }
684 +
685 +@@ -626,8 +648,11 @@ int _ore_add_parity_unit(struct ore_io_state *ios,
686 + /* If first stripe, Read in all read4write pages
687 + * (if needed) before we calculate the first parity.
688 + */
689 +- _read_4_write(ios);
690 ++ _read_4_write_first_stripe(ios);
691 + }
692 ++ if (!cur_len) /* If last stripe r4w pages of last stripe */
693 ++ _read_4_write_last_stripe(ios);
694 ++ _read_4_write_execute(ios);
695 +
696 + for (i = 0; i < num_pages; i++) {
697 + pages[i] = _raid_page_alloc();
698 +@@ -654,34 +679,14 @@ int _ore_add_parity_unit(struct ore_io_state *ios,
699 +
700 + int _ore_post_alloc_raid_stuff(struct ore_io_state *ios)
701 + {
702 +- struct ore_layout *layout = ios->layout;
703 +-
704 + if (ios->parity_pages) {
705 ++ struct ore_layout *layout = ios->layout;
706 + unsigned pages_in_unit = layout->stripe_unit / PAGE_SIZE;
707 +- unsigned stripe_size = ios->si.bytes_in_stripe;
708 +- u64 last_stripe, first_stripe;
709 +
710 + if (_sp2d_alloc(pages_in_unit, layout->group_width,
711 + layout->parity, &ios->sp2d)) {
712 + return -ENOMEM;
713 + }
714 +-
715 +- /* Round io down to last full strip */
716 +- first_stripe = div_u64(ios->offset, stripe_size);
717 +- last_stripe = div_u64(ios->offset + ios->length, stripe_size);
718 +-
719 +- /* If an IO spans more then a single stripe it must end at
720 +- * a stripe boundary. The reminder at the end is pushed into the
721 +- * next IO.
722 +- */
723 +- if (last_stripe != first_stripe) {
724 +- ios->length = last_stripe * stripe_size - ios->offset;
725 +-
726 +- BUG_ON(!ios->length);
727 +- ios->nr_pages = (ios->length + PAGE_SIZE - 1) /
728 +- PAGE_SIZE;
729 +- ios->si.length = ios->length; /*make it consistent */
730 +- }
731 + }
732 + return 0;
733 + }
734 +diff --git a/fs/ext4/ioctl.c b/fs/ext4/ioctl.c
735 +index 1365903..9727522 100644
736 +--- a/fs/ext4/ioctl.c
737 ++++ b/fs/ext4/ioctl.c
738 +@@ -261,7 +261,6 @@ group_extend_out:
739 + err = ext4_move_extents(filp, donor_filp, me.orig_start,
740 + me.donor_start, me.len, &me.moved_len);
741 + mnt_drop_write_file(filp);
742 +- mnt_drop_write(filp->f_path.mnt);
743 +
744 + if (copy_to_user((struct move_extent __user *)arg,
745 + &me, sizeof(me)))
746 +diff --git a/fs/nfs/objlayout/objio_osd.c b/fs/nfs/objlayout/objio_osd.c
747 +index 4bff4a3..42ac1bf 100644
748 +--- a/fs/nfs/objlayout/objio_osd.c
749 ++++ b/fs/nfs/objlayout/objio_osd.c
750 +@@ -453,7 +453,10 @@ int objio_read_pagelist(struct nfs_read_data *rdata)
751 + objios->ios->done = _read_done;
752 + dprintk("%s: offset=0x%llx length=0x%x\n", __func__,
753 + rdata->args.offset, rdata->args.count);
754 +- return ore_read(objios->ios);
755 ++ ret = ore_read(objios->ios);
756 ++ if (unlikely(ret))
757 ++ objio_free_result(&objios->oir);
758 ++ return ret;
759 + }
760 +
761 + /*
762 +@@ -537,8 +540,10 @@ int objio_write_pagelist(struct nfs_write_data *wdata, int how)
763 + dprintk("%s: offset=0x%llx length=0x%x\n", __func__,
764 + wdata->args.offset, wdata->args.count);
765 + ret = ore_write(objios->ios);
766 +- if (unlikely(ret))
767 ++ if (unlikely(ret)) {
768 ++ objio_free_result(&objios->oir);
769 + return ret;
770 ++ }
771 +
772 + if (objios->sync)
773 + _write_done(objios->ios, objios);
774 +diff --git a/fs/ubifs/sb.c b/fs/ubifs/sb.c
775 +index 771f7fb..a7be8e2 100644
776 +--- a/fs/ubifs/sb.c
777 ++++ b/fs/ubifs/sb.c
778 +@@ -724,8 +724,12 @@ static int fixup_free_space(struct ubifs_info *c)
779 + lnum = ubifs_next_log_lnum(c, lnum);
780 + }
781 +
782 +- /* Fixup the current log head */
783 +- err = fixup_leb(c, c->lhead_lnum, c->lhead_offs);
784 ++ /*
785 ++ * Fixup the log head which contains the only a CS node at the
786 ++ * beginning.
787 ++ */
788 ++ err = fixup_leb(c, c->lhead_lnum,
789 ++ ALIGN(UBIFS_CS_NODE_SZ, c->min_io_size));
790 + if (err)
791 + goto out;
792 +
793 +diff --git a/kernel/time/ntp.c b/kernel/time/ntp.c
794 +index e8c8671..8b70710 100644
795 +--- a/kernel/time/ntp.c
796 ++++ b/kernel/time/ntp.c
797 +@@ -409,7 +409,9 @@ int second_overflow(unsigned long secs)
798 + time_state = TIME_DEL;
799 + break;
800 + case TIME_INS:
801 +- if (secs % 86400 == 0) {
802 ++ if (!(time_status & STA_INS))
803 ++ time_state = TIME_OK;
804 ++ else if (secs % 86400 == 0) {
805 + leap = -1;
806 + time_state = TIME_OOP;
807 + time_tai++;
808 +@@ -418,7 +420,9 @@ int second_overflow(unsigned long secs)
809 + }
810 + break;
811 + case TIME_DEL:
812 +- if ((secs + 1) % 86400 == 0) {
813 ++ if (!(time_status & STA_DEL))
814 ++ time_state = TIME_OK;
815 ++ else if ((secs + 1) % 86400 == 0) {
816 + leap = 1;
817 + time_tai--;
818 + time_state = TIME_WAIT;
819 +diff --git a/mm/vmscan.c b/mm/vmscan.c
820 +index 4607cc6..be5bc0a 100644
821 +--- a/mm/vmscan.c
822 ++++ b/mm/vmscan.c
823 +@@ -3013,7 +3013,10 @@ static void kswapd_try_to_sleep(pg_data_t *pgdat, int order, int classzone_idx)
824 + * them before going back to sleep.
825 + */
826 + set_pgdat_percpu_threshold(pgdat, calculate_normal_threshold);
827 +- schedule();
828 ++
829 ++ if (!kthread_should_stop())
830 ++ schedule();
831 ++
832 + set_pgdat_percpu_threshold(pgdat, calculate_pressure_threshold);
833 + } else {
834 + if (remaining)