Magellan Linux

Contents of /trunk/kernel-magellan/patches-3.8/0101-3.8.2-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2106 - (show annotations) (download)
Mon Mar 11 10:13:46 2013 UTC (11 years, 1 month ago) by niro
File size: 100781 byte(s)
-patches up to linux-3.8.2
1 diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
2 index 6c72381..986614d 100644
3 --- a/Documentation/kernel-parameters.txt
4 +++ b/Documentation/kernel-parameters.txt
5 @@ -564,6 +564,8 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
6 UART at the specified I/O port or MMIO address,
7 switching to the matching ttyS device later. The
8 options are the same as for ttyS, above.
9 + hvc<n> Use the hypervisor console device <n>. This is for
10 + both Xen and PowerPC hypervisors.
11
12 If the device connected to the port is not a TTY but a braille
13 device, prepend "brl," before the device type, for instance
14 @@ -754,6 +756,7 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
15
16 earlyprintk= [X86,SH,BLACKFIN]
17 earlyprintk=vga
18 + earlyprintk=xen
19 earlyprintk=serial[,ttySn[,baudrate]]
20 earlyprintk=ttySn[,baudrate]
21 earlyprintk=dbgp[debugController#]
22 @@ -771,6 +774,8 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
23 The VGA output is eventually overwritten by the real
24 console.
25
26 + The xen output can only be used by Xen PV guests.
27 +
28 ekgdboc= [X86,KGDB] Allow early kernel console debugging
29 ekgdboc=kbd
30
31 diff --git a/arch/x86/boot/compressed/eboot.c b/arch/x86/boot/compressed/eboot.c
32 index f8fa411..c205035 100644
33 --- a/arch/x86/boot/compressed/eboot.c
34 +++ b/arch/x86/boot/compressed/eboot.c
35 @@ -19,23 +19,28 @@
36
37 static efi_system_table_t *sys_table;
38
39 +static void efi_char16_printk(efi_char16_t *str)
40 +{
41 + struct efi_simple_text_output_protocol *out;
42 +
43 + out = (struct efi_simple_text_output_protocol *)sys_table->con_out;
44 + efi_call_phys2(out->output_string, out, str);
45 +}
46 +
47 static void efi_printk(char *str)
48 {
49 char *s8;
50
51 for (s8 = str; *s8; s8++) {
52 - struct efi_simple_text_output_protocol *out;
53 efi_char16_t ch[2] = { 0 };
54
55 ch[0] = *s8;
56 - out = (struct efi_simple_text_output_protocol *)sys_table->con_out;
57 -
58 if (*s8 == '\n') {
59 efi_char16_t nl[2] = { '\r', 0 };
60 - efi_call_phys2(out->output_string, out, nl);
61 + efi_char16_printk(nl);
62 }
63
64 - efi_call_phys2(out->output_string, out, ch);
65 + efi_char16_printk(ch);
66 }
67 }
68
69 @@ -709,7 +714,12 @@ static efi_status_t handle_ramdisks(efi_loaded_image_t *image,
70 if ((u8 *)p >= (u8 *)filename_16 + sizeof(filename_16))
71 break;
72
73 - *p++ = *str++;
74 + if (*str == '/') {
75 + *p++ = '\\';
76 + *str++;
77 + } else {
78 + *p++ = *str++;
79 + }
80 }
81
82 *p = '\0';
83 @@ -737,7 +747,9 @@ static efi_status_t handle_ramdisks(efi_loaded_image_t *image,
84 status = efi_call_phys5(fh->open, fh, &h, filename_16,
85 EFI_FILE_MODE_READ, (u64)0);
86 if (status != EFI_SUCCESS) {
87 - efi_printk("Failed to open initrd file\n");
88 + efi_printk("Failed to open initrd file: ");
89 + efi_char16_printk(filename_16);
90 + efi_printk("\n");
91 goto close_handles;
92 }
93
94 diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c
95 index b994cc8..cbf5121 100644
96 --- a/arch/x86/kernel/apic/apic.c
97 +++ b/arch/x86/kernel/apic/apic.c
98 @@ -131,7 +131,7 @@ static int __init parse_lapic(char *arg)
99 {
100 if (config_enabled(CONFIG_X86_32) && !arg)
101 force_enable_local_apic = 1;
102 - else if (!strncmp(arg, "notscdeadline", 13))
103 + else if (arg && !strncmp(arg, "notscdeadline", 13))
104 setup_clear_cpu_cap(X86_FEATURE_TSC_DEADLINE_TIMER);
105 return 0;
106 }
107 diff --git a/arch/x86/kernel/head.c b/arch/x86/kernel/head.c
108 index 48d9d4e..992f442 100644
109 --- a/arch/x86/kernel/head.c
110 +++ b/arch/x86/kernel/head.c
111 @@ -5,8 +5,6 @@
112 #include <asm/setup.h>
113 #include <asm/bios_ebda.h>
114
115 -#define BIOS_LOWMEM_KILOBYTES 0x413
116 -
117 /*
118 * The BIOS places the EBDA/XBDA at the top of conventional
119 * memory, and usually decreases the reported amount of
120 @@ -16,17 +14,30 @@
121 * chipset: reserve a page before VGA to prevent PCI prefetch
122 * into it (errata #56). Usually the page is reserved anyways,
123 * unless you have no PS/2 mouse plugged in.
124 + *
125 + * This functions is deliberately very conservative. Losing
126 + * memory in the bottom megabyte is rarely a problem, as long
127 + * as we have enough memory to install the trampoline. Using
128 + * memory that is in use by the BIOS or by some DMA device
129 + * the BIOS didn't shut down *is* a big problem.
130 */
131 +
132 +#define BIOS_LOWMEM_KILOBYTES 0x413
133 +#define LOWMEM_CAP 0x9f000U /* Absolute maximum */
134 +#define INSANE_CUTOFF 0x20000U /* Less than this = insane */
135 +
136 void __init reserve_ebda_region(void)
137 {
138 unsigned int lowmem, ebda_addr;
139
140 - /* To determine the position of the EBDA and the */
141 - /* end of conventional memory, we need to look at */
142 - /* the BIOS data area. In a paravirtual environment */
143 - /* that area is absent. We'll just have to assume */
144 - /* that the paravirt case can handle memory setup */
145 - /* correctly, without our help. */
146 + /*
147 + * To determine the position of the EBDA and the
148 + * end of conventional memory, we need to look at
149 + * the BIOS data area. In a paravirtual environment
150 + * that area is absent. We'll just have to assume
151 + * that the paravirt case can handle memory setup
152 + * correctly, without our help.
153 + */
154 if (paravirt_enabled())
155 return;
156
157 @@ -37,19 +48,23 @@ void __init reserve_ebda_region(void)
158 /* start of EBDA area */
159 ebda_addr = get_bios_ebda();
160
161 - /* Fixup: bios puts an EBDA in the top 64K segment */
162 - /* of conventional memory, but does not adjust lowmem. */
163 - if ((lowmem - ebda_addr) <= 0x10000)
164 - lowmem = ebda_addr;
165 + /*
166 + * Note: some old Dells seem to need 4k EBDA without
167 + * reporting so, so just consider the memory above 0x9f000
168 + * to be off limits (bugzilla 2990).
169 + */
170 +
171 + /* If the EBDA address is below 128K, assume it is bogus */
172 + if (ebda_addr < INSANE_CUTOFF)
173 + ebda_addr = LOWMEM_CAP;
174
175 - /* Fixup: bios does not report an EBDA at all. */
176 - /* Some old Dells seem to need 4k anyhow (bugzilla 2990) */
177 - if ((ebda_addr == 0) && (lowmem >= 0x9f000))
178 - lowmem = 0x9f000;
179 + /* If lowmem is less than 128K, assume it is bogus */
180 + if (lowmem < INSANE_CUTOFF)
181 + lowmem = LOWMEM_CAP;
182
183 - /* Paranoia: should never happen, but... */
184 - if ((lowmem == 0) || (lowmem >= 0x100000))
185 - lowmem = 0x9f000;
186 + /* Use the lower of the lowmem and EBDA markers as the cutoff */
187 + lowmem = min(lowmem, ebda_addr);
188 + lowmem = min(lowmem, LOWMEM_CAP); /* Absolute cap */
189
190 /* reserve all memory between lowmem and the 1MB mark */
191 memblock_reserve(lowmem, 0x100000 - lowmem);
192 diff --git a/arch/x86/platform/efi/efi.c b/arch/x86/platform/efi/efi.c
193 index 928bf83..e2cd38f 100644
194 --- a/arch/x86/platform/efi/efi.c
195 +++ b/arch/x86/platform/efi/efi.c
196 @@ -85,9 +85,10 @@ int efi_enabled(int facility)
197 }
198 EXPORT_SYMBOL(efi_enabled);
199
200 +static bool disable_runtime = false;
201 static int __init setup_noefi(char *arg)
202 {
203 - clear_bit(EFI_RUNTIME_SERVICES, &x86_efi_facility);
204 + disable_runtime = true;
205 return 0;
206 }
207 early_param("noefi", setup_noefi);
208 @@ -734,7 +735,7 @@ void __init efi_init(void)
209 if (!efi_is_native())
210 pr_info("No EFI runtime due to 32/64-bit mismatch with kernel\n");
211 else {
212 - if (efi_runtime_init())
213 + if (disable_runtime || efi_runtime_init())
214 return;
215 set_bit(EFI_RUNTIME_SERVICES, &x86_efi_facility);
216 }
217 diff --git a/block/genhd.c b/block/genhd.c
218 index 3993ebf..7dcfdd8 100644
219 --- a/block/genhd.c
220 +++ b/block/genhd.c
221 @@ -25,7 +25,7 @@ static DEFINE_MUTEX(block_class_lock);
222 struct kobject *block_depr;
223
224 /* for extended dynamic devt allocation, currently only one major is used */
225 -#define MAX_EXT_DEVT (1 << MINORBITS)
226 +#define NR_EXT_DEVT (1 << MINORBITS)
227
228 /* For extended devt allocation. ext_devt_mutex prevents look up
229 * results from going away underneath its user.
230 @@ -422,17 +422,18 @@ int blk_alloc_devt(struct hd_struct *part, dev_t *devt)
231 do {
232 if (!idr_pre_get(&ext_devt_idr, GFP_KERNEL))
233 return -ENOMEM;
234 + mutex_lock(&ext_devt_mutex);
235 rc = idr_get_new(&ext_devt_idr, part, &idx);
236 + if (!rc && idx >= NR_EXT_DEVT) {
237 + idr_remove(&ext_devt_idr, idx);
238 + rc = -EBUSY;
239 + }
240 + mutex_unlock(&ext_devt_mutex);
241 } while (rc == -EAGAIN);
242
243 if (rc)
244 return rc;
245
246 - if (idx > MAX_EXT_DEVT) {
247 - idr_remove(&ext_devt_idr, idx);
248 - return -EBUSY;
249 - }
250 -
251 *devt = MKDEV(BLOCK_EXT_MAJOR, blk_mangle_minor(idx));
252 return 0;
253 }
254 @@ -646,7 +647,6 @@ void del_gendisk(struct gendisk *disk)
255 disk_part_iter_exit(&piter);
256
257 invalidate_partition(disk, 0);
258 - blk_free_devt(disk_to_dev(disk)->devt);
259 set_capacity(disk, 0);
260 disk->flags &= ~GENHD_FL_UP;
261
262 @@ -664,6 +664,7 @@ void del_gendisk(struct gendisk *disk)
263 if (!sysfs_deprecated)
264 sysfs_remove_link(block_depr, dev_name(disk_to_dev(disk)));
265 device_del(disk_to_dev(disk));
266 + blk_free_devt(disk_to_dev(disk)->devt);
267 }
268 EXPORT_SYMBOL(del_gendisk);
269
270 diff --git a/block/partition-generic.c b/block/partition-generic.c
271 index f1d1451..1cb4dec 100644
272 --- a/block/partition-generic.c
273 +++ b/block/partition-generic.c
274 @@ -249,11 +249,11 @@ void delete_partition(struct gendisk *disk, int partno)
275 if (!part)
276 return;
277
278 - blk_free_devt(part_devt(part));
279 rcu_assign_pointer(ptbl->part[partno], NULL);
280 rcu_assign_pointer(ptbl->last_lookup, NULL);
281 kobject_put(part->holder_dir);
282 device_del(part_to_dev(part));
283 + blk_free_devt(part_devt(part));
284
285 hd_struct_put(part);
286 }
287 diff --git a/drivers/acpi/Kconfig b/drivers/acpi/Kconfig
288 index 38c5078..f5ae996 100644
289 --- a/drivers/acpi/Kconfig
290 +++ b/drivers/acpi/Kconfig
291 @@ -268,7 +268,8 @@ config ACPI_CUSTOM_DSDT
292 default ACPI_CUSTOM_DSDT_FILE != ""
293
294 config ACPI_INITRD_TABLE_OVERRIDE
295 - bool "ACPI tables can be passed via uncompressed cpio in initrd"
296 + bool "ACPI tables override via initrd"
297 + depends on BLK_DEV_INITRD && X86
298 default n
299 help
300 This option provides functionality to override arbitrary ACPI tables
301 diff --git a/drivers/acpi/sleep.c b/drivers/acpi/sleep.c
302 index 2fcc67d..df85051 100644
303 --- a/drivers/acpi/sleep.c
304 +++ b/drivers/acpi/sleep.c
305 @@ -177,6 +177,14 @@ static struct dmi_system_id __initdata acpisleep_dmi_table[] = {
306 },
307 {
308 .callback = init_nvs_nosave,
309 + .ident = "Sony Vaio VGN-FW41E_H",
310 + .matches = {
311 + DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
312 + DMI_MATCH(DMI_PRODUCT_NAME, "VGN-FW41E_H"),
313 + },
314 + },
315 + {
316 + .callback = init_nvs_nosave,
317 .ident = "Sony Vaio VGN-FW21E",
318 .matches = {
319 DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
320 diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
321 index 4979127..72e3e12 100644
322 --- a/drivers/ata/ahci.c
323 +++ b/drivers/ata/ahci.c
324 @@ -265,6 +265,30 @@ static const struct pci_device_id ahci_pci_tbl[] = {
325 { PCI_VDEVICE(INTEL, 0x9c07), board_ahci }, /* Lynx Point-LP RAID */
326 { PCI_VDEVICE(INTEL, 0x9c0e), board_ahci }, /* Lynx Point-LP RAID */
327 { PCI_VDEVICE(INTEL, 0x9c0f), board_ahci }, /* Lynx Point-LP RAID */
328 + { PCI_VDEVICE(INTEL, 0x1f22), board_ahci }, /* Avoton AHCI */
329 + { PCI_VDEVICE(INTEL, 0x1f23), board_ahci }, /* Avoton AHCI */
330 + { PCI_VDEVICE(INTEL, 0x1f24), board_ahci }, /* Avoton RAID */
331 + { PCI_VDEVICE(INTEL, 0x1f25), board_ahci }, /* Avoton RAID */
332 + { PCI_VDEVICE(INTEL, 0x1f26), board_ahci }, /* Avoton RAID */
333 + { PCI_VDEVICE(INTEL, 0x1f27), board_ahci }, /* Avoton RAID */
334 + { PCI_VDEVICE(INTEL, 0x1f2e), board_ahci }, /* Avoton RAID */
335 + { PCI_VDEVICE(INTEL, 0x1f2f), board_ahci }, /* Avoton RAID */
336 + { PCI_VDEVICE(INTEL, 0x1f32), board_ahci }, /* Avoton AHCI */
337 + { PCI_VDEVICE(INTEL, 0x1f33), board_ahci }, /* Avoton AHCI */
338 + { PCI_VDEVICE(INTEL, 0x1f34), board_ahci }, /* Avoton RAID */
339 + { PCI_VDEVICE(INTEL, 0x1f35), board_ahci }, /* Avoton RAID */
340 + { PCI_VDEVICE(INTEL, 0x1f36), board_ahci }, /* Avoton RAID */
341 + { PCI_VDEVICE(INTEL, 0x1f37), board_ahci }, /* Avoton RAID */
342 + { PCI_VDEVICE(INTEL, 0x1f3e), board_ahci }, /* Avoton RAID */
343 + { PCI_VDEVICE(INTEL, 0x1f3f), board_ahci }, /* Avoton RAID */
344 + { PCI_VDEVICE(INTEL, 0x8d02), board_ahci }, /* Wellsburg AHCI */
345 + { PCI_VDEVICE(INTEL, 0x8d04), board_ahci }, /* Wellsburg RAID */
346 + { PCI_VDEVICE(INTEL, 0x8d06), board_ahci }, /* Wellsburg RAID */
347 + { PCI_VDEVICE(INTEL, 0x8d0e), board_ahci }, /* Wellsburg RAID */
348 + { PCI_VDEVICE(INTEL, 0x8d62), board_ahci }, /* Wellsburg AHCI */
349 + { PCI_VDEVICE(INTEL, 0x8d64), board_ahci }, /* Wellsburg RAID */
350 + { PCI_VDEVICE(INTEL, 0x8d66), board_ahci }, /* Wellsburg RAID */
351 + { PCI_VDEVICE(INTEL, 0x8d6e), board_ahci }, /* Wellsburg RAID */
352
353 /* JMicron 360/1/3/5/6, match class to avoid IDE function */
354 { PCI_VENDOR_ID_JMICRON, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
355 diff --git a/drivers/ata/ata_piix.c b/drivers/ata/ata_piix.c
356 index 174eca6..d2ba439 100644
357 --- a/drivers/ata/ata_piix.c
358 +++ b/drivers/ata/ata_piix.c
359 @@ -317,6 +317,23 @@ static const struct pci_device_id piix_pci_tbl[] = {
360 { 0x8086, 0x9c09, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata },
361 /* SATA Controller IDE (DH89xxCC) */
362 { 0x8086, 0x2326, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata },
363 + /* SATA Controller IDE (Avoton) */
364 + { 0x8086, 0x1f20, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_snb },
365 + /* SATA Controller IDE (Avoton) */
366 + { 0x8086, 0x1f21, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_snb },
367 + /* SATA Controller IDE (Avoton) */
368 + { 0x8086, 0x1f30, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata },
369 + /* SATA Controller IDE (Avoton) */
370 + { 0x8086, 0x1f31, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata },
371 + /* SATA Controller IDE (Wellsburg) */
372 + { 0x8086, 0x8d00, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_snb },
373 + /* SATA Controller IDE (Wellsburg) */
374 + { 0x8086, 0x8d08, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata },
375 + /* SATA Controller IDE (Wellsburg) */
376 + { 0x8086, 0x8d60, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_snb },
377 + /* SATA Controller IDE (Wellsburg) */
378 + { 0x8086, 0x8d68, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata },
379 +
380 { } /* terminate list */
381 };
382
383 diff --git a/drivers/block/nbd.c b/drivers/block/nbd.c
384 index 043ddcc..eb591fb 100644
385 --- a/drivers/block/nbd.c
386 +++ b/drivers/block/nbd.c
387 @@ -595,12 +595,20 @@ static int __nbd_ioctl(struct block_device *bdev, struct nbd_device *nbd,
388 struct request sreq;
389
390 dev_info(disk_to_dev(nbd->disk), "NBD_DISCONNECT\n");
391 + if (!nbd->sock)
392 + return -EINVAL;
393
394 + mutex_unlock(&nbd->tx_lock);
395 + fsync_bdev(bdev);
396 + mutex_lock(&nbd->tx_lock);
397 blk_rq_init(NULL, &sreq);
398 sreq.cmd_type = REQ_TYPE_SPECIAL;
399 nbd_cmd(&sreq) = NBD_CMD_DISC;
400 +
401 + /* Check again after getting mutex back. */
402 if (!nbd->sock)
403 return -EINVAL;
404 +
405 nbd_send_req(nbd, &sreq);
406 return 0;
407 }
408 @@ -614,6 +622,7 @@ static int __nbd_ioctl(struct block_device *bdev, struct nbd_device *nbd,
409 nbd_clear_que(nbd);
410 BUG_ON(!list_empty(&nbd->queue_head));
411 BUG_ON(!list_empty(&nbd->waiting_queue));
412 + kill_bdev(bdev);
413 if (file)
414 fput(file);
415 return 0;
416 @@ -702,6 +711,7 @@ static int __nbd_ioctl(struct block_device *bdev, struct nbd_device *nbd,
417 nbd->file = NULL;
418 nbd_clear_que(nbd);
419 dev_warn(disk_to_dev(nbd->disk), "queue cleared\n");
420 + kill_bdev(bdev);
421 queue_flag_clear_unlocked(QUEUE_FLAG_DISCARD, nbd->disk->queue);
422 if (file)
423 fput(file);
424 diff --git a/drivers/block/xen-blkback/blkback.c b/drivers/block/xen-blkback/blkback.c
425 index 5ac841f..de1f319 100644
426 --- a/drivers/block/xen-blkback/blkback.c
427 +++ b/drivers/block/xen-blkback/blkback.c
428 @@ -46,6 +46,7 @@
429 #include <xen/xen.h>
430 #include <asm/xen/hypervisor.h>
431 #include <asm/xen/hypercall.h>
432 +#include <xen/balloon.h>
433 #include "common.h"
434
435 /*
436 @@ -239,6 +240,7 @@ static void free_persistent_gnts(struct rb_root *root, unsigned int num)
437 ret = gnttab_unmap_refs(unmap, NULL, pages,
438 segs_to_unmap);
439 BUG_ON(ret);
440 + free_xenballooned_pages(segs_to_unmap, pages);
441 segs_to_unmap = 0;
442 }
443
444 @@ -527,8 +529,8 @@ static int xen_blkbk_map(struct blkif_request *req,
445 GFP_KERNEL);
446 if (!persistent_gnt)
447 return -ENOMEM;
448 - persistent_gnt->page = alloc_page(GFP_KERNEL);
449 - if (!persistent_gnt->page) {
450 + if (alloc_xenballooned_pages(1, &persistent_gnt->page,
451 + false)) {
452 kfree(persistent_gnt);
453 return -ENOMEM;
454 }
455 @@ -879,7 +881,6 @@ static int dispatch_rw_block_io(struct xen_blkif *blkif,
456 goto fail_response;
457 }
458
459 - preq.dev = req->u.rw.handle;
460 preq.sector_number = req->u.rw.sector_number;
461 preq.nr_sects = 0;
462
463 diff --git a/drivers/block/xen-blkback/xenbus.c b/drivers/block/xen-blkback/xenbus.c
464 index 6398072..5e237f6 100644
465 --- a/drivers/block/xen-blkback/xenbus.c
466 +++ b/drivers/block/xen-blkback/xenbus.c
467 @@ -367,6 +367,7 @@ static int xen_blkbk_remove(struct xenbus_device *dev)
468 be->blkif = NULL;
469 }
470
471 + kfree(be->mode);
472 kfree(be);
473 dev_set_drvdata(&dev->dev, NULL);
474 return 0;
475 @@ -502,6 +503,7 @@ static void backend_changed(struct xenbus_watch *watch,
476 = container_of(watch, struct backend_info, backend_watch);
477 struct xenbus_device *dev = be->dev;
478 int cdrom = 0;
479 + unsigned long handle;
480 char *device_type;
481
482 DPRINTK("");
483 @@ -521,10 +523,10 @@ static void backend_changed(struct xenbus_watch *watch,
484 return;
485 }
486
487 - if ((be->major || be->minor) &&
488 - ((be->major != major) || (be->minor != minor))) {
489 - pr_warn(DRV_PFX "changing physical device (from %x:%x to %x:%x) not supported.\n",
490 - be->major, be->minor, major, minor);
491 + if (be->major | be->minor) {
492 + if (be->major != major || be->minor != minor)
493 + pr_warn(DRV_PFX "changing physical device (from %x:%x to %x:%x) not supported.\n",
494 + be->major, be->minor, major, minor);
495 return;
496 }
497
498 @@ -542,36 +544,33 @@ static void backend_changed(struct xenbus_watch *watch,
499 kfree(device_type);
500 }
501
502 - if (be->major == 0 && be->minor == 0) {
503 - /* Front end dir is a number, which is used as the handle. */
504 -
505 - char *p = strrchr(dev->otherend, '/') + 1;
506 - long handle;
507 - err = strict_strtoul(p, 0, &handle);
508 - if (err)
509 - return;
510 + /* Front end dir is a number, which is used as the handle. */
511 + err = strict_strtoul(strrchr(dev->otherend, '/') + 1, 0, &handle);
512 + if (err)
513 + return;
514
515 - be->major = major;
516 - be->minor = minor;
517 + be->major = major;
518 + be->minor = minor;
519
520 - err = xen_vbd_create(be->blkif, handle, major, minor,
521 - (NULL == strchr(be->mode, 'w')), cdrom);
522 - if (err) {
523 - be->major = 0;
524 - be->minor = 0;
525 - xenbus_dev_fatal(dev, err, "creating vbd structure");
526 - return;
527 - }
528 + err = xen_vbd_create(be->blkif, handle, major, minor,
529 + !strchr(be->mode, 'w'), cdrom);
530
531 + if (err)
532 + xenbus_dev_fatal(dev, err, "creating vbd structure");
533 + else {
534 err = xenvbd_sysfs_addif(dev);
535 if (err) {
536 xen_vbd_free(&be->blkif->vbd);
537 - be->major = 0;
538 - be->minor = 0;
539 xenbus_dev_fatal(dev, err, "creating sysfs entries");
540 - return;
541 }
542 + }
543
544 + if (err) {
545 + kfree(be->mode);
546 + be->mode = NULL;
547 + be->major = 0;
548 + be->minor = 0;
549 + } else {
550 /* We're potentially connected now */
551 xen_update_blkif_status(be->blkif);
552 }
553 diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c
554 index 11043c1..c3dae2e 100644
555 --- a/drivers/block/xen-blkfront.c
556 +++ b/drivers/block/xen-blkfront.c
557 @@ -791,7 +791,7 @@ static void blkif_restart_queue(struct work_struct *work)
558 static void blkif_free(struct blkfront_info *info, int suspend)
559 {
560 struct llist_node *all_gnts;
561 - struct grant *persistent_gnt;
562 + struct grant *persistent_gnt, *tmp;
563 struct llist_node *n;
564
565 /* Prevent new requests being issued until we fix things up. */
566 @@ -805,10 +805,17 @@ static void blkif_free(struct blkfront_info *info, int suspend)
567 /* Remove all persistent grants */
568 if (info->persistent_gnts_c) {
569 all_gnts = llist_del_all(&info->persistent_gnts);
570 - llist_for_each_entry_safe(persistent_gnt, n, all_gnts, node) {
571 + persistent_gnt = llist_entry(all_gnts, typeof(*(persistent_gnt)), node);
572 + while (persistent_gnt) {
573 gnttab_end_foreign_access(persistent_gnt->gref, 0, 0UL);
574 __free_page(pfn_to_page(persistent_gnt->pfn));
575 - kfree(persistent_gnt);
576 + tmp = persistent_gnt;
577 + n = persistent_gnt->node.next;
578 + if (n)
579 + persistent_gnt = llist_entry(n, typeof(*(persistent_gnt)), node);
580 + else
581 + persistent_gnt = NULL;
582 + kfree(tmp);
583 }
584 info->persistent_gnts_c = 0;
585 }
586 diff --git a/drivers/firewire/core-device.c b/drivers/firewire/core-device.c
587 index 3873d53..af3e8aa 100644
588 --- a/drivers/firewire/core-device.c
589 +++ b/drivers/firewire/core-device.c
590 @@ -1020,6 +1020,10 @@ static void fw_device_init(struct work_struct *work)
591 ret = idr_pre_get(&fw_device_idr, GFP_KERNEL) ?
592 idr_get_new(&fw_device_idr, device, &minor) :
593 -ENOMEM;
594 + if (minor >= 1 << MINORBITS) {
595 + idr_remove(&fw_device_idr, minor);
596 + minor = -ENOSPC;
597 + }
598 up_write(&fw_device_rwsem);
599
600 if (ret < 0)
601 diff --git a/drivers/firmware/efivars.c b/drivers/firmware/efivars.c
602 index f5596db..bcb201c 100644
603 --- a/drivers/firmware/efivars.c
604 +++ b/drivers/firmware/efivars.c
605 @@ -79,6 +79,7 @@
606 #include <linux/device.h>
607 #include <linux/slab.h>
608 #include <linux/pstore.h>
609 +#include <linux/ctype.h>
610
611 #include <linux/fs.h>
612 #include <linux/ramfs.h>
613 @@ -900,6 +901,48 @@ static struct inode *efivarfs_get_inode(struct super_block *sb,
614 return inode;
615 }
616
617 +/*
618 + * Return true if 'str' is a valid efivarfs filename of the form,
619 + *
620 + * VariableName-12345678-1234-1234-1234-1234567891bc
621 + */
622 +static bool efivarfs_valid_name(const char *str, int len)
623 +{
624 + static const char dashes[GUID_LEN] = {
625 + [8] = 1, [13] = 1, [18] = 1, [23] = 1
626 + };
627 + const char *s = str + len - GUID_LEN;
628 + int i;
629 +
630 + /*
631 + * We need a GUID, plus at least one letter for the variable name,
632 + * plus the '-' separator
633 + */
634 + if (len < GUID_LEN + 2)
635 + return false;
636 +
637 + /* GUID should be right after the first '-' */
638 + if (s - 1 != strchr(str, '-'))
639 + return false;
640 +
641 + /*
642 + * Validate that 's' is of the correct format, e.g.
643 + *
644 + * 12345678-1234-1234-1234-123456789abc
645 + */
646 + for (i = 0; i < GUID_LEN; i++) {
647 + if (dashes[i]) {
648 + if (*s++ != '-')
649 + return false;
650 + } else {
651 + if (!isxdigit(*s++))
652 + return false;
653 + }
654 + }
655 +
656 + return true;
657 +}
658 +
659 static void efivarfs_hex_to_guid(const char *str, efi_guid_t *guid)
660 {
661 guid->b[0] = hex_to_bin(str[6]) << 4 | hex_to_bin(str[7]);
662 @@ -928,11 +971,7 @@ static int efivarfs_create(struct inode *dir, struct dentry *dentry,
663 struct efivar_entry *var;
664 int namelen, i = 0, err = 0;
665
666 - /*
667 - * We need a GUID, plus at least one letter for the variable name,
668 - * plus the '-' separator
669 - */
670 - if (dentry->d_name.len < GUID_LEN + 2)
671 + if (!efivarfs_valid_name(dentry->d_name.name, dentry->d_name.len))
672 return -EINVAL;
673
674 inode = efivarfs_get_inode(dir->i_sb, dir, mode, 0);
675 @@ -1004,6 +1043,84 @@ static int efivarfs_unlink(struct inode *dir, struct dentry *dentry)
676 return -EINVAL;
677 };
678
679 +/*
680 + * Compare two efivarfs file names.
681 + *
682 + * An efivarfs filename is composed of two parts,
683 + *
684 + * 1. A case-sensitive variable name
685 + * 2. A case-insensitive GUID
686 + *
687 + * So we need to perform a case-sensitive match on part 1 and a
688 + * case-insensitive match on part 2.
689 + */
690 +static int efivarfs_d_compare(const struct dentry *parent, const struct inode *pinode,
691 + const struct dentry *dentry, const struct inode *inode,
692 + unsigned int len, const char *str,
693 + const struct qstr *name)
694 +{
695 + int guid = len - GUID_LEN;
696 +
697 + if (name->len != len)
698 + return 1;
699 +
700 + /* Case-sensitive compare for the variable name */
701 + if (memcmp(str, name->name, guid))
702 + return 1;
703 +
704 + /* Case-insensitive compare for the GUID */
705 + return strncasecmp(name->name + guid, str + guid, GUID_LEN);
706 +}
707 +
708 +static int efivarfs_d_hash(const struct dentry *dentry,
709 + const struct inode *inode, struct qstr *qstr)
710 +{
711 + unsigned long hash = init_name_hash();
712 + const unsigned char *s = qstr->name;
713 + unsigned int len = qstr->len;
714 +
715 + if (!efivarfs_valid_name(s, len))
716 + return -EINVAL;
717 +
718 + while (len-- > GUID_LEN)
719 + hash = partial_name_hash(*s++, hash);
720 +
721 + /* GUID is case-insensitive. */
722 + while (len--)
723 + hash = partial_name_hash(tolower(*s++), hash);
724 +
725 + qstr->hash = end_name_hash(hash);
726 + return 0;
727 +}
728 +
729 +/*
730 + * Retaining negative dentries for an in-memory filesystem just wastes
731 + * memory and lookup time: arrange for them to be deleted immediately.
732 + */
733 +static int efivarfs_delete_dentry(const struct dentry *dentry)
734 +{
735 + return 1;
736 +}
737 +
738 +static struct dentry_operations efivarfs_d_ops = {
739 + .d_compare = efivarfs_d_compare,
740 + .d_hash = efivarfs_d_hash,
741 + .d_delete = efivarfs_delete_dentry,
742 +};
743 +
744 +static struct dentry *efivarfs_alloc_dentry(struct dentry *parent, char *name)
745 +{
746 + struct qstr q;
747 +
748 + q.name = name;
749 + q.len = strlen(name);
750 +
751 + if (efivarfs_d_hash(NULL, NULL, &q))
752 + return NULL;
753 +
754 + return d_alloc(parent, &q);
755 +}
756 +
757 static int efivarfs_fill_super(struct super_block *sb, void *data, int silent)
758 {
759 struct inode *inode = NULL;
760 @@ -1019,6 +1136,7 @@ static int efivarfs_fill_super(struct super_block *sb, void *data, int silent)
761 sb->s_blocksize_bits = PAGE_CACHE_SHIFT;
762 sb->s_magic = EFIVARFS_MAGIC;
763 sb->s_op = &efivarfs_ops;
764 + sb->s_d_op = &efivarfs_d_ops;
765 sb->s_time_gran = 1;
766
767 inode = efivarfs_get_inode(sb, NULL, S_IFDIR | 0755, 0);
768 @@ -1059,7 +1177,7 @@ static int efivarfs_fill_super(struct super_block *sb, void *data, int silent)
769 if (!inode)
770 goto fail_name;
771
772 - dentry = d_alloc_name(root, name);
773 + dentry = efivarfs_alloc_dentry(root, name);
774 if (!dentry)
775 goto fail_inode;
776
777 @@ -1109,8 +1227,20 @@ static struct file_system_type efivarfs_type = {
778 .kill_sb = efivarfs_kill_sb,
779 };
780
781 +/*
782 + * Handle negative dentry.
783 + */
784 +static struct dentry *efivarfs_lookup(struct inode *dir, struct dentry *dentry,
785 + unsigned int flags)
786 +{
787 + if (dentry->d_name.len > NAME_MAX)
788 + return ERR_PTR(-ENAMETOOLONG);
789 + d_add(dentry, NULL);
790 + return NULL;
791 +}
792 +
793 static const struct inode_operations efivarfs_dir_inode_operations = {
794 - .lookup = simple_lookup,
795 + .lookup = efivarfs_lookup,
796 .unlink = efivarfs_unlink,
797 .create = efivarfs_create,
798 };
799 diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
800 index eb2ee11..ceb3040 100644
801 --- a/drivers/hid/hid-core.c
802 +++ b/drivers/hid/hid-core.c
803 @@ -1697,6 +1697,7 @@ static const struct hid_device_id hid_have_special_driver[] = {
804 { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_NAVIGATION_CONTROLLER) },
805 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_CONTROLLER) },
806 { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_VAIO_VGX_MOUSE) },
807 + { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_VAIO_VGP_MOUSE) },
808 { HID_USB_DEVICE(USB_VENDOR_ID_SUNPLUS, USB_DEVICE_ID_SUNPLUS_WDESKTOP) },
809 { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb300) },
810 { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb304) },
811 @@ -2070,6 +2071,7 @@ static const struct hid_device_id hid_ignore_list[] = {
812 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_HYBRID) },
813 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_HEATCONTROL) },
814 { HID_USB_DEVICE(USB_VENDOR_ID_MADCATZ, USB_DEVICE_ID_MADCATZ_BEATPAD) },
815 + { HID_USB_DEVICE(USB_VENDOR_ID_MASTERKIT, USB_DEVICE_ID_MASTERKIT_MA901RADIO) },
816 { HID_USB_DEVICE(USB_VENDOR_ID_MCC, USB_DEVICE_ID_MCC_PMD1024LS) },
817 { HID_USB_DEVICE(USB_VENDOR_ID_MCC, USB_DEVICE_ID_MCC_PMD1208LS) },
818 { HID_USB_DEVICE(USB_VENDOR_ID_MICROCHIP, USB_DEVICE_ID_PICKIT1) },
819 diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
820 index 34e2547..266e2ae 100644
821 --- a/drivers/hid/hid-ids.h
822 +++ b/drivers/hid/hid-ids.h
823 @@ -554,6 +554,9 @@
824 #define USB_VENDOR_ID_MADCATZ 0x0738
825 #define USB_DEVICE_ID_MADCATZ_BEATPAD 0x4540
826
827 +#define USB_VENDOR_ID_MASTERKIT 0x16c0
828 +#define USB_DEVICE_ID_MASTERKIT_MA901RADIO 0x05df
829 +
830 #define USB_VENDOR_ID_MCC 0x09db
831 #define USB_DEVICE_ID_MCC_PMD1024LS 0x0076
832 #define USB_DEVICE_ID_MCC_PMD1208LS 0x007a
833 @@ -709,6 +712,7 @@
834
835 #define USB_VENDOR_ID_SONY 0x054c
836 #define USB_DEVICE_ID_SONY_VAIO_VGX_MOUSE 0x024b
837 +#define USB_DEVICE_ID_SONY_VAIO_VGP_MOUSE 0x0374
838 #define USB_DEVICE_ID_SONY_PS3_BDREMOTE 0x0306
839 #define USB_DEVICE_ID_SONY_PS3_CONTROLLER 0x0268
840 #define USB_DEVICE_ID_SONY_NAVIGATION_CONTROLLER 0x042f
841 diff --git a/drivers/hid/hid-sony.c b/drivers/hid/hid-sony.c
842 index 7f33ebf..126d6ae 100644
843 --- a/drivers/hid/hid-sony.c
844 +++ b/drivers/hid/hid-sony.c
845 @@ -43,9 +43,19 @@ static __u8 *sony_report_fixup(struct hid_device *hdev, __u8 *rdesc,
846 {
847 struct sony_sc *sc = hid_get_drvdata(hdev);
848
849 - if ((sc->quirks & VAIO_RDESC_CONSTANT) &&
850 - *rsize >= 56 && rdesc[54] == 0x81 && rdesc[55] == 0x07) {
851 - hid_info(hdev, "Fixing up Sony Vaio VGX report descriptor\n");
852 + /*
853 + * Some Sony RF receivers wrongly declare the mouse pointer as a
854 + * a constant non-data variable.
855 + */
856 + if ((sc->quirks & VAIO_RDESC_CONSTANT) && *rsize >= 56 &&
857 + /* usage page: generic desktop controls */
858 + /* rdesc[0] == 0x05 && rdesc[1] == 0x01 && */
859 + /* usage: mouse */
860 + rdesc[2] == 0x09 && rdesc[3] == 0x02 &&
861 + /* input (usage page for x,y axes): constant, variable, relative */
862 + rdesc[54] == 0x81 && rdesc[55] == 0x07) {
863 + hid_info(hdev, "Fixing up Sony RF Receiver report descriptor\n");
864 + /* input: data, variable, relative */
865 rdesc[55] = 0x06;
866 }
867
868 @@ -217,6 +227,8 @@ static const struct hid_device_id sony_devices[] = {
869 .driver_data = SIXAXIS_CONTROLLER_BT },
870 { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_VAIO_VGX_MOUSE),
871 .driver_data = VAIO_RDESC_CONSTANT },
872 + { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_VAIO_VGP_MOUSE),
873 + .driver_data = VAIO_RDESC_CONSTANT },
874 { }
875 };
876 MODULE_DEVICE_TABLE(hid, sony_devices);
877 diff --git a/drivers/infiniband/ulp/srp/ib_srp.c b/drivers/infiniband/ulp/srp/ib_srp.c
878 index d5088ce..7ccf328 100644
879 --- a/drivers/infiniband/ulp/srp/ib_srp.c
880 +++ b/drivers/infiniband/ulp/srp/ib_srp.c
881 @@ -700,23 +700,24 @@ static int srp_reconnect_target(struct srp_target_port *target)
882 struct Scsi_Host *shost = target->scsi_host;
883 int i, ret;
884
885 - if (target->state != SRP_TARGET_LIVE)
886 - return -EAGAIN;
887 -
888 scsi_target_block(&shost->shost_gendev);
889
890 srp_disconnect_target(target);
891 /*
892 - * Now get a new local CM ID so that we avoid confusing the
893 - * target in case things are really fouled up.
894 + * Now get a new local CM ID so that we avoid confusing the target in
895 + * case things are really fouled up. Doing so also ensures that all CM
896 + * callbacks will have finished before a new QP is allocated.
897 */
898 ret = srp_new_cm_id(target);
899 - if (ret)
900 - goto unblock;
901 -
902 - ret = srp_create_target_ib(target);
903 - if (ret)
904 - goto unblock;
905 + /*
906 + * Whether or not creating a new CM ID succeeded, create a new
907 + * QP. This guarantees that all completion callback function
908 + * invocations have finished before request resetting starts.
909 + */
910 + if (ret == 0)
911 + ret = srp_create_target_ib(target);
912 + else
913 + srp_create_target_ib(target);
914
915 for (i = 0; i < SRP_CMD_SQ_SIZE; ++i) {
916 struct srp_request *req = &target->req_ring[i];
917 @@ -728,11 +729,12 @@ static int srp_reconnect_target(struct srp_target_port *target)
918 for (i = 0; i < SRP_SQ_SIZE; ++i)
919 list_add(&target->tx_ring[i]->list, &target->free_tx);
920
921 - ret = srp_connect_target(target);
922 + if (ret == 0)
923 + ret = srp_connect_target(target);
924
925 -unblock:
926 scsi_target_unblock(&shost->shost_gendev, ret == 0 ? SDEV_RUNNING :
927 SDEV_TRANSPORT_OFFLINE);
928 + target->transport_offline = !!ret;
929
930 if (ret)
931 goto err;
932 @@ -1352,6 +1354,12 @@ static int srp_queuecommand(struct Scsi_Host *shost, struct scsi_cmnd *scmnd)
933 unsigned long flags;
934 int len;
935
936 + if (unlikely(target->transport_offline)) {
937 + scmnd->result = DID_NO_CONNECT << 16;
938 + scmnd->scsi_done(scmnd);
939 + return 0;
940 + }
941 +
942 spin_lock_irqsave(&target->lock, flags);
943 iu = __srp_get_tx_iu(target, SRP_IU_CMD);
944 if (!iu)
945 @@ -1695,6 +1703,9 @@ static int srp_send_tsk_mgmt(struct srp_target_port *target,
946 struct srp_iu *iu;
947 struct srp_tsk_mgmt *tsk_mgmt;
948
949 + if (!target->connected || target->qp_in_error)
950 + return -1;
951 +
952 init_completion(&target->tsk_mgmt_done);
953
954 spin_lock_irq(&target->lock);
955 @@ -1736,7 +1747,7 @@ static int srp_abort(struct scsi_cmnd *scmnd)
956
957 shost_printk(KERN_ERR, target->scsi_host, "SRP abort called\n");
958
959 - if (!req || target->qp_in_error || !srp_claim_req(target, req, scmnd))
960 + if (!req || !srp_claim_req(target, req, scmnd))
961 return FAILED;
962 srp_send_tsk_mgmt(target, req->index, scmnd->device->lun,
963 SRP_TSK_ABORT_TASK);
964 @@ -1754,8 +1765,6 @@ static int srp_reset_device(struct scsi_cmnd *scmnd)
965
966 shost_printk(KERN_ERR, target->scsi_host, "SRP reset_device called\n");
967
968 - if (target->qp_in_error)
969 - return FAILED;
970 if (srp_send_tsk_mgmt(target, SRP_TAG_NO_REQ, scmnd->device->lun,
971 SRP_TSK_LUN_RESET))
972 return FAILED;
973 @@ -1972,7 +1981,6 @@ static int srp_add_target(struct srp_host *host, struct srp_target_port *target)
974 spin_unlock(&host->target_lock);
975
976 target->state = SRP_TARGET_LIVE;
977 - target->connected = false;
978
979 scsi_scan_target(&target->scsi_host->shost_gendev,
980 0, target->scsi_id, SCAN_WILD_CARD, 0);
981 diff --git a/drivers/infiniband/ulp/srp/ib_srp.h b/drivers/infiniband/ulp/srp/ib_srp.h
982 index de2d0b3..66fbedd 100644
983 --- a/drivers/infiniband/ulp/srp/ib_srp.h
984 +++ b/drivers/infiniband/ulp/srp/ib_srp.h
985 @@ -140,6 +140,7 @@ struct srp_target_port {
986 unsigned int cmd_sg_cnt;
987 unsigned int indirect_size;
988 bool allow_ext_sg;
989 + bool transport_offline;
990
991 /* Everything above this point is used in the hot path of
992 * command processing. Try to keep them packed into cachelines.
993 diff --git a/drivers/iommu/amd_iommu_init.c b/drivers/iommu/amd_iommu_init.c
994 index faf10ba..b6ecddb 100644
995 --- a/drivers/iommu/amd_iommu_init.c
996 +++ b/drivers/iommu/amd_iommu_init.c
997 @@ -1876,11 +1876,6 @@ static int amd_iommu_init_dma(void)
998 struct amd_iommu *iommu;
999 int ret;
1000
1001 - init_device_table_dma();
1002 -
1003 - for_each_iommu(iommu)
1004 - iommu_flush_all_caches(iommu);
1005 -
1006 if (iommu_pass_through)
1007 ret = amd_iommu_init_passthrough();
1008 else
1009 @@ -1889,6 +1884,11 @@ static int amd_iommu_init_dma(void)
1010 if (ret)
1011 return ret;
1012
1013 + init_device_table_dma();
1014 +
1015 + for_each_iommu(iommu)
1016 + iommu_flush_all_caches(iommu);
1017 +
1018 amd_iommu_init_api();
1019
1020 amd_iommu_init_notifier();
1021 diff --git a/drivers/media/pci/cx18/cx18-alsa-main.c b/drivers/media/pci/cx18/cx18-alsa-main.c
1022 index 8e971ff..b2c8c34 100644
1023 --- a/drivers/media/pci/cx18/cx18-alsa-main.c
1024 +++ b/drivers/media/pci/cx18/cx18-alsa-main.c
1025 @@ -197,7 +197,7 @@ err_exit:
1026 return ret;
1027 }
1028
1029 -static int __init cx18_alsa_load(struct cx18 *cx)
1030 +static int cx18_alsa_load(struct cx18 *cx)
1031 {
1032 struct v4l2_device *v4l2_dev = &cx->v4l2_dev;
1033 struct cx18_stream *s;
1034 diff --git a/drivers/media/pci/cx18/cx18-alsa-pcm.h b/drivers/media/pci/cx18/cx18-alsa-pcm.h
1035 index d26e51f..e2b2c5b 100644
1036 --- a/drivers/media/pci/cx18/cx18-alsa-pcm.h
1037 +++ b/drivers/media/pci/cx18/cx18-alsa-pcm.h
1038 @@ -20,7 +20,7 @@
1039 * 02111-1307 USA
1040 */
1041
1042 -int __init snd_cx18_pcm_create(struct snd_cx18_card *cxsc);
1043 +int snd_cx18_pcm_create(struct snd_cx18_card *cxsc);
1044
1045 /* Used by cx18-mailbox to announce the PCM data to the module */
1046 void cx18_alsa_announce_pcm_data(struct snd_cx18_card *card, u8 *pcm_data,
1047 diff --git a/drivers/media/pci/ivtv/ivtv-alsa-main.c b/drivers/media/pci/ivtv/ivtv-alsa-main.c
1048 index 4a221c6..e970cfa 100644
1049 --- a/drivers/media/pci/ivtv/ivtv-alsa-main.c
1050 +++ b/drivers/media/pci/ivtv/ivtv-alsa-main.c
1051 @@ -205,7 +205,7 @@ err_exit:
1052 return ret;
1053 }
1054
1055 -static int __init ivtv_alsa_load(struct ivtv *itv)
1056 +static int ivtv_alsa_load(struct ivtv *itv)
1057 {
1058 struct v4l2_device *v4l2_dev = &itv->v4l2_dev;
1059 struct ivtv_stream *s;
1060 diff --git a/drivers/media/pci/ivtv/ivtv-alsa-pcm.h b/drivers/media/pci/ivtv/ivtv-alsa-pcm.h
1061 index 23dfe0d..186814e 100644
1062 --- a/drivers/media/pci/ivtv/ivtv-alsa-pcm.h
1063 +++ b/drivers/media/pci/ivtv/ivtv-alsa-pcm.h
1064 @@ -20,4 +20,4 @@
1065 * 02111-1307 USA
1066 */
1067
1068 -int __init snd_ivtv_pcm_create(struct snd_ivtv_card *itvsc);
1069 +int snd_ivtv_pcm_create(struct snd_ivtv_card *itvsc);
1070 diff --git a/drivers/media/platform/omap/omap_vout.c b/drivers/media/platform/omap/omap_vout.c
1071 index 35cc526..8e9a668 100644
1072 --- a/drivers/media/platform/omap/omap_vout.c
1073 +++ b/drivers/media/platform/omap/omap_vout.c
1074 @@ -205,19 +205,21 @@ static u32 omap_vout_uservirt_to_phys(u32 virtp)
1075 struct vm_area_struct *vma;
1076 struct mm_struct *mm = current->mm;
1077
1078 - vma = find_vma(mm, virtp);
1079 /* For kernel direct-mapped memory, take the easy way */
1080 - if (virtp >= PAGE_OFFSET) {
1081 - physp = virt_to_phys((void *) virtp);
1082 - } else if (vma && (vma->vm_flags & VM_IO) && vma->vm_pgoff) {
1083 + if (virtp >= PAGE_OFFSET)
1084 + return virt_to_phys((void *) virtp);
1085 +
1086 + down_read(&current->mm->mmap_sem);
1087 + vma = find_vma(mm, virtp);
1088 + if (vma && (vma->vm_flags & VM_IO) && vma->vm_pgoff) {
1089 /* this will catch, kernel-allocated, mmaped-to-usermode
1090 addresses */
1091 physp = (vma->vm_pgoff << PAGE_SHIFT) + (virtp - vma->vm_start);
1092 + up_read(&current->mm->mmap_sem);
1093 } else {
1094 /* otherwise, use get_user_pages() for general userland pages */
1095 int res, nr_pages = 1;
1096 struct page *pages;
1097 - down_read(&current->mm->mmap_sem);
1098
1099 res = get_user_pages(current, current->mm, virtp, nr_pages, 1,
1100 0, &pages, NULL);
1101 diff --git a/drivers/media/rc/rc-main.c b/drivers/media/rc/rc-main.c
1102 index 601d1ac1..d593bc6 100644
1103 --- a/drivers/media/rc/rc-main.c
1104 +++ b/drivers/media/rc/rc-main.c
1105 @@ -789,8 +789,10 @@ static ssize_t show_protocols(struct device *device,
1106 } else if (dev->raw) {
1107 enabled = dev->raw->enabled_protocols;
1108 allowed = ir_raw_get_allowed_protocols();
1109 - } else
1110 + } else {
1111 + mutex_unlock(&dev->lock);
1112 return -ENODEV;
1113 + }
1114
1115 IR_dprintk(1, "allowed - 0x%llx, enabled - 0x%llx\n",
1116 (long long)allowed,
1117 diff --git a/drivers/media/v4l2-core/v4l2-device.c b/drivers/media/v4l2-core/v4l2-device.c
1118 index 513969f..98a7f5e 100644
1119 --- a/drivers/media/v4l2-core/v4l2-device.c
1120 +++ b/drivers/media/v4l2-core/v4l2-device.c
1121 @@ -159,31 +159,21 @@ int v4l2_device_register_subdev(struct v4l2_device *v4l2_dev,
1122 sd->v4l2_dev = v4l2_dev;
1123 if (sd->internal_ops && sd->internal_ops->registered) {
1124 err = sd->internal_ops->registered(sd);
1125 - if (err) {
1126 - module_put(sd->owner);
1127 - return err;
1128 - }
1129 + if (err)
1130 + goto error_module;
1131 }
1132
1133 /* This just returns 0 if either of the two args is NULL */
1134 err = v4l2_ctrl_add_handler(v4l2_dev->ctrl_handler, sd->ctrl_handler, NULL);
1135 - if (err) {
1136 - if (sd->internal_ops && sd->internal_ops->unregistered)
1137 - sd->internal_ops->unregistered(sd);
1138 - module_put(sd->owner);
1139 - return err;
1140 - }
1141 + if (err)
1142 + goto error_unregister;
1143
1144 #if defined(CONFIG_MEDIA_CONTROLLER)
1145 /* Register the entity. */
1146 if (v4l2_dev->mdev) {
1147 err = media_device_register_entity(v4l2_dev->mdev, entity);
1148 - if (err < 0) {
1149 - if (sd->internal_ops && sd->internal_ops->unregistered)
1150 - sd->internal_ops->unregistered(sd);
1151 - module_put(sd->owner);
1152 - return err;
1153 - }
1154 + if (err < 0)
1155 + goto error_unregister;
1156 }
1157 #endif
1158
1159 @@ -192,6 +182,14 @@ int v4l2_device_register_subdev(struct v4l2_device *v4l2_dev,
1160 spin_unlock(&v4l2_dev->lock);
1161
1162 return 0;
1163 +
1164 +error_unregister:
1165 + if (sd->internal_ops && sd->internal_ops->unregistered)
1166 + sd->internal_ops->unregistered(sd);
1167 +error_module:
1168 + module_put(sd->owner);
1169 + sd->v4l2_dev = NULL;
1170 + return err;
1171 }
1172 EXPORT_SYMBOL_GPL(v4l2_device_register_subdev);
1173
1174 diff --git a/drivers/net/wireless/b43/main.c b/drivers/net/wireless/b43/main.c
1175 index 806e34c..0568273 100644
1176 --- a/drivers/net/wireless/b43/main.c
1177 +++ b/drivers/net/wireless/b43/main.c
1178 @@ -4214,7 +4214,6 @@ redo:
1179 mutex_unlock(&wl->mutex);
1180 cancel_delayed_work_sync(&dev->periodic_work);
1181 cancel_work_sync(&wl->tx_work);
1182 - cancel_work_sync(&wl->firmware_load);
1183 mutex_lock(&wl->mutex);
1184 dev = wl->current_dev;
1185 if (!dev || b43_status(dev) < B43_STAT_STARTED) {
1186 @@ -5434,6 +5433,7 @@ static void b43_bcma_remove(struct bcma_device *core)
1187 /* We must cancel any work here before unregistering from ieee80211,
1188 * as the ieee80211 unreg will destroy the workqueue. */
1189 cancel_work_sync(&wldev->restart_work);
1190 + cancel_work_sync(&wl->firmware_load);
1191
1192 B43_WARN_ON(!wl);
1193 if (!wldev->fw.ucode.data)
1194 @@ -5510,6 +5510,7 @@ static void b43_ssb_remove(struct ssb_device *sdev)
1195 /* We must cancel any work here before unregistering from ieee80211,
1196 * as the ieee80211 unreg will destroy the workqueue. */
1197 cancel_work_sync(&wldev->restart_work);
1198 + cancel_work_sync(&wl->firmware_load);
1199
1200 B43_WARN_ON(!wl);
1201 if (!wldev->fw.ucode.data)
1202 diff --git a/drivers/power/ab8500_btemp.c b/drivers/power/ab8500_btemp.c
1203 index 20e2a7d..056222e 100644
1204 --- a/drivers/power/ab8500_btemp.c
1205 +++ b/drivers/power/ab8500_btemp.c
1206 @@ -1123,7 +1123,7 @@ static void __exit ab8500_btemp_exit(void)
1207 platform_driver_unregister(&ab8500_btemp_driver);
1208 }
1209
1210 -subsys_initcall_sync(ab8500_btemp_init);
1211 +device_initcall(ab8500_btemp_init);
1212 module_exit(ab8500_btemp_exit);
1213
1214 MODULE_LICENSE("GPL v2");
1215 diff --git a/drivers/power/abx500_chargalg.c b/drivers/power/abx500_chargalg.c
1216 index 2970891..eb7b4a6 100644
1217 --- a/drivers/power/abx500_chargalg.c
1218 +++ b/drivers/power/abx500_chargalg.c
1219 @@ -1698,7 +1698,7 @@ static ssize_t abx500_chargalg_sysfs_charger(struct kobject *kobj,
1220 static struct attribute abx500_chargalg_en_charger = \
1221 {
1222 .name = "chargalg",
1223 - .mode = S_IWUGO,
1224 + .mode = S_IWUSR,
1225 };
1226
1227 static struct attribute *abx500_chargalg_chg[] = {
1228 diff --git a/drivers/power/bq27x00_battery.c b/drivers/power/bq27x00_battery.c
1229 index 36b34ef..7087d0d 100644
1230 --- a/drivers/power/bq27x00_battery.c
1231 +++ b/drivers/power/bq27x00_battery.c
1232 @@ -448,7 +448,6 @@ static void bq27x00_update(struct bq27x00_device_info *di)
1233 cache.temperature = bq27x00_battery_read_temperature(di);
1234 if (!is_bq27425)
1235 cache.cycle_count = bq27x00_battery_read_cyct(di);
1236 - cache.cycle_count = bq27x00_battery_read_cyct(di);
1237 cache.power_avg =
1238 bq27x00_battery_read_pwr_avg(di, BQ27x00_POWER_AVG);
1239
1240 @@ -696,7 +695,6 @@ static int bq27x00_powersupply_init(struct bq27x00_device_info *di)
1241 int ret;
1242
1243 di->bat.type = POWER_SUPPLY_TYPE_BATTERY;
1244 - di->chip = BQ27425;
1245 if (di->chip == BQ27425) {
1246 di->bat.properties = bq27425_battery_props;
1247 di->bat.num_properties = ARRAY_SIZE(bq27425_battery_props);
1248 diff --git a/drivers/staging/comedi/comedi_fops.c b/drivers/staging/comedi/comedi_fops.c
1249 index 8f14c42..6894b3e 100644
1250 --- a/drivers/staging/comedi/comedi_fops.c
1251 +++ b/drivers/staging/comedi/comedi_fops.c
1252 @@ -1779,7 +1779,7 @@ static unsigned int comedi_poll(struct file *file, poll_table *wait)
1253
1254 mask = 0;
1255 read_subdev = comedi_get_read_subdevice(dev_file_info);
1256 - if (read_subdev) {
1257 + if (read_subdev && read_subdev->async) {
1258 poll_wait(file, &read_subdev->async->wait_head, wait);
1259 if (!read_subdev->busy
1260 || comedi_buf_read_n_available(read_subdev->async) > 0
1261 @@ -1789,7 +1789,7 @@ static unsigned int comedi_poll(struct file *file, poll_table *wait)
1262 }
1263 }
1264 write_subdev = comedi_get_write_subdevice(dev_file_info);
1265 - if (write_subdev) {
1266 + if (write_subdev && write_subdev->async) {
1267 poll_wait(file, &write_subdev->async->wait_head, wait);
1268 comedi_buf_write_alloc(write_subdev->async,
1269 write_subdev->async->prealloc_bufsz);
1270 @@ -1831,7 +1831,7 @@ static ssize_t comedi_write(struct file *file, const char __user *buf,
1271 }
1272
1273 s = comedi_get_write_subdevice(dev_file_info);
1274 - if (s == NULL) {
1275 + if (s == NULL || s->async == NULL) {
1276 retval = -EIO;
1277 goto done;
1278 }
1279 @@ -1942,7 +1942,7 @@ static ssize_t comedi_read(struct file *file, char __user *buf, size_t nbytes,
1280 }
1281
1282 s = comedi_get_read_subdevice(dev_file_info);
1283 - if (s == NULL) {
1284 + if (s == NULL || s->async == NULL) {
1285 retval = -EIO;
1286 goto done;
1287 }
1288 diff --git a/drivers/target/target_core_device.c b/drivers/target/target_core_device.c
1289 index f2aa754..96f4981 100644
1290 --- a/drivers/target/target_core_device.c
1291 +++ b/drivers/target/target_core_device.c
1292 @@ -1182,24 +1182,18 @@ static struct se_lun *core_dev_get_lun(struct se_portal_group *tpg, u32 unpacked
1293
1294 struct se_lun_acl *core_dev_init_initiator_node_lun_acl(
1295 struct se_portal_group *tpg,
1296 + struct se_node_acl *nacl,
1297 u32 mapped_lun,
1298 - char *initiatorname,
1299 int *ret)
1300 {
1301 struct se_lun_acl *lacl;
1302 - struct se_node_acl *nacl;
1303
1304 - if (strlen(initiatorname) >= TRANSPORT_IQN_LEN) {
1305 + if (strlen(nacl->initiatorname) >= TRANSPORT_IQN_LEN) {
1306 pr_err("%s InitiatorName exceeds maximum size.\n",
1307 tpg->se_tpg_tfo->get_fabric_name());
1308 *ret = -EOVERFLOW;
1309 return NULL;
1310 }
1311 - nacl = core_tpg_get_initiator_node_acl(tpg, initiatorname);
1312 - if (!nacl) {
1313 - *ret = -EINVAL;
1314 - return NULL;
1315 - }
1316 lacl = kzalloc(sizeof(struct se_lun_acl), GFP_KERNEL);
1317 if (!lacl) {
1318 pr_err("Unable to allocate memory for struct se_lun_acl.\n");
1319 @@ -1210,7 +1204,8 @@ struct se_lun_acl *core_dev_init_initiator_node_lun_acl(
1320 INIT_LIST_HEAD(&lacl->lacl_list);
1321 lacl->mapped_lun = mapped_lun;
1322 lacl->se_lun_nacl = nacl;
1323 - snprintf(lacl->initiatorname, TRANSPORT_IQN_LEN, "%s", initiatorname);
1324 + snprintf(lacl->initiatorname, TRANSPORT_IQN_LEN, "%s",
1325 + nacl->initiatorname);
1326
1327 return lacl;
1328 }
1329 diff --git a/drivers/target/target_core_fabric_configfs.c b/drivers/target/target_core_fabric_configfs.c
1330 index c57bbbc..04c775c 100644
1331 --- a/drivers/target/target_core_fabric_configfs.c
1332 +++ b/drivers/target/target_core_fabric_configfs.c
1333 @@ -354,9 +354,17 @@ static struct config_group *target_fabric_make_mappedlun(
1334 ret = -EINVAL;
1335 goto out;
1336 }
1337 + if (mapped_lun > (TRANSPORT_MAX_LUNS_PER_TPG-1)) {
1338 + pr_err("Mapped LUN: %lu exceeds TRANSPORT_MAX_LUNS_PER_TPG"
1339 + "-1: %u for Target Portal Group: %u\n", mapped_lun,
1340 + TRANSPORT_MAX_LUNS_PER_TPG-1,
1341 + se_tpg->se_tpg_tfo->tpg_get_tag(se_tpg));
1342 + ret = -EINVAL;
1343 + goto out;
1344 + }
1345
1346 - lacl = core_dev_init_initiator_node_lun_acl(se_tpg, mapped_lun,
1347 - config_item_name(acl_ci), &ret);
1348 + lacl = core_dev_init_initiator_node_lun_acl(se_tpg, se_nacl,
1349 + mapped_lun, &ret);
1350 if (!lacl) {
1351 ret = -EINVAL;
1352 goto out;
1353 diff --git a/drivers/target/target_core_internal.h b/drivers/target/target_core_internal.h
1354 index 93e9c1f..396e1eb 100644
1355 --- a/drivers/target/target_core_internal.h
1356 +++ b/drivers/target/target_core_internal.h
1357 @@ -45,7 +45,7 @@ struct se_lun *core_dev_add_lun(struct se_portal_group *, struct se_device *, u3
1358 int core_dev_del_lun(struct se_portal_group *, u32);
1359 struct se_lun *core_get_lun_from_tpg(struct se_portal_group *, u32);
1360 struct se_lun_acl *core_dev_init_initiator_node_lun_acl(struct se_portal_group *,
1361 - u32, char *, int *);
1362 + struct se_node_acl *, u32, int *);
1363 int core_dev_add_initiator_node_lun_acl(struct se_portal_group *,
1364 struct se_lun_acl *, u32, u32);
1365 int core_dev_del_initiator_node_lun_acl(struct se_portal_group *,
1366 diff --git a/drivers/target/target_core_tpg.c b/drivers/target/target_core_tpg.c
1367 index 5192ac0..9169d6a 100644
1368 --- a/drivers/target/target_core_tpg.c
1369 +++ b/drivers/target/target_core_tpg.c
1370 @@ -111,16 +111,10 @@ struct se_node_acl *core_tpg_get_initiator_node_acl(
1371 struct se_node_acl *acl;
1372
1373 spin_lock_irq(&tpg->acl_node_lock);
1374 - list_for_each_entry(acl, &tpg->acl_node_list, acl_list) {
1375 - if (!strcmp(acl->initiatorname, initiatorname) &&
1376 - !acl->dynamic_node_acl) {
1377 - spin_unlock_irq(&tpg->acl_node_lock);
1378 - return acl;
1379 - }
1380 - }
1381 + acl = __core_tpg_get_initiator_node_acl(tpg, initiatorname);
1382 spin_unlock_irq(&tpg->acl_node_lock);
1383
1384 - return NULL;
1385 + return acl;
1386 }
1387
1388 /* core_tpg_add_node_to_devs():
1389 diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h
1390 index 4999563..1dae91d 100644
1391 --- a/drivers/usb/dwc3/core.h
1392 +++ b/drivers/usb/dwc3/core.h
1393 @@ -405,7 +405,6 @@ struct dwc3_event_buffer {
1394 * @number: endpoint number (1 - 15)
1395 * @type: set to bmAttributes & USB_ENDPOINT_XFERTYPE_MASK
1396 * @resource_index: Resource transfer index
1397 - * @current_uf: Current uf received through last event parameter
1398 * @interval: the intervall on which the ISOC transfer is started
1399 * @name: a human readable name e.g. ep1out-bulk
1400 * @direction: true for TX, false for RX
1401 @@ -439,7 +438,6 @@ struct dwc3_ep {
1402 u8 number;
1403 u8 type;
1404 u8 resource_index;
1405 - u16 current_uf;
1406 u32 interval;
1407
1408 char name[20];
1409 diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
1410 index 2fdd767..09835b6 100644
1411 --- a/drivers/usb/dwc3/gadget.c
1412 +++ b/drivers/usb/dwc3/gadget.c
1413 @@ -754,21 +754,18 @@ static void dwc3_prepare_one_trb(struct dwc3_ep *dep,
1414 struct dwc3 *dwc = dep->dwc;
1415 struct dwc3_trb *trb;
1416
1417 - unsigned int cur_slot;
1418 -
1419 dev_vdbg(dwc->dev, "%s: req %p dma %08llx length %d%s%s\n",
1420 dep->name, req, (unsigned long long) dma,
1421 length, last ? " last" : "",
1422 chain ? " chain" : "");
1423
1424 - trb = &dep->trb_pool[dep->free_slot & DWC3_TRB_MASK];
1425 - cur_slot = dep->free_slot;
1426 - dep->free_slot++;
1427 -
1428 /* Skip the LINK-TRB on ISOC */
1429 - if (((cur_slot & DWC3_TRB_MASK) == DWC3_TRB_NUM - 1) &&
1430 + if (((dep->free_slot & DWC3_TRB_MASK) == DWC3_TRB_NUM - 1) &&
1431 usb_endpoint_xfer_isoc(dep->endpoint.desc))
1432 - return;
1433 + dep->free_slot++;
1434 +
1435 + trb = &dep->trb_pool[dep->free_slot & DWC3_TRB_MASK];
1436 + dep->free_slot++;
1437
1438 if (!req->trb) {
1439 dwc3_gadget_move_request_queued(req);
1440 @@ -1091,7 +1088,10 @@ static int __dwc3_gadget_ep_queue(struct dwc3_ep *dep, struct dwc3_request *req)
1441 * notion of current microframe.
1442 */
1443 if (usb_endpoint_xfer_isoc(dep->endpoint.desc)) {
1444 - dwc3_stop_active_transfer(dwc, dep->number);
1445 + if (list_empty(&dep->req_queued)) {
1446 + dwc3_stop_active_transfer(dwc, dep->number);
1447 + dep->flags = DWC3_EP_ENABLED;
1448 + }
1449 return 0;
1450 }
1451
1452 @@ -1117,16 +1117,6 @@ static int __dwc3_gadget_ep_queue(struct dwc3_ep *dep, struct dwc3_request *req)
1453 dep->name);
1454 }
1455
1456 - /*
1457 - * 3. Missed ISOC Handling. We need to start isoc transfer on the saved
1458 - * uframe number.
1459 - */
1460 - if (usb_endpoint_xfer_isoc(dep->endpoint.desc) &&
1461 - (dep->flags & DWC3_EP_MISSED_ISOC)) {
1462 - __dwc3_gadget_start_isoc(dwc, dep, dep->current_uf);
1463 - dep->flags &= ~DWC3_EP_MISSED_ISOC;
1464 - }
1465 -
1466 return 0;
1467 }
1468
1469 @@ -1689,14 +1679,29 @@ static int dwc3_cleanup_done_reqs(struct dwc3 *dwc, struct dwc3_ep *dep,
1470 if (trb_status == DWC3_TRBSTS_MISSED_ISOC) {
1471 dev_dbg(dwc->dev, "incomplete IN transfer %s\n",
1472 dep->name);
1473 - dep->current_uf = event->parameters &
1474 - ~(dep->interval - 1);
1475 + /*
1476 + * If missed isoc occurred and there is
1477 + * no request queued then issue END
1478 + * TRANSFER, so that core generates
1479 + * next xfernotready and we will issue
1480 + * a fresh START TRANSFER.
1481 + * If there are still queued request
1482 + * then wait, do not issue either END
1483 + * or UPDATE TRANSFER, just attach next
1484 + * request in request_list during
1485 + * giveback.If any future queued request
1486 + * is successfully transferred then we
1487 + * will issue UPDATE TRANSFER for all
1488 + * request in the request_list.
1489 + */
1490 dep->flags |= DWC3_EP_MISSED_ISOC;
1491 } else {
1492 dev_err(dwc->dev, "incomplete IN transfer %s\n",
1493 dep->name);
1494 status = -ECONNRESET;
1495 }
1496 + } else {
1497 + dep->flags &= ~DWC3_EP_MISSED_ISOC;
1498 }
1499 } else {
1500 if (count && (event->status & DEPEVT_STATUS_SHORT))
1501 @@ -1723,6 +1728,23 @@ static int dwc3_cleanup_done_reqs(struct dwc3 *dwc, struct dwc3_ep *dep,
1502 break;
1503 } while (1);
1504
1505 + if (usb_endpoint_xfer_isoc(dep->endpoint.desc) &&
1506 + list_empty(&dep->req_queued)) {
1507 + if (list_empty(&dep->request_list)) {
1508 + /*
1509 + * If there is no entry in request list then do
1510 + * not issue END TRANSFER now. Just set PENDING
1511 + * flag, so that END TRANSFER is issued when an
1512 + * entry is added into request list.
1513 + */
1514 + dep->flags = DWC3_EP_PENDING_REQUEST;
1515 + } else {
1516 + dwc3_stop_active_transfer(dwc, dep->number);
1517 + dep->flags = DWC3_EP_ENABLED;
1518 + }
1519 + return 1;
1520 + }
1521 +
1522 if ((event->status & DEPEVT_STATUS_IOC) &&
1523 (trb->ctrl & DWC3_TRB_CTRL_IOC))
1524 return 0;
1525 @@ -2157,6 +2179,26 @@ static void dwc3_gadget_conndone_interrupt(struct dwc3 *dwc)
1526 break;
1527 }
1528
1529 + /* Enable USB2 LPM Capability */
1530 +
1531 + if ((dwc->revision > DWC3_REVISION_194A)
1532 + && (speed != DWC3_DCFG_SUPERSPEED)) {
1533 + reg = dwc3_readl(dwc->regs, DWC3_DCFG);
1534 + reg |= DWC3_DCFG_LPM_CAP;
1535 + dwc3_writel(dwc->regs, DWC3_DCFG, reg);
1536 +
1537 + reg = dwc3_readl(dwc->regs, DWC3_DCTL);
1538 + reg &= ~(DWC3_DCTL_HIRD_THRES_MASK | DWC3_DCTL_L1_HIBER_EN);
1539 +
1540 + /*
1541 + * TODO: This should be configurable. For now using
1542 + * maximum allowed HIRD threshold value of 0b1100
1543 + */
1544 + reg |= DWC3_DCTL_HIRD_THRES(12);
1545 +
1546 + dwc3_writel(dwc->regs, DWC3_DCTL, reg);
1547 + }
1548 +
1549 /* Recent versions support automatic phy suspend and don't need this */
1550 if (dwc->revision < DWC3_REVISION_194A) {
1551 /* Suspend unneeded PHY */
1552 @@ -2463,20 +2505,8 @@ int dwc3_gadget_init(struct dwc3 *dwc)
1553 DWC3_DEVTEN_DISCONNEVTEN);
1554 dwc3_writel(dwc->regs, DWC3_DEVTEN, reg);
1555
1556 - /* Enable USB2 LPM and automatic phy suspend only on recent versions */
1557 + /* automatic phy suspend only on recent versions */
1558 if (dwc->revision >= DWC3_REVISION_194A) {
1559 - reg = dwc3_readl(dwc->regs, DWC3_DCFG);
1560 - reg |= DWC3_DCFG_LPM_CAP;
1561 - dwc3_writel(dwc->regs, DWC3_DCFG, reg);
1562 -
1563 - reg = dwc3_readl(dwc->regs, DWC3_DCTL);
1564 - reg &= ~(DWC3_DCTL_HIRD_THRES_MASK | DWC3_DCTL_L1_HIBER_EN);
1565 -
1566 - /* TODO: This should be configurable */
1567 - reg |= DWC3_DCTL_HIRD_THRES(28);
1568 -
1569 - dwc3_writel(dwc->regs, DWC3_DCTL, reg);
1570 -
1571 dwc3_gadget_usb2_phy_suspend(dwc, false);
1572 dwc3_gadget_usb3_phy_suspend(dwc, false);
1573 }
1574 diff --git a/fs/direct-io.c b/fs/direct-io.c
1575 index cf5b44b..f853263 100644
1576 --- a/fs/direct-io.c
1577 +++ b/fs/direct-io.c
1578 @@ -261,9 +261,9 @@ static ssize_t dio_complete(struct dio *dio, loff_t offset, ssize_t ret, bool is
1579 dio->end_io(dio->iocb, offset, transferred,
1580 dio->private, ret, is_async);
1581 } else {
1582 + inode_dio_done(dio->inode);
1583 if (is_async)
1584 aio_complete(dio->iocb, ret, 0);
1585 - inode_dio_done(dio->inode);
1586 }
1587
1588 return ret;
1589 diff --git a/fs/ext4/balloc.c b/fs/ext4/balloc.c
1590 index cf18217..2f2e0da 100644
1591 --- a/fs/ext4/balloc.c
1592 +++ b/fs/ext4/balloc.c
1593 @@ -358,7 +358,7 @@ void ext4_validate_block_bitmap(struct super_block *sb,
1594 }
1595
1596 /**
1597 - * ext4_read_block_bitmap()
1598 + * ext4_read_block_bitmap_nowait()
1599 * @sb: super block
1600 * @block_group: given block group
1601 *
1602 @@ -457,6 +457,8 @@ ext4_read_block_bitmap(struct super_block *sb, ext4_group_t block_group)
1603 struct buffer_head *bh;
1604
1605 bh = ext4_read_block_bitmap_nowait(sb, block_group);
1606 + if (!bh)
1607 + return NULL;
1608 if (ext4_wait_block_bitmap(sb, block_group, bh)) {
1609 put_bh(bh);
1610 return NULL;
1611 @@ -482,11 +484,16 @@ static int ext4_has_free_clusters(struct ext4_sb_info *sbi,
1612
1613 free_clusters = percpu_counter_read_positive(fcc);
1614 dirty_clusters = percpu_counter_read_positive(dcc);
1615 - root_clusters = EXT4_B2C(sbi, ext4_r_blocks_count(sbi->s_es));
1616 +
1617 + /*
1618 + * r_blocks_count should always be multiple of the cluster ratio so
1619 + * we are safe to do a plane bit shift only.
1620 + */
1621 + root_clusters = ext4_r_blocks_count(sbi->s_es) >> sbi->s_cluster_bits;
1622
1623 if (free_clusters - (nclusters + root_clusters + dirty_clusters) <
1624 EXT4_FREECLUSTERS_WATERMARK) {
1625 - free_clusters = EXT4_C2B(sbi, percpu_counter_sum_positive(fcc));
1626 + free_clusters = percpu_counter_sum_positive(fcc);
1627 dirty_clusters = percpu_counter_sum_positive(dcc);
1628 }
1629 /* Check whether we have space after accounting for current
1630 diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c
1631 index 5ae1674..d42a8c4 100644
1632 --- a/fs/ext4/extents.c
1633 +++ b/fs/ext4/extents.c
1634 @@ -725,6 +725,7 @@ ext4_ext_find_extent(struct inode *inode, ext4_lblk_t block,
1635 struct ext4_extent_header *eh;
1636 struct buffer_head *bh;
1637 short int depth, i, ppos = 0, alloc = 0;
1638 + int ret;
1639
1640 eh = ext_inode_hdr(inode);
1641 depth = ext_depth(inode);
1642 @@ -752,12 +753,15 @@ ext4_ext_find_extent(struct inode *inode, ext4_lblk_t block,
1643 path[ppos].p_ext = NULL;
1644
1645 bh = sb_getblk(inode->i_sb, path[ppos].p_block);
1646 - if (unlikely(!bh))
1647 + if (unlikely(!bh)) {
1648 + ret = -ENOMEM;
1649 goto err;
1650 + }
1651 if (!bh_uptodate_or_lock(bh)) {
1652 trace_ext4_ext_load_extent(inode, block,
1653 path[ppos].p_block);
1654 - if (bh_submit_read(bh) < 0) {
1655 + ret = bh_submit_read(bh);
1656 + if (ret < 0) {
1657 put_bh(bh);
1658 goto err;
1659 }
1660 @@ -768,13 +772,15 @@ ext4_ext_find_extent(struct inode *inode, ext4_lblk_t block,
1661 put_bh(bh);
1662 EXT4_ERROR_INODE(inode,
1663 "ppos %d > depth %d", ppos, depth);
1664 + ret = -EIO;
1665 goto err;
1666 }
1667 path[ppos].p_bh = bh;
1668 path[ppos].p_hdr = eh;
1669 i--;
1670
1671 - if (ext4_ext_check_block(inode, eh, i, bh))
1672 + ret = ext4_ext_check_block(inode, eh, i, bh);
1673 + if (ret < 0)
1674 goto err;
1675 }
1676
1677 @@ -796,7 +802,7 @@ err:
1678 ext4_ext_drop_refs(path);
1679 if (alloc)
1680 kfree(path);
1681 - return ERR_PTR(-EIO);
1682 + return ERR_PTR(ret);
1683 }
1684
1685 /*
1686 @@ -951,7 +957,7 @@ static int ext4_ext_split(handle_t *handle, struct inode *inode,
1687 }
1688 bh = sb_getblk(inode->i_sb, newblock);
1689 if (!bh) {
1690 - err = -EIO;
1691 + err = -ENOMEM;
1692 goto cleanup;
1693 }
1694 lock_buffer(bh);
1695 @@ -1024,7 +1030,7 @@ static int ext4_ext_split(handle_t *handle, struct inode *inode,
1696 newblock = ablocks[--a];
1697 bh = sb_getblk(inode->i_sb, newblock);
1698 if (!bh) {
1699 - err = -EIO;
1700 + err = -ENOMEM;
1701 goto cleanup;
1702 }
1703 lock_buffer(bh);
1704 @@ -1136,11 +1142,8 @@ static int ext4_ext_grow_indepth(handle_t *handle, struct inode *inode,
1705 return err;
1706
1707 bh = sb_getblk(inode->i_sb, newblock);
1708 - if (!bh) {
1709 - err = -EIO;
1710 - ext4_std_error(inode->i_sb, err);
1711 - return err;
1712 - }
1713 + if (!bh)
1714 + return -ENOMEM;
1715 lock_buffer(bh);
1716
1717 err = ext4_journal_get_create_access(handle, bh);
1718 diff --git a/fs/ext4/indirect.c b/fs/ext4/indirect.c
1719 index 20862f9..8d83d1e 100644
1720 --- a/fs/ext4/indirect.c
1721 +++ b/fs/ext4/indirect.c
1722 @@ -146,6 +146,7 @@ static Indirect *ext4_get_branch(struct inode *inode, int depth,
1723 struct super_block *sb = inode->i_sb;
1724 Indirect *p = chain;
1725 struct buffer_head *bh;
1726 + int ret = -EIO;
1727
1728 *err = 0;
1729 /* i_data is not going away, no lock needed */
1730 @@ -154,8 +155,10 @@ static Indirect *ext4_get_branch(struct inode *inode, int depth,
1731 goto no_block;
1732 while (--depth) {
1733 bh = sb_getblk(sb, le32_to_cpu(p->key));
1734 - if (unlikely(!bh))
1735 + if (unlikely(!bh)) {
1736 + ret = -ENOMEM;
1737 goto failure;
1738 + }
1739
1740 if (!bh_uptodate_or_lock(bh)) {
1741 if (bh_submit_read(bh) < 0) {
1742 @@ -177,7 +180,7 @@ static Indirect *ext4_get_branch(struct inode *inode, int depth,
1743 return NULL;
1744
1745 failure:
1746 - *err = -EIO;
1747 + *err = ret;
1748 no_block:
1749 return p;
1750 }
1751 @@ -471,7 +474,7 @@ static int ext4_alloc_branch(handle_t *handle, struct inode *inode,
1752 */
1753 bh = sb_getblk(inode->i_sb, new_blocks[n-1]);
1754 if (unlikely(!bh)) {
1755 - err = -EIO;
1756 + err = -ENOMEM;
1757 goto failed;
1758 }
1759
1760 diff --git a/fs/ext4/inline.c b/fs/ext4/inline.c
1761 index 387c47c..93a3408 100644
1762 --- a/fs/ext4/inline.c
1763 +++ b/fs/ext4/inline.c
1764 @@ -1188,7 +1188,7 @@ static int ext4_convert_inline_data_nolock(handle_t *handle,
1765
1766 data_bh = sb_getblk(inode->i_sb, map.m_pblk);
1767 if (!data_bh) {
1768 - error = -EIO;
1769 + error = -ENOMEM;
1770 goto out_restore;
1771 }
1772
1773 diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
1774 index cbfe13b..39f1fa7 100644
1775 --- a/fs/ext4/inode.c
1776 +++ b/fs/ext4/inode.c
1777 @@ -714,7 +714,7 @@ struct buffer_head *ext4_getblk(handle_t *handle, struct inode *inode,
1778
1779 bh = sb_getblk(inode->i_sb, map.m_pblk);
1780 if (!bh) {
1781 - *errp = -EIO;
1782 + *errp = -ENOMEM;
1783 return NULL;
1784 }
1785 if (map.m_flags & EXT4_MAP_NEW) {
1786 @@ -2977,9 +2977,9 @@ static void ext4_end_io_dio(struct kiocb *iocb, loff_t offset,
1787 if (!(io_end->flag & EXT4_IO_END_UNWRITTEN)) {
1788 ext4_free_io_end(io_end);
1789 out:
1790 + inode_dio_done(inode);
1791 if (is_async)
1792 aio_complete(iocb, ret, 0);
1793 - inode_dio_done(inode);
1794 return;
1795 }
1796
1797 @@ -3660,11 +3660,8 @@ static int __ext4_get_inode_loc(struct inode *inode,
1798 iloc->offset = (inode_offset % inodes_per_block) * EXT4_INODE_SIZE(sb);
1799
1800 bh = sb_getblk(sb, block);
1801 - if (!bh) {
1802 - EXT4_ERROR_INODE_BLOCK(inode, block,
1803 - "unable to read itable block");
1804 - return -EIO;
1805 - }
1806 + if (!bh)
1807 + return -ENOMEM;
1808 if (!buffer_uptodate(bh)) {
1809 lock_buffer(bh);
1810
1811 diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c
1812 index 1bf6fe7..061727a 100644
1813 --- a/fs/ext4/mballoc.c
1814 +++ b/fs/ext4/mballoc.c
1815 @@ -4136,7 +4136,7 @@ static void ext4_mb_add_n_trim(struct ext4_allocation_context *ac)
1816 /* The max size of hash table is PREALLOC_TB_SIZE */
1817 order = PREALLOC_TB_SIZE - 1;
1818 /* Add the prealloc space to lg */
1819 - rcu_read_lock();
1820 + spin_lock(&lg->lg_prealloc_lock);
1821 list_for_each_entry_rcu(tmp_pa, &lg->lg_prealloc_list[order],
1822 pa_inode_list) {
1823 spin_lock(&tmp_pa->pa_lock);
1824 @@ -4160,12 +4160,12 @@ static void ext4_mb_add_n_trim(struct ext4_allocation_context *ac)
1825 if (!added)
1826 list_add_tail_rcu(&pa->pa_inode_list,
1827 &lg->lg_prealloc_list[order]);
1828 - rcu_read_unlock();
1829 + spin_unlock(&lg->lg_prealloc_lock);
1830
1831 /* Now trim the list to be not more than 8 elements */
1832 if (lg_prealloc_count > 8) {
1833 ext4_mb_discard_lg_preallocations(sb, lg,
1834 - order, lg_prealloc_count);
1835 + order, lg_prealloc_count);
1836 return;
1837 }
1838 return ;
1839 diff --git a/fs/ext4/mmp.c b/fs/ext4/mmp.c
1840 index fe7c63f..44734f1 100644
1841 --- a/fs/ext4/mmp.c
1842 +++ b/fs/ext4/mmp.c
1843 @@ -80,6 +80,8 @@ static int read_mmp_block(struct super_block *sb, struct buffer_head **bh,
1844 * is not blocked in the elevator. */
1845 if (!*bh)
1846 *bh = sb_getblk(sb, mmp_block);
1847 + if (!*bh)
1848 + return -ENOMEM;
1849 if (*bh) {
1850 get_bh(*bh);
1851 lock_buffer(*bh);
1852 diff --git a/fs/ext4/page-io.c b/fs/ext4/page-io.c
1853 index 0016fbc..b42d04f 100644
1854 --- a/fs/ext4/page-io.c
1855 +++ b/fs/ext4/page-io.c
1856 @@ -103,14 +103,13 @@ static int ext4_end_io(ext4_io_end_t *io)
1857 "(inode %lu, offset %llu, size %zd, error %d)",
1858 inode->i_ino, offset, size, ret);
1859 }
1860 - if (io->iocb)
1861 - aio_complete(io->iocb, io->result, 0);
1862 -
1863 - if (io->flag & EXT4_IO_END_DIRECT)
1864 - inode_dio_done(inode);
1865 /* Wake up anyone waiting on unwritten extent conversion */
1866 if (atomic_dec_and_test(&EXT4_I(inode)->i_unwritten))
1867 wake_up_all(ext4_ioend_wq(inode));
1868 + if (io->flag & EXT4_IO_END_DIRECT)
1869 + inode_dio_done(inode);
1870 + if (io->iocb)
1871 + aio_complete(io->iocb, io->result, 0);
1872 return ret;
1873 }
1874
1875 diff --git a/fs/ext4/resize.c b/fs/ext4/resize.c
1876 index d99387b..02824dc 100644
1877 --- a/fs/ext4/resize.c
1878 +++ b/fs/ext4/resize.c
1879 @@ -334,7 +334,7 @@ static struct buffer_head *bclean(handle_t *handle, struct super_block *sb,
1880
1881 bh = sb_getblk(sb, blk);
1882 if (!bh)
1883 - return ERR_PTR(-EIO);
1884 + return ERR_PTR(-ENOMEM);
1885 if ((err = ext4_journal_get_write_access(handle, bh))) {
1886 brelse(bh);
1887 bh = ERR_PTR(err);
1888 @@ -411,7 +411,7 @@ static int set_flexbg_block_bitmap(struct super_block *sb, handle_t *handle,
1889
1890 bh = sb_getblk(sb, flex_gd->groups[group].block_bitmap);
1891 if (!bh)
1892 - return -EIO;
1893 + return -ENOMEM;
1894
1895 err = ext4_journal_get_write_access(handle, bh);
1896 if (err)
1897 @@ -501,7 +501,7 @@ static int setup_new_flex_group_blocks(struct super_block *sb,
1898
1899 gdb = sb_getblk(sb, block);
1900 if (!gdb) {
1901 - err = -EIO;
1902 + err = -ENOMEM;
1903 goto out;
1904 }
1905
1906 @@ -1065,7 +1065,7 @@ static void update_backups(struct super_block *sb, int blk_off, char *data,
1907
1908 bh = sb_getblk(sb, backup_block);
1909 if (!bh) {
1910 - err = -EIO;
1911 + err = -ENOMEM;
1912 break;
1913 }
1914 ext4_debug("update metadata backup %llu(+%llu)\n",
1915 diff --git a/fs/ext4/super.c b/fs/ext4/super.c
1916 index 3d4fb81..0465f36 100644
1917 --- a/fs/ext4/super.c
1918 +++ b/fs/ext4/super.c
1919 @@ -4008,7 +4008,7 @@ no_journal:
1920 !(sb->s_flags & MS_RDONLY)) {
1921 err = ext4_enable_quotas(sb);
1922 if (err)
1923 - goto failed_mount7;
1924 + goto failed_mount8;
1925 }
1926 #endif /* CONFIG_QUOTA */
1927
1928 @@ -4035,6 +4035,10 @@ cantfind_ext4:
1929 ext4_msg(sb, KERN_ERR, "VFS: Can't find ext4 filesystem");
1930 goto failed_mount;
1931
1932 +#ifdef CONFIG_QUOTA
1933 +failed_mount8:
1934 + kobject_del(&sbi->s_kobj);
1935 +#endif
1936 failed_mount7:
1937 ext4_unregister_li_request(sb);
1938 failed_mount6:
1939 @@ -5005,9 +5009,9 @@ static int ext4_enable_quotas(struct super_block *sb)
1940 DQUOT_USAGE_ENABLED);
1941 if (err) {
1942 ext4_warning(sb,
1943 - "Failed to enable quota (type=%d) "
1944 - "tracking. Please run e2fsck to fix.",
1945 - type);
1946 + "Failed to enable quota tracking "
1947 + "(type=%d, err=%d). Please run "
1948 + "e2fsck to fix.", type, err);
1949 return err;
1950 }
1951 }
1952 diff --git a/fs/ext4/xattr.c b/fs/ext4/xattr.c
1953 index 3a91ebc..b93846b 100644
1954 --- a/fs/ext4/xattr.c
1955 +++ b/fs/ext4/xattr.c
1956 @@ -549,7 +549,7 @@ ext4_xattr_release_block(handle_t *handle, struct inode *inode,
1957 error = ext4_handle_dirty_xattr_block(handle, inode, bh);
1958 if (IS_SYNC(inode))
1959 ext4_handle_sync(handle);
1960 - dquot_free_block(inode, 1);
1961 + dquot_free_block(inode, EXT4_C2B(EXT4_SB(inode->i_sb), 1));
1962 ea_bdebug(bh, "refcount now=%d; releasing",
1963 le32_to_cpu(BHDR(bh)->h_refcount));
1964 }
1965 @@ -832,7 +832,8 @@ inserted:
1966 else {
1967 /* The old block is released after updating
1968 the inode. */
1969 - error = dquot_alloc_block(inode, 1);
1970 + error = dquot_alloc_block(inode,
1971 + EXT4_C2B(EXT4_SB(sb), 1));
1972 if (error)
1973 goto cleanup;
1974 error = ext4_journal_get_write_access(handle,
1975 @@ -887,16 +888,17 @@ inserted:
1976
1977 new_bh = sb_getblk(sb, block);
1978 if (!new_bh) {
1979 + error = -ENOMEM;
1980 getblk_failed:
1981 ext4_free_blocks(handle, inode, NULL, block, 1,
1982 EXT4_FREE_BLOCKS_METADATA);
1983 - error = -EIO;
1984 goto cleanup;
1985 }
1986 lock_buffer(new_bh);
1987 error = ext4_journal_get_create_access(handle, new_bh);
1988 if (error) {
1989 unlock_buffer(new_bh);
1990 + error = -EIO;
1991 goto getblk_failed;
1992 }
1993 memcpy(new_bh->b_data, s->base, new_bh->b_size);
1994 @@ -928,7 +930,7 @@ cleanup:
1995 return error;
1996
1997 cleanup_dquot:
1998 - dquot_free_block(inode, 1);
1999 + dquot_free_block(inode, EXT4_C2B(EXT4_SB(sb), 1));
2000 goto cleanup;
2001
2002 bad_block:
2003 diff --git a/fs/fuse/dir.c b/fs/fuse/dir.c
2004 index b7c09f9..315e1f8 100644
2005 --- a/fs/fuse/dir.c
2006 +++ b/fs/fuse/dir.c
2007 @@ -682,7 +682,14 @@ static int fuse_unlink(struct inode *dir, struct dentry *entry)
2008
2009 spin_lock(&fc->lock);
2010 fi->attr_version = ++fc->attr_version;
2011 - drop_nlink(inode);
2012 + /*
2013 + * If i_nlink == 0 then unlink doesn't make sense, yet this can
2014 + * happen if userspace filesystem is careless. It would be
2015 + * difficult to enforce correct nlink usage so just ignore this
2016 + * condition here
2017 + */
2018 + if (inode->i_nlink > 0)
2019 + drop_nlink(inode);
2020 spin_unlock(&fc->lock);
2021 fuse_invalidate_attr(inode);
2022 fuse_invalidate_attr(dir);
2023 diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
2024 index ac8ed96c..a8309c6 100644
2025 --- a/fs/nfsd/nfs4state.c
2026 +++ b/fs/nfsd/nfs4state.c
2027 @@ -1060,6 +1060,8 @@ free_client(struct nfs4_client *clp)
2028 }
2029 free_svc_cred(&clp->cl_cred);
2030 kfree(clp->cl_name.data);
2031 + idr_remove_all(&clp->cl_stateids);
2032 + idr_destroy(&clp->cl_stateids);
2033 kfree(clp);
2034 }
2035
2036 diff --git a/fs/ocfs2/aops.c b/fs/ocfs2/aops.c
2037 index 6577432..340bd02 100644
2038 --- a/fs/ocfs2/aops.c
2039 +++ b/fs/ocfs2/aops.c
2040 @@ -593,9 +593,9 @@ static void ocfs2_dio_end_io(struct kiocb *iocb,
2041 level = ocfs2_iocb_rw_locked_level(iocb);
2042 ocfs2_rw_unlock(inode, level);
2043
2044 + inode_dio_done(inode);
2045 if (is_async)
2046 aio_complete(iocb, ret, 0);
2047 - inode_dio_done(inode);
2048 }
2049
2050 /*
2051 diff --git a/fs/ocfs2/suballoc.c b/fs/ocfs2/suballoc.c
2052 index f169da4..b7e74b5 100644
2053 --- a/fs/ocfs2/suballoc.c
2054 +++ b/fs/ocfs2/suballoc.c
2055 @@ -642,7 +642,7 @@ ocfs2_block_group_alloc_discontig(handle_t *handle,
2056 * cluster groups will be staying in cache for the duration of
2057 * this operation.
2058 */
2059 - ac->ac_allow_chain_relink = 0;
2060 + ac->ac_disable_chain_relink = 1;
2061
2062 /* Claim the first region */
2063 status = ocfs2_block_group_claim_bits(osb, handle, ac, min_bits,
2064 @@ -1823,7 +1823,7 @@ static int ocfs2_search_chain(struct ocfs2_alloc_context *ac,
2065 * Do this *after* figuring out how many bits we're taking out
2066 * of our target group.
2067 */
2068 - if (ac->ac_allow_chain_relink &&
2069 + if (!ac->ac_disable_chain_relink &&
2070 (prev_group_bh) &&
2071 (ocfs2_block_group_reasonably_empty(bg, res->sr_bits))) {
2072 status = ocfs2_relink_block_group(handle, alloc_inode,
2073 @@ -1928,7 +1928,6 @@ static int ocfs2_claim_suballoc_bits(struct ocfs2_alloc_context *ac,
2074
2075 victim = ocfs2_find_victim_chain(cl);
2076 ac->ac_chain = victim;
2077 - ac->ac_allow_chain_relink = 1;
2078
2079 status = ocfs2_search_chain(ac, handle, bits_wanted, min_bits,
2080 res, &bits_left);
2081 @@ -1947,7 +1946,7 @@ static int ocfs2_claim_suballoc_bits(struct ocfs2_alloc_context *ac,
2082 * searching each chain in order. Don't allow chain relinking
2083 * because we only calculate enough journal credits for one
2084 * relink per alloc. */
2085 - ac->ac_allow_chain_relink = 0;
2086 + ac->ac_disable_chain_relink = 1;
2087 for (i = 0; i < le16_to_cpu(cl->cl_next_free_rec); i ++) {
2088 if (i == victim)
2089 continue;
2090 diff --git a/fs/ocfs2/suballoc.h b/fs/ocfs2/suballoc.h
2091 index b8afabf..a36d0aa 100644
2092 --- a/fs/ocfs2/suballoc.h
2093 +++ b/fs/ocfs2/suballoc.h
2094 @@ -49,7 +49,7 @@ struct ocfs2_alloc_context {
2095
2096 /* these are used by the chain search */
2097 u16 ac_chain;
2098 - int ac_allow_chain_relink;
2099 + int ac_disable_chain_relink;
2100 group_search_t *ac_group_search;
2101
2102 u64 ac_last_group;
2103 diff --git a/fs/ocfs2/xattr.c b/fs/ocfs2/xattr.c
2104 index 0ba9ea1..2e3ea30 100644
2105 --- a/fs/ocfs2/xattr.c
2106 +++ b/fs/ocfs2/xattr.c
2107 @@ -7189,7 +7189,7 @@ int ocfs2_init_security_and_acl(struct inode *dir,
2108 struct buffer_head *dir_bh = NULL;
2109
2110 ret = ocfs2_init_security_get(inode, dir, qstr, NULL);
2111 - if (!ret) {
2112 + if (ret) {
2113 mlog_errno(ret);
2114 goto leave;
2115 }
2116 diff --git a/fs/pstore/platform.c b/fs/pstore/platform.c
2117 index 5ea2e77..86d1038 100644
2118 --- a/fs/pstore/platform.c
2119 +++ b/fs/pstore/platform.c
2120 @@ -96,6 +96,27 @@ static const char *get_reason_str(enum kmsg_dump_reason reason)
2121 }
2122 }
2123
2124 +bool pstore_cannot_block_path(enum kmsg_dump_reason reason)
2125 +{
2126 + /*
2127 + * In case of NMI path, pstore shouldn't be blocked
2128 + * regardless of reason.
2129 + */
2130 + if (in_nmi())
2131 + return true;
2132 +
2133 + switch (reason) {
2134 + /* In panic case, other cpus are stopped by smp_send_stop(). */
2135 + case KMSG_DUMP_PANIC:
2136 + /* Emergency restart shouldn't be blocked by spin lock. */
2137 + case KMSG_DUMP_EMERG:
2138 + return true;
2139 + default:
2140 + return false;
2141 + }
2142 +}
2143 +EXPORT_SYMBOL_GPL(pstore_cannot_block_path);
2144 +
2145 /*
2146 * callback from kmsg_dump. (s2,l2) has the most recently
2147 * written bytes, older bytes are in (s1,l1). Save as much
2148 @@ -114,10 +135,12 @@ static void pstore_dump(struct kmsg_dumper *dumper,
2149
2150 why = get_reason_str(reason);
2151
2152 - if (in_nmi()) {
2153 - is_locked = spin_trylock(&psinfo->buf_lock);
2154 - if (!is_locked)
2155 - pr_err("pstore dump routine blocked in NMI, may corrupt error record\n");
2156 + if (pstore_cannot_block_path(reason)) {
2157 + is_locked = spin_trylock_irqsave(&psinfo->buf_lock, flags);
2158 + if (!is_locked) {
2159 + pr_err("pstore dump routine blocked in %s path, may corrupt error record\n"
2160 + , in_nmi() ? "NMI" : why);
2161 + }
2162 } else
2163 spin_lock_irqsave(&psinfo->buf_lock, flags);
2164 oopscount++;
2165 @@ -143,9 +166,9 @@ static void pstore_dump(struct kmsg_dumper *dumper,
2166 total += hsize + len;
2167 part++;
2168 }
2169 - if (in_nmi()) {
2170 + if (pstore_cannot_block_path(reason)) {
2171 if (is_locked)
2172 - spin_unlock(&psinfo->buf_lock);
2173 + spin_unlock_irqrestore(&psinfo->buf_lock, flags);
2174 } else
2175 spin_unlock_irqrestore(&psinfo->buf_lock, flags);
2176 }
2177 diff --git a/fs/ubifs/orphan.c b/fs/ubifs/orphan.c
2178 index 769701c..ba32da3 100644
2179 --- a/fs/ubifs/orphan.c
2180 +++ b/fs/ubifs/orphan.c
2181 @@ -126,13 +126,14 @@ void ubifs_delete_orphan(struct ubifs_info *c, ino_t inum)
2182 else if (inum > o->inum)
2183 p = p->rb_right;
2184 else {
2185 - if (o->dnext) {
2186 + if (o->del) {
2187 spin_unlock(&c->orphan_lock);
2188 dbg_gen("deleted twice ino %lu",
2189 (unsigned long)inum);
2190 return;
2191 }
2192 - if (o->cnext) {
2193 + if (o->cmt) {
2194 + o->del = 1;
2195 o->dnext = c->orph_dnext;
2196 c->orph_dnext = o;
2197 spin_unlock(&c->orphan_lock);
2198 @@ -172,7 +173,9 @@ int ubifs_orphan_start_commit(struct ubifs_info *c)
2199 last = &c->orph_cnext;
2200 list_for_each_entry(orphan, &c->orph_new, new_list) {
2201 ubifs_assert(orphan->new);
2202 + ubifs_assert(!orphan->cmt);
2203 orphan->new = 0;
2204 + orphan->cmt = 1;
2205 *last = orphan;
2206 last = &orphan->cnext;
2207 }
2208 @@ -299,7 +302,9 @@ static int write_orph_node(struct ubifs_info *c, int atomic)
2209 cnext = c->orph_cnext;
2210 for (i = 0; i < cnt; i++) {
2211 orphan = cnext;
2212 + ubifs_assert(orphan->cmt);
2213 orph->inos[i] = cpu_to_le64(orphan->inum);
2214 + orphan->cmt = 0;
2215 cnext = orphan->cnext;
2216 orphan->cnext = NULL;
2217 }
2218 @@ -378,6 +383,7 @@ static int consolidate(struct ubifs_info *c)
2219 list_for_each_entry(orphan, &c->orph_list, list) {
2220 if (orphan->new)
2221 continue;
2222 + orphan->cmt = 1;
2223 *last = orphan;
2224 last = &orphan->cnext;
2225 cnt += 1;
2226 @@ -442,6 +448,7 @@ static void erase_deleted(struct ubifs_info *c)
2227 orphan = dnext;
2228 dnext = orphan->dnext;
2229 ubifs_assert(!orphan->new);
2230 + ubifs_assert(orphan->del);
2231 rb_erase(&orphan->rb, &c->orph_tree);
2232 list_del(&orphan->list);
2233 c->tot_orphans -= 1;
2234 @@ -531,6 +538,7 @@ static int insert_dead_orphan(struct ubifs_info *c, ino_t inum)
2235 rb_link_node(&orphan->rb, parent, p);
2236 rb_insert_color(&orphan->rb, &c->orph_tree);
2237 list_add_tail(&orphan->list, &c->orph_list);
2238 + orphan->del = 1;
2239 orphan->dnext = c->orph_dnext;
2240 c->orph_dnext = orphan;
2241 dbg_mnt("ino %lu, new %d, tot %d", (unsigned long)inum,
2242 diff --git a/fs/ubifs/ubifs.h b/fs/ubifs/ubifs.h
2243 index d133c27..b2babce 100644
2244 --- a/fs/ubifs/ubifs.h
2245 +++ b/fs/ubifs/ubifs.h
2246 @@ -904,6 +904,8 @@ struct ubifs_budget_req {
2247 * @dnext: next orphan to delete
2248 * @inum: inode number
2249 * @new: %1 => added since the last commit, otherwise %0
2250 + * @cmt: %1 => commit pending, otherwise %0
2251 + * @del: %1 => delete pending, otherwise %0
2252 */
2253 struct ubifs_orphan {
2254 struct rb_node rb;
2255 @@ -912,7 +914,9 @@ struct ubifs_orphan {
2256 struct ubifs_orphan *cnext;
2257 struct ubifs_orphan *dnext;
2258 ino_t inum;
2259 - int new;
2260 + unsigned new:1;
2261 + unsigned cmt:1;
2262 + unsigned del:1;
2263 };
2264
2265 /**
2266 diff --git a/fs/xfs/xfs_bmap.c b/fs/xfs/xfs_bmap.c
2267 index cdb2d33..572a858 100644
2268 --- a/fs/xfs/xfs_bmap.c
2269 +++ b/fs/xfs/xfs_bmap.c
2270 @@ -147,7 +147,10 @@ xfs_bmap_local_to_extents(
2271 xfs_fsblock_t *firstblock, /* first block allocated in xaction */
2272 xfs_extlen_t total, /* total blocks needed by transaction */
2273 int *logflagsp, /* inode logging flags */
2274 - int whichfork); /* data or attr fork */
2275 + int whichfork, /* data or attr fork */
2276 + void (*init_fn)(struct xfs_buf *bp,
2277 + struct xfs_inode *ip,
2278 + struct xfs_ifork *ifp));
2279
2280 /*
2281 * Search the extents list for the inode, for the extent containing bno.
2282 @@ -357,7 +360,42 @@ xfs_bmap_add_attrfork_extents(
2283 }
2284
2285 /*
2286 - * Called from xfs_bmap_add_attrfork to handle local format files.
2287 + * Block initialisation functions for local to extent format conversion.
2288 + * As these get more complex, they will be moved to the relevant files,
2289 + * but for now they are too simple to worry about.
2290 + */
2291 +STATIC void
2292 +xfs_bmap_local_to_extents_init_fn(
2293 + struct xfs_buf *bp,
2294 + struct xfs_inode *ip,
2295 + struct xfs_ifork *ifp)
2296 +{
2297 + bp->b_ops = &xfs_bmbt_buf_ops;
2298 + memcpy(bp->b_addr, ifp->if_u1.if_data, ifp->if_bytes);
2299 +}
2300 +
2301 +STATIC void
2302 +xfs_symlink_local_to_remote(
2303 + struct xfs_buf *bp,
2304 + struct xfs_inode *ip,
2305 + struct xfs_ifork *ifp)
2306 +{
2307 + /* remote symlink blocks are not verifiable until CRCs come along */
2308 + bp->b_ops = NULL;
2309 + memcpy(bp->b_addr, ifp->if_u1.if_data, ifp->if_bytes);
2310 +}
2311 +
2312 +/*
2313 + * Called from xfs_bmap_add_attrfork to handle local format files. Each
2314 + * different data fork content type needs a different callout to do the
2315 + * conversion. Some are basic and only require special block initialisation
2316 + * callouts for the data formating, others (directories) are so specialised they
2317 + * handle everything themselves.
2318 + *
2319 + * XXX (dgc): investigate whether directory conversion can use the generic
2320 + * formatting callout. It should be possible - it's just a very complex
2321 + * formatter. it would also require passing the transaction through to the init
2322 + * function.
2323 */
2324 STATIC int /* error */
2325 xfs_bmap_add_attrfork_local(
2326 @@ -368,25 +406,29 @@ xfs_bmap_add_attrfork_local(
2327 int *flags) /* inode logging flags */
2328 {
2329 xfs_da_args_t dargs; /* args for dir/attr code */
2330 - int error; /* error return value */
2331 - xfs_mount_t *mp; /* mount structure pointer */
2332
2333 if (ip->i_df.if_bytes <= XFS_IFORK_DSIZE(ip))
2334 return 0;
2335 +
2336 if (S_ISDIR(ip->i_d.di_mode)) {
2337 - mp = ip->i_mount;
2338 memset(&dargs, 0, sizeof(dargs));
2339 dargs.dp = ip;
2340 dargs.firstblock = firstblock;
2341 dargs.flist = flist;
2342 - dargs.total = mp->m_dirblkfsbs;
2343 + dargs.total = ip->i_mount->m_dirblkfsbs;
2344 dargs.whichfork = XFS_DATA_FORK;
2345 dargs.trans = tp;
2346 - error = xfs_dir2_sf_to_block(&dargs);
2347 - } else
2348 - error = xfs_bmap_local_to_extents(tp, ip, firstblock, 1, flags,
2349 - XFS_DATA_FORK);
2350 - return error;
2351 + return xfs_dir2_sf_to_block(&dargs);
2352 + }
2353 +
2354 + if (S_ISLNK(ip->i_d.di_mode))
2355 + return xfs_bmap_local_to_extents(tp, ip, firstblock, 1,
2356 + flags, XFS_DATA_FORK,
2357 + xfs_symlink_local_to_remote);
2358 +
2359 + return xfs_bmap_local_to_extents(tp, ip, firstblock, 1, flags,
2360 + XFS_DATA_FORK,
2361 + xfs_bmap_local_to_extents_init_fn);
2362 }
2363
2364 /*
2365 @@ -3221,7 +3263,10 @@ xfs_bmap_local_to_extents(
2366 xfs_fsblock_t *firstblock, /* first block allocated in xaction */
2367 xfs_extlen_t total, /* total blocks needed by transaction */
2368 int *logflagsp, /* inode logging flags */
2369 - int whichfork) /* data or attr fork */
2370 + int whichfork,
2371 + void (*init_fn)(struct xfs_buf *bp,
2372 + struct xfs_inode *ip,
2373 + struct xfs_ifork *ifp))
2374 {
2375 int error; /* error return value */
2376 int flags; /* logging flags returned */
2377 @@ -3241,12 +3286,12 @@ xfs_bmap_local_to_extents(
2378 xfs_buf_t *bp; /* buffer for extent block */
2379 xfs_bmbt_rec_host_t *ep;/* extent record pointer */
2380
2381 + ASSERT((ifp->if_flags &
2382 + (XFS_IFINLINE|XFS_IFEXTENTS|XFS_IFEXTIREC)) == XFS_IFINLINE);
2383 memset(&args, 0, sizeof(args));
2384 args.tp = tp;
2385 args.mp = ip->i_mount;
2386 args.firstblock = *firstblock;
2387 - ASSERT((ifp->if_flags &
2388 - (XFS_IFINLINE|XFS_IFEXTENTS|XFS_IFEXTIREC)) == XFS_IFINLINE);
2389 /*
2390 * Allocate a block. We know we need only one, since the
2391 * file currently fits in an inode.
2392 @@ -3262,17 +3307,20 @@ xfs_bmap_local_to_extents(
2393 args.mod = args.minleft = args.alignment = args.wasdel =
2394 args.isfl = args.minalignslop = 0;
2395 args.minlen = args.maxlen = args.prod = 1;
2396 - if ((error = xfs_alloc_vextent(&args)))
2397 + error = xfs_alloc_vextent(&args);
2398 + if (error)
2399 goto done;
2400 - /*
2401 - * Can't fail, the space was reserved.
2402 - */
2403 +
2404 + /* Can't fail, the space was reserved. */
2405 ASSERT(args.fsbno != NULLFSBLOCK);
2406 ASSERT(args.len == 1);
2407 *firstblock = args.fsbno;
2408 bp = xfs_btree_get_bufl(args.mp, tp, args.fsbno, 0);
2409 - bp->b_ops = &xfs_bmbt_buf_ops;
2410 - memcpy(bp->b_addr, ifp->if_u1.if_data, ifp->if_bytes);
2411 +
2412 + /* initialise the block and copy the data */
2413 + init_fn(bp, ip, ifp);
2414 +
2415 + /* account for the change in fork size and log everything */
2416 xfs_trans_log_buf(tp, bp, 0, ifp->if_bytes - 1);
2417 xfs_bmap_forkoff_reset(args.mp, ip, whichfork);
2418 xfs_idata_realloc(ip, -ifp->if_bytes, whichfork);
2419 @@ -4919,8 +4967,32 @@ xfs_bmapi_write(
2420 XFS_STATS_INC(xs_blk_mapw);
2421
2422 if (XFS_IFORK_FORMAT(ip, whichfork) == XFS_DINODE_FMT_LOCAL) {
2423 + /*
2424 + * XXX (dgc): This assumes we are only called for inodes that
2425 + * contain content neutral data in local format. Anything that
2426 + * contains caller-specific data in local format that needs
2427 + * transformation to move to a block format needs to do the
2428 + * conversion to extent format itself.
2429 + *
2430 + * Directory data forks and attribute forks handle this
2431 + * themselves, but with the addition of metadata verifiers every
2432 + * data fork in local format now contains caller specific data
2433 + * and as such conversion through this function is likely to be
2434 + * broken.
2435 + *
2436 + * The only likely user of this branch is for remote symlinks,
2437 + * but we cannot overwrite the data fork contents of the symlink
2438 + * (EEXIST occurs higher up the stack) and so it will never go
2439 + * from local format to extent format here. Hence I don't think
2440 + * this branch is ever executed intentionally and we should
2441 + * consider removing it and asserting that xfs_bmapi_write()
2442 + * cannot be called directly on local format forks. i.e. callers
2443 + * are completely responsible for local to extent format
2444 + * conversion, not xfs_bmapi_write().
2445 + */
2446 error = xfs_bmap_local_to_extents(tp, ip, firstblock, total,
2447 - &bma.logflags, whichfork);
2448 + &bma.logflags, whichfork,
2449 + xfs_bmap_local_to_extents_init_fn);
2450 if (error)
2451 goto error0;
2452 }
2453 diff --git a/include/linux/llist.h b/include/linux/llist.h
2454 index d0ab98f..a5199f6 100644
2455 --- a/include/linux/llist.h
2456 +++ b/include/linux/llist.h
2457 @@ -125,31 +125,6 @@ static inline void init_llist_head(struct llist_head *list)
2458 (pos) = llist_entry((pos)->member.next, typeof(*(pos)), member))
2459
2460 /**
2461 - * llist_for_each_entry_safe - iterate safely against remove over some entries
2462 - * of lock-less list of given type.
2463 - * @pos: the type * to use as a loop cursor.
2464 - * @n: another type * to use as a temporary storage.
2465 - * @node: the fist entry of deleted list entries.
2466 - * @member: the name of the llist_node with the struct.
2467 - *
2468 - * In general, some entries of the lock-less list can be traversed
2469 - * safely only after being removed from list, so start with an entry
2470 - * instead of list head. This variant allows removal of entries
2471 - * as we iterate.
2472 - *
2473 - * If being used on entries deleted from lock-less list directly, the
2474 - * traverse order is from the newest to the oldest added entry. If
2475 - * you want to traverse from the oldest to the newest, you must
2476 - * reverse the order by yourself before traversing.
2477 - */
2478 -#define llist_for_each_entry_safe(pos, n, node, member) \
2479 - for ((pos) = llist_entry((node), typeof(*(pos)), member), \
2480 - (n) = (pos)->member.next; \
2481 - &(pos)->member != NULL; \
2482 - (pos) = llist_entry(n, typeof(*(pos)), member), \
2483 - (n) = (&(pos)->member != NULL) ? (pos)->member.next : NULL)
2484 -
2485 -/**
2486 * llist_empty - tests whether a lock-less list is empty
2487 * @head: the list to test
2488 *
2489 diff --git a/include/linux/pstore.h b/include/linux/pstore.h
2490 index 1788909..75d0176 100644
2491 --- a/include/linux/pstore.h
2492 +++ b/include/linux/pstore.h
2493 @@ -68,12 +68,18 @@ struct pstore_info {
2494
2495 #ifdef CONFIG_PSTORE
2496 extern int pstore_register(struct pstore_info *);
2497 +extern bool pstore_cannot_block_path(enum kmsg_dump_reason reason);
2498 #else
2499 static inline int
2500 pstore_register(struct pstore_info *psi)
2501 {
2502 return -ENODEV;
2503 }
2504 +static inline bool
2505 +pstore_cannot_block_path(enum kmsg_dump_reason reason)
2506 +{
2507 + return false;
2508 +}
2509 #endif
2510
2511 #endif /*_LINUX_PSTORE_H*/
2512 diff --git a/include/linux/quota.h b/include/linux/quota.h
2513 index 58fdef12..d133711 100644
2514 --- a/include/linux/quota.h
2515 +++ b/include/linux/quota.h
2516 @@ -405,6 +405,7 @@ struct quota_module_name {
2517 #define INIT_QUOTA_MODULE_NAMES {\
2518 {QFMT_VFS_OLD, "quota_v1"},\
2519 {QFMT_VFS_V0, "quota_v2"},\
2520 + {QFMT_VFS_V1, "quota_v2"},\
2521 {0, NULL}}
2522
2523 #endif /* _QUOTA_ */
2524 diff --git a/kernel/cgroup.c b/kernel/cgroup.c
2525 index 4855892..1e23664 100644
2526 --- a/kernel/cgroup.c
2527 +++ b/kernel/cgroup.c
2528 @@ -426,12 +426,20 @@ static void __put_css_set(struct css_set *cg, int taskexit)
2529 struct cgroup *cgrp = link->cgrp;
2530 list_del(&link->cg_link_list);
2531 list_del(&link->cgrp_link_list);
2532 +
2533 + /*
2534 + * We may not be holding cgroup_mutex, and if cgrp->count is
2535 + * dropped to 0 the cgroup can be destroyed at any time, hence
2536 + * rcu_read_lock is used to keep it alive.
2537 + */
2538 + rcu_read_lock();
2539 if (atomic_dec_and_test(&cgrp->count) &&
2540 notify_on_release(cgrp)) {
2541 if (taskexit)
2542 set_bit(CGRP_RELEASABLE, &cgrp->flags);
2543 check_for_release(cgrp);
2544 }
2545 + rcu_read_unlock();
2546
2547 kfree(link);
2548 }
2549 diff --git a/kernel/cpuset.c b/kernel/cpuset.c
2550 index 7bb63ee..5bb9bf1 100644
2551 --- a/kernel/cpuset.c
2552 +++ b/kernel/cpuset.c
2553 @@ -2511,8 +2511,16 @@ void cpuset_print_task_mems_allowed(struct task_struct *tsk)
2554
2555 dentry = task_cs(tsk)->css.cgroup->dentry;
2556 spin_lock(&cpuset_buffer_lock);
2557 - snprintf(cpuset_name, CPUSET_NAME_LEN,
2558 - dentry ? (const char *)dentry->d_name.name : "/");
2559 +
2560 + if (!dentry) {
2561 + strcpy(cpuset_name, "/");
2562 + } else {
2563 + spin_lock(&dentry->d_lock);
2564 + strlcpy(cpuset_name, (const char *)dentry->d_name.name,
2565 + CPUSET_NAME_LEN);
2566 + spin_unlock(&dentry->d_lock);
2567 + }
2568 +
2569 nodelist_scnprintf(cpuset_nodelist, CPUSET_NODELIST_LEN,
2570 tsk->mems_allowed);
2571 printk(KERN_INFO "%s cpuset=%s mems_allowed=%s\n",
2572 diff --git a/kernel/posix-timers.c b/kernel/posix-timers.c
2573 index 69185ae..e885be1 100644
2574 --- a/kernel/posix-timers.c
2575 +++ b/kernel/posix-timers.c
2576 @@ -639,6 +639,13 @@ static struct k_itimer *__lock_timer(timer_t timer_id, unsigned long *flags)
2577 {
2578 struct k_itimer *timr;
2579
2580 + /*
2581 + * timer_t could be any type >= int and we want to make sure any
2582 + * @timer_id outside positive int range fails lookup.
2583 + */
2584 + if ((unsigned long long)timer_id > INT_MAX)
2585 + return NULL;
2586 +
2587 rcu_read_lock();
2588 timr = idr_find(&posix_timers_id, (int)timer_id);
2589 if (timr) {
2590 diff --git a/kernel/sysctl_binary.c b/kernel/sysctl_binary.c
2591 index 5a63844..0ddf3a0 100644
2592 --- a/kernel/sysctl_binary.c
2593 +++ b/kernel/sysctl_binary.c
2594 @@ -1194,9 +1194,10 @@ static ssize_t bin_dn_node_address(struct file *file,
2595
2596 /* Convert the decnet address to binary */
2597 result = -EIO;
2598 - nodep = strchr(buf, '.') + 1;
2599 + nodep = strchr(buf, '.');
2600 if (!nodep)
2601 goto out;
2602 + ++nodep;
2603
2604 area = simple_strtoul(buf, NULL, 10);
2605 node = simple_strtoul(nodep, NULL, 10);
2606 diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
2607 index 41473b4..43defd1 100644
2608 --- a/kernel/trace/ftrace.c
2609 +++ b/kernel/trace/ftrace.c
2610 @@ -3970,37 +3970,51 @@ static void ftrace_init_module(struct module *mod,
2611 ftrace_process_locs(mod, start, end);
2612 }
2613
2614 -static int ftrace_module_notify(struct notifier_block *self,
2615 - unsigned long val, void *data)
2616 +static int ftrace_module_notify_enter(struct notifier_block *self,
2617 + unsigned long val, void *data)
2618 {
2619 struct module *mod = data;
2620
2621 - switch (val) {
2622 - case MODULE_STATE_COMING:
2623 + if (val == MODULE_STATE_COMING)
2624 ftrace_init_module(mod, mod->ftrace_callsites,
2625 mod->ftrace_callsites +
2626 mod->num_ftrace_callsites);
2627 - break;
2628 - case MODULE_STATE_GOING:
2629 + return 0;
2630 +}
2631 +
2632 +static int ftrace_module_notify_exit(struct notifier_block *self,
2633 + unsigned long val, void *data)
2634 +{
2635 + struct module *mod = data;
2636 +
2637 + if (val == MODULE_STATE_GOING)
2638 ftrace_release_mod(mod);
2639 - break;
2640 - }
2641
2642 return 0;
2643 }
2644 #else
2645 -static int ftrace_module_notify(struct notifier_block *self,
2646 - unsigned long val, void *data)
2647 +static int ftrace_module_notify_enter(struct notifier_block *self,
2648 + unsigned long val, void *data)
2649 +{
2650 + return 0;
2651 +}
2652 +static int ftrace_module_notify_exit(struct notifier_block *self,
2653 + unsigned long val, void *data)
2654 {
2655 return 0;
2656 }
2657 #endif /* CONFIG_MODULES */
2658
2659 -struct notifier_block ftrace_module_nb = {
2660 - .notifier_call = ftrace_module_notify,
2661 +struct notifier_block ftrace_module_enter_nb = {
2662 + .notifier_call = ftrace_module_notify_enter,
2663 .priority = INT_MAX, /* Run before anything that can use kprobes */
2664 };
2665
2666 +struct notifier_block ftrace_module_exit_nb = {
2667 + .notifier_call = ftrace_module_notify_exit,
2668 + .priority = INT_MIN, /* Run after anything that can remove kprobes */
2669 +};
2670 +
2671 extern unsigned long __start_mcount_loc[];
2672 extern unsigned long __stop_mcount_loc[];
2673
2674 @@ -4032,9 +4046,13 @@ void __init ftrace_init(void)
2675 __start_mcount_loc,
2676 __stop_mcount_loc);
2677
2678 - ret = register_module_notifier(&ftrace_module_nb);
2679 + ret = register_module_notifier(&ftrace_module_enter_nb);
2680 + if (ret)
2681 + pr_warning("Failed to register trace ftrace module enter notifier\n");
2682 +
2683 + ret = register_module_notifier(&ftrace_module_exit_nb);
2684 if (ret)
2685 - pr_warning("Failed to register trace ftrace module notifier\n");
2686 + pr_warning("Failed to register trace ftrace module exit notifier\n");
2687
2688 set_ftrace_early_filters();
2689
2690 diff --git a/kernel/workqueue.c b/kernel/workqueue.c
2691 index 033ad5b..3a3a98f 100644
2692 --- a/kernel/workqueue.c
2693 +++ b/kernel/workqueue.c
2694 @@ -138,6 +138,7 @@ struct worker {
2695 };
2696
2697 struct work_struct *current_work; /* L: work being processed */
2698 + work_func_t current_func; /* L: current_work's fn */
2699 struct cpu_workqueue_struct *current_cwq; /* L: current_work's cwq */
2700 struct list_head scheduled; /* L: scheduled works */
2701 struct task_struct *task; /* I: worker task */
2702 @@ -910,7 +911,8 @@ static struct worker *__find_worker_executing_work(struct global_cwq *gcwq,
2703 struct hlist_node *tmp;
2704
2705 hlist_for_each_entry(worker, tmp, bwh, hentry)
2706 - if (worker->current_work == work)
2707 + if (worker->current_work == work &&
2708 + worker->current_func == work->func)
2709 return worker;
2710 return NULL;
2711 }
2712 @@ -920,9 +922,27 @@ static struct worker *__find_worker_executing_work(struct global_cwq *gcwq,
2713 * @gcwq: gcwq of interest
2714 * @work: work to find worker for
2715 *
2716 - * Find a worker which is executing @work on @gcwq. This function is
2717 - * identical to __find_worker_executing_work() except that this
2718 - * function calculates @bwh itself.
2719 + * Find a worker which is executing @work on @gcwq by searching
2720 + * @gcwq->busy_hash which is keyed by the address of @work. For a worker
2721 + * to match, its current execution should match the address of @work and
2722 + * its work function. This is to avoid unwanted dependency between
2723 + * unrelated work executions through a work item being recycled while still
2724 + * being executed.
2725 + *
2726 + * This is a bit tricky. A work item may be freed once its execution
2727 + * starts and nothing prevents the freed area from being recycled for
2728 + * another work item. If the same work item address ends up being reused
2729 + * before the original execution finishes, workqueue will identify the
2730 + * recycled work item as currently executing and make it wait until the
2731 + * current execution finishes, introducing an unwanted dependency.
2732 + *
2733 + * This function checks the work item address, work function and workqueue
2734 + * to avoid false positives. Note that this isn't complete as one may
2735 + * construct a work function which can introduce dependency onto itself
2736 + * through a recycled work item. Well, if somebody wants to shoot oneself
2737 + * in the foot that badly, there's only so much we can do, and if such
2738 + * deadlock actually occurs, it should be easy to locate the culprit work
2739 + * function.
2740 *
2741 * CONTEXT:
2742 * spin_lock_irq(gcwq->lock).
2743 @@ -2168,7 +2188,6 @@ __acquires(&gcwq->lock)
2744 struct global_cwq *gcwq = pool->gcwq;
2745 struct hlist_head *bwh = busy_worker_head(gcwq, work);
2746 bool cpu_intensive = cwq->wq->flags & WQ_CPU_INTENSIVE;
2747 - work_func_t f = work->func;
2748 int work_color;
2749 struct worker *collision;
2750 #ifdef CONFIG_LOCKDEP
2751 @@ -2208,6 +2227,7 @@ __acquires(&gcwq->lock)
2752 debug_work_deactivate(work);
2753 hlist_add_head(&worker->hentry, bwh);
2754 worker->current_work = work;
2755 + worker->current_func = work->func;
2756 worker->current_cwq = cwq;
2757 work_color = get_work_color(work);
2758
2759 @@ -2240,7 +2260,7 @@ __acquires(&gcwq->lock)
2760 lock_map_acquire_read(&cwq->wq->lockdep_map);
2761 lock_map_acquire(&lockdep_map);
2762 trace_workqueue_execute_start(work);
2763 - f(work);
2764 + worker->current_func(work);
2765 /*
2766 * While we must be careful to not use "work" after this, the trace
2767 * point will only record its address.
2768 @@ -2252,7 +2272,8 @@ __acquires(&gcwq->lock)
2769 if (unlikely(in_atomic() || lockdep_depth(current) > 0)) {
2770 pr_err("BUG: workqueue leaked lock or atomic: %s/0x%08x/%d\n"
2771 " last function: %pf\n",
2772 - current->comm, preempt_count(), task_pid_nr(current), f);
2773 + current->comm, preempt_count(), task_pid_nr(current),
2774 + worker->current_func);
2775 debug_show_held_locks(current);
2776 dump_stack();
2777 }
2778 @@ -2266,6 +2287,7 @@ __acquires(&gcwq->lock)
2779 /* we're done with it, release */
2780 hlist_del_init(&worker->hentry);
2781 worker->current_work = NULL;
2782 + worker->current_func = NULL;
2783 worker->current_cwq = NULL;
2784 cwq_dec_nr_in_flight(cwq, work_color);
2785 }
2786 diff --git a/lib/idr.c b/lib/idr.c
2787 index 6482390..ca5aa00 100644
2788 --- a/lib/idr.c
2789 +++ b/lib/idr.c
2790 @@ -625,7 +625,14 @@ void *idr_get_next(struct idr *idp, int *nextidp)
2791 return p;
2792 }
2793
2794 - id += 1 << n;
2795 + /*
2796 + * Proceed to the next layer at the current level. Unlike
2797 + * idr_for_each(), @id isn't guaranteed to be aligned to
2798 + * layer boundary at this point and adding 1 << n may
2799 + * incorrectly skip IDs. Make sure we jump to the
2800 + * beginning of the next layer using round_up().
2801 + */
2802 + id = round_up(id + 1, 1 << n);
2803 while (n < fls(id)) {
2804 n += IDR_BITS;
2805 p = *--paa;
2806 diff --git a/mm/mmap.c b/mm/mmap.c
2807 index d1e4124..8832b87 100644
2808 --- a/mm/mmap.c
2809 +++ b/mm/mmap.c
2810 @@ -2169,9 +2169,28 @@ int expand_downwards(struct vm_area_struct *vma,
2811 return error;
2812 }
2813
2814 +/*
2815 + * Note how expand_stack() refuses to expand the stack all the way to
2816 + * abut the next virtual mapping, *unless* that mapping itself is also
2817 + * a stack mapping. We want to leave room for a guard page, after all
2818 + * (the guard page itself is not added here, that is done by the
2819 + * actual page faulting logic)
2820 + *
2821 + * This matches the behavior of the guard page logic (see mm/memory.c:
2822 + * check_stack_guard_page()), which only allows the guard page to be
2823 + * removed under these circumstances.
2824 + */
2825 #ifdef CONFIG_STACK_GROWSUP
2826 int expand_stack(struct vm_area_struct *vma, unsigned long address)
2827 {
2828 + struct vm_area_struct *next;
2829 +
2830 + address &= PAGE_MASK;
2831 + next = vma->vm_next;
2832 + if (next && next->vm_start == address + PAGE_SIZE) {
2833 + if (!(next->vm_flags & VM_GROWSUP))
2834 + return -ENOMEM;
2835 + }
2836 return expand_upwards(vma, address);
2837 }
2838
2839 @@ -2194,6 +2213,14 @@ find_extend_vma(struct mm_struct *mm, unsigned long addr)
2840 #else
2841 int expand_stack(struct vm_area_struct *vma, unsigned long address)
2842 {
2843 + struct vm_area_struct *prev;
2844 +
2845 + address &= PAGE_MASK;
2846 + prev = vma->vm_prev;
2847 + if (prev && prev->vm_end == address) {
2848 + if (!(prev->vm_flags & VM_GROWSDOWN))
2849 + return -ENOMEM;
2850 + }
2851 return expand_downwards(vma, address);
2852 }
2853
2854 diff --git a/net/sunrpc/svc.c b/net/sunrpc/svc.c
2855 index dbf12ac..2d34b6b 100644
2856 --- a/net/sunrpc/svc.c
2857 +++ b/net/sunrpc/svc.c
2858 @@ -515,15 +515,6 @@ EXPORT_SYMBOL_GPL(svc_create_pooled);
2859
2860 void svc_shutdown_net(struct svc_serv *serv, struct net *net)
2861 {
2862 - /*
2863 - * The set of xprts (contained in the sv_tempsocks and
2864 - * sv_permsocks lists) is now constant, since it is modified
2865 - * only by accepting new sockets (done by service threads in
2866 - * svc_recv) or aging old ones (done by sv_temptimer), or
2867 - * configuration changes (excluded by whatever locking the
2868 - * caller is using--nfsd_mutex in the case of nfsd). So it's
2869 - * safe to traverse those lists and shut everything down:
2870 - */
2871 svc_close_net(serv, net);
2872
2873 if (serv->sv_shutdown)
2874 diff --git a/net/sunrpc/svc_xprt.c b/net/sunrpc/svc_xprt.c
2875 index b8e47fa..ca71056 100644
2876 --- a/net/sunrpc/svc_xprt.c
2877 +++ b/net/sunrpc/svc_xprt.c
2878 @@ -856,7 +856,6 @@ static void svc_age_temp_xprts(unsigned long closure)
2879 struct svc_serv *serv = (struct svc_serv *)closure;
2880 struct svc_xprt *xprt;
2881 struct list_head *le, *next;
2882 - LIST_HEAD(to_be_aged);
2883
2884 dprintk("svc_age_temp_xprts\n");
2885
2886 @@ -877,25 +876,15 @@ static void svc_age_temp_xprts(unsigned long closure)
2887 if (atomic_read(&xprt->xpt_ref.refcount) > 1 ||
2888 test_bit(XPT_BUSY, &xprt->xpt_flags))
2889 continue;
2890 - svc_xprt_get(xprt);
2891 - list_move(le, &to_be_aged);
2892 + list_del_init(le);
2893 set_bit(XPT_CLOSE, &xprt->xpt_flags);
2894 set_bit(XPT_DETACHED, &xprt->xpt_flags);
2895 - }
2896 - spin_unlock_bh(&serv->sv_lock);
2897 -
2898 - while (!list_empty(&to_be_aged)) {
2899 - le = to_be_aged.next;
2900 - /* fiddling the xpt_list node is safe 'cos we're XPT_DETACHED */
2901 - list_del_init(le);
2902 - xprt = list_entry(le, struct svc_xprt, xpt_list);
2903 -
2904 dprintk("queuing xprt %p for closing\n", xprt);
2905
2906 /* a thread will dequeue and close it soon */
2907 svc_xprt_enqueue(xprt);
2908 - svc_xprt_put(xprt);
2909 }
2910 + spin_unlock_bh(&serv->sv_lock);
2911
2912 mod_timer(&serv->sv_temptimer, jiffies + svc_conn_age_period * HZ);
2913 }
2914 @@ -959,21 +948,24 @@ void svc_close_xprt(struct svc_xprt *xprt)
2915 }
2916 EXPORT_SYMBOL_GPL(svc_close_xprt);
2917
2918 -static void svc_close_list(struct svc_serv *serv, struct list_head *xprt_list, struct net *net)
2919 +static int svc_close_list(struct svc_serv *serv, struct list_head *xprt_list, struct net *net)
2920 {
2921 struct svc_xprt *xprt;
2922 + int ret = 0;
2923
2924 spin_lock(&serv->sv_lock);
2925 list_for_each_entry(xprt, xprt_list, xpt_list) {
2926 if (xprt->xpt_net != net)
2927 continue;
2928 + ret++;
2929 set_bit(XPT_CLOSE, &xprt->xpt_flags);
2930 - set_bit(XPT_BUSY, &xprt->xpt_flags);
2931 + svc_xprt_enqueue(xprt);
2932 }
2933 spin_unlock(&serv->sv_lock);
2934 + return ret;
2935 }
2936
2937 -static void svc_clear_pools(struct svc_serv *serv, struct net *net)
2938 +static struct svc_xprt *svc_dequeue_net(struct svc_serv *serv, struct net *net)
2939 {
2940 struct svc_pool *pool;
2941 struct svc_xprt *xprt;
2942 @@ -988,42 +980,46 @@ static void svc_clear_pools(struct svc_serv *serv, struct net *net)
2943 if (xprt->xpt_net != net)
2944 continue;
2945 list_del_init(&xprt->xpt_ready);
2946 + spin_unlock_bh(&pool->sp_lock);
2947 + return xprt;
2948 }
2949 spin_unlock_bh(&pool->sp_lock);
2950 }
2951 + return NULL;
2952 }
2953
2954 -static void svc_clear_list(struct svc_serv *serv, struct list_head *xprt_list, struct net *net)
2955 +static void svc_clean_up_xprts(struct svc_serv *serv, struct net *net)
2956 {
2957 struct svc_xprt *xprt;
2958 - struct svc_xprt *tmp;
2959 - LIST_HEAD(victims);
2960 -
2961 - spin_lock(&serv->sv_lock);
2962 - list_for_each_entry_safe(xprt, tmp, xprt_list, xpt_list) {
2963 - if (xprt->xpt_net != net)
2964 - continue;
2965 - list_move(&xprt->xpt_list, &victims);
2966 - }
2967 - spin_unlock(&serv->sv_lock);
2968
2969 - list_for_each_entry_safe(xprt, tmp, &victims, xpt_list)
2970 + while ((xprt = svc_dequeue_net(serv, net))) {
2971 + set_bit(XPT_CLOSE, &xprt->xpt_flags);
2972 svc_delete_xprt(xprt);
2973 + }
2974 }
2975
2976 +/*
2977 + * Server threads may still be running (especially in the case where the
2978 + * service is still running in other network namespaces).
2979 + *
2980 + * So we shut down sockets the same way we would on a running server, by
2981 + * setting XPT_CLOSE, enqueuing, and letting a thread pick it up to do
2982 + * the close. In the case there are no such other threads,
2983 + * threads running, svc_clean_up_xprts() does a simple version of a
2984 + * server's main event loop, and in the case where there are other
2985 + * threads, we may need to wait a little while and then check again to
2986 + * see if they're done.
2987 + */
2988 void svc_close_net(struct svc_serv *serv, struct net *net)
2989 {
2990 - svc_close_list(serv, &serv->sv_tempsocks, net);
2991 - svc_close_list(serv, &serv->sv_permsocks, net);
2992 + int delay = 0;
2993
2994 - svc_clear_pools(serv, net);
2995 - /*
2996 - * At this point the sp_sockets lists will stay empty, since
2997 - * svc_xprt_enqueue will not add new entries without taking the
2998 - * sp_lock and checking XPT_BUSY.
2999 - */
3000 - svc_clear_list(serv, &serv->sv_tempsocks, net);
3001 - svc_clear_list(serv, &serv->sv_permsocks, net);
3002 + while (svc_close_list(serv, &serv->sv_permsocks, net) +
3003 + svc_close_list(serv, &serv->sv_tempsocks, net)) {
3004 +
3005 + svc_clean_up_xprts(serv, net);
3006 + msleep(delay++);
3007 + }
3008 }
3009
3010 /*
3011 diff --git a/sound/pci/bt87x.c b/sound/pci/bt87x.c
3012 index cdd100d..9febe55 100644
3013 --- a/sound/pci/bt87x.c
3014 +++ b/sound/pci/bt87x.c
3015 @@ -836,6 +836,8 @@ static struct {
3016 {0x7063, 0x2000}, /* pcHDTV HD-2000 TV */
3017 };
3018
3019 +static struct pci_driver driver;
3020 +
3021 /* return the id of the card, or a negative value if it's blacklisted */
3022 static int snd_bt87x_detect_card(struct pci_dev *pci)
3023 {
3024 @@ -962,11 +964,24 @@ static DEFINE_PCI_DEVICE_TABLE(snd_bt87x_default_ids) = {
3025 { }
3026 };
3027
3028 -static struct pci_driver bt87x_driver = {
3029 +static struct pci_driver driver = {
3030 .name = KBUILD_MODNAME,
3031 .id_table = snd_bt87x_ids,
3032 .probe = snd_bt87x_probe,
3033 .remove = snd_bt87x_remove,
3034 };
3035
3036 -module_pci_driver(bt87x_driver);
3037 +static int __init alsa_card_bt87x_init(void)
3038 +{
3039 + if (load_all)
3040 + driver.id_table = snd_bt87x_default_ids;
3041 + return pci_register_driver(&driver);
3042 +}
3043 +
3044 +static void __exit alsa_card_bt87x_exit(void)
3045 +{
3046 + pci_unregister_driver(&driver);
3047 +}
3048 +
3049 +module_init(alsa_card_bt87x_init)
3050 +module_exit(alsa_card_bt87x_exit)
3051 diff --git a/sound/pci/emu10k1/emu10k1_main.c b/sound/pci/emu10k1/emu10k1_main.c
3052 index a7c296a..e6b0166 100644
3053 --- a/sound/pci/emu10k1/emu10k1_main.c
3054 +++ b/sound/pci/emu10k1/emu10k1_main.c
3055 @@ -862,6 +862,12 @@ static int snd_emu10k1_emu1010_init(struct snd_emu10k1 *emu)
3056 filename, emu->firmware->size);
3057 }
3058
3059 + err = snd_emu1010_load_firmware(emu);
3060 + if (err != 0) {
3061 + snd_printk(KERN_INFO "emu1010: Loading Firmware failed\n");
3062 + return err;
3063 + }
3064 +
3065 /* ID, should read & 0x7f = 0x55 when FPGA programmed. */
3066 snd_emu1010_fpga_read(emu, EMU_HANA_ID, &reg);
3067 if ((reg & 0x3f) != 0x15) {
3068 diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c
3069 index b14813d..c690b2a 100644
3070 --- a/sound/pci/hda/patch_hdmi.c
3071 +++ b/sound/pci/hda/patch_hdmi.c
3072 @@ -1573,6 +1573,9 @@ static int generic_hdmi_build_jack(struct hda_codec *codec, int pin_idx)
3073
3074 if (pcmdev > 0)
3075 sprintf(hdmi_str + strlen(hdmi_str), ",pcm=%d", pcmdev);
3076 + if (!is_jack_detectable(codec, per_pin->pin_nid))
3077 + strncat(hdmi_str, " Phantom",
3078 + sizeof(hdmi_str) - strlen(hdmi_str) - 1);
3079
3080 return snd_hda_jack_add_kctl(codec, per_pin->pin_nid, hdmi_str, 0);
3081 }