diff options
| -rw-r--r-- | arch/sparc/include/asm/thread_info_64.h | 2 | ||||
| -rw-r--r-- | arch/sparc/kernel/irq_64.c | 20 | ||||
| -rw-r--r-- | arch/sparc/kernel/kstack.h | 19 | ||||
| -rw-r--r-- | arch/sparc/kernel/nmi.c | 7 | ||||
| -rw-r--r-- | arch/sparc/kernel/rtrap_64.S | 12 | ||||
| -rw-r--r-- | arch/sparc/kernel/unaligned_64.c | 6 | ||||
| -rw-r--r-- | arch/sparc/lib/mcount.S | 8 | ||||
| -rw-r--r-- | arch/x86/ia32/ia32entry.S | 2 | ||||
| -rw-r--r-- | arch/x86/kernel/dumpstack.h | 8 | ||||
| -rw-r--r-- | drivers/char/pcmcia/cm4000_cs.c | 8 | ||||
| -rw-r--r-- | drivers/gpu/drm/drm_stub.c | 4 | ||||
| -rw-r--r-- | drivers/md/raid5.c | 19 | ||||
| -rw-r--r-- | drivers/pcmcia/cistpl.c | 9 | ||||
| -rw-r--r-- | drivers/pcmcia/db1xxx_ss.c | 4 | ||||
| -rw-r--r-- | drivers/pcmcia/ds.c | 22 | ||||
| -rw-r--r-- | drivers/pcmcia/pcmcia_resource.c | 10 | ||||
| -rw-r--r-- | drivers/pcmcia/rsrc_nonstatic.c | 16 | ||||
| -rw-r--r-- | drivers/serial/serial_cs.c | 9 | ||||
| -rw-r--r-- | fs/afs/mntpt.c | 24 | ||||
| -rw-r--r-- | fs/quota/Kconfig | 8 | ||||
| -rw-r--r-- | fs/quota/dquot.c | 16 |
21 files changed, 145 insertions, 88 deletions
diff --git a/arch/sparc/include/asm/thread_info_64.h b/arch/sparc/include/asm/thread_info_64.h index 9e2d9447f2ad..4827a3aeac7f 100644 --- a/arch/sparc/include/asm/thread_info_64.h +++ b/arch/sparc/include/asm/thread_info_64.h | |||
| @@ -111,7 +111,7 @@ struct thread_info { | |||
| 111 | #define THREAD_SHIFT PAGE_SHIFT | 111 | #define THREAD_SHIFT PAGE_SHIFT |
| 112 | #endif /* PAGE_SHIFT == 13 */ | 112 | #endif /* PAGE_SHIFT == 13 */ |
| 113 | 113 | ||
| 114 | #define PREEMPT_ACTIVE 0x4000000 | 114 | #define PREEMPT_ACTIVE 0x10000000 |
| 115 | 115 | ||
| 116 | /* | 116 | /* |
| 117 | * macros/functions for gaining access to the thread information structure | 117 | * macros/functions for gaining access to the thread information structure |
diff --git a/arch/sparc/kernel/irq_64.c b/arch/sparc/kernel/irq_64.c index 454ce3a25273..830d70a3e20b 100644 --- a/arch/sparc/kernel/irq_64.c +++ b/arch/sparc/kernel/irq_64.c | |||
| @@ -22,6 +22,7 @@ | |||
| 22 | #include <linux/seq_file.h> | 22 | #include <linux/seq_file.h> |
| 23 | #include <linux/ftrace.h> | 23 | #include <linux/ftrace.h> |
| 24 | #include <linux/irq.h> | 24 | #include <linux/irq.h> |
| 25 | #include <linux/kmemleak.h> | ||
| 25 | 26 | ||
| 26 | #include <asm/ptrace.h> | 27 | #include <asm/ptrace.h> |
| 27 | #include <asm/processor.h> | 28 | #include <asm/processor.h> |
| @@ -46,6 +47,7 @@ | |||
| 46 | 47 | ||
| 47 | #include "entry.h" | 48 | #include "entry.h" |
| 48 | #include "cpumap.h" | 49 | #include "cpumap.h" |
| 50 | #include "kstack.h" | ||
| 49 | 51 | ||
| 50 | #define NUM_IVECS (IMAP_INR + 1) | 52 | #define NUM_IVECS (IMAP_INR + 1) |
| 51 | 53 | ||
| @@ -712,24 +714,6 @@ void ack_bad_irq(unsigned int virt_irq) | |||
| 712 | void *hardirq_stack[NR_CPUS]; | 714 | void *hardirq_stack[NR_CPUS]; |
| 713 | void *softirq_stack[NR_CPUS]; | 715 | void *softirq_stack[NR_CPUS]; |
| 714 | 716 | ||
| 715 | static __attribute__((always_inline)) void *set_hardirq_stack(void) | ||
| 716 | { | ||
| 717 | void *orig_sp, *sp = hardirq_stack[smp_processor_id()]; | ||
| 718 | |||
| 719 | __asm__ __volatile__("mov %%sp, %0" : "=r" (orig_sp)); | ||
| 720 | if (orig_sp < sp || | ||
| 721 | orig_sp > (sp + THREAD_SIZE)) { | ||
| 722 | sp += THREAD_SIZE - 192 - STACK_BIAS; | ||
| 723 | __asm__ __volatile__("mov %0, %%sp" : : "r" (sp)); | ||
| 724 | } | ||
| 725 | |||
| 726 | return orig_sp; | ||
| 727 | } | ||
| 728 | static __attribute__((always_inline)) void restore_hardirq_stack(void *orig_sp) | ||
| 729 | { | ||
| 730 | __asm__ __volatile__("mov %0, %%sp" : : "r" (orig_sp)); | ||
| 731 | } | ||
| 732 | |||
| 733 | void __irq_entry handler_irq(int irq, struct pt_regs *regs) | 717 | void __irq_entry handler_irq(int irq, struct pt_regs *regs) |
| 734 | { | 718 | { |
| 735 | unsigned long pstate, bucket_pa; | 719 | unsigned long pstate, bucket_pa; |
diff --git a/arch/sparc/kernel/kstack.h b/arch/sparc/kernel/kstack.h index 5247283d1c03..53dfb92e09fb 100644 --- a/arch/sparc/kernel/kstack.h +++ b/arch/sparc/kernel/kstack.h | |||
| @@ -61,4 +61,23 @@ check_magic: | |||
| 61 | 61 | ||
| 62 | } | 62 | } |
| 63 | 63 | ||
| 64 | static inline __attribute__((always_inline)) void *set_hardirq_stack(void) | ||
| 65 | { | ||
| 66 | void *orig_sp, *sp = hardirq_stack[smp_processor_id()]; | ||
| 67 | |||
| 68 | __asm__ __volatile__("mov %%sp, %0" : "=r" (orig_sp)); | ||
| 69 | if (orig_sp < sp || | ||
| 70 | orig_sp > (sp + THREAD_SIZE)) { | ||
| 71 | sp += THREAD_SIZE - 192 - STACK_BIAS; | ||
| 72 | __asm__ __volatile__("mov %0, %%sp" : : "r" (sp)); | ||
| 73 | } | ||
| 74 | |||
| 75 | return orig_sp; | ||
| 76 | } | ||
| 77 | |||
| 78 | static inline __attribute__((always_inline)) void restore_hardirq_stack(void *orig_sp) | ||
| 79 | { | ||
| 80 | __asm__ __volatile__("mov %0, %%sp" : : "r" (orig_sp)); | ||
| 81 | } | ||
| 82 | |||
| 64 | #endif /* _KSTACK_H */ | 83 | #endif /* _KSTACK_H */ |
diff --git a/arch/sparc/kernel/nmi.c b/arch/sparc/kernel/nmi.c index 75a3d1a25356..a4bd7ba74c89 100644 --- a/arch/sparc/kernel/nmi.c +++ b/arch/sparc/kernel/nmi.c | |||
| @@ -23,6 +23,8 @@ | |||
| 23 | #include <asm/ptrace.h> | 23 | #include <asm/ptrace.h> |
| 24 | #include <asm/pcr.h> | 24 | #include <asm/pcr.h> |
| 25 | 25 | ||
| 26 | #include "kstack.h" | ||
| 27 | |||
| 26 | /* We don't have a real NMI on sparc64, but we can fake one | 28 | /* We don't have a real NMI on sparc64, but we can fake one |
| 27 | * up using profiling counter overflow interrupts and interrupt | 29 | * up using profiling counter overflow interrupts and interrupt |
| 28 | * levels. | 30 | * levels. |
| @@ -92,6 +94,7 @@ static void die_nmi(const char *str, struct pt_regs *regs, int do_panic) | |||
| 92 | notrace __kprobes void perfctr_irq(int irq, struct pt_regs *regs) | 94 | notrace __kprobes void perfctr_irq(int irq, struct pt_regs *regs) |
| 93 | { | 95 | { |
| 94 | unsigned int sum, touched = 0; | 96 | unsigned int sum, touched = 0; |
| 97 | void *orig_sp; | ||
| 95 | 98 | ||
| 96 | clear_softint(1 << irq); | 99 | clear_softint(1 << irq); |
| 97 | 100 | ||
| @@ -99,6 +102,8 @@ notrace __kprobes void perfctr_irq(int irq, struct pt_regs *regs) | |||
| 99 | 102 | ||
| 100 | nmi_enter(); | 103 | nmi_enter(); |
| 101 | 104 | ||
| 105 | orig_sp = set_hardirq_stack(); | ||
| 106 | |||
| 102 | if (notify_die(DIE_NMI, "nmi", regs, 0, | 107 | if (notify_die(DIE_NMI, "nmi", regs, 0, |
| 103 | pt_regs_trap_type(regs), SIGINT) == NOTIFY_STOP) | 108 | pt_regs_trap_type(regs), SIGINT) == NOTIFY_STOP) |
| 104 | touched = 1; | 109 | touched = 1; |
| @@ -124,6 +129,8 @@ notrace __kprobes void perfctr_irq(int irq, struct pt_regs *regs) | |||
| 124 | pcr_ops->write(pcr_enable); | 129 | pcr_ops->write(pcr_enable); |
| 125 | } | 130 | } |
| 126 | 131 | ||
| 132 | restore_hardirq_stack(orig_sp); | ||
| 133 | |||
| 127 | nmi_exit(); | 134 | nmi_exit(); |
| 128 | } | 135 | } |
| 129 | 136 | ||
diff --git a/arch/sparc/kernel/rtrap_64.S b/arch/sparc/kernel/rtrap_64.S index 83f1873c6c13..090b9e9ad5e3 100644 --- a/arch/sparc/kernel/rtrap_64.S +++ b/arch/sparc/kernel/rtrap_64.S | |||
| @@ -130,7 +130,17 @@ rtrap_xcall: | |||
| 130 | nop | 130 | nop |
| 131 | call trace_hardirqs_on | 131 | call trace_hardirqs_on |
| 132 | nop | 132 | nop |
| 133 | wrpr %l4, %pil | 133 | /* Do not actually set the %pil here. We will do that |
| 134 | * below after we clear PSTATE_IE in the %pstate register. | ||
| 135 | * If we re-enable interrupts here, we can recurse down | ||
| 136 | * the hardirq stack potentially endlessly, causing a | ||
| 137 | * stack overflow. | ||
| 138 | * | ||
| 139 | * It is tempting to put this test and trace_hardirqs_on | ||
| 140 | * call at the 'rt_continue' label, but that will not work | ||
| 141 | * as that path hits unconditionally and we do not want to | ||
| 142 | * execute this in NMI return paths, for example. | ||
| 143 | */ | ||
| 134 | #endif | 144 | #endif |
| 135 | rtrap_no_irq_enable: | 145 | rtrap_no_irq_enable: |
| 136 | andcc %l1, TSTATE_PRIV, %l3 | 146 | andcc %l1, TSTATE_PRIV, %l3 |
diff --git a/arch/sparc/kernel/unaligned_64.c b/arch/sparc/kernel/unaligned_64.c index ebce43018c49..c752c4c479bd 100644 --- a/arch/sparc/kernel/unaligned_64.c +++ b/arch/sparc/kernel/unaligned_64.c | |||
| @@ -50,7 +50,7 @@ static inline enum direction decode_direction(unsigned int insn) | |||
| 50 | } | 50 | } |
| 51 | 51 | ||
| 52 | /* 16 = double-word, 8 = extra-word, 4 = word, 2 = half-word */ | 52 | /* 16 = double-word, 8 = extra-word, 4 = word, 2 = half-word */ |
| 53 | static inline int decode_access_size(unsigned int insn) | 53 | static inline int decode_access_size(struct pt_regs *regs, unsigned int insn) |
| 54 | { | 54 | { |
| 55 | unsigned int tmp; | 55 | unsigned int tmp; |
| 56 | 56 | ||
| @@ -66,7 +66,7 @@ static inline int decode_access_size(unsigned int insn) | |||
| 66 | return 2; | 66 | return 2; |
| 67 | else { | 67 | else { |
| 68 | printk("Impossible unaligned trap. insn=%08x\n", insn); | 68 | printk("Impossible unaligned trap. insn=%08x\n", insn); |
| 69 | die_if_kernel("Byte sized unaligned access?!?!", current_thread_info()->kregs); | 69 | die_if_kernel("Byte sized unaligned access?!?!", regs); |
| 70 | 70 | ||
| 71 | /* GCC should never warn that control reaches the end | 71 | /* GCC should never warn that control reaches the end |
| 72 | * of this function without returning a value because | 72 | * of this function without returning a value because |
| @@ -286,7 +286,7 @@ static void log_unaligned(struct pt_regs *regs) | |||
| 286 | asmlinkage void kernel_unaligned_trap(struct pt_regs *regs, unsigned int insn) | 286 | asmlinkage void kernel_unaligned_trap(struct pt_regs *regs, unsigned int insn) |
| 287 | { | 287 | { |
| 288 | enum direction dir = decode_direction(insn); | 288 | enum direction dir = decode_direction(insn); |
| 289 | int size = decode_access_size(insn); | 289 | int size = decode_access_size(regs, insn); |
| 290 | int orig_asi, asi; | 290 | int orig_asi, asi; |
| 291 | 291 | ||
| 292 | current_thread_info()->kern_una_regs = regs; | 292 | current_thread_info()->kern_una_regs = regs; |
diff --git a/arch/sparc/lib/mcount.S b/arch/sparc/lib/mcount.S index 3753e3c6e176..3ad6cbdc2163 100644 --- a/arch/sparc/lib/mcount.S +++ b/arch/sparc/lib/mcount.S | |||
| @@ -34,7 +34,7 @@ mcount: | |||
| 34 | cmp %g1, %g2 | 34 | cmp %g1, %g2 |
| 35 | be,pn %icc, 1f | 35 | be,pn %icc, 1f |
| 36 | mov %i7, %g3 | 36 | mov %i7, %g3 |
| 37 | save %sp, -128, %sp | 37 | save %sp, -176, %sp |
| 38 | mov %g3, %o1 | 38 | mov %g3, %o1 |
| 39 | jmpl %g1, %o7 | 39 | jmpl %g1, %o7 |
| 40 | mov %i7, %o0 | 40 | mov %i7, %o0 |
| @@ -56,7 +56,7 @@ mcount: | |||
| 56 | nop | 56 | nop |
| 57 | 5: mov %i7, %g2 | 57 | 5: mov %i7, %g2 |
| 58 | mov %fp, %g3 | 58 | mov %fp, %g3 |
| 59 | save %sp, -128, %sp | 59 | save %sp, -176, %sp |
| 60 | mov %g2, %l0 | 60 | mov %g2, %l0 |
| 61 | ba,pt %xcc, ftrace_graph_caller | 61 | ba,pt %xcc, ftrace_graph_caller |
| 62 | mov %g3, %l1 | 62 | mov %g3, %l1 |
| @@ -85,7 +85,7 @@ ftrace_caller: | |||
| 85 | lduw [%g1 + %lo(function_trace_stop)], %g1 | 85 | lduw [%g1 + %lo(function_trace_stop)], %g1 |
| 86 | brnz,pn %g1, ftrace_stub | 86 | brnz,pn %g1, ftrace_stub |
| 87 | mov %fp, %g3 | 87 | mov %fp, %g3 |
| 88 | save %sp, -128, %sp | 88 | save %sp, -176, %sp |
| 89 | mov %g2, %o1 | 89 | mov %g2, %o1 |
| 90 | mov %g2, %l0 | 90 | mov %g2, %l0 |
| 91 | mov %g3, %l1 | 91 | mov %g3, %l1 |
| @@ -120,7 +120,7 @@ ENTRY(ftrace_graph_caller) | |||
| 120 | END(ftrace_graph_caller) | 120 | END(ftrace_graph_caller) |
| 121 | 121 | ||
| 122 | ENTRY(return_to_handler) | 122 | ENTRY(return_to_handler) |
| 123 | save %sp, -128, %sp | 123 | save %sp, -176, %sp |
| 124 | call ftrace_return_to_handler | 124 | call ftrace_return_to_handler |
| 125 | mov %fp, %o0 | 125 | mov %fp, %o0 |
| 126 | jmpl %o0 + 8, %g0 | 126 | jmpl %o0 + 8, %g0 |
diff --git a/arch/x86/ia32/ia32entry.S b/arch/x86/ia32/ia32entry.S index 59b4556a5b92..e790bc1fbfa3 100644 --- a/arch/x86/ia32/ia32entry.S +++ b/arch/x86/ia32/ia32entry.S | |||
| @@ -626,7 +626,7 @@ ia32_sys_call_table: | |||
| 626 | .quad stub32_sigreturn | 626 | .quad stub32_sigreturn |
| 627 | .quad stub32_clone /* 120 */ | 627 | .quad stub32_clone /* 120 */ |
| 628 | .quad sys_setdomainname | 628 | .quad sys_setdomainname |
| 629 | .quad sys_uname | 629 | .quad sys_newuname |
| 630 | .quad sys_modify_ldt | 630 | .quad sys_modify_ldt |
| 631 | .quad compat_sys_adjtimex | 631 | .quad compat_sys_adjtimex |
| 632 | .quad sys32_mprotect /* 125 */ | 632 | .quad sys32_mprotect /* 125 */ |
diff --git a/arch/x86/kernel/dumpstack.h b/arch/x86/kernel/dumpstack.h index e39e77168a37..e1a93be4fd44 100644 --- a/arch/x86/kernel/dumpstack.h +++ b/arch/x86/kernel/dumpstack.h | |||
| @@ -14,6 +14,8 @@ | |||
| 14 | #define get_bp(bp) asm("movq %%rbp, %0" : "=r" (bp) :) | 14 | #define get_bp(bp) asm("movq %%rbp, %0" : "=r" (bp) :) |
| 15 | #endif | 15 | #endif |
| 16 | 16 | ||
| 17 | #include <linux/uaccess.h> | ||
| 18 | |||
| 17 | extern void | 19 | extern void |
| 18 | show_trace_log_lvl(struct task_struct *task, struct pt_regs *regs, | 20 | show_trace_log_lvl(struct task_struct *task, struct pt_regs *regs, |
| 19 | unsigned long *stack, unsigned long bp, char *log_lvl); | 21 | unsigned long *stack, unsigned long bp, char *log_lvl); |
| @@ -42,8 +44,10 @@ static inline unsigned long rewind_frame_pointer(int n) | |||
| 42 | get_bp(frame); | 44 | get_bp(frame); |
| 43 | 45 | ||
| 44 | #ifdef CONFIG_FRAME_POINTER | 46 | #ifdef CONFIG_FRAME_POINTER |
| 45 | while (n--) | 47 | while (n--) { |
| 46 | frame = frame->next_frame; | 48 | if (probe_kernel_address(&frame->next_frame, frame)) |
| 49 | break; | ||
| 50 | } | ||
| 47 | #endif | 51 | #endif |
| 48 | 52 | ||
| 49 | return (unsigned long)frame; | 53 | return (unsigned long)frame; |
diff --git a/drivers/char/pcmcia/cm4000_cs.c b/drivers/char/pcmcia/cm4000_cs.c index c9bc896d68af..90b199f97bec 100644 --- a/drivers/char/pcmcia/cm4000_cs.c +++ b/drivers/char/pcmcia/cm4000_cs.c | |||
| @@ -1026,14 +1026,16 @@ static ssize_t cmm_read(struct file *filp, __user char *buf, size_t count, | |||
| 1026 | 1026 | ||
| 1027 | xoutb(0, REG_FLAGS1(iobase)); /* clear detectCMM */ | 1027 | xoutb(0, REG_FLAGS1(iobase)); /* clear detectCMM */ |
| 1028 | /* last check before exit */ | 1028 | /* last check before exit */ |
| 1029 | if (!io_detect_cm4000(iobase, dev)) | 1029 | if (!io_detect_cm4000(iobase, dev)) { |
| 1030 | count = -ENODEV; | 1030 | rc = -ENODEV; |
| 1031 | goto release_io; | ||
| 1032 | } | ||
| 1031 | 1033 | ||
| 1032 | if (test_bit(IS_INVREV, &dev->flags) && count > 0) | 1034 | if (test_bit(IS_INVREV, &dev->flags) && count > 0) |
| 1033 | str_invert_revert(dev->rbuf, count); | 1035 | str_invert_revert(dev->rbuf, count); |
| 1034 | 1036 | ||
| 1035 | if (copy_to_user(buf, dev->rbuf, count)) | 1037 | if (copy_to_user(buf, dev->rbuf, count)) |
| 1036 | return -EFAULT; | 1038 | rc = -EFAULT; |
| 1037 | 1039 | ||
| 1038 | release_io: | 1040 | release_io: |
| 1039 | clear_bit(LOCK_IO, &dev->flags); | 1041 | clear_bit(LOCK_IO, &dev->flags); |
diff --git a/drivers/gpu/drm/drm_stub.c b/drivers/gpu/drm/drm_stub.c index b743411d8144..a0c365f2e521 100644 --- a/drivers/gpu/drm/drm_stub.c +++ b/drivers/gpu/drm/drm_stub.c | |||
| @@ -516,8 +516,6 @@ void drm_put_dev(struct drm_device *dev) | |||
| 516 | } | 516 | } |
| 517 | driver = dev->driver; | 517 | driver = dev->driver; |
| 518 | 518 | ||
| 519 | drm_vblank_cleanup(dev); | ||
| 520 | |||
| 521 | drm_lastclose(dev); | 519 | drm_lastclose(dev); |
| 522 | 520 | ||
| 523 | if (drm_core_has_MTRR(dev) && drm_core_has_AGP(dev) && | 521 | if (drm_core_has_MTRR(dev) && drm_core_has_AGP(dev) && |
| @@ -537,6 +535,8 @@ void drm_put_dev(struct drm_device *dev) | |||
| 537 | dev->agp = NULL; | 535 | dev->agp = NULL; |
| 538 | } | 536 | } |
| 539 | 537 | ||
| 538 | drm_vblank_cleanup(dev); | ||
| 539 | |||
| 540 | list_for_each_entry_safe(r_list, list_temp, &dev->maplist, head) | 540 | list_for_each_entry_safe(r_list, list_temp, &dev->maplist, head) |
| 541 | drm_rmmap(dev, r_list->map); | 541 | drm_rmmap(dev, r_list->map); |
| 542 | drm_ht_remove(&dev->map_hash); | 542 | drm_ht_remove(&dev->map_hash); |
diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c index e3e9a36ea3b7..20e48401910e 100644 --- a/drivers/md/raid5.c +++ b/drivers/md/raid5.c | |||
| @@ -1650,8 +1650,8 @@ static sector_t raid5_compute_sector(raid5_conf_t *conf, sector_t r_sector, | |||
| 1650 | int previous, int *dd_idx, | 1650 | int previous, int *dd_idx, |
| 1651 | struct stripe_head *sh) | 1651 | struct stripe_head *sh) |
| 1652 | { | 1652 | { |
| 1653 | long stripe; | 1653 | sector_t stripe; |
| 1654 | unsigned long chunk_number; | 1654 | sector_t chunk_number; |
| 1655 | unsigned int chunk_offset; | 1655 | unsigned int chunk_offset; |
| 1656 | int pd_idx, qd_idx; | 1656 | int pd_idx, qd_idx; |
| 1657 | int ddf_layout = 0; | 1657 | int ddf_layout = 0; |
| @@ -1671,17 +1671,12 @@ static sector_t raid5_compute_sector(raid5_conf_t *conf, sector_t r_sector, | |||
| 1671 | */ | 1671 | */ |
| 1672 | chunk_offset = sector_div(r_sector, sectors_per_chunk); | 1672 | chunk_offset = sector_div(r_sector, sectors_per_chunk); |
| 1673 | chunk_number = r_sector; | 1673 | chunk_number = r_sector; |
| 1674 | BUG_ON(r_sector != chunk_number); | ||
| 1675 | 1674 | ||
| 1676 | /* | 1675 | /* |
| 1677 | * Compute the stripe number | 1676 | * Compute the stripe number |
| 1678 | */ | 1677 | */ |
| 1679 | stripe = chunk_number / data_disks; | 1678 | stripe = chunk_number; |
| 1680 | 1679 | *dd_idx = sector_div(stripe, data_disks); | |
| 1681 | /* | ||
| 1682 | * Compute the data disk and parity disk indexes inside the stripe | ||
| 1683 | */ | ||
| 1684 | *dd_idx = chunk_number % data_disks; | ||
| 1685 | 1680 | ||
| 1686 | /* | 1681 | /* |
| 1687 | * Select the parity disk based on the user selected algorithm. | 1682 | * Select the parity disk based on the user selected algorithm. |
| @@ -1870,14 +1865,14 @@ static sector_t compute_blocknr(struct stripe_head *sh, int i, int previous) | |||
| 1870 | : conf->algorithm; | 1865 | : conf->algorithm; |
| 1871 | sector_t stripe; | 1866 | sector_t stripe; |
| 1872 | int chunk_offset; | 1867 | int chunk_offset; |
| 1873 | int chunk_number, dummy1, dd_idx = i; | 1868 | sector_t chunk_number; |
| 1869 | int dummy1, dd_idx = i; | ||
| 1874 | sector_t r_sector; | 1870 | sector_t r_sector; |
| 1875 | struct stripe_head sh2; | 1871 | struct stripe_head sh2; |
| 1876 | 1872 | ||
| 1877 | 1873 | ||
| 1878 | chunk_offset = sector_div(new_sector, sectors_per_chunk); | 1874 | chunk_offset = sector_div(new_sector, sectors_per_chunk); |
| 1879 | stripe = new_sector; | 1875 | stripe = new_sector; |
| 1880 | BUG_ON(new_sector != stripe); | ||
| 1881 | 1876 | ||
| 1882 | if (i == sh->pd_idx) | 1877 | if (i == sh->pd_idx) |
| 1883 | return 0; | 1878 | return 0; |
| @@ -1970,7 +1965,7 @@ static sector_t compute_blocknr(struct stripe_head *sh, int i, int previous) | |||
| 1970 | } | 1965 | } |
| 1971 | 1966 | ||
| 1972 | chunk_number = stripe * data_disks + i; | 1967 | chunk_number = stripe * data_disks + i; |
| 1973 | r_sector = (sector_t)chunk_number * sectors_per_chunk + chunk_offset; | 1968 | r_sector = chunk_number * sectors_per_chunk + chunk_offset; |
| 1974 | 1969 | ||
| 1975 | check = raid5_compute_sector(conf, r_sector, | 1970 | check = raid5_compute_sector(conf, r_sector, |
| 1976 | previous, &dummy1, &sh2); | 1971 | previous, &dummy1, &sh2); |
diff --git a/drivers/pcmcia/cistpl.c b/drivers/pcmcia/cistpl.c index f230f6543bff..854959cada3a 100644 --- a/drivers/pcmcia/cistpl.c +++ b/drivers/pcmcia/cistpl.c | |||
| @@ -1484,6 +1484,11 @@ int pccard_validate_cis(struct pcmcia_socket *s, unsigned int *info) | |||
| 1484 | if (!s) | 1484 | if (!s) |
| 1485 | return -EINVAL; | 1485 | return -EINVAL; |
| 1486 | 1486 | ||
| 1487 | if (s->functions) { | ||
| 1488 | WARN_ON(1); | ||
| 1489 | return -EINVAL; | ||
| 1490 | } | ||
| 1491 | |||
| 1487 | /* We do not want to validate the CIS cache... */ | 1492 | /* We do not want to validate the CIS cache... */ |
| 1488 | mutex_lock(&s->ops_mutex); | 1493 | mutex_lock(&s->ops_mutex); |
| 1489 | destroy_cis_cache(s); | 1494 | destroy_cis_cache(s); |
| @@ -1639,7 +1644,7 @@ static ssize_t pccard_show_cis(struct kobject *kobj, | |||
| 1639 | count = 0; | 1644 | count = 0; |
| 1640 | else { | 1645 | else { |
| 1641 | struct pcmcia_socket *s; | 1646 | struct pcmcia_socket *s; |
| 1642 | unsigned int chains; | 1647 | unsigned int chains = 1; |
| 1643 | 1648 | ||
| 1644 | if (off + count > size) | 1649 | if (off + count > size) |
| 1645 | count = size - off; | 1650 | count = size - off; |
| @@ -1648,7 +1653,7 @@ static ssize_t pccard_show_cis(struct kobject *kobj, | |||
| 1648 | 1653 | ||
| 1649 | if (!(s->state & SOCKET_PRESENT)) | 1654 | if (!(s->state & SOCKET_PRESENT)) |
| 1650 | return -ENODEV; | 1655 | return -ENODEV; |
| 1651 | if (pccard_validate_cis(s, &chains)) | 1656 | if (!s->functions && pccard_validate_cis(s, &chains)) |
| 1652 | return -EIO; | 1657 | return -EIO; |
| 1653 | if (!chains) | 1658 | if (!chains) |
| 1654 | return -ENODATA; | 1659 | return -ENODATA; |
diff --git a/drivers/pcmcia/db1xxx_ss.c b/drivers/pcmcia/db1xxx_ss.c index 6206408e196c..2d48196a48cd 100644 --- a/drivers/pcmcia/db1xxx_ss.c +++ b/drivers/pcmcia/db1xxx_ss.c | |||
| @@ -166,8 +166,10 @@ static int db1x_pcmcia_setup_irqs(struct db1x_pcmcia_sock *sock) | |||
| 166 | 166 | ||
| 167 | ret = request_irq(sock->insert_irq, db1200_pcmcia_cdirq, | 167 | ret = request_irq(sock->insert_irq, db1200_pcmcia_cdirq, |
| 168 | IRQF_DISABLED, "pcmcia_insert", sock); | 168 | IRQF_DISABLED, "pcmcia_insert", sock); |
| 169 | if (ret) | 169 | if (ret) { |
| 170 | local_irq_restore(flags); | ||
| 170 | goto out1; | 171 | goto out1; |
| 172 | } | ||
| 171 | 173 | ||
| 172 | ret = request_irq(sock->eject_irq, db1200_pcmcia_cdirq, | 174 | ret = request_irq(sock->eject_irq, db1200_pcmcia_cdirq, |
| 173 | IRQF_DISABLED, "pcmcia_eject", sock); | 175 | IRQF_DISABLED, "pcmcia_eject", sock); |
diff --git a/drivers/pcmcia/ds.c b/drivers/pcmcia/ds.c index cb6036d89e59..4014cf8e4a26 100644 --- a/drivers/pcmcia/ds.c +++ b/drivers/pcmcia/ds.c | |||
| @@ -687,12 +687,10 @@ static void pcmcia_requery(struct pcmcia_socket *s) | |||
| 687 | new_funcs = mfc.nfn; | 687 | new_funcs = mfc.nfn; |
| 688 | else | 688 | else |
| 689 | new_funcs = 1; | 689 | new_funcs = 1; |
| 690 | if (old_funcs > new_funcs) { | 690 | if (old_funcs != new_funcs) { |
| 691 | /* we need to re-start */ | ||
| 691 | pcmcia_card_remove(s, NULL); | 692 | pcmcia_card_remove(s, NULL); |
| 692 | pcmcia_card_add(s); | 693 | pcmcia_card_add(s); |
| 693 | } else if (new_funcs > old_funcs) { | ||
| 694 | s->functions = new_funcs; | ||
| 695 | pcmcia_device_add(s, 1); | ||
| 696 | } | 694 | } |
| 697 | } | 695 | } |
| 698 | 696 | ||
| @@ -728,6 +726,8 @@ static int pcmcia_load_firmware(struct pcmcia_device *dev, char * filename) | |||
| 728 | struct pcmcia_socket *s = dev->socket; | 726 | struct pcmcia_socket *s = dev->socket; |
| 729 | const struct firmware *fw; | 727 | const struct firmware *fw; |
| 730 | int ret = -ENOMEM; | 728 | int ret = -ENOMEM; |
| 729 | cistpl_longlink_mfc_t mfc; | ||
| 730 | int old_funcs, new_funcs = 1; | ||
| 731 | 731 | ||
| 732 | if (!filename) | 732 | if (!filename) |
| 733 | return -EINVAL; | 733 | return -EINVAL; |
| @@ -750,6 +750,14 @@ static int pcmcia_load_firmware(struct pcmcia_device *dev, char * filename) | |||
| 750 | goto release; | 750 | goto release; |
| 751 | } | 751 | } |
| 752 | 752 | ||
| 753 | /* we need to re-start if the number of functions changed */ | ||
| 754 | old_funcs = s->functions; | ||
| 755 | if (!pccard_read_tuple(s, BIND_FN_ALL, CISTPL_LONGLINK_MFC, | ||
| 756 | &mfc)) | ||
| 757 | new_funcs = mfc.nfn; | ||
| 758 | |||
| 759 | if (old_funcs != new_funcs) | ||
| 760 | ret = -EBUSY; | ||
| 753 | 761 | ||
| 754 | /* update information */ | 762 | /* update information */ |
| 755 | pcmcia_device_query(dev); | 763 | pcmcia_device_query(dev); |
| @@ -858,10 +866,8 @@ static inline int pcmcia_devmatch(struct pcmcia_device *dev, | |||
| 858 | if (did->match_flags & PCMCIA_DEV_ID_MATCH_FAKE_CIS) { | 866 | if (did->match_flags & PCMCIA_DEV_ID_MATCH_FAKE_CIS) { |
| 859 | dev_dbg(&dev->dev, "device needs a fake CIS\n"); | 867 | dev_dbg(&dev->dev, "device needs a fake CIS\n"); |
| 860 | if (!dev->socket->fake_cis) | 868 | if (!dev->socket->fake_cis) |
| 861 | pcmcia_load_firmware(dev, did->cisfile); | 869 | if (pcmcia_load_firmware(dev, did->cisfile)) |
| 862 | 870 | return 0; | |
| 863 | if (!dev->socket->fake_cis) | ||
| 864 | return 0; | ||
| 865 | } | 871 | } |
| 866 | 872 | ||
| 867 | if (did->match_flags & PCMCIA_DEV_ID_MATCH_ANONYMOUS) { | 873 | if (did->match_flags & PCMCIA_DEV_ID_MATCH_ANONYMOUS) { |
diff --git a/drivers/pcmcia/pcmcia_resource.c b/drivers/pcmcia/pcmcia_resource.c index caec1dee2a4b..7c3d03bb4f30 100644 --- a/drivers/pcmcia/pcmcia_resource.c +++ b/drivers/pcmcia/pcmcia_resource.c | |||
| @@ -755,12 +755,12 @@ int pcmcia_request_irq(struct pcmcia_device *p_dev, irq_req_t *req) | |||
| 755 | else | 755 | else |
| 756 | printk(KERN_WARNING "pcmcia: Driver needs updating to support IRQ sharing.\n"); | 756 | printk(KERN_WARNING "pcmcia: Driver needs updating to support IRQ sharing.\n"); |
| 757 | 757 | ||
| 758 | #ifdef CONFIG_PCMCIA_PROBE | 758 | /* If the interrupt is already assigned, it must be the same */ |
| 759 | 759 | if (s->irq.AssignedIRQ != 0) | |
| 760 | if (s->irq.AssignedIRQ != 0) { | ||
| 761 | /* If the interrupt is already assigned, it must be the same */ | ||
| 762 | irq = s->irq.AssignedIRQ; | 760 | irq = s->irq.AssignedIRQ; |
| 763 | } else { | 761 | |
| 762 | #ifdef CONFIG_PCMCIA_PROBE | ||
| 763 | if (!irq) { | ||
| 764 | int try; | 764 | int try; |
| 765 | u32 mask = s->irq_mask; | 765 | u32 mask = s->irq_mask; |
| 766 | void *data = p_dev; /* something unique to this device */ | 766 | void *data = p_dev; /* something unique to this device */ |
diff --git a/drivers/pcmcia/rsrc_nonstatic.c b/drivers/pcmcia/rsrc_nonstatic.c index 559069a80a3b..a6eb7b59ba9f 100644 --- a/drivers/pcmcia/rsrc_nonstatic.c +++ b/drivers/pcmcia/rsrc_nonstatic.c | |||
| @@ -214,7 +214,7 @@ static void do_io_probe(struct pcmcia_socket *s, unsigned int base, | |||
| 214 | return; | 214 | return; |
| 215 | } | 215 | } |
| 216 | for (i = base, most = 0; i < base+num; i += 8) { | 216 | for (i = base, most = 0; i < base+num; i += 8) { |
| 217 | res = claim_region(NULL, i, 8, IORESOURCE_IO, "PCMCIA ioprobe"); | 217 | res = claim_region(s, i, 8, IORESOURCE_IO, "PCMCIA ioprobe"); |
| 218 | if (!res) | 218 | if (!res) |
| 219 | continue; | 219 | continue; |
| 220 | hole = inb(i); | 220 | hole = inb(i); |
| @@ -231,9 +231,14 @@ static void do_io_probe(struct pcmcia_socket *s, unsigned int base, | |||
| 231 | 231 | ||
| 232 | bad = any = 0; | 232 | bad = any = 0; |
| 233 | for (i = base; i < base+num; i += 8) { | 233 | for (i = base; i < base+num; i += 8) { |
| 234 | res = claim_region(NULL, i, 8, IORESOURCE_IO, "PCMCIA ioprobe"); | 234 | res = claim_region(s, i, 8, IORESOURCE_IO, "PCMCIA ioprobe"); |
| 235 | if (!res) | 235 | if (!res) { |
| 236 | if (!any) | ||
| 237 | printk(" excluding"); | ||
| 238 | if (!bad) | ||
| 239 | bad = any = i; | ||
| 236 | continue; | 240 | continue; |
| 241 | } | ||
| 237 | for (j = 0; j < 8; j++) | 242 | for (j = 0; j < 8; j++) |
| 238 | if (inb(i+j) != most) | 243 | if (inb(i+j) != most) |
| 239 | break; | 244 | break; |
| @@ -253,6 +258,7 @@ static void do_io_probe(struct pcmcia_socket *s, unsigned int base, | |||
| 253 | } | 258 | } |
| 254 | if (bad) { | 259 | if (bad) { |
| 255 | if ((num > 16) && (bad == base) && (i == base+num)) { | 260 | if ((num > 16) && (bad == base) && (i == base+num)) { |
| 261 | sub_interval(&s_data->io_db, bad, i-bad); | ||
| 256 | printk(" nothing: probe failed.\n"); | 262 | printk(" nothing: probe failed.\n"); |
| 257 | return; | 263 | return; |
| 258 | } else { | 264 | } else { |
| @@ -804,7 +810,7 @@ static int adjust_memory(struct pcmcia_socket *s, unsigned int action, unsigned | |||
| 804 | static int adjust_io(struct pcmcia_socket *s, unsigned int action, unsigned long start, unsigned long end) | 810 | static int adjust_io(struct pcmcia_socket *s, unsigned int action, unsigned long start, unsigned long end) |
| 805 | { | 811 | { |
| 806 | struct socket_data *data = s->resource_data; | 812 | struct socket_data *data = s->resource_data; |
| 807 | unsigned long size = end - start + 1; | 813 | unsigned long size; |
| 808 | int ret = 0; | 814 | int ret = 0; |
| 809 | 815 | ||
| 810 | #if defined(CONFIG_X86) | 816 | #if defined(CONFIG_X86) |
| @@ -814,6 +820,8 @@ static int adjust_io(struct pcmcia_socket *s, unsigned int action, unsigned long | |||
| 814 | start = 0x100; | 820 | start = 0x100; |
| 815 | #endif | 821 | #endif |
| 816 | 822 | ||
| 823 | size = end - start + 1; | ||
| 824 | |||
| 817 | if (end < start) | 825 | if (end < start) |
| 818 | return -EINVAL; | 826 | return -EINVAL; |
| 819 | 827 | ||
diff --git a/drivers/serial/serial_cs.c b/drivers/serial/serial_cs.c index 175d202ab37e..8cfa5b12ea7a 100644 --- a/drivers/serial/serial_cs.c +++ b/drivers/serial/serial_cs.c | |||
| @@ -105,6 +105,10 @@ struct serial_cfg_mem { | |||
| 105 | * manfid 0x0160, 0x0104 | 105 | * manfid 0x0160, 0x0104 |
| 106 | * This card appears to have a 14.7456MHz clock. | 106 | * This card appears to have a 14.7456MHz clock. |
| 107 | */ | 107 | */ |
| 108 | /* Generic Modem: MD55x (GPRS/EDGE) have | ||
| 109 | * Elan VPU16551 UART with 14.7456MHz oscillator | ||
| 110 | * manfid 0x015D, 0x4C45 | ||
| 111 | */ | ||
| 108 | static void quirk_setup_brainboxes_0104(struct pcmcia_device *link, struct uart_port *port) | 112 | static void quirk_setup_brainboxes_0104(struct pcmcia_device *link, struct uart_port *port) |
| 109 | { | 113 | { |
| 110 | port->uartclk = 14745600; | 114 | port->uartclk = 14745600; |
| @@ -196,6 +200,11 @@ static const struct serial_quirk quirks[] = { | |||
| 196 | .multi = -1, | 200 | .multi = -1, |
| 197 | .setup = quirk_setup_brainboxes_0104, | 201 | .setup = quirk_setup_brainboxes_0104, |
| 198 | }, { | 202 | }, { |
| 203 | .manfid = 0x015D, | ||
| 204 | .prodid = 0x4C45, | ||
| 205 | .multi = -1, | ||
| 206 | .setup = quirk_setup_brainboxes_0104, | ||
| 207 | }, { | ||
| 199 | .manfid = MANFID_IBM, | 208 | .manfid = MANFID_IBM, |
| 200 | .prodid = ~0, | 209 | .prodid = ~0, |
| 201 | .multi = -1, | 210 | .multi = -1, |
diff --git a/fs/afs/mntpt.c b/fs/afs/mntpt.c index 5e813a816ce4..b3feddc4f7d6 100644 --- a/fs/afs/mntpt.c +++ b/fs/afs/mntpt.c | |||
| @@ -138,9 +138,9 @@ static struct vfsmount *afs_mntpt_do_automount(struct dentry *mntpt) | |||
| 138 | { | 138 | { |
| 139 | struct afs_super_info *super; | 139 | struct afs_super_info *super; |
| 140 | struct vfsmount *mnt; | 140 | struct vfsmount *mnt; |
| 141 | struct page *page = NULL; | 141 | struct page *page; |
| 142 | size_t size; | 142 | size_t size; |
| 143 | char *buf, *devname = NULL, *options = NULL; | 143 | char *buf, *devname, *options; |
| 144 | int ret; | 144 | int ret; |
| 145 | 145 | ||
| 146 | _enter("{%s}", mntpt->d_name.name); | 146 | _enter("{%s}", mntpt->d_name.name); |
| @@ -150,22 +150,22 @@ static struct vfsmount *afs_mntpt_do_automount(struct dentry *mntpt) | |||
| 150 | ret = -EINVAL; | 150 | ret = -EINVAL; |
| 151 | size = mntpt->d_inode->i_size; | 151 | size = mntpt->d_inode->i_size; |
| 152 | if (size > PAGE_SIZE - 1) | 152 | if (size > PAGE_SIZE - 1) |
| 153 | goto error; | 153 | goto error_no_devname; |
| 154 | 154 | ||
| 155 | ret = -ENOMEM; | 155 | ret = -ENOMEM; |
| 156 | devname = (char *) get_zeroed_page(GFP_KERNEL); | 156 | devname = (char *) get_zeroed_page(GFP_KERNEL); |
| 157 | if (!devname) | 157 | if (!devname) |
| 158 | goto error; | 158 | goto error_no_devname; |
| 159 | 159 | ||
| 160 | options = (char *) get_zeroed_page(GFP_KERNEL); | 160 | options = (char *) get_zeroed_page(GFP_KERNEL); |
| 161 | if (!options) | 161 | if (!options) |
| 162 | goto error; | 162 | goto error_no_options; |
| 163 | 163 | ||
| 164 | /* read the contents of the AFS special symlink */ | 164 | /* read the contents of the AFS special symlink */ |
| 165 | page = read_mapping_page(mntpt->d_inode->i_mapping, 0, NULL); | 165 | page = read_mapping_page(mntpt->d_inode->i_mapping, 0, NULL); |
| 166 | if (IS_ERR(page)) { | 166 | if (IS_ERR(page)) { |
| 167 | ret = PTR_ERR(page); | 167 | ret = PTR_ERR(page); |
| 168 | goto error; | 168 | goto error_no_page; |
| 169 | } | 169 | } |
| 170 | 170 | ||
| 171 | ret = -EIO; | 171 | ret = -EIO; |
| @@ -196,12 +196,12 @@ static struct vfsmount *afs_mntpt_do_automount(struct dentry *mntpt) | |||
| 196 | return mnt; | 196 | return mnt; |
| 197 | 197 | ||
| 198 | error: | 198 | error: |
| 199 | if (page) | 199 | page_cache_release(page); |
| 200 | page_cache_release(page); | 200 | error_no_page: |
| 201 | if (devname) | 201 | free_page((unsigned long) options); |
| 202 | free_page((unsigned long) devname); | 202 | error_no_options: |
| 203 | if (options) | 203 | free_page((unsigned long) devname); |
| 204 | free_page((unsigned long) options); | 204 | error_no_devname: |
| 205 | _leave(" = %d", ret); | 205 | _leave(" = %d", ret); |
| 206 | return ERR_PTR(ret); | 206 | return ERR_PTR(ret); |
| 207 | } | 207 | } |
diff --git a/fs/quota/Kconfig b/fs/quota/Kconfig index dad7fb247ddc..3e21b1e2ad3a 100644 --- a/fs/quota/Kconfig +++ b/fs/quota/Kconfig | |||
| @@ -33,6 +33,14 @@ config PRINT_QUOTA_WARNING | |||
| 33 | Note that this behavior is currently deprecated and may go away in | 33 | Note that this behavior is currently deprecated and may go away in |
| 34 | future. Please use notification via netlink socket instead. | 34 | future. Please use notification via netlink socket instead. |
| 35 | 35 | ||
| 36 | config QUOTA_DEBUG | ||
| 37 | bool "Additional quota sanity checks" | ||
| 38 | depends on QUOTA | ||
| 39 | default n | ||
| 40 | help | ||
| 41 | If you say Y here, quota subsystem will perform some additional | ||
| 42 | sanity checks of quota internal structures. If unsure, say N. | ||
| 43 | |||
| 36 | # Generic support for tree structured quota files. Selected when needed. | 44 | # Generic support for tree structured quota files. Selected when needed. |
| 37 | config QUOTA_TREE | 45 | config QUOTA_TREE |
| 38 | tristate | 46 | tristate |
diff --git a/fs/quota/dquot.c b/fs/quota/dquot.c index a0a9405b202a..788b5802a7ce 100644 --- a/fs/quota/dquot.c +++ b/fs/quota/dquot.c | |||
| @@ -80,8 +80,6 @@ | |||
| 80 | 80 | ||
| 81 | #include <asm/uaccess.h> | 81 | #include <asm/uaccess.h> |
| 82 | 82 | ||
| 83 | #define __DQUOT_PARANOIA | ||
| 84 | |||
| 85 | /* | 83 | /* |
| 86 | * There are three quota SMP locks. dq_list_lock protects all lists with quotas | 84 | * There are three quota SMP locks. dq_list_lock protects all lists with quotas |
| 87 | * and quota formats, dqstats structure containing statistics about the lists | 85 | * and quota formats, dqstats structure containing statistics about the lists |
| @@ -695,7 +693,7 @@ void dqput(struct dquot *dquot) | |||
| 695 | 693 | ||
| 696 | if (!dquot) | 694 | if (!dquot) |
| 697 | return; | 695 | return; |
| 698 | #ifdef __DQUOT_PARANOIA | 696 | #ifdef CONFIG_QUOTA_DEBUG |
| 699 | if (!atomic_read(&dquot->dq_count)) { | 697 | if (!atomic_read(&dquot->dq_count)) { |
| 700 | printk("VFS: dqput: trying to free free dquot\n"); | 698 | printk("VFS: dqput: trying to free free dquot\n"); |
| 701 | printk("VFS: device %s, dquot of %s %d\n", | 699 | printk("VFS: device %s, dquot of %s %d\n", |
| @@ -748,7 +746,7 @@ we_slept: | |||
| 748 | goto we_slept; | 746 | goto we_slept; |
| 749 | } | 747 | } |
| 750 | atomic_dec(&dquot->dq_count); | 748 | atomic_dec(&dquot->dq_count); |
| 751 | #ifdef __DQUOT_PARANOIA | 749 | #ifdef CONFIG_QUOTA_DEBUG |
| 752 | /* sanity check */ | 750 | /* sanity check */ |
| 753 | BUG_ON(!list_empty(&dquot->dq_free)); | 751 | BUG_ON(!list_empty(&dquot->dq_free)); |
| 754 | #endif | 752 | #endif |
| @@ -845,7 +843,7 @@ we_slept: | |||
| 845 | dquot = NULL; | 843 | dquot = NULL; |
| 846 | goto out; | 844 | goto out; |
| 847 | } | 845 | } |
| 848 | #ifdef __DQUOT_PARANOIA | 846 | #ifdef CONFIG_QUOTA_DEBUG |
| 849 | BUG_ON(!dquot->dq_sb); /* Has somebody invalidated entry under us? */ | 847 | BUG_ON(!dquot->dq_sb); /* Has somebody invalidated entry under us? */ |
| 850 | #endif | 848 | #endif |
| 851 | out: | 849 | out: |
| @@ -874,7 +872,7 @@ static int dqinit_needed(struct inode *inode, int type) | |||
| 874 | static void add_dquot_ref(struct super_block *sb, int type) | 872 | static void add_dquot_ref(struct super_block *sb, int type) |
| 875 | { | 873 | { |
| 876 | struct inode *inode, *old_inode = NULL; | 874 | struct inode *inode, *old_inode = NULL; |
| 877 | #ifdef __DQUOT_PARANOIA | 875 | #ifdef CONFIG_QUOTA_DEBUG |
| 878 | int reserved = 0; | 876 | int reserved = 0; |
| 879 | #endif | 877 | #endif |
| 880 | 878 | ||
| @@ -882,7 +880,7 @@ static void add_dquot_ref(struct super_block *sb, int type) | |||
| 882 | list_for_each_entry(inode, &sb->s_inodes, i_sb_list) { | 880 | list_for_each_entry(inode, &sb->s_inodes, i_sb_list) { |
| 883 | if (inode->i_state & (I_FREEING|I_CLEAR|I_WILL_FREE|I_NEW)) | 881 | if (inode->i_state & (I_FREEING|I_CLEAR|I_WILL_FREE|I_NEW)) |
| 884 | continue; | 882 | continue; |
| 885 | #ifdef __DQUOT_PARANOIA | 883 | #ifdef CONFIG_QUOTA_DEBUG |
| 886 | if (unlikely(inode_get_rsv_space(inode) > 0)) | 884 | if (unlikely(inode_get_rsv_space(inode) > 0)) |
| 887 | reserved = 1; | 885 | reserved = 1; |
| 888 | #endif | 886 | #endif |
| @@ -907,7 +905,7 @@ static void add_dquot_ref(struct super_block *sb, int type) | |||
| 907 | spin_unlock(&inode_lock); | 905 | spin_unlock(&inode_lock); |
| 908 | iput(old_inode); | 906 | iput(old_inode); |
| 909 | 907 | ||
| 910 | #ifdef __DQUOT_PARANOIA | 908 | #ifdef CONFIG_QUOTA_DEBUG |
| 911 | if (reserved) { | 909 | if (reserved) { |
| 912 | printk(KERN_WARNING "VFS (%s): Writes happened before quota" | 910 | printk(KERN_WARNING "VFS (%s): Writes happened before quota" |
| 913 | " was turned on thus quota information is probably " | 911 | " was turned on thus quota information is probably " |
| @@ -940,7 +938,7 @@ static int remove_inode_dquot_ref(struct inode *inode, int type, | |||
| 940 | inode->i_dquot[type] = NULL; | 938 | inode->i_dquot[type] = NULL; |
| 941 | if (dquot) { | 939 | if (dquot) { |
| 942 | if (dqput_blocks(dquot)) { | 940 | if (dqput_blocks(dquot)) { |
| 943 | #ifdef __DQUOT_PARANOIA | 941 | #ifdef CONFIG_QUOTA_DEBUG |
| 944 | if (atomic_read(&dquot->dq_count) != 1) | 942 | if (atomic_read(&dquot->dq_count) != 1) |
| 945 | printk(KERN_WARNING "VFS: Adding dquot with dq_count %d to dispose list.\n", atomic_read(&dquot->dq_count)); | 943 | printk(KERN_WARNING "VFS: Adding dquot with dq_count %d to dispose list.\n", atomic_read(&dquot->dq_count)); |
| 946 | #endif | 944 | #endif |
