diff options
| -rw-r--r-- | arch/s390/appldata/appldata_os.c | 2 | ||||
| -rw-r--r-- | arch/s390/defconfig | 23 | ||||
| -rw-r--r-- | arch/s390/kernel/module.c | 6 | ||||
| -rw-r--r-- | arch/s390/kvm/kvm-s390.c | 2 | ||||
| -rw-r--r-- | arch/s390/kvm/sigp.c | 2 | ||||
| -rw-r--r-- | arch/s390/mm/extmem.c | 19 | ||||
| -rw-r--r-- | drivers/ata/libahci.c | 21 | ||||
| -rw-r--r-- | drivers/ata/sata_sil24.c | 12 | ||||
| -rw-r--r-- | drivers/ata/sata_via.c | 18 | ||||
| -rw-r--r-- | drivers/input/misc/hp_sdc_rtc.c | 2 | ||||
| -rw-r--r-- | drivers/mtd/mtdchar.c | 11 | ||||
| -rw-r--r-- | drivers/mtd/nand/Kconfig | 21 | ||||
| -rw-r--r-- | drivers/mtd/nand/r852.c | 27 | ||||
| -rw-r--r-- | drivers/pci/quirks.c | 5 | ||||
| -rw-r--r-- | drivers/s390/cio/itcw.c | 2 | ||||
| -rw-r--r-- | drivers/watchdog/wm8350_wdt.c | 2 | ||||
| -rw-r--r-- | fs/jffs2/acl.c | 3 | ||||
| -rw-r--r-- | fs/jffs2/dir.c | 127 | ||||
| -rw-r--r-- | fs/jffs2/fs.c | 7 | ||||
| -rw-r--r-- | fs/xfs/linux-2.6/xfs_aops.c | 8 | ||||
| -rw-r--r-- | include/linux/pci_ids.h | 1 | ||||
| -rw-r--r-- | include/linux/writeback.h | 9 | ||||
| -rw-r--r-- | include/trace/events/ext4.h | 5 | ||||
| -rw-r--r-- | mm/page-writeback.c | 30 |
24 files changed, 190 insertions, 175 deletions
diff --git a/arch/s390/appldata/appldata_os.c b/arch/s390/appldata/appldata_os.c index 55c80ffd42b9..92f1cb745d69 100644 --- a/arch/s390/appldata/appldata_os.c +++ b/arch/s390/appldata/appldata_os.c | |||
| @@ -181,7 +181,7 @@ static int __init appldata_os_init(void) | |||
| 181 | goto out; | 181 | goto out; |
| 182 | } | 182 | } |
| 183 | 183 | ||
| 184 | appldata_os_data = kzalloc(max_size, GFP_DMA); | 184 | appldata_os_data = kzalloc(max_size, GFP_KERNEL | GFP_DMA); |
| 185 | if (appldata_os_data == NULL) { | 185 | if (appldata_os_data == NULL) { |
| 186 | rc = -ENOMEM; | 186 | rc = -ENOMEM; |
| 187 | goto out; | 187 | goto out; |
diff --git a/arch/s390/defconfig b/arch/s390/defconfig index bcd6884985ad..253f158db668 100644 --- a/arch/s390/defconfig +++ b/arch/s390/defconfig | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | # | 1 | # |
| 2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
| 3 | # Linux kernel version: 2.6.34-rc3 | 3 | # Linux kernel version: 2.6.35-rc1 |
| 4 | # Fri Apr 9 09:57:10 2010 | 4 | # Fri Jun 4 11:32:40 2010 |
| 5 | # | 5 | # |
| 6 | CONFIG_SCHED_MC=y | 6 | CONFIG_SCHED_MC=y |
| 7 | CONFIG_MMU=y | 7 | CONFIG_MMU=y |
| @@ -35,11 +35,13 @@ CONFIG_CONSTRUCTORS=y | |||
| 35 | CONFIG_EXPERIMENTAL=y | 35 | CONFIG_EXPERIMENTAL=y |
| 36 | CONFIG_LOCK_KERNEL=y | 36 | CONFIG_LOCK_KERNEL=y |
| 37 | CONFIG_INIT_ENV_ARG_LIMIT=32 | 37 | CONFIG_INIT_ENV_ARG_LIMIT=32 |
| 38 | CONFIG_CROSS_COMPILE="" | ||
| 38 | CONFIG_LOCALVERSION="" | 39 | CONFIG_LOCALVERSION="" |
| 39 | CONFIG_LOCALVERSION_AUTO=y | 40 | CONFIG_LOCALVERSION_AUTO=y |
| 40 | CONFIG_HAVE_KERNEL_GZIP=y | 41 | CONFIG_HAVE_KERNEL_GZIP=y |
| 41 | CONFIG_HAVE_KERNEL_BZIP2=y | 42 | CONFIG_HAVE_KERNEL_BZIP2=y |
| 42 | CONFIG_HAVE_KERNEL_LZMA=y | 43 | CONFIG_HAVE_KERNEL_LZMA=y |
| 44 | CONFIG_HAVE_KERNEL_LZO=y | ||
| 43 | CONFIG_KERNEL_GZIP=y | 45 | CONFIG_KERNEL_GZIP=y |
| 44 | # CONFIG_KERNEL_BZIP2 is not set | 46 | # CONFIG_KERNEL_BZIP2 is not set |
| 45 | # CONFIG_KERNEL_LZMA is not set | 47 | # CONFIG_KERNEL_LZMA is not set |
| @@ -77,6 +79,7 @@ CONFIG_CGROUP_NS=y | |||
| 77 | # CONFIG_CGROUP_CPUACCT is not set | 79 | # CONFIG_CGROUP_CPUACCT is not set |
| 78 | # CONFIG_RESOURCE_COUNTERS is not set | 80 | # CONFIG_RESOURCE_COUNTERS is not set |
| 79 | # CONFIG_CGROUP_SCHED is not set | 81 | # CONFIG_CGROUP_SCHED is not set |
| 82 | # CONFIG_BLK_CGROUP is not set | ||
| 80 | CONFIG_SYSFS_DEPRECATED=y | 83 | CONFIG_SYSFS_DEPRECATED=y |
| 81 | CONFIG_SYSFS_DEPRECATED_V2=y | 84 | CONFIG_SYSFS_DEPRECATED_V2=y |
| 82 | # CONFIG_RELAY is not set | 85 | # CONFIG_RELAY is not set |
| @@ -157,7 +160,6 @@ CONFIG_STOP_MACHINE=y | |||
| 157 | CONFIG_BLOCK=y | 160 | CONFIG_BLOCK=y |
| 158 | CONFIG_BLK_DEV_BSG=y | 161 | CONFIG_BLK_DEV_BSG=y |
| 159 | # CONFIG_BLK_DEV_INTEGRITY is not set | 162 | # CONFIG_BLK_DEV_INTEGRITY is not set |
| 160 | # CONFIG_BLK_CGROUP is not set | ||
| 161 | CONFIG_BLOCK_COMPAT=y | 163 | CONFIG_BLOCK_COMPAT=y |
| 162 | 164 | ||
| 163 | # | 165 | # |
| @@ -166,7 +168,6 @@ CONFIG_BLOCK_COMPAT=y | |||
| 166 | CONFIG_IOSCHED_NOOP=y | 168 | CONFIG_IOSCHED_NOOP=y |
| 167 | CONFIG_IOSCHED_DEADLINE=y | 169 | CONFIG_IOSCHED_DEADLINE=y |
| 168 | CONFIG_IOSCHED_CFQ=y | 170 | CONFIG_IOSCHED_CFQ=y |
| 169 | # CONFIG_CFQ_GROUP_IOSCHED is not set | ||
| 170 | CONFIG_DEFAULT_DEADLINE=y | 171 | CONFIG_DEFAULT_DEADLINE=y |
| 171 | # CONFIG_DEFAULT_CFQ is not set | 172 | # CONFIG_DEFAULT_CFQ is not set |
| 172 | # CONFIG_DEFAULT_NOOP is not set | 173 | # CONFIG_DEFAULT_NOOP is not set |
| @@ -247,7 +248,6 @@ CONFIG_64BIT=y | |||
| 247 | CONFIG_SMP=y | 248 | CONFIG_SMP=y |
| 248 | CONFIG_NR_CPUS=32 | 249 | CONFIG_NR_CPUS=32 |
| 249 | CONFIG_HOTPLUG_CPU=y | 250 | CONFIG_HOTPLUG_CPU=y |
| 250 | # CONFIG_SCHED_BOOK is not set | ||
| 251 | CONFIG_COMPAT=y | 251 | CONFIG_COMPAT=y |
| 252 | CONFIG_SYSVIPC_COMPAT=y | 252 | CONFIG_SYSVIPC_COMPAT=y |
| 253 | CONFIG_AUDIT_ARCH=y | 253 | CONFIG_AUDIT_ARCH=y |
| @@ -320,7 +320,6 @@ CONFIG_COMPAT_BINFMT_ELF=y | |||
| 320 | # CONFIG_HAVE_AOUT is not set | 320 | # CONFIG_HAVE_AOUT is not set |
| 321 | CONFIG_BINFMT_MISC=m | 321 | CONFIG_BINFMT_MISC=m |
| 322 | CONFIG_FORCE_MAX_ZONEORDER=9 | 322 | CONFIG_FORCE_MAX_ZONEORDER=9 |
| 323 | # CONFIG_PROCESS_DEBUG is not set | ||
| 324 | CONFIG_PFAULT=y | 323 | CONFIG_PFAULT=y |
| 325 | # CONFIG_SHARED_KERNEL is not set | 324 | # CONFIG_SHARED_KERNEL is not set |
| 326 | # CONFIG_CMM is not set | 325 | # CONFIG_CMM is not set |
| @@ -457,6 +456,7 @@ CONFIG_NF_CONNTRACK=m | |||
| 457 | # CONFIG_IP6_NF_IPTABLES is not set | 456 | # CONFIG_IP6_NF_IPTABLES is not set |
| 458 | # CONFIG_IP_DCCP is not set | 457 | # CONFIG_IP_DCCP is not set |
| 459 | CONFIG_IP_SCTP=m | 458 | CONFIG_IP_SCTP=m |
| 459 | # CONFIG_NET_SCTPPROBE is not set | ||
| 460 | # CONFIG_SCTP_DBG_MSG is not set | 460 | # CONFIG_SCTP_DBG_MSG is not set |
| 461 | # CONFIG_SCTP_DBG_OBJCNT is not set | 461 | # CONFIG_SCTP_DBG_OBJCNT is not set |
| 462 | # CONFIG_SCTP_HMAC_NONE is not set | 462 | # CONFIG_SCTP_HMAC_NONE is not set |
| @@ -465,6 +465,7 @@ CONFIG_SCTP_HMAC_MD5=y | |||
| 465 | # CONFIG_RDS is not set | 465 | # CONFIG_RDS is not set |
| 466 | # CONFIG_TIPC is not set | 466 | # CONFIG_TIPC is not set |
| 467 | # CONFIG_ATM is not set | 467 | # CONFIG_ATM is not set |
| 468 | # CONFIG_L2TP is not set | ||
| 468 | # CONFIG_BRIDGE is not set | 469 | # CONFIG_BRIDGE is not set |
| 469 | # CONFIG_VLAN_8021Q is not set | 470 | # CONFIG_VLAN_8021Q is not set |
| 470 | # CONFIG_DECNET is not set | 471 | # CONFIG_DECNET is not set |
| @@ -525,6 +526,7 @@ CONFIG_NET_ACT_NAT=m | |||
| 525 | # CONFIG_NET_CLS_IND is not set | 526 | # CONFIG_NET_CLS_IND is not set |
| 526 | CONFIG_NET_SCH_FIFO=y | 527 | CONFIG_NET_SCH_FIFO=y |
| 527 | # CONFIG_DCB is not set | 528 | # CONFIG_DCB is not set |
| 529 | CONFIG_RPS=y | ||
| 528 | 530 | ||
| 529 | # | 531 | # |
| 530 | # Network testing | 532 | # Network testing |
| @@ -546,6 +548,7 @@ CONFIG_CAN_VCAN=m | |||
| 546 | # CONFIG_WIMAX is not set | 548 | # CONFIG_WIMAX is not set |
| 547 | # CONFIG_RFKILL is not set | 549 | # CONFIG_RFKILL is not set |
| 548 | # CONFIG_NET_9P is not set | 550 | # CONFIG_NET_9P is not set |
| 551 | # CONFIG_CAIF is not set | ||
| 549 | # CONFIG_PCMCIA is not set | 552 | # CONFIG_PCMCIA is not set |
| 550 | CONFIG_CCW=y | 553 | CONFIG_CCW=y |
| 551 | 554 | ||
| @@ -728,6 +731,7 @@ CONFIG_VIRTIO_NET=m | |||
| 728 | # Character devices | 731 | # Character devices |
| 729 | # | 732 | # |
| 730 | CONFIG_DEVKMEM=y | 733 | CONFIG_DEVKMEM=y |
| 734 | # CONFIG_N_GSM is not set | ||
| 731 | CONFIG_UNIX98_PTYS=y | 735 | CONFIG_UNIX98_PTYS=y |
| 732 | # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set | 736 | # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set |
| 733 | CONFIG_LEGACY_PTYS=y | 737 | CONFIG_LEGACY_PTYS=y |
| @@ -775,6 +779,7 @@ CONFIG_S390_TAPE_34XX=m | |||
| 775 | # CONFIG_MONREADER is not set | 779 | # CONFIG_MONREADER is not set |
| 776 | CONFIG_MONWRITER=m | 780 | CONFIG_MONWRITER=m |
| 777 | CONFIG_S390_VMUR=m | 781 | CONFIG_S390_VMUR=m |
| 782 | # CONFIG_RAMOOPS is not set | ||
| 778 | 783 | ||
| 779 | # | 784 | # |
| 780 | # PPS support | 785 | # PPS support |
| @@ -788,10 +793,6 @@ CONFIG_S390_VMUR=m | |||
| 788 | # CONFIG_NEW_LEDS is not set | 793 | # CONFIG_NEW_LEDS is not set |
| 789 | CONFIG_ACCESSIBILITY=y | 794 | CONFIG_ACCESSIBILITY=y |
| 790 | # CONFIG_AUXDISPLAY is not set | 795 | # CONFIG_AUXDISPLAY is not set |
| 791 | |||
| 792 | # | ||
| 793 | # TI VLYNQ | ||
| 794 | # | ||
| 795 | # CONFIG_STAGING is not set | 796 | # CONFIG_STAGING is not set |
| 796 | 797 | ||
| 797 | # | 798 | # |
| @@ -976,6 +977,7 @@ CONFIG_DEBUG_MEMORY_INIT=y | |||
| 976 | # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set | 977 | # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set |
| 977 | CONFIG_DEBUG_FORCE_WEAK_PER_CPU=y | 978 | CONFIG_DEBUG_FORCE_WEAK_PER_CPU=y |
| 978 | # CONFIG_LKDTM is not set | 979 | # CONFIG_LKDTM is not set |
| 980 | # CONFIG_CPU_NOTIFIER_ERROR_INJECT is not set | ||
| 979 | # CONFIG_FAULT_INJECTION is not set | 981 | # CONFIG_FAULT_INJECTION is not set |
| 980 | # CONFIG_LATENCYTOP is not set | 982 | # CONFIG_LATENCYTOP is not set |
| 981 | CONFIG_SYSCTL_SYSCALL_CHECK=y | 983 | CONFIG_SYSCTL_SYSCALL_CHECK=y |
| @@ -1010,6 +1012,7 @@ CONFIG_BRANCH_PROFILE_NONE=y | |||
| 1010 | CONFIG_KPROBE_EVENT=y | 1012 | CONFIG_KPROBE_EVENT=y |
| 1011 | # CONFIG_RING_BUFFER_BENCHMARK is not set | 1013 | # CONFIG_RING_BUFFER_BENCHMARK is not set |
| 1012 | # CONFIG_DYNAMIC_DEBUG is not set | 1014 | # CONFIG_DYNAMIC_DEBUG is not set |
| 1015 | # CONFIG_ATOMIC64_SELFTEST is not set | ||
| 1013 | CONFIG_SAMPLES=y | 1016 | CONFIG_SAMPLES=y |
| 1014 | # CONFIG_SAMPLE_TRACEPOINTS is not set | 1017 | # CONFIG_SAMPLE_TRACEPOINTS is not set |
| 1015 | # CONFIG_SAMPLE_TRACE_EVENTS is not set | 1018 | # CONFIG_SAMPLE_TRACE_EVENTS is not set |
diff --git a/arch/s390/kernel/module.c b/arch/s390/kernel/module.c index 639380a0c45c..22cfd634c355 100644 --- a/arch/s390/kernel/module.c +++ b/arch/s390/kernel/module.c | |||
| @@ -55,8 +55,10 @@ void *module_alloc(unsigned long size) | |||
| 55 | /* Free memory returned from module_alloc */ | 55 | /* Free memory returned from module_alloc */ |
| 56 | void module_free(struct module *mod, void *module_region) | 56 | void module_free(struct module *mod, void *module_region) |
| 57 | { | 57 | { |
| 58 | vfree(mod->arch.syminfo); | 58 | if (mod) { |
| 59 | mod->arch.syminfo = NULL; | 59 | vfree(mod->arch.syminfo); |
| 60 | mod->arch.syminfo = NULL; | ||
| 61 | } | ||
| 60 | vfree(module_region); | 62 | vfree(module_region); |
| 61 | } | 63 | } |
| 62 | 64 | ||
diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c index 8093e6f47f49..ae3705816878 100644 --- a/arch/s390/kvm/kvm-s390.c +++ b/arch/s390/kvm/kvm-s390.c | |||
| @@ -761,7 +761,7 @@ static int __init kvm_s390_init(void) | |||
| 761 | * to hold the maximum amount of facilites. On the other hand, we | 761 | * to hold the maximum amount of facilites. On the other hand, we |
| 762 | * only set facilities that are known to work in KVM. | 762 | * only set facilities that are known to work in KVM. |
| 763 | */ | 763 | */ |
| 764 | facilities = (unsigned long long *) get_zeroed_page(GFP_DMA); | 764 | facilities = (unsigned long long *) get_zeroed_page(GFP_KERNEL|GFP_DMA); |
| 765 | if (!facilities) { | 765 | if (!facilities) { |
| 766 | kvm_exit(); | 766 | kvm_exit(); |
| 767 | return -ENOMEM; | 767 | return -ENOMEM; |
diff --git a/arch/s390/kvm/sigp.c b/arch/s390/kvm/sigp.c index eff3c5989b46..702276f5e2fa 100644 --- a/arch/s390/kvm/sigp.c +++ b/arch/s390/kvm/sigp.c | |||
| @@ -113,7 +113,7 @@ static int __inject_sigp_stop(struct kvm_s390_local_interrupt *li, int action) | |||
| 113 | { | 113 | { |
| 114 | struct kvm_s390_interrupt_info *inti; | 114 | struct kvm_s390_interrupt_info *inti; |
| 115 | 115 | ||
| 116 | inti = kzalloc(sizeof(*inti), GFP_KERNEL); | 116 | inti = kzalloc(sizeof(*inti), GFP_ATOMIC); |
| 117 | if (!inti) | 117 | if (!inti) |
| 118 | return -ENOMEM; | 118 | return -ENOMEM; |
| 119 | inti->type = KVM_S390_SIGP_STOP; | 119 | inti->type = KVM_S390_SIGP_STOP; |
diff --git a/arch/s390/mm/extmem.c b/arch/s390/mm/extmem.c index 6409fd57eb04..3cc95dd0a3a6 100644 --- a/arch/s390/mm/extmem.c +++ b/arch/s390/mm/extmem.c | |||
| @@ -105,7 +105,7 @@ static int | |||
| 105 | dcss_set_subcodes(void) | 105 | dcss_set_subcodes(void) |
| 106 | { | 106 | { |
| 107 | #ifdef CONFIG_64BIT | 107 | #ifdef CONFIG_64BIT |
| 108 | char *name = kmalloc(8 * sizeof(char), GFP_DMA); | 108 | char *name = kmalloc(8 * sizeof(char), GFP_KERNEL | GFP_DMA); |
| 109 | unsigned long rx, ry; | 109 | unsigned long rx, ry; |
| 110 | int rc; | 110 | int rc; |
| 111 | 111 | ||
| @@ -252,12 +252,13 @@ dcss_diag_translate_rc (int vm_rc) { | |||
| 252 | static int | 252 | static int |
| 253 | query_segment_type (struct dcss_segment *seg) | 253 | query_segment_type (struct dcss_segment *seg) |
| 254 | { | 254 | { |
| 255 | struct qin64 *qin = kmalloc (sizeof(struct qin64), GFP_DMA); | ||
| 256 | struct qout64 *qout = kmalloc (sizeof(struct qout64), GFP_DMA); | ||
| 257 | |||
| 258 | int diag_cc, rc, i; | ||
| 259 | unsigned long dummy, vmrc; | 255 | unsigned long dummy, vmrc; |
| 256 | int diag_cc, rc, i; | ||
| 257 | struct qout64 *qout; | ||
| 258 | struct qin64 *qin; | ||
| 260 | 259 | ||
| 260 | qin = kmalloc(sizeof(*qin), GFP_KERNEL | GFP_DMA); | ||
| 261 | qout = kmalloc(sizeof(*qout), GFP_KERNEL | GFP_DMA); | ||
| 261 | if ((qin == NULL) || (qout == NULL)) { | 262 | if ((qin == NULL) || (qout == NULL)) { |
| 262 | rc = -ENOMEM; | 263 | rc = -ENOMEM; |
| 263 | goto out_free; | 264 | goto out_free; |
| @@ -286,7 +287,7 @@ query_segment_type (struct dcss_segment *seg) | |||
| 286 | copy data for the new format. */ | 287 | copy data for the new format. */ |
| 287 | if (segext_scode == DCSS_SEGEXT) { | 288 | if (segext_scode == DCSS_SEGEXT) { |
| 288 | struct qout64_old *qout_old; | 289 | struct qout64_old *qout_old; |
| 289 | qout_old = kzalloc(sizeof(struct qout64_old), GFP_DMA); | 290 | qout_old = kzalloc(sizeof(*qout_old), GFP_KERNEL | GFP_DMA); |
| 290 | if (qout_old == NULL) { | 291 | if (qout_old == NULL) { |
| 291 | rc = -ENOMEM; | 292 | rc = -ENOMEM; |
| 292 | goto out_free; | 293 | goto out_free; |
| @@ -407,11 +408,11 @@ segment_overlaps_others (struct dcss_segment *seg) | |||
| 407 | static int | 408 | static int |
| 408 | __segment_load (char *name, int do_nonshared, unsigned long *addr, unsigned long *end) | 409 | __segment_load (char *name, int do_nonshared, unsigned long *addr, unsigned long *end) |
| 409 | { | 410 | { |
| 410 | struct dcss_segment *seg = kmalloc(sizeof(struct dcss_segment), | ||
| 411 | GFP_DMA); | ||
| 412 | int rc, diag_cc; | ||
| 413 | unsigned long start_addr, end_addr, dummy; | 411 | unsigned long start_addr, end_addr, dummy; |
| 412 | struct dcss_segment *seg; | ||
| 413 | int rc, diag_cc; | ||
| 414 | 414 | ||
| 415 | seg = kmalloc(sizeof(*seg), GFP_KERNEL | GFP_DMA); | ||
| 415 | if (seg == NULL) { | 416 | if (seg == NULL) { |
| 416 | rc = -ENOMEM; | 417 | rc = -ENOMEM; |
| 417 | goto out; | 418 | goto out; |
diff --git a/drivers/ata/libahci.c b/drivers/ata/libahci.c index 1984a6e89e84..261f86d102e8 100644 --- a/drivers/ata/libahci.c +++ b/drivers/ata/libahci.c | |||
| @@ -541,29 +541,11 @@ static int ahci_scr_write(struct ata_link *link, unsigned int sc_reg, u32 val) | |||
| 541 | return -EINVAL; | 541 | return -EINVAL; |
| 542 | } | 542 | } |
| 543 | 543 | ||
| 544 | static int ahci_is_device_present(void __iomem *port_mmio) | ||
| 545 | { | ||
| 546 | u8 status = readl(port_mmio + PORT_TFDATA) & 0xff; | ||
| 547 | |||
| 548 | /* Make sure PxTFD.STS.BSY and PxTFD.STS.DRQ are 0 */ | ||
| 549 | if (status & (ATA_BUSY | ATA_DRQ)) | ||
| 550 | return 0; | ||
| 551 | |||
| 552 | /* Make sure PxSSTS.DET is 3h */ | ||
| 553 | status = readl(port_mmio + PORT_SCR_STAT) & 0xf; | ||
| 554 | if (status != 3) | ||
| 555 | return 0; | ||
| 556 | return 1; | ||
| 557 | } | ||
| 558 | |||
| 559 | void ahci_start_engine(struct ata_port *ap) | 544 | void ahci_start_engine(struct ata_port *ap) |
| 560 | { | 545 | { |
| 561 | void __iomem *port_mmio = ahci_port_base(ap); | 546 | void __iomem *port_mmio = ahci_port_base(ap); |
| 562 | u32 tmp; | 547 | u32 tmp; |
| 563 | 548 | ||
| 564 | if (!ahci_is_device_present(port_mmio)) | ||
| 565 | return; | ||
| 566 | |||
| 567 | /* start DMA */ | 549 | /* start DMA */ |
| 568 | tmp = readl(port_mmio + PORT_CMD); | 550 | tmp = readl(port_mmio + PORT_CMD); |
| 569 | tmp |= PORT_CMD_START; | 551 | tmp |= PORT_CMD_START; |
| @@ -1892,6 +1874,9 @@ static void ahci_error_handler(struct ata_port *ap) | |||
| 1892 | } | 1874 | } |
| 1893 | 1875 | ||
| 1894 | sata_pmp_error_handler(ap); | 1876 | sata_pmp_error_handler(ap); |
| 1877 | |||
| 1878 | if (!ata_dev_enabled(ap->link.device)) | ||
| 1879 | ahci_stop_engine(ap); | ||
| 1895 | } | 1880 | } |
| 1896 | 1881 | ||
| 1897 | static void ahci_post_internal_cmd(struct ata_queued_cmd *qc) | 1882 | static void ahci_post_internal_cmd(struct ata_queued_cmd *qc) |
diff --git a/drivers/ata/sata_sil24.c b/drivers/ata/sata_sil24.c index e9250514734b..70b58fe9e5b1 100644 --- a/drivers/ata/sata_sil24.c +++ b/drivers/ata/sata_sil24.c | |||
| @@ -539,12 +539,12 @@ static void sil24_config_port(struct ata_port *ap) | |||
| 539 | writel(PORT_CS_IRQ_WOC, port + PORT_CTRL_CLR); | 539 | writel(PORT_CS_IRQ_WOC, port + PORT_CTRL_CLR); |
| 540 | 540 | ||
| 541 | /* zero error counters. */ | 541 | /* zero error counters. */ |
| 542 | writel(0x8000, port + PORT_DECODE_ERR_THRESH); | 542 | writew(0x8000, port + PORT_DECODE_ERR_THRESH); |
| 543 | writel(0x8000, port + PORT_CRC_ERR_THRESH); | 543 | writew(0x8000, port + PORT_CRC_ERR_THRESH); |
| 544 | writel(0x8000, port + PORT_HSHK_ERR_THRESH); | 544 | writew(0x8000, port + PORT_HSHK_ERR_THRESH); |
| 545 | writel(0x0000, port + PORT_DECODE_ERR_CNT); | 545 | writew(0x0000, port + PORT_DECODE_ERR_CNT); |
| 546 | writel(0x0000, port + PORT_CRC_ERR_CNT); | 546 | writew(0x0000, port + PORT_CRC_ERR_CNT); |
| 547 | writel(0x0000, port + PORT_HSHK_ERR_CNT); | 547 | writew(0x0000, port + PORT_HSHK_ERR_CNT); |
| 548 | 548 | ||
| 549 | /* always use 64bit activation */ | 549 | /* always use 64bit activation */ |
| 550 | writel(PORT_CS_32BIT_ACTV, port + PORT_CTRL_CLR); | 550 | writel(PORT_CS_32BIT_ACTV, port + PORT_CTRL_CLR); |
diff --git a/drivers/ata/sata_via.c b/drivers/ata/sata_via.c index 0ecd0f6aa2c0..4730c42a5ee5 100644 --- a/drivers/ata/sata_via.c +++ b/drivers/ata/sata_via.c | |||
| @@ -578,10 +578,24 @@ static void svia_configure(struct pci_dev *pdev) | |||
| 578 | 578 | ||
| 579 | /* | 579 | /* |
| 580 | * vt6421 has problems talking to some drives. The following | 580 | * vt6421 has problems talking to some drives. The following |
| 581 | * is the magic fix from Joseph Chan <JosephChan@via.com.tw>. | 581 | * is the fix from Joseph Chan <JosephChan@via.com.tw>. |
| 582 | * Please add proper documentation if possible. | 582 | * |
| 583 | * When host issues HOLD, device may send up to 20DW of data | ||
| 584 | * before acknowledging it with HOLDA and the host should be | ||
| 585 | * able to buffer them in FIFO. Unfortunately, some WD drives | ||
| 586 | * send upto 40DW before acknowledging HOLD and, in the | ||
| 587 | * default configuration, this ends up overflowing vt6421's | ||
| 588 | * FIFO, making the controller abort the transaction with | ||
| 589 | * R_ERR. | ||
| 590 | * | ||
| 591 | * Rx52[2] is the internal 128DW FIFO Flow control watermark | ||
| 592 | * adjusting mechanism enable bit and the default value 0 | ||
| 593 | * means host will issue HOLD to device when the left FIFO | ||
| 594 | * size goes below 32DW. Setting it to 1 makes the watermark | ||
| 595 | * 64DW. | ||
| 583 | * | 596 | * |
| 584 | * https://bugzilla.kernel.org/show_bug.cgi?id=15173 | 597 | * https://bugzilla.kernel.org/show_bug.cgi?id=15173 |
| 598 | * http://article.gmane.org/gmane.linux.ide/46352 | ||
| 585 | */ | 599 | */ |
| 586 | if (pdev->device == 0x3249) { | 600 | if (pdev->device == 0x3249) { |
| 587 | pci_read_config_byte(pdev, 0x52, &tmp8); | 601 | pci_read_config_byte(pdev, 0x52, &tmp8); |
diff --git a/drivers/input/misc/hp_sdc_rtc.c b/drivers/input/misc/hp_sdc_rtc.c index e00a1cc79c0a..c19066479057 100644 --- a/drivers/input/misc/hp_sdc_rtc.c +++ b/drivers/input/misc/hp_sdc_rtc.c | |||
| @@ -678,7 +678,7 @@ static const struct file_operations hp_sdc_rtc_fops = { | |||
| 678 | .llseek = no_llseek, | 678 | .llseek = no_llseek, |
| 679 | .read = hp_sdc_rtc_read, | 679 | .read = hp_sdc_rtc_read, |
| 680 | .poll = hp_sdc_rtc_poll, | 680 | .poll = hp_sdc_rtc_poll, |
| 681 | .unlocked_ioctl = hp_sdc_rtc_ioctl, | 681 | .unlocked_ioctl = hp_sdc_rtc_unlocked_ioctl, |
| 682 | .open = hp_sdc_rtc_open, | 682 | .open = hp_sdc_rtc_open, |
| 683 | .fasync = hp_sdc_rtc_fasync, | 683 | .fasync = hp_sdc_rtc_fasync, |
| 684 | }; | 684 | }; |
diff --git a/drivers/mtd/mtdchar.c b/drivers/mtd/mtdchar.c index 000d65ea55a4..91c8013cf0d9 100644 --- a/drivers/mtd/mtdchar.c +++ b/drivers/mtd/mtdchar.c | |||
| @@ -404,14 +404,9 @@ static int mtd_do_writeoob(struct file *file, struct mtd_info *mtd, | |||
| 404 | if (ops.ooboffs && ops.ooblen > (mtd->oobsize - ops.ooboffs)) | 404 | if (ops.ooboffs && ops.ooblen > (mtd->oobsize - ops.ooboffs)) |
| 405 | return -EINVAL; | 405 | return -EINVAL; |
| 406 | 406 | ||
| 407 | ops.oobbuf = kmalloc(length, GFP_KERNEL); | 407 | ops.oobbuf = memdup_user(ptr, length); |
| 408 | if (!ops.oobbuf) | 408 | if (IS_ERR(ops.oobbuf)) |
| 409 | return -ENOMEM; | 409 | return PTR_ERR(ops.oobbuf); |
| 410 | |||
| 411 | if (copy_from_user(ops.oobbuf, ptr, length)) { | ||
| 412 | kfree(ops.oobbuf); | ||
| 413 | return -EFAULT; | ||
| 414 | } | ||
| 415 | 410 | ||
| 416 | start &= ~((uint64_t)mtd->oobsize - 1); | 411 | start &= ~((uint64_t)mtd->oobsize - 1); |
| 417 | ret = mtd->write_oob(mtd, start, &ops); | 412 | ret = mtd->write_oob(mtd, start, &ops); |
diff --git a/drivers/mtd/nand/Kconfig b/drivers/mtd/nand/Kconfig index 98a04b3c9526..ffc3720929f1 100644 --- a/drivers/mtd/nand/Kconfig +++ b/drivers/mtd/nand/Kconfig | |||
| @@ -1,13 +1,3 @@ | |||
| 1 | menuconfig MTD_NAND | ||
| 2 | tristate "NAND Device Support" | ||
| 3 | depends on MTD | ||
| 4 | select MTD_NAND_IDS | ||
| 5 | select MTD_NAND_ECC | ||
| 6 | help | ||
| 7 | This enables support for accessing all type of NAND flash | ||
| 8 | devices. For further information see | ||
| 9 | <http://www.linux-mtd.infradead.org/doc/nand.html>. | ||
| 10 | |||
| 11 | config MTD_NAND_ECC | 1 | config MTD_NAND_ECC |
| 12 | tristate | 2 | tristate |
| 13 | 3 | ||
| @@ -19,6 +9,17 @@ config MTD_NAND_ECC_SMC | |||
| 19 | Software ECC according to the Smart Media Specification. | 9 | Software ECC according to the Smart Media Specification. |
| 20 | The original Linux implementation had byte 0 and 1 swapped. | 10 | The original Linux implementation had byte 0 and 1 swapped. |
| 21 | 11 | ||
| 12 | |||
| 13 | menuconfig MTD_NAND | ||
| 14 | tristate "NAND Device Support" | ||
| 15 | depends on MTD | ||
| 16 | select MTD_NAND_IDS | ||
| 17 | select MTD_NAND_ECC | ||
| 18 | help | ||
| 19 | This enables support for accessing all type of NAND flash | ||
| 20 | devices. For further information see | ||
| 21 | <http://www.linux-mtd.infradead.org/doc/nand.html>. | ||
| 22 | |||
| 22 | if MTD_NAND | 23 | if MTD_NAND |
| 23 | 24 | ||
| 24 | config MTD_NAND_VERIFY_WRITE | 25 | config MTD_NAND_VERIFY_WRITE |
diff --git a/drivers/mtd/nand/r852.c b/drivers/mtd/nand/r852.c index 78a423295474..bcfc851fe550 100644 --- a/drivers/mtd/nand/r852.c +++ b/drivers/mtd/nand/r852.c | |||
| @@ -150,7 +150,6 @@ static void r852_dma_done(struct r852_device *dev, int error) | |||
| 150 | if (dev->phys_dma_addr && dev->phys_dma_addr != dev->phys_bounce_buffer) | 150 | if (dev->phys_dma_addr && dev->phys_dma_addr != dev->phys_bounce_buffer) |
| 151 | pci_unmap_single(dev->pci_dev, dev->phys_dma_addr, R852_DMA_LEN, | 151 | pci_unmap_single(dev->pci_dev, dev->phys_dma_addr, R852_DMA_LEN, |
| 152 | dev->dma_dir ? PCI_DMA_FROMDEVICE : PCI_DMA_TODEVICE); | 152 | dev->dma_dir ? PCI_DMA_FROMDEVICE : PCI_DMA_TODEVICE); |
| 153 | complete(&dev->dma_done); | ||
| 154 | } | 153 | } |
| 155 | 154 | ||
| 156 | /* | 155 | /* |
| @@ -182,6 +181,7 @@ static void r852_do_dma(struct r852_device *dev, uint8_t *buf, int do_read) | |||
| 182 | /* Set dma direction */ | 181 | /* Set dma direction */ |
| 183 | dev->dma_dir = do_read; | 182 | dev->dma_dir = do_read; |
| 184 | dev->dma_stage = 1; | 183 | dev->dma_stage = 1; |
| 184 | INIT_COMPLETION(dev->dma_done); | ||
| 185 | 185 | ||
| 186 | dbg_verbose("doing dma %s ", do_read ? "read" : "write"); | 186 | dbg_verbose("doing dma %s ", do_read ? "read" : "write"); |
| 187 | 187 | ||
| @@ -494,6 +494,11 @@ int r852_ecc_correct(struct mtd_info *mtd, uint8_t *dat, | |||
| 494 | if (dev->card_unstable) | 494 | if (dev->card_unstable) |
| 495 | return 0; | 495 | return 0; |
| 496 | 496 | ||
| 497 | if (dev->dma_error) { | ||
| 498 | dev->dma_error = 0; | ||
| 499 | return -1; | ||
| 500 | } | ||
| 501 | |||
| 497 | r852_write_reg(dev, R852_CTL, dev->ctlreg | R852_CTL_ECC_ACCESS); | 502 | r852_write_reg(dev, R852_CTL, dev->ctlreg | R852_CTL_ECC_ACCESS); |
| 498 | ecc_reg = r852_read_reg_dword(dev, R852_DATALINE); | 503 | ecc_reg = r852_read_reg_dword(dev, R852_DATALINE); |
| 499 | r852_write_reg(dev, R852_CTL, dev->ctlreg); | 504 | r852_write_reg(dev, R852_CTL, dev->ctlreg); |
| @@ -707,6 +712,7 @@ void r852_card_detect_work(struct work_struct *work) | |||
| 707 | container_of(work, struct r852_device, card_detect_work.work); | 712 | container_of(work, struct r852_device, card_detect_work.work); |
| 708 | 713 | ||
| 709 | r852_card_update_present(dev); | 714 | r852_card_update_present(dev); |
| 715 | r852_update_card_detect(dev); | ||
| 710 | dev->card_unstable = 0; | 716 | dev->card_unstable = 0; |
| 711 | 717 | ||
| 712 | /* False alarm */ | 718 | /* False alarm */ |
| @@ -722,7 +728,6 @@ void r852_card_detect_work(struct work_struct *work) | |||
| 722 | else | 728 | else |
| 723 | r852_unregister_nand_device(dev); | 729 | r852_unregister_nand_device(dev); |
| 724 | exit: | 730 | exit: |
| 725 | /* Update detection logic */ | ||
| 726 | r852_update_card_detect(dev); | 731 | r852_update_card_detect(dev); |
| 727 | } | 732 | } |
| 728 | 733 | ||
| @@ -796,6 +801,7 @@ static irqreturn_t r852_irq(int irq, void *data) | |||
| 796 | if (dma_status & R852_DMA_IRQ_ERROR) { | 801 | if (dma_status & R852_DMA_IRQ_ERROR) { |
| 797 | dbg("recieved dma error IRQ"); | 802 | dbg("recieved dma error IRQ"); |
| 798 | r852_dma_done(dev, -EIO); | 803 | r852_dma_done(dev, -EIO); |
| 804 | complete(&dev->dma_done); | ||
| 799 | goto out; | 805 | goto out; |
| 800 | } | 806 | } |
| 801 | 807 | ||
| @@ -825,8 +831,10 @@ static irqreturn_t r852_irq(int irq, void *data) | |||
| 825 | r852_dma_enable(dev); | 831 | r852_dma_enable(dev); |
| 826 | 832 | ||
| 827 | /* Operation done */ | 833 | /* Operation done */ |
| 828 | if (dev->dma_stage == 3) | 834 | if (dev->dma_stage == 3) { |
| 829 | r852_dma_done(dev, 0); | 835 | r852_dma_done(dev, 0); |
| 836 | complete(&dev->dma_done); | ||
| 837 | } | ||
| 830 | goto out; | 838 | goto out; |
| 831 | } | 839 | } |
| 832 | 840 | ||
| @@ -940,18 +948,19 @@ int r852_probe(struct pci_dev *pci_dev, const struct pci_device_id *id) | |||
| 940 | 948 | ||
| 941 | r852_dma_test(dev); | 949 | r852_dma_test(dev); |
| 942 | 950 | ||
| 951 | dev->irq = pci_dev->irq; | ||
| 952 | spin_lock_init(&dev->irqlock); | ||
| 953 | |||
| 954 | dev->card_detected = 0; | ||
| 955 | r852_card_update_present(dev); | ||
| 956 | |||
| 943 | /*register irq handler*/ | 957 | /*register irq handler*/ |
| 944 | error = -ENODEV; | 958 | error = -ENODEV; |
| 945 | if (request_irq(pci_dev->irq, &r852_irq, IRQF_SHARED, | 959 | if (request_irq(pci_dev->irq, &r852_irq, IRQF_SHARED, |
| 946 | DRV_NAME, dev)) | 960 | DRV_NAME, dev)) |
| 947 | goto error10; | 961 | goto error10; |
| 948 | 962 | ||
| 949 | dev->irq = pci_dev->irq; | ||
| 950 | spin_lock_init(&dev->irqlock); | ||
| 951 | |||
| 952 | /* kick initial present test */ | 963 | /* kick initial present test */ |
| 953 | dev->card_detected = 0; | ||
| 954 | r852_card_update_present(dev); | ||
| 955 | queue_delayed_work(dev->card_workqueue, | 964 | queue_delayed_work(dev->card_workqueue, |
| 956 | &dev->card_detect_work, 0); | 965 | &dev->card_detect_work, 0); |
| 957 | 966 | ||
| @@ -1081,7 +1090,7 @@ int r852_resume(struct device *device) | |||
| 1081 | dev->card_detected ? "added" : "removed"); | 1090 | dev->card_detected ? "added" : "removed"); |
| 1082 | 1091 | ||
| 1083 | queue_delayed_work(dev->card_workqueue, | 1092 | queue_delayed_work(dev->card_workqueue, |
| 1084 | &dev->card_detect_work, 1000); | 1093 | &dev->card_detect_work, msecs_to_jiffies(1000)); |
| 1085 | return 0; | 1094 | return 0; |
| 1086 | } | 1095 | } |
| 1087 | 1096 | ||
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index b7512cf08c58..477345d41641 100644 --- a/drivers/pci/quirks.c +++ b/drivers/pci/quirks.c | |||
| @@ -1457,7 +1457,8 @@ static void quirk_jmicron_ata(struct pci_dev *pdev) | |||
| 1457 | conf5 &= ~(1 << 24); /* Clear bit 24 */ | 1457 | conf5 &= ~(1 << 24); /* Clear bit 24 */ |
| 1458 | 1458 | ||
| 1459 | switch (pdev->device) { | 1459 | switch (pdev->device) { |
| 1460 | case PCI_DEVICE_ID_JMICRON_JMB360: | 1460 | case PCI_DEVICE_ID_JMICRON_JMB360: /* SATA single port */ |
| 1461 | case PCI_DEVICE_ID_JMICRON_JMB362: /* SATA dual ports */ | ||
| 1461 | /* The controller should be in single function ahci mode */ | 1462 | /* The controller should be in single function ahci mode */ |
| 1462 | conf1 |= 0x0002A100; /* Set 8, 13, 15, 17 */ | 1463 | conf1 |= 0x0002A100; /* Set 8, 13, 15, 17 */ |
| 1463 | break; | 1464 | break; |
| @@ -1493,12 +1494,14 @@ static void quirk_jmicron_ata(struct pci_dev *pdev) | |||
| 1493 | } | 1494 | } |
| 1494 | DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB360, quirk_jmicron_ata); | 1495 | DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB360, quirk_jmicron_ata); |
| 1495 | DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB361, quirk_jmicron_ata); | 1496 | DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB361, quirk_jmicron_ata); |
| 1497 | DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB362, quirk_jmicron_ata); | ||
| 1496 | DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB363, quirk_jmicron_ata); | 1498 | DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB363, quirk_jmicron_ata); |
| 1497 | DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB365, quirk_jmicron_ata); | 1499 | DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB365, quirk_jmicron_ata); |
| 1498 | DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB366, quirk_jmicron_ata); | 1500 | DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB366, quirk_jmicron_ata); |
| 1499 | DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB368, quirk_jmicron_ata); | 1501 | DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB368, quirk_jmicron_ata); |
| 1500 | DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB360, quirk_jmicron_ata); | 1502 | DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB360, quirk_jmicron_ata); |
| 1501 | DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB361, quirk_jmicron_ata); | 1503 | DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB361, quirk_jmicron_ata); |
| 1504 | DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB362, quirk_jmicron_ata); | ||
| 1502 | DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB363, quirk_jmicron_ata); | 1505 | DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB363, quirk_jmicron_ata); |
| 1503 | DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB365, quirk_jmicron_ata); | 1506 | DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB365, quirk_jmicron_ata); |
| 1504 | DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB366, quirk_jmicron_ata); | 1507 | DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB366, quirk_jmicron_ata); |
diff --git a/drivers/s390/cio/itcw.c b/drivers/s390/cio/itcw.c index 17da9ab932ed..a0ae29564774 100644 --- a/drivers/s390/cio/itcw.c +++ b/drivers/s390/cio/itcw.c | |||
| @@ -42,7 +42,7 @@ | |||
| 42 | * size_t size; | 42 | * size_t size; |
| 43 | * | 43 | * |
| 44 | * size = itcw_calc_size(1, 2, 0); | 44 | * size = itcw_calc_size(1, 2, 0); |
| 45 | * buffer = kmalloc(size, GFP_DMA); | 45 | * buffer = kmalloc(size, GFP_KERNEL | GFP_DMA); |
| 46 | * if (!buffer) | 46 | * if (!buffer) |
| 47 | * return -ENOMEM; | 47 | * return -ENOMEM; |
| 48 | * itcw = itcw_init(buffer, size, ITCW_OP_READ, 1, 2, 0); | 48 | * itcw = itcw_init(buffer, size, ITCW_OP_READ, 1, 2, 0); |
diff --git a/drivers/watchdog/wm8350_wdt.c b/drivers/watchdog/wm8350_wdt.c index 89dd7b035295..b68d928c8f90 100644 --- a/drivers/watchdog/wm8350_wdt.c +++ b/drivers/watchdog/wm8350_wdt.c | |||
| @@ -284,7 +284,7 @@ static int __devinit wm8350_wdt_probe(struct platform_device *pdev) | |||
| 284 | struct wm8350 *wm8350 = platform_get_drvdata(pdev); | 284 | struct wm8350 *wm8350 = platform_get_drvdata(pdev); |
| 285 | 285 | ||
| 286 | if (!wm8350) { | 286 | if (!wm8350) { |
| 287 | dev_err(wm8350->dev, "No driver data supplied\n"); | 287 | pr_err("No driver data supplied\n"); |
| 288 | return -ENODEV; | 288 | return -ENODEV; |
| 289 | } | 289 | } |
| 290 | 290 | ||
diff --git a/fs/jffs2/acl.c b/fs/jffs2/acl.c index a33aab6b5e68..54a92fd02bbd 100644 --- a/fs/jffs2/acl.c +++ b/fs/jffs2/acl.c | |||
| @@ -234,8 +234,9 @@ static int jffs2_set_acl(struct inode *inode, int type, struct posix_acl *acl) | |||
| 234 | if (inode->i_mode != mode) { | 234 | if (inode->i_mode != mode) { |
| 235 | struct iattr attr; | 235 | struct iattr attr; |
| 236 | 236 | ||
| 237 | attr.ia_valid = ATTR_MODE; | 237 | attr.ia_valid = ATTR_MODE | ATTR_CTIME; |
| 238 | attr.ia_mode = mode; | 238 | attr.ia_mode = mode; |
| 239 | attr.ia_ctime = CURRENT_TIME_SEC; | ||
| 239 | rc = jffs2_do_setattr(inode, &attr); | 240 | rc = jffs2_do_setattr(inode, &attr); |
| 240 | if (rc < 0) | 241 | if (rc < 0) |
| 241 | return rc; | 242 | return rc; |
diff --git a/fs/jffs2/dir.c b/fs/jffs2/dir.c index 7aa4417e085f..166062a68230 100644 --- a/fs/jffs2/dir.c +++ b/fs/jffs2/dir.c | |||
| @@ -222,15 +222,18 @@ static int jffs2_create(struct inode *dir_i, struct dentry *dentry, int mode, | |||
| 222 | dir_i->i_mtime = dir_i->i_ctime = ITIME(je32_to_cpu(ri->ctime)); | 222 | dir_i->i_mtime = dir_i->i_ctime = ITIME(je32_to_cpu(ri->ctime)); |
| 223 | 223 | ||
| 224 | jffs2_free_raw_inode(ri); | 224 | jffs2_free_raw_inode(ri); |
| 225 | d_instantiate(dentry, inode); | ||
| 226 | 225 | ||
| 227 | D1(printk(KERN_DEBUG "jffs2_create: Created ino #%lu with mode %o, nlink %d(%d). nrpages %ld\n", | 226 | D1(printk(KERN_DEBUG "jffs2_create: Created ino #%lu with mode %o, nlink %d(%d). nrpages %ld\n", |
| 228 | inode->i_ino, inode->i_mode, inode->i_nlink, | 227 | inode->i_ino, inode->i_mode, inode->i_nlink, |
| 229 | f->inocache->pino_nlink, inode->i_mapping->nrpages)); | 228 | f->inocache->pino_nlink, inode->i_mapping->nrpages)); |
| 229 | |||
| 230 | d_instantiate(dentry, inode); | ||
| 231 | unlock_new_inode(inode); | ||
| 230 | return 0; | 232 | return 0; |
| 231 | 233 | ||
| 232 | fail: | 234 | fail: |
| 233 | make_bad_inode(inode); | 235 | make_bad_inode(inode); |
| 236 | unlock_new_inode(inode); | ||
| 234 | iput(inode); | 237 | iput(inode); |
| 235 | jffs2_free_raw_inode(ri); | 238 | jffs2_free_raw_inode(ri); |
| 236 | return ret; | 239 | return ret; |
| @@ -360,8 +363,8 @@ static int jffs2_symlink (struct inode *dir_i, struct dentry *dentry, const char | |||
| 360 | /* Eeek. Wave bye bye */ | 363 | /* Eeek. Wave bye bye */ |
| 361 | mutex_unlock(&f->sem); | 364 | mutex_unlock(&f->sem); |
| 362 | jffs2_complete_reservation(c); | 365 | jffs2_complete_reservation(c); |
| 363 | jffs2_clear_inode(inode); | 366 | ret = PTR_ERR(fn); |
| 364 | return PTR_ERR(fn); | 367 | goto fail; |
| 365 | } | 368 | } |
| 366 | 369 | ||
| 367 | /* We use f->target field to store the target path. */ | 370 | /* We use f->target field to store the target path. */ |
| @@ -370,8 +373,8 @@ static int jffs2_symlink (struct inode *dir_i, struct dentry *dentry, const char | |||
| 370 | printk(KERN_WARNING "Can't allocate %d bytes of memory\n", targetlen + 1); | 373 | printk(KERN_WARNING "Can't allocate %d bytes of memory\n", targetlen + 1); |
| 371 | mutex_unlock(&f->sem); | 374 | mutex_unlock(&f->sem); |
| 372 | jffs2_complete_reservation(c); | 375 | jffs2_complete_reservation(c); |
| 373 | jffs2_clear_inode(inode); | 376 | ret = -ENOMEM; |
| 374 | return -ENOMEM; | 377 | goto fail; |
| 375 | } | 378 | } |
| 376 | 379 | ||
| 377 | memcpy(f->target, target, targetlen + 1); | 380 | memcpy(f->target, target, targetlen + 1); |
| @@ -386,30 +389,24 @@ static int jffs2_symlink (struct inode *dir_i, struct dentry *dentry, const char | |||
| 386 | jffs2_complete_reservation(c); | 389 | jffs2_complete_reservation(c); |
| 387 | 390 | ||
| 388 | ret = jffs2_init_security(inode, dir_i); | 391 | ret = jffs2_init_security(inode, dir_i); |
| 389 | if (ret) { | 392 | if (ret) |
| 390 | jffs2_clear_inode(inode); | 393 | goto fail; |
| 391 | return ret; | 394 | |
| 392 | } | ||
| 393 | ret = jffs2_init_acl_post(inode); | 395 | ret = jffs2_init_acl_post(inode); |
| 394 | if (ret) { | 396 | if (ret) |
| 395 | jffs2_clear_inode(inode); | 397 | goto fail; |
| 396 | return ret; | ||
| 397 | } | ||
| 398 | 398 | ||
| 399 | ret = jffs2_reserve_space(c, sizeof(*rd)+namelen, &alloclen, | 399 | ret = jffs2_reserve_space(c, sizeof(*rd)+namelen, &alloclen, |
| 400 | ALLOC_NORMAL, JFFS2_SUMMARY_DIRENT_SIZE(namelen)); | 400 | ALLOC_NORMAL, JFFS2_SUMMARY_DIRENT_SIZE(namelen)); |
| 401 | if (ret) { | 401 | if (ret) |
| 402 | /* Eep. */ | 402 | goto fail; |
| 403 | jffs2_clear_inode(inode); | ||
| 404 | return ret; | ||
| 405 | } | ||
| 406 | 403 | ||
| 407 | rd = jffs2_alloc_raw_dirent(); | 404 | rd = jffs2_alloc_raw_dirent(); |
| 408 | if (!rd) { | 405 | if (!rd) { |
| 409 | /* Argh. Now we treat it like a normal delete */ | 406 | /* Argh. Now we treat it like a normal delete */ |
| 410 | jffs2_complete_reservation(c); | 407 | jffs2_complete_reservation(c); |
| 411 | jffs2_clear_inode(inode); | 408 | ret = -ENOMEM; |
| 412 | return -ENOMEM; | 409 | goto fail; |
| 413 | } | 410 | } |
| 414 | 411 | ||
| 415 | dir_f = JFFS2_INODE_INFO(dir_i); | 412 | dir_f = JFFS2_INODE_INFO(dir_i); |
| @@ -437,8 +434,8 @@ static int jffs2_symlink (struct inode *dir_i, struct dentry *dentry, const char | |||
| 437 | jffs2_complete_reservation(c); | 434 | jffs2_complete_reservation(c); |
| 438 | jffs2_free_raw_dirent(rd); | 435 | jffs2_free_raw_dirent(rd); |
| 439 | mutex_unlock(&dir_f->sem); | 436 | mutex_unlock(&dir_f->sem); |
| 440 | jffs2_clear_inode(inode); | 437 | ret = PTR_ERR(fd); |
| 441 | return PTR_ERR(fd); | 438 | goto fail; |
| 442 | } | 439 | } |
| 443 | 440 | ||
| 444 | dir_i->i_mtime = dir_i->i_ctime = ITIME(je32_to_cpu(rd->mctime)); | 441 | dir_i->i_mtime = dir_i->i_ctime = ITIME(je32_to_cpu(rd->mctime)); |
| @@ -453,7 +450,14 @@ static int jffs2_symlink (struct inode *dir_i, struct dentry *dentry, const char | |||
| 453 | jffs2_complete_reservation(c); | 450 | jffs2_complete_reservation(c); |
| 454 | 451 | ||
| 455 | d_instantiate(dentry, inode); | 452 | d_instantiate(dentry, inode); |
| 453 | unlock_new_inode(inode); | ||
| 456 | return 0; | 454 | return 0; |
| 455 | |||
| 456 | fail: | ||
| 457 | make_bad_inode(inode); | ||
| 458 | unlock_new_inode(inode); | ||
| 459 | iput(inode); | ||
| 460 | return ret; | ||
| 457 | } | 461 | } |
| 458 | 462 | ||
| 459 | 463 | ||
| @@ -519,8 +523,8 @@ static int jffs2_mkdir (struct inode *dir_i, struct dentry *dentry, int mode) | |||
| 519 | /* Eeek. Wave bye bye */ | 523 | /* Eeek. Wave bye bye */ |
| 520 | mutex_unlock(&f->sem); | 524 | mutex_unlock(&f->sem); |
| 521 | jffs2_complete_reservation(c); | 525 | jffs2_complete_reservation(c); |
| 522 | jffs2_clear_inode(inode); | 526 | ret = PTR_ERR(fn); |
| 523 | return PTR_ERR(fn); | 527 | goto fail; |
| 524 | } | 528 | } |
| 525 | /* No data here. Only a metadata node, which will be | 529 | /* No data here. Only a metadata node, which will be |
| 526 | obsoleted by the first data write | 530 | obsoleted by the first data write |
| @@ -531,30 +535,24 @@ static int jffs2_mkdir (struct inode *dir_i, struct dentry *dentry, int mode) | |||
| 531 | jffs2_complete_reservation(c); | 535 | jffs2_complete_reservation(c); |
| 532 | 536 | ||
| 533 | ret = jffs2_init_security(inode, dir_i); | 537 | ret = jffs2_init_security(inode, dir_i); |
| 534 | if (ret) { | 538 | if (ret) |
| 535 | jffs2_clear_inode(inode); | 539 | goto fail; |
| 536 | return ret; | 540 | |
| 537 | } | ||
| 538 | ret = jffs2_init_acl_post(inode); | 541 | ret = jffs2_init_acl_post(inode); |
| 539 | if (ret) { | 542 | if (ret) |
| 540 | jffs2_clear_inode(inode); | 543 | goto fail; |
| 541 | return ret; | ||
| 542 | } | ||
| 543 | 544 | ||
| 544 | ret = jffs2_reserve_space(c, sizeof(*rd)+namelen, &alloclen, | 545 | ret = jffs2_reserve_space(c, sizeof(*rd)+namelen, &alloclen, |
| 545 | ALLOC_NORMAL, JFFS2_SUMMARY_DIRENT_SIZE(namelen)); | 546 | ALLOC_NORMAL, JFFS2_SUMMARY_DIRENT_SIZE(namelen)); |
| 546 | if (ret) { | 547 | if (ret) |
| 547 | /* Eep. */ | 548 | goto fail; |
| 548 | jffs2_clear_inode(inode); | ||
| 549 | return ret; | ||
| 550 | } | ||
| 551 | 549 | ||
| 552 | rd = jffs2_alloc_raw_dirent(); | 550 | rd = jffs2_alloc_raw_dirent(); |
| 553 | if (!rd) { | 551 | if (!rd) { |
| 554 | /* Argh. Now we treat it like a normal delete */ | 552 | /* Argh. Now we treat it like a normal delete */ |
| 555 | jffs2_complete_reservation(c); | 553 | jffs2_complete_reservation(c); |
| 556 | jffs2_clear_inode(inode); | 554 | ret = -ENOMEM; |
| 557 | return -ENOMEM; | 555 | goto fail; |
| 558 | } | 556 | } |
| 559 | 557 | ||
| 560 | dir_f = JFFS2_INODE_INFO(dir_i); | 558 | dir_f = JFFS2_INODE_INFO(dir_i); |
| @@ -582,8 +580,8 @@ static int jffs2_mkdir (struct inode *dir_i, struct dentry *dentry, int mode) | |||
| 582 | jffs2_complete_reservation(c); | 580 | jffs2_complete_reservation(c); |
| 583 | jffs2_free_raw_dirent(rd); | 581 | jffs2_free_raw_dirent(rd); |
| 584 | mutex_unlock(&dir_f->sem); | 582 | mutex_unlock(&dir_f->sem); |
| 585 | jffs2_clear_inode(inode); | 583 | ret = PTR_ERR(fd); |
| 586 | return PTR_ERR(fd); | 584 | goto fail; |
| 587 | } | 585 | } |
| 588 | 586 | ||
| 589 | dir_i->i_mtime = dir_i->i_ctime = ITIME(je32_to_cpu(rd->mctime)); | 587 | dir_i->i_mtime = dir_i->i_ctime = ITIME(je32_to_cpu(rd->mctime)); |
| @@ -599,7 +597,14 @@ static int jffs2_mkdir (struct inode *dir_i, struct dentry *dentry, int mode) | |||
| 599 | jffs2_complete_reservation(c); | 597 | jffs2_complete_reservation(c); |
| 600 | 598 | ||
| 601 | d_instantiate(dentry, inode); | 599 | d_instantiate(dentry, inode); |
| 600 | unlock_new_inode(inode); | ||
| 602 | return 0; | 601 | return 0; |
| 602 | |||
| 603 | fail: | ||
| 604 | make_bad_inode(inode); | ||
| 605 | unlock_new_inode(inode); | ||
| 606 | iput(inode); | ||
| 607 | return ret; | ||
| 603 | } | 608 | } |
| 604 | 609 | ||
| 605 | static int jffs2_rmdir (struct inode *dir_i, struct dentry *dentry) | 610 | static int jffs2_rmdir (struct inode *dir_i, struct dentry *dentry) |
| @@ -693,8 +698,8 @@ static int jffs2_mknod (struct inode *dir_i, struct dentry *dentry, int mode, de | |||
| 693 | /* Eeek. Wave bye bye */ | 698 | /* Eeek. Wave bye bye */ |
| 694 | mutex_unlock(&f->sem); | 699 | mutex_unlock(&f->sem); |
| 695 | jffs2_complete_reservation(c); | 700 | jffs2_complete_reservation(c); |
| 696 | jffs2_clear_inode(inode); | 701 | ret = PTR_ERR(fn); |
| 697 | return PTR_ERR(fn); | 702 | goto fail; |
| 698 | } | 703 | } |
| 699 | /* No data here. Only a metadata node, which will be | 704 | /* No data here. Only a metadata node, which will be |
| 700 | obsoleted by the first data write | 705 | obsoleted by the first data write |
| @@ -705,30 +710,24 @@ static int jffs2_mknod (struct inode *dir_i, struct dentry *dentry, int mode, de | |||
| 705 | jffs2_complete_reservation(c); | 710 | jffs2_complete_reservation(c); |
| 706 | 711 | ||
| 707 | ret = jffs2_init_security(inode, dir_i); | 712 | ret = jffs2_init_security(inode, dir_i); |
| 708 | if (ret) { | 713 | if (ret) |
| 709 | jffs2_clear_inode(inode); | 714 | goto fail; |
| 710 | return ret; | 715 | |
| 711 | } | ||
| 712 | ret = jffs2_init_acl_post(inode); | 716 | ret = jffs2_init_acl_post(inode); |
| 713 | if (ret) { | 717 | if (ret) |
| 714 | jffs2_clear_inode(inode); | 718 | goto fail; |
| 715 | return ret; | ||
| 716 | } | ||
| 717 | 719 | ||
| 718 | ret = jffs2_reserve_space(c, sizeof(*rd)+namelen, &alloclen, | 720 | ret = jffs2_reserve_space(c, sizeof(*rd)+namelen, &alloclen, |
| 719 | ALLOC_NORMAL, JFFS2_SUMMARY_DIRENT_SIZE(namelen)); | 721 | ALLOC_NORMAL, JFFS2_SUMMARY_DIRENT_SIZE(namelen)); |
| 720 | if (ret) { | 722 | if (ret) |
| 721 | /* Eep. */ | 723 | goto fail; |
| 722 | jffs2_clear_inode(inode); | ||
| 723 | return ret; | ||
| 724 | } | ||
| 725 | 724 | ||
| 726 | rd = jffs2_alloc_raw_dirent(); | 725 | rd = jffs2_alloc_raw_dirent(); |
| 727 | if (!rd) { | 726 | if (!rd) { |
| 728 | /* Argh. Now we treat it like a normal delete */ | 727 | /* Argh. Now we treat it like a normal delete */ |
| 729 | jffs2_complete_reservation(c); | 728 | jffs2_complete_reservation(c); |
| 730 | jffs2_clear_inode(inode); | 729 | ret = -ENOMEM; |
| 731 | return -ENOMEM; | 730 | goto fail; |
| 732 | } | 731 | } |
| 733 | 732 | ||
| 734 | dir_f = JFFS2_INODE_INFO(dir_i); | 733 | dir_f = JFFS2_INODE_INFO(dir_i); |
| @@ -759,8 +758,8 @@ static int jffs2_mknod (struct inode *dir_i, struct dentry *dentry, int mode, de | |||
| 759 | jffs2_complete_reservation(c); | 758 | jffs2_complete_reservation(c); |
| 760 | jffs2_free_raw_dirent(rd); | 759 | jffs2_free_raw_dirent(rd); |
| 761 | mutex_unlock(&dir_f->sem); | 760 | mutex_unlock(&dir_f->sem); |
| 762 | jffs2_clear_inode(inode); | 761 | ret = PTR_ERR(fd); |
| 763 | return PTR_ERR(fd); | 762 | goto fail; |
| 764 | } | 763 | } |
| 765 | 764 | ||
| 766 | dir_i->i_mtime = dir_i->i_ctime = ITIME(je32_to_cpu(rd->mctime)); | 765 | dir_i->i_mtime = dir_i->i_ctime = ITIME(je32_to_cpu(rd->mctime)); |
| @@ -775,8 +774,14 @@ static int jffs2_mknod (struct inode *dir_i, struct dentry *dentry, int mode, de | |||
| 775 | jffs2_complete_reservation(c); | 774 | jffs2_complete_reservation(c); |
| 776 | 775 | ||
| 777 | d_instantiate(dentry, inode); | 776 | d_instantiate(dentry, inode); |
| 778 | 777 | unlock_new_inode(inode); | |
| 779 | return 0; | 778 | return 0; |
| 779 | |||
| 780 | fail: | ||
| 781 | make_bad_inode(inode); | ||
| 782 | unlock_new_inode(inode); | ||
| 783 | iput(inode); | ||
| 784 | return ret; | ||
| 780 | } | 785 | } |
| 781 | 786 | ||
| 782 | static int jffs2_rename (struct inode *old_dir_i, struct dentry *old_dentry, | 787 | static int jffs2_rename (struct inode *old_dir_i, struct dentry *old_dentry, |
diff --git a/fs/jffs2/fs.c b/fs/jffs2/fs.c index 8bc2c80ab159..459d39d1ea0b 100644 --- a/fs/jffs2/fs.c +++ b/fs/jffs2/fs.c | |||
| @@ -465,7 +465,12 @@ struct inode *jffs2_new_inode (struct inode *dir_i, int mode, struct jffs2_raw_i | |||
| 465 | inode->i_blocks = 0; | 465 | inode->i_blocks = 0; |
| 466 | inode->i_size = 0; | 466 | inode->i_size = 0; |
| 467 | 467 | ||
| 468 | insert_inode_hash(inode); | 468 | if (insert_inode_locked(inode) < 0) { |
| 469 | make_bad_inode(inode); | ||
| 470 | unlock_new_inode(inode); | ||
| 471 | iput(inode); | ||
| 472 | return ERR_PTR(-EINVAL); | ||
| 473 | } | ||
| 469 | 474 | ||
| 470 | return inode; | 475 | return inode; |
| 471 | } | 476 | } |
diff --git a/fs/xfs/linux-2.6/xfs_aops.c b/fs/xfs/linux-2.6/xfs_aops.c index a0fa3bf0d1bb..34640d6dbdcb 100644 --- a/fs/xfs/linux-2.6/xfs_aops.c +++ b/fs/xfs/linux-2.6/xfs_aops.c | |||
| @@ -1381,14 +1381,6 @@ xfs_vm_writepage( | |||
| 1381 | if (!page_has_buffers(page)) | 1381 | if (!page_has_buffers(page)) |
| 1382 | create_empty_buffers(page, 1 << inode->i_blkbits, 0); | 1382 | create_empty_buffers(page, 1 << inode->i_blkbits, 0); |
| 1383 | 1383 | ||
| 1384 | |||
| 1385 | /* | ||
| 1386 | * VM calculation for nr_to_write seems off. Bump it way | ||
| 1387 | * up, this gets simple streaming writes zippy again. | ||
| 1388 | * To be reviewed again after Jens' writeback changes. | ||
| 1389 | */ | ||
| 1390 | wbc->nr_to_write *= 4; | ||
| 1391 | |||
| 1392 | /* | 1384 | /* |
| 1393 | * Convert delayed allocate, unwritten or unmapped space | 1385 | * Convert delayed allocate, unwritten or unmapped space |
| 1394 | * to real space and flush out to disk. | 1386 | * to real space and flush out to disk. |
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h index f149dd10908b..4eb467910a45 100644 --- a/include/linux/pci_ids.h +++ b/include/linux/pci_ids.h | |||
| @@ -2321,6 +2321,7 @@ | |||
| 2321 | #define PCI_VENDOR_ID_JMICRON 0x197B | 2321 | #define PCI_VENDOR_ID_JMICRON 0x197B |
| 2322 | #define PCI_DEVICE_ID_JMICRON_JMB360 0x2360 | 2322 | #define PCI_DEVICE_ID_JMICRON_JMB360 0x2360 |
| 2323 | #define PCI_DEVICE_ID_JMICRON_JMB361 0x2361 | 2323 | #define PCI_DEVICE_ID_JMICRON_JMB361 0x2361 |
| 2324 | #define PCI_DEVICE_ID_JMICRON_JMB362 0x2362 | ||
| 2324 | #define PCI_DEVICE_ID_JMICRON_JMB363 0x2363 | 2325 | #define PCI_DEVICE_ID_JMICRON_JMB363 0x2363 |
| 2325 | #define PCI_DEVICE_ID_JMICRON_JMB365 0x2365 | 2326 | #define PCI_DEVICE_ID_JMICRON_JMB365 0x2365 |
| 2326 | #define PCI_DEVICE_ID_JMICRON_JMB366 0x2366 | 2327 | #define PCI_DEVICE_ID_JMICRON_JMB366 0x2366 |
diff --git a/include/linux/writeback.h b/include/linux/writeback.h index f64134653a8c..d63ef8f9609f 100644 --- a/include/linux/writeback.h +++ b/include/linux/writeback.h | |||
| @@ -56,15 +56,6 @@ struct writeback_control { | |||
| 56 | unsigned for_reclaim:1; /* Invoked from the page allocator */ | 56 | unsigned for_reclaim:1; /* Invoked from the page allocator */ |
| 57 | unsigned range_cyclic:1; /* range_start is cyclic */ | 57 | unsigned range_cyclic:1; /* range_start is cyclic */ |
| 58 | unsigned more_io:1; /* more io to be dispatched */ | 58 | unsigned more_io:1; /* more io to be dispatched */ |
| 59 | /* | ||
| 60 | * write_cache_pages() won't update wbc->nr_to_write and | ||
| 61 | * mapping->writeback_index if no_nrwrite_index_update | ||
| 62 | * is set. write_cache_pages() may write more than we | ||
| 63 | * requested and we want to make sure nr_to_write and | ||
| 64 | * writeback_index are updated in a consistent manner | ||
| 65 | * so we use a single control to update them | ||
| 66 | */ | ||
| 67 | unsigned no_nrwrite_index_update:1; | ||
| 68 | }; | 59 | }; |
| 69 | 60 | ||
| 70 | /* | 61 | /* |
diff --git a/include/trace/events/ext4.h b/include/trace/events/ext4.h index f5b1ba90e952..f3865c7b4166 100644 --- a/include/trace/events/ext4.h +++ b/include/trace/events/ext4.h | |||
| @@ -306,7 +306,6 @@ TRACE_EVENT(ext4_da_writepages_result, | |||
| 306 | __field( int, pages_written ) | 306 | __field( int, pages_written ) |
| 307 | __field( long, pages_skipped ) | 307 | __field( long, pages_skipped ) |
| 308 | __field( char, more_io ) | 308 | __field( char, more_io ) |
| 309 | __field( char, no_nrwrite_index_update ) | ||
| 310 | __field( pgoff_t, writeback_index ) | 309 | __field( pgoff_t, writeback_index ) |
| 311 | ), | 310 | ), |
| 312 | 311 | ||
| @@ -317,16 +316,14 @@ TRACE_EVENT(ext4_da_writepages_result, | |||
| 317 | __entry->pages_written = pages_written; | 316 | __entry->pages_written = pages_written; |
| 318 | __entry->pages_skipped = wbc->pages_skipped; | 317 | __entry->pages_skipped = wbc->pages_skipped; |
| 319 | __entry->more_io = wbc->more_io; | 318 | __entry->more_io = wbc->more_io; |
| 320 | __entry->no_nrwrite_index_update = wbc->no_nrwrite_index_update; | ||
| 321 | __entry->writeback_index = inode->i_mapping->writeback_index; | 319 | __entry->writeback_index = inode->i_mapping->writeback_index; |
| 322 | ), | 320 | ), |
| 323 | 321 | ||
| 324 | TP_printk("dev %s ino %lu ret %d pages_written %d pages_skipped %ld more_io %d no_nrwrite_index_update %d writeback_index %lu", | 322 | TP_printk("dev %s ino %lu ret %d pages_written %d pages_skipped %ld more_io %d writeback_index %lu", |
| 325 | jbd2_dev_to_name(__entry->dev), | 323 | jbd2_dev_to_name(__entry->dev), |
| 326 | (unsigned long) __entry->ino, __entry->ret, | 324 | (unsigned long) __entry->ino, __entry->ret, |
| 327 | __entry->pages_written, __entry->pages_skipped, | 325 | __entry->pages_written, __entry->pages_skipped, |
| 328 | __entry->more_io, | 326 | __entry->more_io, |
| 329 | __entry->no_nrwrite_index_update, | ||
| 330 | (unsigned long) __entry->writeback_index) | 327 | (unsigned long) __entry->writeback_index) |
| 331 | ); | 328 | ); |
| 332 | 329 | ||
diff --git a/mm/page-writeback.c b/mm/page-writeback.c index 5fa63bdf52e4..bbd396ac9546 100644 --- a/mm/page-writeback.c +++ b/mm/page-writeback.c | |||
| @@ -835,7 +835,6 @@ int write_cache_pages(struct address_space *mapping, | |||
| 835 | pgoff_t done_index; | 835 | pgoff_t done_index; |
| 836 | int cycled; | 836 | int cycled; |
| 837 | int range_whole = 0; | 837 | int range_whole = 0; |
| 838 | long nr_to_write = wbc->nr_to_write; | ||
| 839 | 838 | ||
| 840 | pagevec_init(&pvec, 0); | 839 | pagevec_init(&pvec, 0); |
| 841 | if (wbc->range_cyclic) { | 840 | if (wbc->range_cyclic) { |
| @@ -852,7 +851,22 @@ int write_cache_pages(struct address_space *mapping, | |||
| 852 | if (wbc->range_start == 0 && wbc->range_end == LLONG_MAX) | 851 | if (wbc->range_start == 0 && wbc->range_end == LLONG_MAX) |
| 853 | range_whole = 1; | 852 | range_whole = 1; |
| 854 | cycled = 1; /* ignore range_cyclic tests */ | 853 | cycled = 1; /* ignore range_cyclic tests */ |
| 854 | |||
| 855 | /* | ||
| 856 | * If this is a data integrity sync, cap the writeback to the | ||
| 857 | * current end of file. Any extension to the file that occurs | ||
| 858 | * after this is a new write and we don't need to write those | ||
| 859 | * pages out to fulfil our data integrity requirements. If we | ||
| 860 | * try to write them out, we can get stuck in this scan until | ||
| 861 | * the concurrent writer stops adding dirty pages and extending | ||
| 862 | * EOF. | ||
| 863 | */ | ||
| 864 | if (wbc->sync_mode == WB_SYNC_ALL && | ||
| 865 | wbc->range_end == LLONG_MAX) { | ||
| 866 | end = i_size_read(mapping->host) >> PAGE_CACHE_SHIFT; | ||
| 867 | } | ||
| 855 | } | 868 | } |
| 869 | |||
| 856 | retry: | 870 | retry: |
| 857 | done_index = index; | 871 | done_index = index; |
| 858 | while (!done && (index <= end)) { | 872 | while (!done && (index <= end)) { |
| @@ -935,11 +949,10 @@ continue_unlock: | |||
| 935 | done = 1; | 949 | done = 1; |
| 936 | break; | 950 | break; |
| 937 | } | 951 | } |
| 938 | } | 952 | } |
| 939 | 953 | ||
| 940 | if (nr_to_write > 0) { | 954 | if (wbc->nr_to_write > 0) { |
| 941 | nr_to_write--; | 955 | if (--wbc->nr_to_write == 0 && |
| 942 | if (nr_to_write == 0 && | ||
| 943 | wbc->sync_mode == WB_SYNC_NONE) { | 956 | wbc->sync_mode == WB_SYNC_NONE) { |
| 944 | /* | 957 | /* |
| 945 | * We stop writing back only if we are | 958 | * We stop writing back only if we are |
| @@ -970,11 +983,8 @@ continue_unlock: | |||
| 970 | end = writeback_index - 1; | 983 | end = writeback_index - 1; |
| 971 | goto retry; | 984 | goto retry; |
| 972 | } | 985 | } |
| 973 | if (!wbc->no_nrwrite_index_update) { | 986 | if (wbc->range_cyclic || (range_whole && wbc->nr_to_write > 0)) |
| 974 | if (wbc->range_cyclic || (range_whole && nr_to_write > 0)) | 987 | mapping->writeback_index = done_index; |
| 975 | mapping->writeback_index = done_index; | ||
| 976 | wbc->nr_to_write = nr_to_write; | ||
| 977 | } | ||
| 978 | 988 | ||
| 979 | return ret; | 989 | return ret; |
| 980 | } | 990 | } |
