From 5f3da3f1af81e4e83304b7436d6cf5114affb4b6 Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Mon, 1 Sep 2008 10:54:46 +0100 Subject: [PATCH] --- yaml --- r: 109378 b: refs/heads/master c: 1cede1affb3cc5a9520fdbc75b3fbaa6432cbc5a h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/arch/m68k/atari/atakeyb.c | 9 +++---- trunk/arch/parisc/hpux/fs.c | 2 +- trunk/arch/sparc/include/asm/smp_32.h | 25 ++++++++----------- trunk/arch/sparc/kernel/of_device.c | 19 ++++---------- trunk/arch/sparc/kernel/sun4d_smp.c | 16 +++++------- trunk/arch/sparc/kernel/sun4m_smp.c | 12 +++------ trunk/arch/sparc64/kernel/of_device.c | 20 +++++---------- trunk/arch/sparc64/mm/init.c | 2 +- trunk/arch/x86/pci/i386.c | 9 ++++--- trunk/block/cmd-filter.c | 3 +-- trunk/block/genhd.c | 15 +++-------- trunk/drivers/gpu/drm/radeon/radeon_cp.c | 4 +-- trunk/drivers/ide/ide-cd.c | 2 -- trunk/drivers/scsi/sd.c | 2 -- trunk/drivers/scsi/sr.c | 2 -- trunk/firmware/Makefile | 16 ++++++++++-- trunk/fs/cifs/CHANGES | 5 +--- trunk/fs/cifs/README | 14 ++--------- trunk/fs/cifs/cifsencrypt.c | 1 - trunk/fs/cifs/file.c | 4 --- trunk/fs/cifs/sess.c | 2 -- trunk/fs/nfsd/nfs4acl.c | 2 +- trunk/fs/nfsd/nfs4proc.c | 12 ++++----- trunk/include/linux/sunrpc/svc_rdma.h | 1 + trunk/kernel/resource.c | 2 +- trunk/kernel/softlockup.c | 7 ++++-- trunk/net/sunrpc/sysctl.c | 18 ++++++++++--- trunk/net/sunrpc/xprtrdma/svc_rdma_recvfrom.c | 8 +++--- .../net/sunrpc/xprtrdma/svc_rdma_transport.c | 5 ++-- 30 files changed, 101 insertions(+), 140 deletions(-) diff --git a/[refs] b/[refs] index f5272e23107f..ef8d5095c927 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: e77295dc9e6b52281ae85af4068f13752524e9f4 +refs/heads/master: 1cede1affb3cc5a9520fdbc75b3fbaa6432cbc5a diff --git a/trunk/arch/m68k/atari/atakeyb.c b/trunk/arch/m68k/atari/atakeyb.c index bb959fbab2dc..8a2a53b33616 100644 --- a/trunk/arch/m68k/atari/atakeyb.c +++ b/trunk/arch/m68k/atari/atakeyb.c @@ -580,15 +580,13 @@ int atari_keyb_init(void) do { /* reset IKBD ACIA */ acia.key_ctrl = ACIA_RESET | - ((atari_switches & ATARI_SWITCH_IKBD) ? - ACIA_RHTID : 0); + (atari_switches & ATARI_SWITCH_IKBD) ? ACIA_RHTID : 0; (void)acia.key_ctrl; (void)acia.key_data; /* reset MIDI ACIA */ acia.mid_ctrl = ACIA_RESET | - ((atari_switches & ATARI_SWITCH_MIDI) ? - ACIA_RHTID : 0); + (atari_switches & ATARI_SWITCH_MIDI) ? ACIA_RHTID : 0; (void)acia.mid_ctrl; (void)acia.mid_data; @@ -601,8 +599,7 @@ int atari_keyb_init(void) ACIA_RHTID : ACIA_RLTID); acia.mid_ctrl = ACIA_DIV16 | ACIA_D8N1S | - ((atari_switches & ATARI_SWITCH_MIDI) ? - ACIA_RHTID : 0); + (atari_switches & ATARI_SWITCH_MIDI) ? ACIA_RHTID : 0; /* make sure the interrupt line is up */ } while ((mfp.par_dt_reg & 0x10) == 0); diff --git a/trunk/arch/parisc/hpux/fs.c b/trunk/arch/parisc/hpux/fs.c index 12c04c5e558b..69ff671498e5 100644 --- a/trunk/arch/parisc/hpux/fs.c +++ b/trunk/arch/parisc/hpux/fs.c @@ -104,7 +104,7 @@ static int filldir(void * __buf, const char * name, int namlen, loff_t offset, buf->count -= reclen; return 0; Efault: - buf->error = -EFAULT; + buffer->error = -EFAULT; return -EFAULT; } diff --git a/trunk/arch/sparc/include/asm/smp_32.h b/trunk/arch/sparc/include/asm/smp_32.h index a8180e546a48..7201752cf934 100644 --- a/trunk/arch/sparc/include/asm/smp_32.h +++ b/trunk/arch/sparc/include/asm/smp_32.h @@ -50,24 +50,27 @@ struct seq_file; void smp_bogo(struct seq_file *); void smp_info(struct seq_file *); -BTFIXUPDEF_CALL(void, smp_cross_call, smpfunc_t, cpumask_t, unsigned long, unsigned long, unsigned long, unsigned long) +BTFIXUPDEF_CALL(void, smp_cross_call, smpfunc_t, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long) BTFIXUPDEF_CALL(int, __hard_smp_processor_id, void) BTFIXUPDEF_BLACKBOX(hard_smp_processor_id) BTFIXUPDEF_BLACKBOX(load_current) -#define smp_cross_call(func,mask,arg1,arg2,arg3,arg4) BTFIXUP_CALL(smp_cross_call)(func,mask,arg1,arg2,arg3,arg4) +#define smp_cross_call(func,arg1,arg2,arg3,arg4,arg5) BTFIXUP_CALL(smp_cross_call)(func,arg1,arg2,arg3,arg4,arg5) -static inline void xc0(smpfunc_t func) { smp_cross_call(func, cpu_online_map, 0, 0, 0, 0); } +static inline void xc0(smpfunc_t func) { smp_cross_call(func, 0, 0, 0, 0, 0); } static inline void xc1(smpfunc_t func, unsigned long arg1) -{ smp_cross_call(func, cpu_online_map, arg1, 0, 0, 0); } +{ smp_cross_call(func, arg1, 0, 0, 0, 0); } static inline void xc2(smpfunc_t func, unsigned long arg1, unsigned long arg2) -{ smp_cross_call(func, cpu_online_map, arg1, arg2, 0, 0); } +{ smp_cross_call(func, arg1, arg2, 0, 0, 0); } static inline void xc3(smpfunc_t func, unsigned long arg1, unsigned long arg2, unsigned long arg3) -{ smp_cross_call(func, cpu_online_map, arg1, arg2, arg3, 0); } +{ smp_cross_call(func, arg1, arg2, arg3, 0, 0); } static inline void xc4(smpfunc_t func, unsigned long arg1, unsigned long arg2, unsigned long arg3, unsigned long arg4) -{ smp_cross_call(func, cpu_online_map, arg1, arg2, arg3, arg4); } +{ smp_cross_call(func, arg1, arg2, arg3, arg4, 0); } +static inline void xc5(smpfunc_t func, unsigned long arg1, unsigned long arg2, + unsigned long arg3, unsigned long arg4, unsigned long arg5) +{ smp_cross_call(func, arg1, arg2, arg3, arg4, arg5); } static inline int smp_call_function(void (*func)(void *info), void *info, int wait) { @@ -75,14 +78,6 @@ static inline int smp_call_function(void (*func)(void *info), void *info, int wa return 0; } -static inline int smp_call_function_single(int cpuid, void (*func) (void *info), - void *info, int wait) -{ - smp_cross_call((smpfunc_t)func, cpumask_of_cpu(cpuid), - (unsigned long) info, 0, 0, 0); - return 0; -} - static inline int cpu_logical_map(int cpu) { return cpu; diff --git a/trunk/arch/sparc/kernel/of_device.c b/trunk/arch/sparc/kernel/of_device.c index c481d45f97b7..cc4c235c4f59 100644 --- a/trunk/arch/sparc/kernel/of_device.c +++ b/trunk/arch/sparc/kernel/of_device.c @@ -70,7 +70,7 @@ struct of_bus { int *addrc, int *sizec); int (*map)(u32 *addr, const u32 *range, int na, int ns, int pna); - unsigned long (*get_flags)(const u32 *addr, unsigned long); + unsigned int (*get_flags)(const u32 *addr); }; /* @@ -130,10 +130,8 @@ static int of_bus_default_map(u32 *addr, const u32 *range, return 0; } -static unsigned long of_bus_default_get_flags(const u32 *addr, unsigned long flags) +static unsigned int of_bus_default_get_flags(const u32 *addr) { - if (flags) - return flags; return IORESOURCE_MEM; } @@ -196,21 +194,17 @@ static int of_bus_pci_map(u32 *addr, const u32 *range, return 0; } -static unsigned long of_bus_pci_get_flags(const u32 *addr, unsigned long flags) +static unsigned int of_bus_pci_get_flags(const u32 *addr) { + unsigned int flags = 0; u32 w = addr[0]; - /* For PCI, we override whatever child busses may have used. */ - flags = 0; switch((w >> 24) & 0x03) { case 0x01: flags |= IORESOURCE_IO; - break; - case 0x02: /* 32 bits */ case 0x03: /* 64 bits */ flags |= IORESOURCE_MEM; - break; } if (w & 0x40000000) flags |= IORESOURCE_PREFETCH; @@ -368,11 +362,10 @@ static void __init build_device_resources(struct of_device *op, int pna, pns; size = of_read_addr(reg + na, ns); + flags = bus->get_flags(reg); memcpy(addr, reg, na * 4); - flags = bus->get_flags(reg, 0); - /* If the immediate parent has no ranges property to apply, * just use a 1<->1 mapping. */ @@ -400,8 +393,6 @@ static void __init build_device_resources(struct of_device *op, dna, dns, pna)) break; - flags = pbus->get_flags(addr, flags); - dna = pna; dns = pns; dbus = pbus; diff --git a/trunk/arch/sparc/kernel/sun4d_smp.c b/trunk/arch/sparc/kernel/sun4d_smp.c index 69596402a500..dfde77ff0848 100644 --- a/trunk/arch/sparc/kernel/sun4d_smp.c +++ b/trunk/arch/sparc/kernel/sun4d_smp.c @@ -262,9 +262,8 @@ static struct smp_funcall { static DEFINE_SPINLOCK(cross_call_lock); /* Cross calls must be serialized, at least currently. */ -static void smp4d_cross_call(smpfunc_t func, cpumask_t mask, unsigned long arg1, - unsigned long arg2, unsigned long arg3, - unsigned long arg4) +void smp4d_cross_call(smpfunc_t func, unsigned long arg1, unsigned long arg2, + unsigned long arg3, unsigned long arg4, unsigned long arg5) { if(smp_processors_ready) { register int high = smp_highest_cpu; @@ -279,7 +278,7 @@ static void smp4d_cross_call(smpfunc_t func, cpumask_t mask, unsigned long arg1, register unsigned long a2 asm("i2") = arg2; register unsigned long a3 asm("i3") = arg3; register unsigned long a4 asm("i4") = arg4; - register unsigned long a5 asm("i5") = 0; + register unsigned long a5 asm("i5") = arg5; __asm__ __volatile__( "std %0, [%6]\n\t" @@ -291,10 +290,11 @@ static void smp4d_cross_call(smpfunc_t func, cpumask_t mask, unsigned long arg1, /* Init receive/complete mapping, plus fire the IPI's off. */ { + cpumask_t mask; register int i; - cpu_clear(smp_processor_id(), mask); - cpus_and(mask, cpu_online_map, mask); + mask = cpumask_of_cpu(hard_smp4d_processor_id()); + cpus_andnot(mask, cpu_online_map, mask); for(i = 0; i <= high; i++) { if (cpu_isset(i, mask)) { ccall_info.processors_in[i] = 0; @@ -309,16 +309,12 @@ static void smp4d_cross_call(smpfunc_t func, cpumask_t mask, unsigned long arg1, i = 0; do { - if (!cpu_isset(i, mask)) - continue; while(!ccall_info.processors_in[i]) barrier(); } while(++i <= high); i = 0; do { - if (!cpu_isset(i, mask)) - continue; while(!ccall_info.processors_out[i]) barrier(); } while(++i <= high); diff --git a/trunk/arch/sparc/kernel/sun4m_smp.c b/trunk/arch/sparc/kernel/sun4m_smp.c index a14a76ac7f36..406ac1abc83a 100644 --- a/trunk/arch/sparc/kernel/sun4m_smp.c +++ b/trunk/arch/sparc/kernel/sun4m_smp.c @@ -244,9 +244,9 @@ static struct smp_funcall { static DEFINE_SPINLOCK(cross_call_lock); /* Cross calls must be serialized, at least currently. */ -static void smp4m_cross_call(smpfunc_t func, cpumask_t mask, unsigned long arg1, +static void smp4m_cross_call(smpfunc_t func, unsigned long arg1, unsigned long arg2, unsigned long arg3, - unsigned long arg4) + unsigned long arg4, unsigned long arg5) { register int ncpus = SUN4M_NCPUS; unsigned long flags; @@ -259,14 +259,14 @@ static void smp4m_cross_call(smpfunc_t func, cpumask_t mask, unsigned long arg1, ccall_info.arg2 = arg2; ccall_info.arg3 = arg3; ccall_info.arg4 = arg4; - ccall_info.arg5 = 0; + ccall_info.arg5 = arg5; /* Init receive/complete mapping, plus fire the IPI's off. */ { + cpumask_t mask = cpu_online_map; register int i; cpu_clear(smp_processor_id(), mask); - cpus_and(mask, cpu_online_map, mask); for(i = 0; i < ncpus; i++) { if (cpu_isset(i, mask)) { ccall_info.processors_in[i] = 0; @@ -284,16 +284,12 @@ static void smp4m_cross_call(smpfunc_t func, cpumask_t mask, unsigned long arg1, i = 0; do { - if (!cpu_isset(i, mask)) - continue; while(!ccall_info.processors_in[i]) barrier(); } while(++i < ncpus); i = 0; do { - if (!cpu_isset(i, mask)) - continue; while(!ccall_info.processors_out[i]) barrier(); } while(++i < ncpus); diff --git a/trunk/arch/sparc64/kernel/of_device.c b/trunk/arch/sparc64/kernel/of_device.c index f845f150f565..f8b50cbf4bf7 100644 --- a/trunk/arch/sparc64/kernel/of_device.c +++ b/trunk/arch/sparc64/kernel/of_device.c @@ -96,7 +96,7 @@ struct of_bus { int *addrc, int *sizec); int (*map)(u32 *addr, const u32 *range, int na, int ns, int pna); - unsigned long (*get_flags)(const u32 *addr, unsigned long); + unsigned int (*get_flags)(const u32 *addr); }; /* @@ -156,10 +156,8 @@ static int of_bus_default_map(u32 *addr, const u32 *range, return 0; } -static unsigned long of_bus_default_get_flags(const u32 *addr, unsigned long flags) +static unsigned int of_bus_default_get_flags(const u32 *addr) { - if (flags) - return flags; return IORESOURCE_MEM; } @@ -251,21 +249,17 @@ static int of_bus_pci_map(u32 *addr, const u32 *range, return 0; } -static unsigned long of_bus_pci_get_flags(const u32 *addr, unsigned long flags) +static unsigned int of_bus_pci_get_flags(const u32 *addr) { + unsigned int flags = 0; u32 w = addr[0]; - /* For PCI, we override whatever child busses may have used. */ - flags = 0; switch((w >> 24) & 0x03) { case 0x01: flags |= IORESOURCE_IO; - break; - case 0x02: /* 32 bits */ case 0x03: /* 64 bits */ flags |= IORESOURCE_MEM; - break; } if (w & 0x40000000) flags |= IORESOURCE_PREFETCH; @@ -484,9 +478,9 @@ static void __init build_device_resources(struct of_device *op, int pna, pns; size = of_read_addr(reg + na, ns); - memcpy(addr, reg, na * 4); + flags = bus->get_flags(reg); - flags = bus->get_flags(addr, 0); + memcpy(addr, reg, na * 4); if (use_1to1_mapping(pp)) { result = of_read_addr(addr, na); @@ -512,8 +506,6 @@ static void __init build_device_resources(struct of_device *op, dna, dns, pna)) break; - flags = pbus->get_flags(addr, flags); - dna = pna; dns = pns; dbus = pbus; diff --git a/trunk/arch/sparc64/mm/init.c b/trunk/arch/sparc64/mm/init.c index a41df7bef035..b4aeb0f696dc 100644 --- a/trunk/arch/sparc64/mm/init.c +++ b/trunk/arch/sparc64/mm/init.c @@ -1843,7 +1843,7 @@ static int pavail_rescan_ents __initdata; * memory list again, and make sure it provides at least as much * memory as 'pavail' does. */ -static void __init setup_valid_addr_bitmap_from_pavail(void) +static void setup_valid_addr_bitmap_from_pavail(void) { int i; diff --git a/trunk/arch/x86/pci/i386.c b/trunk/arch/x86/pci/i386.c index 8791fc55e715..5807d1bc73f7 100644 --- a/trunk/arch/x86/pci/i386.c +++ b/trunk/arch/x86/pci/i386.c @@ -128,7 +128,8 @@ static void __init pcibios_allocate_bus_resources(struct list_head *bus_list) pr = pci_find_parent_resource(dev, r); if (!r->start || !pr || request_resource(pr, r) < 0) { - dev_err(&dev->dev, "BAR %d: can't allocate resource\n", idx); + dev_err(&dev->dev, "BAR %d: can't " + "allocate resource\n", idx); /* * Something is wrong with the region. * Invalidate the resource to prevent @@ -163,13 +164,15 @@ static void __init pcibios_allocate_resources(int pass) else disabled = !(command & PCI_COMMAND_MEMORY); if (pass == disabled) { - dev_dbg(&dev->dev, "resource %#08llx-%#08llx (f=%lx, d=%d, p=%d)\n", + dev_dbg(&dev->dev, "resource %#08llx-%#08llx " + "(f=%lx, d=%d, p=%d)\n", (unsigned long long) r->start, (unsigned long long) r->end, r->flags, disabled, pass); pr = pci_find_parent_resource(dev, r); if (!pr || request_resource(pr, r) < 0) { - dev_err(&dev->dev, "BAR %d: can't allocate resource\n", idx); + dev_err(&dev->dev, "BAR %d: can't " + "allocate resource\n", idx); /* We'll assign a new address later */ r->end -= r->start; r->start = 0; diff --git a/trunk/block/cmd-filter.c b/trunk/block/cmd-filter.c index 228b6447e89f..1d4026206ac2 100644 --- a/trunk/block/cmd-filter.c +++ b/trunk/block/cmd-filter.c @@ -223,7 +223,6 @@ int blk_register_filter(struct gendisk *disk) return 0; } -EXPORT_SYMBOL(blk_register_filter); void blk_unregister_filter(struct gendisk *disk) { @@ -232,4 +231,4 @@ void blk_unregister_filter(struct gendisk *disk) kobject_put(&filter->kobj); kobject_put(disk->holder_dir->parent); } -EXPORT_SYMBOL(blk_unregister_filter); + diff --git a/trunk/block/genhd.c b/trunk/block/genhd.c index e0ce23ac2ece..656c2c7abf99 100644 --- a/trunk/block/genhd.c +++ b/trunk/block/genhd.c @@ -190,6 +190,7 @@ void add_disk(struct gendisk *disk) disk->minors, NULL, exact_match, exact_lock, disk); register_disk(disk); blk_register_queue(disk); + blk_register_filter(disk); bdi = &disk->queue->backing_dev_info; bdi_register_dev(bdi, MKDEV(disk->major, disk->first_minor)); @@ -202,6 +203,7 @@ EXPORT_SYMBOL(del_gendisk); /* in partitions/check.c */ void unlink_gendisk(struct gendisk *disk) { + blk_unregister_filter(disk); sysfs_remove_link(&disk->dev.kobj, "bdi"); bdi_unregister(&disk->queue->backing_dev_info); blk_unregister_queue(disk); @@ -307,7 +309,7 @@ static void *part_start(struct seq_file *part, loff_t *pos) loff_t k = *pos; if (!k) - part->private = (void *)1LU; /* tell show to print header */ + seq_puts(part, "major minor #blocks name\n\n"); mutex_lock(&block_class_lock); dev = class_find_device(&block_class, NULL, &k, find_start); @@ -349,17 +351,6 @@ static int show_partition(struct seq_file *part, void *v) int n; char buf[BDEVNAME_SIZE]; - /* - * Print header if start told us to do. This is to preserve - * the original behavior of not printing header if no - * partition exists. This hackery will be removed later with - * class iteration clean up. - */ - if (part->private) { - seq_puts(part, "major minor #blocks name\n\n"); - part->private = NULL; - } - /* Don't show non-partitionable removeable devices or empty devices */ if (!get_capacity(sgp) || (sgp->minors == 1 && (sgp->flags & GENHD_FL_REMOVABLE))) diff --git a/trunk/drivers/gpu/drm/radeon/radeon_cp.c b/trunk/drivers/gpu/drm/radeon/radeon_cp.c index 248ab4a7d39f..3331f88dcfb6 100644 --- a/trunk/drivers/gpu/drm/radeon/radeon_cp.c +++ b/trunk/drivers/gpu/drm/radeon/radeon_cp.c @@ -223,7 +223,7 @@ static int radeon_do_wait_for_fifo(drm_radeon_private_t * dev_priv, int entries) return 0; DRM_UDELAY(1); } - DRM_DEBUG("wait for fifo failed status : 0x%08X 0x%08X\n", + DRM_INFO("wait for fifo failed status : 0x%08X 0x%08X\n", RADEON_READ(RADEON_RBBM_STATUS), RADEON_READ(R300_VAP_CNTL_STATUS)); @@ -252,7 +252,7 @@ static int radeon_do_wait_for_idle(drm_radeon_private_t * dev_priv) } DRM_UDELAY(1); } - DRM_DEBUG("wait idle failed status : 0x%08X 0x%08X\n", + DRM_INFO("wait idle failed status : 0x%08X 0x%08X\n", RADEON_READ(RADEON_RBBM_STATUS), RADEON_READ(R300_VAP_CNTL_STATUS)); diff --git a/trunk/drivers/ide/ide-cd.c b/trunk/drivers/ide/ide-cd.c index f1489999cf91..49a8c589e346 100644 --- a/trunk/drivers/ide/ide-cd.c +++ b/trunk/drivers/ide/ide-cd.c @@ -1933,7 +1933,6 @@ static void ide_cd_remove(ide_drive_t *drive) ide_proc_unregister_driver(drive, info->driver); - blk_unregister_filter(info->disk); del_gendisk(info->disk); ide_cd_put(info); @@ -2159,7 +2158,6 @@ static int ide_cd_probe(ide_drive_t *drive) g->fops = &idecd_ops; g->flags |= GENHD_FL_REMOVABLE; add_disk(g); - blk_register_filter(g); return 0; out_free_cd: diff --git a/trunk/drivers/scsi/sd.c b/trunk/drivers/scsi/sd.c index 2a2bc89aba83..e5e7d7856454 100644 --- a/trunk/drivers/scsi/sd.c +++ b/trunk/drivers/scsi/sd.c @@ -1875,7 +1875,6 @@ static int sd_probe(struct device *dev) dev_set_drvdata(dev, sdkp); add_disk(gd); - blk_register_filter(gd); sd_dif_config_host(sdkp); sd_printk(KERN_NOTICE, sdkp, "Attached SCSI %sdisk\n", @@ -1909,7 +1908,6 @@ static int sd_remove(struct device *dev) struct scsi_disk *sdkp = dev_get_drvdata(dev); device_del(&sdkp->dev); - blk_unregister_filter(sdkp->disk); del_gendisk(sdkp->disk); sd_shutdown(dev); diff --git a/trunk/drivers/scsi/sr.c b/trunk/drivers/scsi/sr.c index 3292965bfd84..27f5bfd1def3 100644 --- a/trunk/drivers/scsi/sr.c +++ b/trunk/drivers/scsi/sr.c @@ -656,7 +656,6 @@ static int sr_probe(struct device *dev) dev_set_drvdata(dev, cd); disk->flags |= GENHD_FL_REMOVABLE; add_disk(disk); - blk_register_filter(disk); sdev_printk(KERN_DEBUG, sdev, "Attached scsi CD-ROM %s\n", cd->cdi.name); @@ -895,7 +894,6 @@ static int sr_remove(struct device *dev) { struct scsi_cd *cd = dev_get_drvdata(dev); - blk_unregister_filter(cd->disk); del_gendisk(cd->disk); mutex_lock(&sr_ref_mutex); diff --git a/trunk/firmware/Makefile b/trunk/firmware/Makefile index 9fe86041f86e..da75a6fbc6ba 100644 --- a/trunk/firmware/Makefile +++ b/trunk/firmware/Makefile @@ -146,15 +146,27 @@ $(patsubst %,$(obj)/%.gen.o, $(fw-external-y)): $(obj)/%.gen.o: $(fwdir)/% $(obj)/%: $(obj)/%.ihex | $(objtree)/$(obj)/$$(dir %) $(call cmd,ihex) +# Don't depend on ihex2fw if we're installing and it already exists. +# Putting it after | in the dependencies doesn't seem sufficient when +# we're installing after a cross-compile, because ihex2fw has dependencies +# on stuff like /usr/lib/gcc/ppc64-redhat-linux/4.3.0/include/stddef.h and +# thus wants to be rebuilt. Which it can't be, if the prebuilt kernel tree +# is exported read-only for someone to run 'make install'. +ifeq ($(INSTALL):$(wildcard $(obj)/ihex2fw),install:$(obj)/ihex2fw) +ihex2fw_dep := +else +ihex2fw_dep := $(obj)/ihex2fw +endif + # .HEX is also Intel HEX, but where the offset and length in each record # is actually meaningful, because the firmware has to be loaded in a certain # order rather than as a single binary blob. Thus, we convert them into our # more compact binary representation of ihex records () -$(obj)/%.fw: $(obj)/%.HEX $(obj)/ihex2fw | $(objtree)/$(obj)/$$(dir %) +$(obj)/%.fw: $(obj)/%.HEX $(ihex2fw_dep) | $(objtree)/$(obj)/$$(dir %) $(call cmd,ihex2fw) # .H16 is our own modified form of Intel HEX, with 16-bit length for records. -$(obj)/%.fw: $(obj)/%.H16 $(obj)/ihex2fw | $(objtree)/$(obj)/$$(dir %) +$(obj)/%.fw: $(obj)/%.H16 $(ihex2fw_dep) | $(objtree)/$(obj)/$$(dir %) $(call cmd,h16tofw) $(firmware-dirs): diff --git a/trunk/fs/cifs/CHANGES b/trunk/fs/cifs/CHANGES index 06e521a945c3..f9e4ad97a79e 100644 --- a/trunk/fs/cifs/CHANGES +++ b/trunk/fs/cifs/CHANGES @@ -9,10 +9,7 @@ files (e.g. "cp -a") to Windows servers. For mkdir and create honor setgid bit on parent directory when server supports Unix Extensions but not POSIX create. Update cifs.upcall version to handle new Kerberos sec flags (this requires update of cifs.upcall program from Samba). Fix memory leak -on dns_upcall (resolving DFS referralls). Fix plain text password -authentication (requires setting SecurityFlags to 0x30030 to enable -lanman and plain text though). Fix writes to be at correct offset when -file is open with O_APPEND and file is on a directio (forcediretio) mount. +on dns_upcall (resolving DFS referralls). Version 1.53 ------------ diff --git a/trunk/fs/cifs/README b/trunk/fs/cifs/README index bd2343d4c6a6..68b5c1169d9d 100644 --- a/trunk/fs/cifs/README +++ b/trunk/fs/cifs/README @@ -542,20 +542,10 @@ SecurityFlags Flags which control security negotiation and hashing mechanisms (as "must use") on the other hand does not make much sense. Default flags are 0x07007 - (NTLM, NTLMv2 and packet signing allowed). The maximum + (NTLM, NTLMv2 and packet signing allowed). Maximum allowable flags if you want to allow mounts to servers using weaker password hashes is 0x37037 (lanman, - plaintext, ntlm, ntlmv2, signing allowed). Some - SecurityFlags require the corresponding menuconfig - options to be enabled (lanman and plaintext require - CONFIG_CIFS_WEAK_PW_HASH for example). Enabling - plaintext authentication currently requires also - enabling lanman authentication in the security flags - because the cifs module only supports sending - laintext passwords using the older lanman dialect - form of the session setup SMB. (e.g. for authentication - using plain text passwords, set the SecurityFlags - to 0x30030): + plaintext, ntlm, ntlmv2, signing allowed): may use packet signing 0x00001 must use packet signing 0x01001 diff --git a/trunk/fs/cifs/cifsencrypt.c b/trunk/fs/cifs/cifsencrypt.c index bd5f13d38450..83fd40dc1ef0 100644 --- a/trunk/fs/cifs/cifsencrypt.c +++ b/trunk/fs/cifs/cifsencrypt.c @@ -294,7 +294,6 @@ void calc_lanman_hash(struct cifsSesInfo *ses, char *lnm_session_key) if ((ses->server->secMode & SECMODE_PW_ENCRYPT) == 0) if (extended_security & CIFSSEC_MAY_PLNTXT) { - memset(lnm_session_key, 0, CIFS_SESS_KEY_SIZE); memcpy(lnm_session_key, password_with_pad, CIFS_ENCPWD_SIZE); return; diff --git a/trunk/fs/cifs/file.c b/trunk/fs/cifs/file.c index cbefe1f1f9fe..ff14d14903a0 100644 --- a/trunk/fs/cifs/file.c +++ b/trunk/fs/cifs/file.c @@ -833,10 +833,6 @@ ssize_t cifs_user_write(struct file *file, const char __user *write_data, return -EBADF; open_file = (struct cifsFileInfo *) file->private_data; - rc = generic_write_checks(file, poffset, &write_size, 0); - if (rc) - return rc; - xid = GetXid(); if (*poffset > file->f_path.dentry->d_inode->i_size) diff --git a/trunk/fs/cifs/sess.c b/trunk/fs/cifs/sess.c index 252fdc0567f1..b537fad3bf50 100644 --- a/trunk/fs/cifs/sess.c +++ b/trunk/fs/cifs/sess.c @@ -409,8 +409,6 @@ CIFS_SessSetup(unsigned int xid, struct cifsSesInfo *ses, int first_time, #ifdef CONFIG_CIFS_WEAK_PW_HASH char lnm_session_key[CIFS_SESS_KEY_SIZE]; - pSMB->req.hdr.Flags2 &= ~SMBFLG2_UNICODE; - /* no capabilities flags in old lanman negotiation */ pSMB->old_req.PasswordLength = cpu_to_le16(CIFS_SESS_KEY_SIZE); diff --git a/trunk/fs/nfsd/nfs4acl.c b/trunk/fs/nfsd/nfs4acl.c index 54b8b4140c8f..b6ed38380ab8 100644 --- a/trunk/fs/nfsd/nfs4acl.c +++ b/trunk/fs/nfsd/nfs4acl.c @@ -443,7 +443,7 @@ init_state(struct posix_acl_state *state, int cnt) * enough space for either: */ alloc = sizeof(struct posix_ace_state_array) - + cnt*sizeof(struct posix_user_ace_state); + + cnt*sizeof(struct posix_ace_state); state->users = kzalloc(alloc, GFP_KERNEL); if (!state->users) return -ENOMEM; diff --git a/trunk/fs/nfsd/nfs4proc.c b/trunk/fs/nfsd/nfs4proc.c index e5b51ffafc6c..2e51adac65de 100644 --- a/trunk/fs/nfsd/nfs4proc.c +++ b/trunk/fs/nfsd/nfs4proc.c @@ -867,6 +867,11 @@ nfsd4_proc_compound(struct svc_rqst *rqstp, int slack_bytes; __be32 status; + status = nfserr_resource; + cstate = cstate_alloc(); + if (cstate == NULL) + goto out; + resp->xbuf = &rqstp->rq_res; resp->p = rqstp->rq_res.head[0].iov_base + rqstp->rq_res.head[0].iov_len; resp->tagp = resp->p; @@ -885,11 +890,6 @@ nfsd4_proc_compound(struct svc_rqst *rqstp, if (args->minorversion > NFSD_SUPPORTED_MINOR_VERSION) goto out; - status = nfserr_resource; - cstate = cstate_alloc(); - if (cstate == NULL) - goto out; - status = nfs_ok; while (!status && resp->opcnt < args->opcnt) { op = &args->ops[resp->opcnt++]; @@ -957,9 +957,9 @@ nfsd4_proc_compound(struct svc_rqst *rqstp, nfsd4_increment_op_stats(op->opnum); } - cstate_free(cstate); out: nfsd4_release_compoundargs(args); + cstate_free(cstate); dprintk("nfsv4 compound returned %d\n", ntohl(status)); return status; } diff --git a/trunk/include/linux/sunrpc/svc_rdma.h b/trunk/include/linux/sunrpc/svc_rdma.h index dc05b54bd3a3..ef2e3a20bf3b 100644 --- a/trunk/include/linux/sunrpc/svc_rdma.h +++ b/trunk/include/linux/sunrpc/svc_rdma.h @@ -143,6 +143,7 @@ struct svcxprt_rdma { unsigned long sc_flags; struct list_head sc_dto_q; /* DTO tasklet I/O pending Q */ struct list_head sc_read_complete_q; + spinlock_t sc_read_complete_lock; struct work_struct sc_work; }; /* sc_flags */ diff --git a/trunk/kernel/resource.c b/trunk/kernel/resource.c index 03d796c1b2e9..cf0a178c7513 100644 --- a/trunk/kernel/resource.c +++ b/trunk/kernel/resource.c @@ -438,7 +438,7 @@ int insert_resource(struct resource *parent, struct resource *new) /** * insert_resource_expand_to_fit - Insert a resource into the resource tree - * @root: root resource descriptor + * @parent: parent of the new resource * @new: new resource to insert * * Insert a resource into the resource tree, possibly expanding it in order diff --git a/trunk/kernel/softlockup.c b/trunk/kernel/softlockup.c index cb838ee93a82..1a07f8ca4b92 100644 --- a/trunk/kernel/softlockup.c +++ b/trunk/kernel/softlockup.c @@ -180,6 +180,10 @@ static void check_hung_task(struct task_struct *t, unsigned long now) if (t->flags & PF_FROZEN) return; + /* Don't check for tasks waiting on network file systems like NFS */ + if (t->state & TASK_KILLABLE) + return; + if (switch_count != t->last_switch_count || !t->last_switch_timestamp) { t->last_switch_count = switch_count; t->last_switch_timestamp = now; @@ -233,8 +237,7 @@ static void check_hung_uninterruptible_tasks(int this_cpu) do_each_thread(g, t) { if (!--max_count) goto unlock; - /* use "==" to skip the TASK_KILLABLE tasks waiting on NFS */ - if (t->state == TASK_UNINTERRUPTIBLE) + if (t->state & TASK_UNINTERRUPTIBLE) check_hung_task(t, now); } while_each_thread(g, t); unlock: diff --git a/trunk/net/sunrpc/sysctl.c b/trunk/net/sunrpc/sysctl.c index 5231f7aaac0e..0f8c439b848a 100644 --- a/trunk/net/sunrpc/sysctl.c +++ b/trunk/net/sunrpc/sysctl.c @@ -60,14 +60,24 @@ static int proc_do_xprt(ctl_table *table, int write, struct file *file, void __user *buffer, size_t *lenp, loff_t *ppos) { char tmpbuf[256]; - size_t len; - + int len; if ((*ppos && !write) || !*lenp) { *lenp = 0; return 0; } - len = svc_print_xprts(tmpbuf, sizeof(tmpbuf)); - return simple_read_from_buffer(buffer, *lenp, ppos, tmpbuf, len); + if (write) + return -EINVAL; + else { + len = svc_print_xprts(tmpbuf, sizeof(tmpbuf)); + if (!access_ok(VERIFY_WRITE, buffer, len)) + return -EFAULT; + + if (__copy_to_user(buffer, tmpbuf, len)) + return -EFAULT; + } + *lenp -= len; + *ppos += len; + return 0; } static int diff --git a/trunk/net/sunrpc/xprtrdma/svc_rdma_recvfrom.c b/trunk/net/sunrpc/xprtrdma/svc_rdma_recvfrom.c index 74de31a06616..b4b17f44cb29 100644 --- a/trunk/net/sunrpc/xprtrdma/svc_rdma_recvfrom.c +++ b/trunk/net/sunrpc/xprtrdma/svc_rdma_recvfrom.c @@ -443,18 +443,18 @@ int svc_rdma_recvfrom(struct svc_rqst *rqstp) dprintk("svcrdma: rqstp=%p\n", rqstp); - spin_lock_bh(&rdma_xprt->sc_rq_dto_lock); + spin_lock_bh(&rdma_xprt->sc_read_complete_lock); if (!list_empty(&rdma_xprt->sc_read_complete_q)) { ctxt = list_entry(rdma_xprt->sc_read_complete_q.next, struct svc_rdma_op_ctxt, dto_q); list_del_init(&ctxt->dto_q); } - if (ctxt) { - spin_unlock_bh(&rdma_xprt->sc_rq_dto_lock); + spin_unlock_bh(&rdma_xprt->sc_read_complete_lock); + if (ctxt) return rdma_read_complete(rqstp, ctxt); - } + spin_lock_bh(&rdma_xprt->sc_rq_dto_lock); if (!list_empty(&rdma_xprt->sc_rq_dto_q)) { ctxt = list_entry(rdma_xprt->sc_rq_dto_q.next, struct svc_rdma_op_ctxt, diff --git a/trunk/net/sunrpc/xprtrdma/svc_rdma_transport.c b/trunk/net/sunrpc/xprtrdma/svc_rdma_transport.c index 900cb69728c6..19ddc382b777 100644 --- a/trunk/net/sunrpc/xprtrdma/svc_rdma_transport.c +++ b/trunk/net/sunrpc/xprtrdma/svc_rdma_transport.c @@ -359,11 +359,11 @@ static void sq_cq_reap(struct svcxprt_rdma *xprt) if (test_bit(RDMACTXT_F_LAST_CTXT, &ctxt->flags)) { struct svc_rdma_op_ctxt *read_hdr = ctxt->read_hdr; BUG_ON(!read_hdr); - spin_lock_bh(&xprt->sc_rq_dto_lock); set_bit(XPT_DATA, &xprt->sc_xprt.xpt_flags); + spin_lock_bh(&xprt->sc_read_complete_lock); list_add_tail(&read_hdr->dto_q, &xprt->sc_read_complete_q); - spin_unlock_bh(&xprt->sc_rq_dto_lock); + spin_unlock_bh(&xprt->sc_read_complete_lock); svc_xprt_enqueue(&xprt->sc_xprt); } svc_rdma_put_context(ctxt, 0); @@ -428,6 +428,7 @@ static struct svcxprt_rdma *rdma_create_xprt(struct svc_serv *serv, init_waitqueue_head(&cma_xprt->sc_send_wait); spin_lock_init(&cma_xprt->sc_lock); + spin_lock_init(&cma_xprt->sc_read_complete_lock); spin_lock_init(&cma_xprt->sc_rq_dto_lock); cma_xprt->sc_ord = svcrdma_ord;