diff options
-rw-r--r-- | arch/arm/Kconfig | 70 | ||||
-rw-r--r-- | arch/arm/Makefile | 4 | ||||
-rw-r--r-- | arch/arm/boot/compressed/head.S | 8 | ||||
-rw-r--r-- | arch/arm/boot/compressed/misc.c | 13 | ||||
-rw-r--r-- | arch/arm/include/asm/cacheflush.h | 20 | ||||
-rw-r--r-- | arch/arm/kernel/debug.S | 20 | ||||
-rw-r--r-- | arch/arm/kernel/elf.c | 9 | ||||
-rw-r--r-- | arch/arm/mach-gemini/include/mach/uncompress.h | 4 | ||||
-rw-r--r-- | arch/arm/mm/mmu.c | 2 | ||||
-rw-r--r-- | arch/arm/mm/proc-v6.S | 2 | ||||
-rw-r--r-- | arch/arm/mm/proc-v7.S | 11 | ||||
-rw-r--r-- | arch/arm/plat-mxc/include/mach/uncompress.h | 4 | ||||
-rw-r--r-- | arch/sh/boards/mach-se/7724/setup.c | 2 | ||||
-rw-r--r-- | arch/sh/include/asm/unistd_32.h | 5 | ||||
-rw-r--r-- | arch/sh/include/asm/unistd_64.h | 3 | ||||
-rw-r--r-- | arch/sh/kernel/syscalls_32.S | 1 | ||||
-rw-r--r-- | arch/sh/kernel/syscalls_64.S | 1 | ||||
-rw-r--r-- | fs/btrfs/acl.c | 12 | ||||
-rw-r--r-- | fs/btrfs/extent-tree.c | 32 | ||||
-rw-r--r-- | fs/btrfs/file.c | 100 | ||||
-rw-r--r-- | fs/btrfs/inode.c | 12 | ||||
-rw-r--r-- | fs/btrfs/ordered-data.c | 2 | ||||
-rw-r--r-- | fs/btrfs/relocation.c | 4 | ||||
-rw-r--r-- | fs/btrfs/volumes.c | 4 | ||||
-rw-r--r-- | mm/vmalloc.c | 4 |
25 files changed, 243 insertions, 106 deletions
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index c2238cd474c7..4c33ca82f9b1 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig | |||
@@ -729,14 +729,26 @@ config ARCH_U8500 | |||
729 | 729 | ||
730 | endchoice | 730 | endchoice |
731 | 731 | ||
732 | source "arch/arm/mach-aaec2000/Kconfig" | ||
733 | |||
734 | source "arch/arm/mach-at91/Kconfig" | ||
735 | |||
736 | source "arch/arm/mach-bcmring/Kconfig" | ||
737 | |||
732 | source "arch/arm/mach-clps711x/Kconfig" | 738 | source "arch/arm/mach-clps711x/Kconfig" |
733 | 739 | ||
740 | source "arch/arm/mach-davinci/Kconfig" | ||
741 | |||
742 | source "arch/arm/mach-dove/Kconfig" | ||
743 | |||
734 | source "arch/arm/mach-ep93xx/Kconfig" | 744 | source "arch/arm/mach-ep93xx/Kconfig" |
735 | 745 | ||
736 | source "arch/arm/mach-footbridge/Kconfig" | 746 | source "arch/arm/mach-footbridge/Kconfig" |
737 | 747 | ||
738 | source "arch/arm/mach-gemini/Kconfig" | 748 | source "arch/arm/mach-gemini/Kconfig" |
739 | 749 | ||
750 | source "arch/arm/mach-h720x/Kconfig" | ||
751 | |||
740 | source "arch/arm/mach-integrator/Kconfig" | 752 | source "arch/arm/mach-integrator/Kconfig" |
741 | 753 | ||
742 | source "arch/arm/mach-iop32x/Kconfig" | 754 | source "arch/arm/mach-iop32x/Kconfig" |
@@ -751,16 +763,26 @@ source "arch/arm/mach-ixp2000/Kconfig" | |||
751 | 763 | ||
752 | source "arch/arm/mach-ixp23xx/Kconfig" | 764 | source "arch/arm/mach-ixp23xx/Kconfig" |
753 | 765 | ||
766 | source "arch/arm/mach-kirkwood/Kconfig" | ||
767 | |||
768 | source "arch/arm/mach-ks8695/Kconfig" | ||
769 | |||
770 | source "arch/arm/mach-lh7a40x/Kconfig" | ||
771 | |||
754 | source "arch/arm/mach-loki/Kconfig" | 772 | source "arch/arm/mach-loki/Kconfig" |
755 | 773 | ||
774 | source "arch/arm/mach-msm/Kconfig" | ||
775 | |||
756 | source "arch/arm/mach-mv78xx0/Kconfig" | 776 | source "arch/arm/mach-mv78xx0/Kconfig" |
757 | 777 | ||
758 | source "arch/arm/mach-pxa/Kconfig" | 778 | source "arch/arm/plat-mxc/Kconfig" |
759 | source "arch/arm/plat-pxa/Kconfig" | ||
760 | 779 | ||
761 | source "arch/arm/mach-mmp/Kconfig" | 780 | source "arch/arm/mach-netx/Kconfig" |
762 | 781 | ||
763 | source "arch/arm/mach-sa1100/Kconfig" | 782 | source "arch/arm/mach-nomadik/Kconfig" |
783 | source "arch/arm/plat-nomadik/Kconfig" | ||
784 | |||
785 | source "arch/arm/mach-ns9xxx/Kconfig" | ||
764 | 786 | ||
765 | source "arch/arm/plat-omap/Kconfig" | 787 | source "arch/arm/plat-omap/Kconfig" |
766 | 788 | ||
@@ -770,9 +792,14 @@ source "arch/arm/mach-omap2/Kconfig" | |||
770 | 792 | ||
771 | source "arch/arm/mach-orion5x/Kconfig" | 793 | source "arch/arm/mach-orion5x/Kconfig" |
772 | 794 | ||
773 | source "arch/arm/mach-kirkwood/Kconfig" | 795 | source "arch/arm/mach-pxa/Kconfig" |
796 | source "arch/arm/plat-pxa/Kconfig" | ||
774 | 797 | ||
775 | source "arch/arm/mach-dove/Kconfig" | 798 | source "arch/arm/mach-mmp/Kconfig" |
799 | |||
800 | source "arch/arm/mach-realview/Kconfig" | ||
801 | |||
802 | source "arch/arm/mach-sa1100/Kconfig" | ||
776 | 803 | ||
777 | source "arch/arm/plat-samsung/Kconfig" | 804 | source "arch/arm/plat-samsung/Kconfig" |
778 | source "arch/arm/plat-s3c24xx/Kconfig" | 805 | source "arch/arm/plat-s3c24xx/Kconfig" |
@@ -800,41 +827,14 @@ if ARCH_S5PC1XX | |||
800 | source "arch/arm/mach-s5pc100/Kconfig" | 827 | source "arch/arm/mach-s5pc100/Kconfig" |
801 | endif | 828 | endif |
802 | 829 | ||
803 | source "arch/arm/mach-lh7a40x/Kconfig" | 830 | source "arch/arm/mach-u300/Kconfig" |
804 | 831 | ||
805 | source "arch/arm/mach-h720x/Kconfig" | 832 | source "arch/arm/mach-ux500/Kconfig" |
806 | 833 | ||
807 | source "arch/arm/mach-versatile/Kconfig" | 834 | source "arch/arm/mach-versatile/Kconfig" |
808 | 835 | ||
809 | source "arch/arm/mach-aaec2000/Kconfig" | ||
810 | |||
811 | source "arch/arm/mach-realview/Kconfig" | ||
812 | |||
813 | source "arch/arm/mach-at91/Kconfig" | ||
814 | |||
815 | source "arch/arm/plat-mxc/Kconfig" | ||
816 | |||
817 | source "arch/arm/mach-nomadik/Kconfig" | ||
818 | source "arch/arm/plat-nomadik/Kconfig" | ||
819 | |||
820 | source "arch/arm/mach-netx/Kconfig" | ||
821 | |||
822 | source "arch/arm/mach-ns9xxx/Kconfig" | ||
823 | |||
824 | source "arch/arm/mach-davinci/Kconfig" | ||
825 | |||
826 | source "arch/arm/mach-ks8695/Kconfig" | ||
827 | |||
828 | source "arch/arm/mach-msm/Kconfig" | ||
829 | |||
830 | source "arch/arm/mach-u300/Kconfig" | ||
831 | |||
832 | source "arch/arm/mach-w90x900/Kconfig" | 836 | source "arch/arm/mach-w90x900/Kconfig" |
833 | 837 | ||
834 | source "arch/arm/mach-bcmring/Kconfig" | ||
835 | |||
836 | source "arch/arm/mach-ux500/Kconfig" | ||
837 | |||
838 | # Definitions to make life easier | 838 | # Definitions to make life easier |
839 | config ARCH_ACORN | 839 | config ARCH_ACORN |
840 | bool | 840 | bool |
diff --git a/arch/arm/Makefile b/arch/arm/Makefile index e9da08483b3c..9e7582572741 100644 --- a/arch/arm/Makefile +++ b/arch/arm/Makefile | |||
@@ -146,6 +146,7 @@ machine-$(CONFIG_ARCH_MX1) := mx1 | |||
146 | machine-$(CONFIG_ARCH_MX2) := mx2 | 146 | machine-$(CONFIG_ARCH_MX2) := mx2 |
147 | machine-$(CONFIG_ARCH_MX25) := mx25 | 147 | machine-$(CONFIG_ARCH_MX25) := mx25 |
148 | machine-$(CONFIG_ARCH_MX3) := mx3 | 148 | machine-$(CONFIG_ARCH_MX3) := mx3 |
149 | machine-$(CONFIG_ARCH_MXC91231) := mxc91231 | ||
149 | machine-$(CONFIG_ARCH_NETX) := netx | 150 | machine-$(CONFIG_ARCH_NETX) := netx |
150 | machine-$(CONFIG_ARCH_NOMADIK) := nomadik | 151 | machine-$(CONFIG_ARCH_NOMADIK) := nomadik |
151 | machine-$(CONFIG_ARCH_NS9XXX) := ns9xxx | 152 | machine-$(CONFIG_ARCH_NS9XXX) := ns9xxx |
@@ -171,12 +172,12 @@ machine-$(CONFIG_ARCH_U8500) := ux500 | |||
171 | machine-$(CONFIG_ARCH_VERSATILE) := versatile | 172 | machine-$(CONFIG_ARCH_VERSATILE) := versatile |
172 | machine-$(CONFIG_ARCH_W90X900) := w90x900 | 173 | machine-$(CONFIG_ARCH_W90X900) := w90x900 |
173 | machine-$(CONFIG_FOOTBRIDGE) := footbridge | 174 | machine-$(CONFIG_FOOTBRIDGE) := footbridge |
174 | machine-$(CONFIG_ARCH_MXC91231) := mxc91231 | ||
175 | 175 | ||
176 | # Platform directory name. This list is sorted alphanumerically | 176 | # Platform directory name. This list is sorted alphanumerically |
177 | # by CONFIG_* macro name. | 177 | # by CONFIG_* macro name. |
178 | plat-$(CONFIG_ARCH_MXC) := mxc | 178 | plat-$(CONFIG_ARCH_MXC) := mxc |
179 | plat-$(CONFIG_ARCH_OMAP) := omap | 179 | plat-$(CONFIG_ARCH_OMAP) := omap |
180 | plat-$(CONFIG_ARCH_STMP3XXX) := stmp3xxx | ||
180 | plat-$(CONFIG_PLAT_IOP) := iop | 181 | plat-$(CONFIG_PLAT_IOP) := iop |
181 | plat-$(CONFIG_PLAT_NOMADIK) := nomadik | 182 | plat-$(CONFIG_PLAT_NOMADIK) := nomadik |
182 | plat-$(CONFIG_PLAT_ORION) := orion | 183 | plat-$(CONFIG_PLAT_ORION) := orion |
@@ -184,7 +185,6 @@ plat-$(CONFIG_PLAT_PXA) := pxa | |||
184 | plat-$(CONFIG_PLAT_S3C24XX) := s3c24xx s3c samsung | 185 | plat-$(CONFIG_PLAT_S3C24XX) := s3c24xx s3c samsung |
185 | plat-$(CONFIG_PLAT_S3C64XX) := s3c64xx s3c samsung | 186 | plat-$(CONFIG_PLAT_S3C64XX) := s3c64xx s3c samsung |
186 | plat-$(CONFIG_PLAT_S5PC1XX) := s5pc1xx s3c samsung | 187 | plat-$(CONFIG_PLAT_S5PC1XX) := s5pc1xx s3c samsung |
187 | plat-$(CONFIG_ARCH_STMP3XXX) := stmp3xxx | ||
188 | 188 | ||
189 | ifeq ($(CONFIG_ARCH_EBSA110),y) | 189 | ifeq ($(CONFIG_ARCH_EBSA110),y) |
190 | # This is what happens if you forget the IOCS16 line. | 190 | # This is what happens if you forget the IOCS16 line. |
diff --git a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S index d356af7cef82..4fddc509e78e 100644 --- a/arch/arm/boot/compressed/head.S +++ b/arch/arm/boot/compressed/head.S | |||
@@ -27,6 +27,14 @@ | |||
27 | .macro writeb, ch, rb | 27 | .macro writeb, ch, rb |
28 | mcr p14, 0, \ch, c0, c5, 0 | 28 | mcr p14, 0, \ch, c0, c5, 0 |
29 | .endm | 29 | .endm |
30 | #elif defined(CONFIG_CPU_V7) | ||
31 | .macro loadsp, rb | ||
32 | .endm | ||
33 | .macro writeb, ch, rb | ||
34 | wait: mrc p14, 0, pc, c0, c1, 0 | ||
35 | bcs wait | ||
36 | mcr p14, 0, \ch, c0, c5, 0 | ||
37 | .endm | ||
30 | #elif defined(CONFIG_CPU_XSCALE) | 38 | #elif defined(CONFIG_CPU_XSCALE) |
31 | .macro loadsp, rb | 39 | .macro loadsp, rb |
32 | .endm | 40 | .endm |
diff --git a/arch/arm/boot/compressed/misc.c b/arch/arm/boot/compressed/misc.c index 7e0fe4d42c7b..56a0d116d271 100644 --- a/arch/arm/boot/compressed/misc.c +++ b/arch/arm/boot/compressed/misc.c | |||
@@ -53,6 +53,18 @@ static void icedcc_putc(int ch) | |||
53 | 53 | ||
54 | asm("mcr p14, 0, %0, c0, c5, 0" : : "r" (ch)); | 54 | asm("mcr p14, 0, %0, c0, c5, 0" : : "r" (ch)); |
55 | } | 55 | } |
56 | |||
57 | #elif defined(CONFIG_CPU_V7) | ||
58 | |||
59 | static void icedcc_putc(int ch) | ||
60 | { | ||
61 | asm( | ||
62 | "wait: mrc p14, 0, pc, c0, c1, 0 \n\ | ||
63 | bcs wait \n\ | ||
64 | mcr p14, 0, %0, c0, c5, 0 " | ||
65 | : : "r" (ch)); | ||
66 | } | ||
67 | |||
56 | #elif defined(CONFIG_CPU_XSCALE) | 68 | #elif defined(CONFIG_CPU_XSCALE) |
57 | 69 | ||
58 | static void icedcc_putc(int ch) | 70 | static void icedcc_putc(int ch) |
@@ -88,7 +100,6 @@ static void icedcc_putc(int ch) | |||
88 | #endif | 100 | #endif |
89 | 101 | ||
90 | #define putc(ch) icedcc_putc(ch) | 102 | #define putc(ch) icedcc_putc(ch) |
91 | #define flush() do { } while (0) | ||
92 | #endif | 103 | #endif |
93 | 104 | ||
94 | static void putstr(const char *ptr) | 105 | static void putstr(const char *ptr) |
diff --git a/arch/arm/include/asm/cacheflush.h b/arch/arm/include/asm/cacheflush.h index 730aefcfbee3..c77d2fa1f6e5 100644 --- a/arch/arm/include/asm/cacheflush.h +++ b/arch/arm/include/asm/cacheflush.h | |||
@@ -154,16 +154,16 @@ | |||
154 | * Please note that the implementation of these, and the required | 154 | * Please note that the implementation of these, and the required |
155 | * effects are cache-type (VIVT/VIPT/PIPT) specific. | 155 | * effects are cache-type (VIVT/VIPT/PIPT) specific. |
156 | * | 156 | * |
157 | * flush_cache_kern_all() | 157 | * flush_kern_all() |
158 | * | 158 | * |
159 | * Unconditionally clean and invalidate the entire cache. | 159 | * Unconditionally clean and invalidate the entire cache. |
160 | * | 160 | * |
161 | * flush_cache_user_mm(mm) | 161 | * flush_user_all() |
162 | * | 162 | * |
163 | * Clean and invalidate all user space cache entries | 163 | * Clean and invalidate all user space cache entries |
164 | * before a change of page tables. | 164 | * before a change of page tables. |
165 | * | 165 | * |
166 | * flush_cache_user_range(start, end, flags) | 166 | * flush_user_range(start, end, flags) |
167 | * | 167 | * |
168 | * Clean and invalidate a range of cache entries in the | 168 | * Clean and invalidate a range of cache entries in the |
169 | * specified address space before a change of page tables. | 169 | * specified address space before a change of page tables. |
@@ -179,6 +179,20 @@ | |||
179 | * - start - virtual start address | 179 | * - start - virtual start address |
180 | * - end - virtual end address | 180 | * - end - virtual end address |
181 | * | 181 | * |
182 | * coherent_user_range(start, end) | ||
183 | * | ||
184 | * Ensure coherency between the Icache and the Dcache in the | ||
185 | * region described by start, end. If you have non-snooping | ||
186 | * Harvard caches, you need to implement this function. | ||
187 | * - start - virtual start address | ||
188 | * - end - virtual end address | ||
189 | * | ||
190 | * flush_kern_dcache_area(kaddr, size) | ||
191 | * | ||
192 | * Ensure that the data held in page is written back. | ||
193 | * - kaddr - page address | ||
194 | * - size - region size | ||
195 | * | ||
182 | * DMA Cache Coherency | 196 | * DMA Cache Coherency |
183 | * =================== | 197 | * =================== |
184 | * | 198 | * |
diff --git a/arch/arm/kernel/debug.S b/arch/arm/kernel/debug.S index b121b6053cce..5c91addcaebc 100644 --- a/arch/arm/kernel/debug.S +++ b/arch/arm/kernel/debug.S | |||
@@ -49,6 +49,26 @@ | |||
49 | 1002: | 49 | 1002: |
50 | .endm | 50 | .endm |
51 | 51 | ||
52 | #elif defined(CONFIG_CPU_V7) | ||
53 | |||
54 | .macro addruart, rx | ||
55 | .endm | ||
56 | |||
57 | .macro senduart, rd, rx | ||
58 | mcr p14, 0, \rd, c0, c5, 0 | ||
59 | .endm | ||
60 | |||
61 | .macro busyuart, rd, rx | ||
62 | busy: mrc p14, 0, pc, c0, c1, 0 | ||
63 | bcs busy | ||
64 | .endm | ||
65 | |||
66 | .macro waituart, rd, rx | ||
67 | wait: mrc p14, 0, pc, c0, c1, 0 | ||
68 | bcs wait | ||
69 | |||
70 | .endm | ||
71 | |||
52 | #elif defined(CONFIG_CPU_XSCALE) | 72 | #elif defined(CONFIG_CPU_XSCALE) |
53 | 73 | ||
54 | .macro addruart, rx | 74 | .macro addruart, rx |
diff --git a/arch/arm/kernel/elf.c b/arch/arm/kernel/elf.c index 950391f194c4..d4a0da1e48f4 100644 --- a/arch/arm/kernel/elf.c +++ b/arch/arm/kernel/elf.c | |||
@@ -78,15 +78,6 @@ int arm_elf_read_implies_exec(const struct elf32_hdr *x, int executable_stack) | |||
78 | return 1; | 78 | return 1; |
79 | if (cpu_architecture() < CPU_ARCH_ARMv6) | 79 | if (cpu_architecture() < CPU_ARCH_ARMv6) |
80 | return 1; | 80 | return 1; |
81 | #if !defined(CONFIG_AEABI) || defined(CONFIG_OABI_COMPAT) | ||
82 | /* | ||
83 | * If we have support for OABI programs, we can never allow NX | ||
84 | * support - our signal syscall restart mechanism relies upon | ||
85 | * being able to execute code placed on the user stack. | ||
86 | */ | ||
87 | return 1; | ||
88 | #else | ||
89 | return 0; | 81 | return 0; |
90 | #endif | ||
91 | } | 82 | } |
92 | EXPORT_SYMBOL(arm_elf_read_implies_exec); | 83 | EXPORT_SYMBOL(arm_elf_read_implies_exec); |
diff --git a/arch/arm/mach-gemini/include/mach/uncompress.h b/arch/arm/mach-gemini/include/mach/uncompress.h index 59c5df7e716c..5483f61a8061 100644 --- a/arch/arm/mach-gemini/include/mach/uncompress.h +++ b/arch/arm/mach-gemini/include/mach/uncompress.h | |||
@@ -30,7 +30,9 @@ static inline void putc(char c) | |||
30 | UART[UART_TX] = c; | 30 | UART[UART_TX] = c; |
31 | } | 31 | } |
32 | 32 | ||
33 | #define flush() do { } while (0) | 33 | static inline void flush(void) |
34 | { | ||
35 | } | ||
34 | 36 | ||
35 | /* | 37 | /* |
36 | * nothing to do | 38 | * nothing to do |
diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c index 1708da82da96..761ffede6a23 100644 --- a/arch/arm/mm/mmu.c +++ b/arch/arm/mm/mmu.c | |||
@@ -1067,4 +1067,6 @@ void setup_mm_for_reboot(char mode) | |||
1067 | pmd[1] = __pmd(pmdval + (1 << (PGDIR_SHIFT - 1))); | 1067 | pmd[1] = __pmd(pmdval + (1 << (PGDIR_SHIFT - 1))); |
1068 | flush_pmd_entry(pmd); | 1068 | flush_pmd_entry(pmd); |
1069 | } | 1069 | } |
1070 | |||
1071 | local_flush_tlb_all(); | ||
1070 | } | 1072 | } |
diff --git a/arch/arm/mm/proc-v6.S b/arch/arm/mm/proc-v6.S index 395cc90c6613..7a5337ed7d68 100644 --- a/arch/arm/mm/proc-v6.S +++ b/arch/arm/mm/proc-v6.S | |||
@@ -59,8 +59,6 @@ ENTRY(cpu_v6_proc_fin) | |||
59 | * to what would be the reset vector. | 59 | * to what would be the reset vector. |
60 | * | 60 | * |
61 | * - loc - location to jump to for soft reset | 61 | * - loc - location to jump to for soft reset |
62 | * | ||
63 | * It is assumed that: | ||
64 | */ | 62 | */ |
65 | .align 5 | 63 | .align 5 |
66 | ENTRY(cpu_v6_reset) | 64 | ENTRY(cpu_v6_reset) |
diff --git a/arch/arm/mm/proc-v7.S b/arch/arm/mm/proc-v7.S index 3a285218fd15..7aaf88a3b7aa 100644 --- a/arch/arm/mm/proc-v7.S +++ b/arch/arm/mm/proc-v7.S | |||
@@ -45,7 +45,14 @@ ENTRY(cpu_v7_proc_init) | |||
45 | ENDPROC(cpu_v7_proc_init) | 45 | ENDPROC(cpu_v7_proc_init) |
46 | 46 | ||
47 | ENTRY(cpu_v7_proc_fin) | 47 | ENTRY(cpu_v7_proc_fin) |
48 | mov pc, lr | 48 | stmfd sp!, {lr} |
49 | cpsid if @ disable interrupts | ||
50 | bl v7_flush_kern_cache_all | ||
51 | mrc p15, 0, r0, c1, c0, 0 @ ctrl register | ||
52 | bic r0, r0, #0x1000 @ ...i............ | ||
53 | bic r0, r0, #0x0006 @ .............ca. | ||
54 | mcr p15, 0, r0, c1, c0, 0 @ disable caches | ||
55 | ldmfd sp!, {pc} | ||
49 | ENDPROC(cpu_v7_proc_fin) | 56 | ENDPROC(cpu_v7_proc_fin) |
50 | 57 | ||
51 | /* | 58 | /* |
@@ -56,8 +63,6 @@ ENDPROC(cpu_v7_proc_fin) | |||
56 | * to what would be the reset vector. | 63 | * to what would be the reset vector. |
57 | * | 64 | * |
58 | * - loc - location to jump to for soft reset | 65 | * - loc - location to jump to for soft reset |
59 | * | ||
60 | * It is assumed that: | ||
61 | */ | 66 | */ |
62 | .align 5 | 67 | .align 5 |
63 | ENTRY(cpu_v7_reset) | 68 | ENTRY(cpu_v7_reset) |
diff --git a/arch/arm/plat-mxc/include/mach/uncompress.h b/arch/arm/plat-mxc/include/mach/uncompress.h index 4d5d395ad63b..d49384cb1e97 100644 --- a/arch/arm/plat-mxc/include/mach/uncompress.h +++ b/arch/arm/plat-mxc/include/mach/uncompress.h | |||
@@ -60,7 +60,9 @@ static void putc(int ch) | |||
60 | UART(TXR) = ch; | 60 | UART(TXR) = ch; |
61 | } | 61 | } |
62 | 62 | ||
63 | #define flush() do { } while (0) | 63 | static inline void flush(void) |
64 | { | ||
65 | } | ||
64 | 66 | ||
65 | #define MX1_UART1_BASE_ADDR 0x00206000 | 67 | #define MX1_UART1_BASE_ADDR 0x00206000 |
66 | #define MX25_UART1_BASE_ADDR 0x43f90000 | 68 | #define MX25_UART1_BASE_ADDR 0x43f90000 |
diff --git a/arch/sh/boards/mach-se/7724/setup.c b/arch/sh/boards/mach-se/7724/setup.c index 5d0f70b46c97..858ecb25d469 100644 --- a/arch/sh/boards/mach-se/7724/setup.c +++ b/arch/sh/boards/mach-se/7724/setup.c | |||
@@ -533,7 +533,7 @@ static int __init sh_eth_is_eeprom_ready(void) | |||
533 | while (t--) { | 533 | while (t--) { |
534 | if (!ctrl_inw(EEPROM_STAT)) | 534 | if (!ctrl_inw(EEPROM_STAT)) |
535 | return 1; | 535 | return 1; |
536 | cpu_relax(); | 536 | udelay(1); |
537 | } | 537 | } |
538 | 538 | ||
539 | printk(KERN_ERR "ms7724se can not access to eeprom\n"); | 539 | printk(KERN_ERR "ms7724se can not access to eeprom\n"); |
diff --git a/arch/sh/include/asm/unistd_32.h b/arch/sh/include/asm/unistd_32.h index f18c4f9baf27..365744b05269 100644 --- a/arch/sh/include/asm/unistd_32.h +++ b/arch/sh/include/asm/unistd_32.h | |||
@@ -345,12 +345,13 @@ | |||
345 | #define __NR_pwritev 334 | 345 | #define __NR_pwritev 334 |
346 | #define __NR_rt_tgsigqueueinfo 335 | 346 | #define __NR_rt_tgsigqueueinfo 335 |
347 | #define __NR_perf_event_open 336 | 347 | #define __NR_perf_event_open 336 |
348 | #define __NR_recvmmsg 337 | ||
349 | 348 | ||
350 | #define NR_syscalls 338 | 349 | #define NR_syscalls 337 |
351 | 350 | ||
352 | #ifdef __KERNEL__ | 351 | #ifdef __KERNEL__ |
353 | 352 | ||
353 | #define __IGNORE_recvmmsg | ||
354 | |||
354 | #define __ARCH_WANT_IPC_PARSE_VERSION | 355 | #define __ARCH_WANT_IPC_PARSE_VERSION |
355 | #define __ARCH_WANT_OLD_READDIR | 356 | #define __ARCH_WANT_OLD_READDIR |
356 | #define __ARCH_WANT_OLD_STAT | 357 | #define __ARCH_WANT_OLD_STAT |
diff --git a/arch/sh/include/asm/unistd_64.h b/arch/sh/include/asm/unistd_64.h index 3e7645d11130..25de158aac3a 100644 --- a/arch/sh/include/asm/unistd_64.h +++ b/arch/sh/include/asm/unistd_64.h | |||
@@ -386,10 +386,11 @@ | |||
386 | #define __NR_rt_tgsigqueueinfo 363 | 386 | #define __NR_rt_tgsigqueueinfo 363 |
387 | #define __NR_perf_event_open 364 | 387 | #define __NR_perf_event_open 364 |
388 | #define __NR_recvmmsg 365 | 388 | #define __NR_recvmmsg 365 |
389 | #define __NR_accept4 366 | ||
389 | 390 | ||
390 | #ifdef __KERNEL__ | 391 | #ifdef __KERNEL__ |
391 | 392 | ||
392 | #define NR_syscalls 366 | 393 | #define NR_syscalls 367 |
393 | 394 | ||
394 | #define __ARCH_WANT_IPC_PARSE_VERSION | 395 | #define __ARCH_WANT_IPC_PARSE_VERSION |
395 | #define __ARCH_WANT_OLD_READDIR | 396 | #define __ARCH_WANT_OLD_READDIR |
diff --git a/arch/sh/kernel/syscalls_32.S b/arch/sh/kernel/syscalls_32.S index 4bd5a1146956..19fd11dd9871 100644 --- a/arch/sh/kernel/syscalls_32.S +++ b/arch/sh/kernel/syscalls_32.S | |||
@@ -353,4 +353,3 @@ ENTRY(sys_call_table) | |||
353 | .long sys_pwritev | 353 | .long sys_pwritev |
354 | .long sys_rt_tgsigqueueinfo /* 335 */ | 354 | .long sys_rt_tgsigqueueinfo /* 335 */ |
355 | .long sys_perf_event_open | 355 | .long sys_perf_event_open |
356 | .long sys_recvmmsg | ||
diff --git a/arch/sh/kernel/syscalls_64.S b/arch/sh/kernel/syscalls_64.S index 07d2aaea9ae8..2048a20d7c80 100644 --- a/arch/sh/kernel/syscalls_64.S +++ b/arch/sh/kernel/syscalls_64.S | |||
@@ -392,3 +392,4 @@ sys_call_table: | |||
392 | .long sys_rt_tgsigqueueinfo | 392 | .long sys_rt_tgsigqueueinfo |
393 | .long sys_perf_event_open | 393 | .long sys_perf_event_open |
394 | .long sys_recvmmsg /* 365 */ | 394 | .long sys_recvmmsg /* 365 */ |
395 | .long sys_accept4 | ||
diff --git a/fs/btrfs/acl.c b/fs/btrfs/acl.c index 2e9e69987a82..54f4798ab46a 100644 --- a/fs/btrfs/acl.c +++ b/fs/btrfs/acl.c | |||
@@ -112,12 +112,14 @@ static int btrfs_set_acl(struct btrfs_trans_handle *trans, | |||
112 | switch (type) { | 112 | switch (type) { |
113 | case ACL_TYPE_ACCESS: | 113 | case ACL_TYPE_ACCESS: |
114 | mode = inode->i_mode; | 114 | mode = inode->i_mode; |
115 | ret = posix_acl_equiv_mode(acl, &mode); | ||
116 | if (ret < 0) | ||
117 | return ret; | ||
118 | ret = 0; | ||
119 | inode->i_mode = mode; | ||
120 | name = POSIX_ACL_XATTR_ACCESS; | 115 | name = POSIX_ACL_XATTR_ACCESS; |
116 | if (acl) { | ||
117 | ret = posix_acl_equiv_mode(acl, &mode); | ||
118 | if (ret < 0) | ||
119 | return ret; | ||
120 | inode->i_mode = mode; | ||
121 | } | ||
122 | ret = 0; | ||
121 | break; | 123 | break; |
122 | case ACL_TYPE_DEFAULT: | 124 | case ACL_TYPE_DEFAULT: |
123 | if (!S_ISDIR(inode->i_mode)) | 125 | if (!S_ISDIR(inode->i_mode)) |
diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c index 56e50137d0e6..432a2da4641e 100644 --- a/fs/btrfs/extent-tree.c +++ b/fs/btrfs/extent-tree.c | |||
@@ -83,6 +83,17 @@ static int block_group_bits(struct btrfs_block_group_cache *cache, u64 bits) | |||
83 | return (cache->flags & bits) == bits; | 83 | return (cache->flags & bits) == bits; |
84 | } | 84 | } |
85 | 85 | ||
86 | void btrfs_get_block_group(struct btrfs_block_group_cache *cache) | ||
87 | { | ||
88 | atomic_inc(&cache->count); | ||
89 | } | ||
90 | |||
91 | void btrfs_put_block_group(struct btrfs_block_group_cache *cache) | ||
92 | { | ||
93 | if (atomic_dec_and_test(&cache->count)) | ||
94 | kfree(cache); | ||
95 | } | ||
96 | |||
86 | /* | 97 | /* |
87 | * this adds the block group to the fs_info rb tree for the block group | 98 | * this adds the block group to the fs_info rb tree for the block group |
88 | * cache | 99 | * cache |
@@ -156,7 +167,7 @@ block_group_cache_tree_search(struct btrfs_fs_info *info, u64 bytenr, | |||
156 | } | 167 | } |
157 | } | 168 | } |
158 | if (ret) | 169 | if (ret) |
159 | atomic_inc(&ret->count); | 170 | btrfs_get_block_group(ret); |
160 | spin_unlock(&info->block_group_cache_lock); | 171 | spin_unlock(&info->block_group_cache_lock); |
161 | 172 | ||
162 | return ret; | 173 | return ret; |
@@ -407,6 +418,8 @@ err: | |||
407 | 418 | ||
408 | put_caching_control(caching_ctl); | 419 | put_caching_control(caching_ctl); |
409 | atomic_dec(&block_group->space_info->caching_threads); | 420 | atomic_dec(&block_group->space_info->caching_threads); |
421 | btrfs_put_block_group(block_group); | ||
422 | |||
410 | return 0; | 423 | return 0; |
411 | } | 424 | } |
412 | 425 | ||
@@ -447,6 +460,7 @@ static int cache_block_group(struct btrfs_block_group_cache *cache) | |||
447 | up_write(&fs_info->extent_commit_sem); | 460 | up_write(&fs_info->extent_commit_sem); |
448 | 461 | ||
449 | atomic_inc(&cache->space_info->caching_threads); | 462 | atomic_inc(&cache->space_info->caching_threads); |
463 | btrfs_get_block_group(cache); | ||
450 | 464 | ||
451 | tsk = kthread_run(caching_kthread, cache, "btrfs-cache-%llu\n", | 465 | tsk = kthread_run(caching_kthread, cache, "btrfs-cache-%llu\n", |
452 | cache->key.objectid); | 466 | cache->key.objectid); |
@@ -486,12 +500,6 @@ struct btrfs_block_group_cache *btrfs_lookup_block_group( | |||
486 | return cache; | 500 | return cache; |
487 | } | 501 | } |
488 | 502 | ||
489 | void btrfs_put_block_group(struct btrfs_block_group_cache *cache) | ||
490 | { | ||
491 | if (atomic_dec_and_test(&cache->count)) | ||
492 | kfree(cache); | ||
493 | } | ||
494 | |||
495 | static struct btrfs_space_info *__find_space_info(struct btrfs_fs_info *info, | 503 | static struct btrfs_space_info *__find_space_info(struct btrfs_fs_info *info, |
496 | u64 flags) | 504 | u64 flags) |
497 | { | 505 | { |
@@ -2582,7 +2590,7 @@ next_block_group(struct btrfs_root *root, | |||
2582 | if (node) { | 2590 | if (node) { |
2583 | cache = rb_entry(node, struct btrfs_block_group_cache, | 2591 | cache = rb_entry(node, struct btrfs_block_group_cache, |
2584 | cache_node); | 2592 | cache_node); |
2585 | atomic_inc(&cache->count); | 2593 | btrfs_get_block_group(cache); |
2586 | } else | 2594 | } else |
2587 | cache = NULL; | 2595 | cache = NULL; |
2588 | spin_unlock(&root->fs_info->block_group_cache_lock); | 2596 | spin_unlock(&root->fs_info->block_group_cache_lock); |
@@ -4227,7 +4235,7 @@ search: | |||
4227 | u64 offset; | 4235 | u64 offset; |
4228 | int cached; | 4236 | int cached; |
4229 | 4237 | ||
4230 | atomic_inc(&block_group->count); | 4238 | btrfs_get_block_group(block_group); |
4231 | search_start = block_group->key.objectid; | 4239 | search_start = block_group->key.objectid; |
4232 | 4240 | ||
4233 | have_block_group: | 4241 | have_block_group: |
@@ -4315,7 +4323,7 @@ have_block_group: | |||
4315 | 4323 | ||
4316 | btrfs_put_block_group(block_group); | 4324 | btrfs_put_block_group(block_group); |
4317 | block_group = last_ptr->block_group; | 4325 | block_group = last_ptr->block_group; |
4318 | atomic_inc(&block_group->count); | 4326 | btrfs_get_block_group(block_group); |
4319 | spin_unlock(&last_ptr->lock); | 4327 | spin_unlock(&last_ptr->lock); |
4320 | spin_unlock(&last_ptr->refill_lock); | 4328 | spin_unlock(&last_ptr->refill_lock); |
4321 | 4329 | ||
@@ -7395,9 +7403,7 @@ int btrfs_free_block_groups(struct btrfs_fs_info *info) | |||
7395 | wait_block_group_cache_done(block_group); | 7403 | wait_block_group_cache_done(block_group); |
7396 | 7404 | ||
7397 | btrfs_remove_free_space_cache(block_group); | 7405 | btrfs_remove_free_space_cache(block_group); |
7398 | 7406 | btrfs_put_block_group(block_group); | |
7399 | WARN_ON(atomic_read(&block_group->count) != 1); | ||
7400 | kfree(block_group); | ||
7401 | 7407 | ||
7402 | spin_lock(&info->block_group_cache_lock); | 7408 | spin_lock(&info->block_group_cache_lock); |
7403 | } | 7409 | } |
diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c index feaa13b105d9..c02033596f02 100644 --- a/fs/btrfs/file.c +++ b/fs/btrfs/file.c | |||
@@ -506,7 +506,8 @@ next_slot: | |||
506 | } | 506 | } |
507 | 507 | ||
508 | static int extent_mergeable(struct extent_buffer *leaf, int slot, | 508 | static int extent_mergeable(struct extent_buffer *leaf, int slot, |
509 | u64 objectid, u64 bytenr, u64 *start, u64 *end) | 509 | u64 objectid, u64 bytenr, u64 orig_offset, |
510 | u64 *start, u64 *end) | ||
510 | { | 511 | { |
511 | struct btrfs_file_extent_item *fi; | 512 | struct btrfs_file_extent_item *fi; |
512 | struct btrfs_key key; | 513 | struct btrfs_key key; |
@@ -522,6 +523,7 @@ static int extent_mergeable(struct extent_buffer *leaf, int slot, | |||
522 | fi = btrfs_item_ptr(leaf, slot, struct btrfs_file_extent_item); | 523 | fi = btrfs_item_ptr(leaf, slot, struct btrfs_file_extent_item); |
523 | if (btrfs_file_extent_type(leaf, fi) != BTRFS_FILE_EXTENT_REG || | 524 | if (btrfs_file_extent_type(leaf, fi) != BTRFS_FILE_EXTENT_REG || |
524 | btrfs_file_extent_disk_bytenr(leaf, fi) != bytenr || | 525 | btrfs_file_extent_disk_bytenr(leaf, fi) != bytenr || |
526 | btrfs_file_extent_offset(leaf, fi) != key.offset - orig_offset || | ||
525 | btrfs_file_extent_compression(leaf, fi) || | 527 | btrfs_file_extent_compression(leaf, fi) || |
526 | btrfs_file_extent_encryption(leaf, fi) || | 528 | btrfs_file_extent_encryption(leaf, fi) || |
527 | btrfs_file_extent_other_encoding(leaf, fi)) | 529 | btrfs_file_extent_other_encoding(leaf, fi)) |
@@ -561,6 +563,7 @@ int btrfs_mark_extent_written(struct btrfs_trans_handle *trans, | |||
561 | u64 split; | 563 | u64 split; |
562 | int del_nr = 0; | 564 | int del_nr = 0; |
563 | int del_slot = 0; | 565 | int del_slot = 0; |
566 | int recow; | ||
564 | int ret; | 567 | int ret; |
565 | 568 | ||
566 | btrfs_drop_extent_cache(inode, start, end - 1, 0); | 569 | btrfs_drop_extent_cache(inode, start, end - 1, 0); |
@@ -568,6 +571,7 @@ int btrfs_mark_extent_written(struct btrfs_trans_handle *trans, | |||
568 | path = btrfs_alloc_path(); | 571 | path = btrfs_alloc_path(); |
569 | BUG_ON(!path); | 572 | BUG_ON(!path); |
570 | again: | 573 | again: |
574 | recow = 0; | ||
571 | split = start; | 575 | split = start; |
572 | key.objectid = inode->i_ino; | 576 | key.objectid = inode->i_ino; |
573 | key.type = BTRFS_EXTENT_DATA_KEY; | 577 | key.type = BTRFS_EXTENT_DATA_KEY; |
@@ -591,12 +595,60 @@ again: | |||
591 | bytenr = btrfs_file_extent_disk_bytenr(leaf, fi); | 595 | bytenr = btrfs_file_extent_disk_bytenr(leaf, fi); |
592 | num_bytes = btrfs_file_extent_disk_num_bytes(leaf, fi); | 596 | num_bytes = btrfs_file_extent_disk_num_bytes(leaf, fi); |
593 | orig_offset = key.offset - btrfs_file_extent_offset(leaf, fi); | 597 | orig_offset = key.offset - btrfs_file_extent_offset(leaf, fi); |
598 | memcpy(&new_key, &key, sizeof(new_key)); | ||
599 | |||
600 | if (start == key.offset && end < extent_end) { | ||
601 | other_start = 0; | ||
602 | other_end = start; | ||
603 | if (extent_mergeable(leaf, path->slots[0] - 1, | ||
604 | inode->i_ino, bytenr, orig_offset, | ||
605 | &other_start, &other_end)) { | ||
606 | new_key.offset = end; | ||
607 | btrfs_set_item_key_safe(trans, root, path, &new_key); | ||
608 | fi = btrfs_item_ptr(leaf, path->slots[0], | ||
609 | struct btrfs_file_extent_item); | ||
610 | btrfs_set_file_extent_num_bytes(leaf, fi, | ||
611 | extent_end - end); | ||
612 | btrfs_set_file_extent_offset(leaf, fi, | ||
613 | end - orig_offset); | ||
614 | fi = btrfs_item_ptr(leaf, path->slots[0] - 1, | ||
615 | struct btrfs_file_extent_item); | ||
616 | btrfs_set_file_extent_num_bytes(leaf, fi, | ||
617 | end - other_start); | ||
618 | btrfs_mark_buffer_dirty(leaf); | ||
619 | goto out; | ||
620 | } | ||
621 | } | ||
622 | |||
623 | if (start > key.offset && end == extent_end) { | ||
624 | other_start = end; | ||
625 | other_end = 0; | ||
626 | if (extent_mergeable(leaf, path->slots[0] + 1, | ||
627 | inode->i_ino, bytenr, orig_offset, | ||
628 | &other_start, &other_end)) { | ||
629 | fi = btrfs_item_ptr(leaf, path->slots[0], | ||
630 | struct btrfs_file_extent_item); | ||
631 | btrfs_set_file_extent_num_bytes(leaf, fi, | ||
632 | start - key.offset); | ||
633 | path->slots[0]++; | ||
634 | new_key.offset = start; | ||
635 | btrfs_set_item_key_safe(trans, root, path, &new_key); | ||
636 | |||
637 | fi = btrfs_item_ptr(leaf, path->slots[0], | ||
638 | struct btrfs_file_extent_item); | ||
639 | btrfs_set_file_extent_num_bytes(leaf, fi, | ||
640 | other_end - start); | ||
641 | btrfs_set_file_extent_offset(leaf, fi, | ||
642 | start - orig_offset); | ||
643 | btrfs_mark_buffer_dirty(leaf); | ||
644 | goto out; | ||
645 | } | ||
646 | } | ||
594 | 647 | ||
595 | while (start > key.offset || end < extent_end) { | 648 | while (start > key.offset || end < extent_end) { |
596 | if (key.offset == start) | 649 | if (key.offset == start) |
597 | split = end; | 650 | split = end; |
598 | 651 | ||
599 | memcpy(&new_key, &key, sizeof(new_key)); | ||
600 | new_key.offset = split; | 652 | new_key.offset = split; |
601 | ret = btrfs_duplicate_item(trans, root, path, &new_key); | 653 | ret = btrfs_duplicate_item(trans, root, path, &new_key); |
602 | if (ret == -EAGAIN) { | 654 | if (ret == -EAGAIN) { |
@@ -631,15 +683,18 @@ again: | |||
631 | path->slots[0]--; | 683 | path->slots[0]--; |
632 | extent_end = end; | 684 | extent_end = end; |
633 | } | 685 | } |
686 | recow = 1; | ||
634 | } | 687 | } |
635 | 688 | ||
636 | fi = btrfs_item_ptr(leaf, path->slots[0], | ||
637 | struct btrfs_file_extent_item); | ||
638 | |||
639 | other_start = end; | 689 | other_start = end; |
640 | other_end = 0; | 690 | other_end = 0; |
641 | if (extent_mergeable(leaf, path->slots[0] + 1, inode->i_ino, | 691 | if (extent_mergeable(leaf, path->slots[0] + 1, |
642 | bytenr, &other_start, &other_end)) { | 692 | inode->i_ino, bytenr, orig_offset, |
693 | &other_start, &other_end)) { | ||
694 | if (recow) { | ||
695 | btrfs_release_path(root, path); | ||
696 | goto again; | ||
697 | } | ||
643 | extent_end = other_end; | 698 | extent_end = other_end; |
644 | del_slot = path->slots[0] + 1; | 699 | del_slot = path->slots[0] + 1; |
645 | del_nr++; | 700 | del_nr++; |
@@ -650,8 +705,13 @@ again: | |||
650 | } | 705 | } |
651 | other_start = 0; | 706 | other_start = 0; |
652 | other_end = start; | 707 | other_end = start; |
653 | if (extent_mergeable(leaf, path->slots[0] - 1, inode->i_ino, | 708 | if (extent_mergeable(leaf, path->slots[0] - 1, |
654 | bytenr, &other_start, &other_end)) { | 709 | inode->i_ino, bytenr, orig_offset, |
710 | &other_start, &other_end)) { | ||
711 | if (recow) { | ||
712 | btrfs_release_path(root, path); | ||
713 | goto again; | ||
714 | } | ||
655 | key.offset = other_start; | 715 | key.offset = other_start; |
656 | del_slot = path->slots[0]; | 716 | del_slot = path->slots[0]; |
657 | del_nr++; | 717 | del_nr++; |
@@ -660,22 +720,22 @@ again: | |||
660 | inode->i_ino, orig_offset); | 720 | inode->i_ino, orig_offset); |
661 | BUG_ON(ret); | 721 | BUG_ON(ret); |
662 | } | 722 | } |
723 | fi = btrfs_item_ptr(leaf, path->slots[0], | ||
724 | struct btrfs_file_extent_item); | ||
663 | if (del_nr == 0) { | 725 | if (del_nr == 0) { |
664 | btrfs_set_file_extent_type(leaf, fi, | 726 | btrfs_set_file_extent_type(leaf, fi, |
665 | BTRFS_FILE_EXTENT_REG); | 727 | BTRFS_FILE_EXTENT_REG); |
666 | btrfs_mark_buffer_dirty(leaf); | 728 | btrfs_mark_buffer_dirty(leaf); |
667 | goto out; | 729 | } else { |
668 | } | 730 | btrfs_set_file_extent_type(leaf, fi, |
669 | 731 | BTRFS_FILE_EXTENT_REG); | |
670 | fi = btrfs_item_ptr(leaf, del_slot - 1, | 732 | btrfs_set_file_extent_num_bytes(leaf, fi, |
671 | struct btrfs_file_extent_item); | 733 | extent_end - key.offset); |
672 | btrfs_set_file_extent_type(leaf, fi, BTRFS_FILE_EXTENT_REG); | 734 | btrfs_mark_buffer_dirty(leaf); |
673 | btrfs_set_file_extent_num_bytes(leaf, fi, | ||
674 | extent_end - key.offset); | ||
675 | btrfs_mark_buffer_dirty(leaf); | ||
676 | 735 | ||
677 | ret = btrfs_del_items(trans, root, path, del_slot, del_nr); | 736 | ret = btrfs_del_items(trans, root, path, del_slot, del_nr); |
678 | BUG_ON(ret); | 737 | BUG_ON(ret); |
738 | } | ||
679 | out: | 739 | out: |
680 | btrfs_free_path(path); | 740 | btrfs_free_path(path); |
681 | return 0; | 741 | return 0; |
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index 5440bab23635..b330e27c2d8b 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c | |||
@@ -3796,6 +3796,12 @@ struct inode *btrfs_lookup_dentry(struct inode *dir, struct dentry *dentry) | |||
3796 | 3796 | ||
3797 | if (location.type == BTRFS_INODE_ITEM_KEY) { | 3797 | if (location.type == BTRFS_INODE_ITEM_KEY) { |
3798 | inode = btrfs_iget(dir->i_sb, &location, root); | 3798 | inode = btrfs_iget(dir->i_sb, &location, root); |
3799 | if (unlikely(root->clean_orphans) && | ||
3800 | !(inode->i_sb->s_flags & MS_RDONLY)) { | ||
3801 | down_read(&root->fs_info->cleanup_work_sem); | ||
3802 | btrfs_orphan_cleanup(root); | ||
3803 | up_read(&root->fs_info->cleanup_work_sem); | ||
3804 | } | ||
3799 | return inode; | 3805 | return inode; |
3800 | } | 3806 | } |
3801 | 3807 | ||
@@ -3995,7 +4001,11 @@ skip: | |||
3995 | 4001 | ||
3996 | /* Reached end of directory/root. Bump pos past the last item. */ | 4002 | /* Reached end of directory/root. Bump pos past the last item. */ |
3997 | if (key_type == BTRFS_DIR_INDEX_KEY) | 4003 | if (key_type == BTRFS_DIR_INDEX_KEY) |
3998 | filp->f_pos = INT_LIMIT(off_t); | 4004 | /* |
4005 | * 32-bit glibc will use getdents64, but then strtol - | ||
4006 | * so the last number we can serve is this. | ||
4007 | */ | ||
4008 | filp->f_pos = 0x7fffffff; | ||
3999 | else | 4009 | else |
4000 | filp->f_pos++; | 4010 | filp->f_pos++; |
4001 | nopos: | 4011 | nopos: |
diff --git a/fs/btrfs/ordered-data.c b/fs/btrfs/ordered-data.c index b10a49d4bc6a..5c2a9e78a949 100644 --- a/fs/btrfs/ordered-data.c +++ b/fs/btrfs/ordered-data.c | |||
@@ -626,6 +626,8 @@ int btrfs_ordered_update_i_size(struct inode *inode, u64 offset, | |||
626 | 626 | ||
627 | if (ordered) | 627 | if (ordered) |
628 | offset = entry_end(ordered); | 628 | offset = entry_end(ordered); |
629 | else | ||
630 | offset = ALIGN(offset, BTRFS_I(inode)->root->sectorsize); | ||
629 | 631 | ||
630 | mutex_lock(&tree->mutex); | 632 | mutex_lock(&tree->mutex); |
631 | disk_i_size = BTRFS_I(inode)->disk_i_size; | 633 | disk_i_size = BTRFS_I(inode)->disk_i_size; |
diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index a9728680eca8..ed3e4a2ec2c8 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c | |||
@@ -3281,8 +3281,10 @@ static noinline_for_stack int relocate_block_group(struct reloc_control *rc) | |||
3281 | return -ENOMEM; | 3281 | return -ENOMEM; |
3282 | 3282 | ||
3283 | path = btrfs_alloc_path(); | 3283 | path = btrfs_alloc_path(); |
3284 | if (!path) | 3284 | if (!path) { |
3285 | kfree(cluster); | ||
3285 | return -ENOMEM; | 3286 | return -ENOMEM; |
3287 | } | ||
3286 | 3288 | ||
3287 | rc->extents_found = 0; | 3289 | rc->extents_found = 0; |
3288 | rc->extents_skipped = 0; | 3290 | rc->extents_skipped = 0; |
diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c index 198cff28766d..220dad5db017 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c | |||
@@ -2649,8 +2649,10 @@ again: | |||
2649 | em = lookup_extent_mapping(em_tree, logical, *length); | 2649 | em = lookup_extent_mapping(em_tree, logical, *length); |
2650 | read_unlock(&em_tree->lock); | 2650 | read_unlock(&em_tree->lock); |
2651 | 2651 | ||
2652 | if (!em && unplug_page) | 2652 | if (!em && unplug_page) { |
2653 | kfree(multi); | ||
2653 | return 0; | 2654 | return 0; |
2655 | } | ||
2654 | 2656 | ||
2655 | if (!em) { | 2657 | if (!em) { |
2656 | printk(KERN_CRIT "unable to find logical %llu len %llu\n", | 2658 | printk(KERN_CRIT "unable to find logical %llu len %llu\n", |
diff --git a/mm/vmalloc.c b/mm/vmalloc.c index 37e69295f250..d55d905463eb 100644 --- a/mm/vmalloc.c +++ b/mm/vmalloc.c | |||
@@ -555,10 +555,8 @@ static void __purge_vmap_area_lazy(unsigned long *start, unsigned long *end, | |||
555 | } | 555 | } |
556 | rcu_read_unlock(); | 556 | rcu_read_unlock(); |
557 | 557 | ||
558 | if (nr) { | 558 | if (nr) |
559 | BUG_ON(nr > atomic_read(&vmap_lazy_nr)); | ||
560 | atomic_sub(nr, &vmap_lazy_nr); | 559 | atomic_sub(nr, &vmap_lazy_nr); |
561 | } | ||
562 | 560 | ||
563 | if (nr || force_flush) | 561 | if (nr || force_flush) |
564 | flush_tlb_kernel_range(*start, *end); | 562 | flush_tlb_kernel_range(*start, *end); |