Merge master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
authorLinus Torvalds <torvalds@woody.osdl.org>
Thu, 16 Nov 2006 19:45:23 +0000 (11:45 -0800)
committerLinus Torvalds <torvalds@woody.osdl.org>
Thu, 16 Nov 2006 19:45:23 +0000 (11:45 -0800)
* master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6:
  [TG3]: Disable TSO on 5906 if CLKREQ is enabled.
  [TCP]: Fix up sysctl_tcp_mem initialization.
  [NETFILTER]: ip6_tables: use correct nexthdr value in ipv6_find_hdr()
  [NETFILTER]: ip6_tables: fixed conflicted optname for getsockopt
  [NETFILTER]: Use pskb_trim in {ip,ip6,nfnetlink}_queue
  [NETFILTER]: nfnetlink_log: fix byteorder of NFULA_SEQ_GLOBAL
  [TG3]: Increase 5906 firmware poll time.

32 files changed:
Documentation/filesystems/udf.txt
Documentation/kprobes.txt
arch/ia64/hp/sim/Kconfig
arch/ia64/hp/sim/hpsim_irq.c
arch/ia64/kernel/iosapic.c
arch/ia64/kernel/irq.c
arch/ia64/kernel/irq_ia64.c
arch/ia64/kernel/irq_lsapic.c
arch/ia64/sn/kernel/bte.c
arch/ia64/sn/kernel/irq.c
block/scsi_ioctl.c
drivers/char/ipmi/ipmi_msghandler.c
drivers/char/ipmi/ipmi_si_intf.c
drivers/firmware/dell_rbu.c
drivers/infiniband/hw/ipath/Kconfig
drivers/infiniband/hw/ipath/Makefile
drivers/infiniband/hw/ipath/ipath_driver.c
drivers/parport/parport_ip32.c
drivers/scsi/scsi_lib.c
drivers/video/aty/atyfb_base.c
drivers/video/pnx4008/pnxrgbfb.c
drivers/video/pnx4008/sdum.c
fs/Kconfig
fs/ecryptfs/dentry.c
fs/ecryptfs/inode.c
fs/fat/file.c
fs/hfs/super.c
fs/msdos/namei.c
fs/vfat/namei.c
include/linux/msdos_fs.h
kernel/irq/chip.c
mm/vmalloc.c

index 511b4230c0536add9d0650cbc1f702becc2e54e2..fde829a756e6510a9d5cd4d56c981e204151fa8c 100644 (file)
@@ -7,8 +7,17 @@ If you encounter problems with reading UDF discs using this driver,
 please report them to linux_udf@hpesjro.fc.hp.com, which is the
 developer's list.
 
-Write support requires a block driver which supports writing. The current
-scsi and ide cdrom drivers do not support writing.
+Write support requires a block driver which supports writing.  Currently
+dvd+rw drives and media support true random sector writes, and so a udf
+filesystem on such devices can be directly mounted read/write.  CD-RW
+media however, does not support this.  Instead the media can be formatted
+for packet mode using the utility cdrwtool, then the pktcdvd driver can
+be bound to the underlying cd device to provide the required buffering
+and read-modify-write cycles to allow the filesystem random sector writes
+while providing the hardware with only full packet writes.  While not
+required for dvd+rw media, use of the pktcdvd driver often enhances
+performance due to very poor read-modify-write support supplied internally
+by drive firmware.
 
 -------------------------------------------------------------------------------
 The following mount options are supported:
index ba26201d50234ba3c78e2c0c9084b1d6d25d7110..d71fafffce90de81cba916c5d98dae7db5e9eb63 100644 (file)
@@ -442,9 +442,10 @@ static int __init kprobe_init(void)
        kp.fault_handler = handler_fault;
        kp.symbol_name = "do_fork";
 
-       if ((ret = register_kprobe(&kp) < 0)) {
+       ret = register_kprobe(&kp);
+       if (ret < 0) {
                printk("register_kprobe failed, returned %d\n", ret);
-               return -1;
+               return ret;
        }
        printk("kprobe registered\n");
        return 0;
index 18ccb1266e182d00a54cbcd53b0e0087bd5a68a4..f92306bbedb848eb146ece3afde7729abdddac13 100644 (file)
@@ -13,8 +13,8 @@ config HP_SIMSERIAL_CONSOLE
        depends on HP_SIMSERIAL
 
 config HP_SIMSCSI
-       tristate "Simulated SCSI disk"
-       depends on SCSI
+       bool "Simulated SCSI disk"
+       depends on SCSI=y
 
 endmenu
 
index 8145547bb52daf891199affd969a5dd9cb8cee9a..c2f58ff364e7144c43de3e49958bfac7b3b3b0ad 100644 (file)
@@ -27,7 +27,7 @@ hpsim_set_affinity_noop (unsigned int a, cpumask_t b)
 }
 
 static struct hw_interrupt_type irq_type_hp_sim = {
-       .typename =     "hpsim",
+       .name =         "hpsim",
        .startup =      hpsim_irq_startup,
        .shutdown =     hpsim_irq_noop,
        .enable =       hpsim_irq_noop,
index 9bf15fefa7e4e00517f2203cdde817b9299d9a14..60d64950e3c202f5ed6ae3c666e24195ff6700d5 100644 (file)
@@ -426,7 +426,7 @@ iosapic_end_level_irq (unsigned int irq)
 #define iosapic_ack_level_irq          nop
 
 struct hw_interrupt_type irq_type_iosapic_level = {
-       .typename =     "IO-SAPIC-level",
+       .name =         "IO-SAPIC-level",
        .startup =      iosapic_startup_level_irq,
        .shutdown =     iosapic_shutdown_level_irq,
        .enable =       iosapic_enable_level_irq,
@@ -473,7 +473,7 @@ iosapic_ack_edge_irq (unsigned int irq)
 #define iosapic_end_edge_irq           nop
 
 struct hw_interrupt_type irq_type_iosapic_edge = {
-       .typename =     "IO-SAPIC-edge",
+       .name =         "IO-SAPIC-edge",
        .startup =      iosapic_startup_edge_irq,
        .shutdown =     iosapic_disable_edge_irq,
        .enable =       iosapic_enable_edge_irq,
@@ -664,7 +664,7 @@ register_intr (unsigned int gsi, int vector, unsigned char delivery,
                        printk(KERN_WARNING
                               "%s: changing vector %d from %s to %s\n",
                               __FUNCTION__, vector,
-                              idesc->chip->typename, irq_type->typename);
+                              idesc->chip->name, irq_type->name);
                idesc->chip = irq_type;
        }
        return 0;
index f07c0864b0b424bd7743b310e89ee1868fe1af12..54d55e4d64f7e1e70aa30d8d2c853a35bafe5f0a 100644 (file)
@@ -76,7 +76,7 @@ int show_interrupts(struct seq_file *p, void *v)
                        seq_printf(p, "%10u ", kstat_cpu(j).irqs[i]);
                }
 #endif
-               seq_printf(p, " %14s", irq_desc[i].chip->typename);
+               seq_printf(p, " %14s", irq_desc[i].chip->name);
                seq_printf(p, "  %s", action->name);
 
                for (action=action->next; action; action = action->next)
@@ -197,7 +197,7 @@ void fixup_irqs(void)
                        struct pt_regs *old_regs = set_irq_regs(NULL);
 
                        vectors_in_migration[irq]=0;
-                       __do_IRQ(irq);
+                       generic_handle_irq(irq);
                        set_irq_regs(old_regs);
                }
        }
index 9c6dafa2d0df613e95ee0d776672c85bac6d14b1..ba3ba8bc50bef1aa77758256ec818e000eb88ff4 100644 (file)
@@ -186,7 +186,7 @@ ia64_handle_irq (ia64_vector vector, struct pt_regs *regs)
                        ia64_setreg(_IA64_REG_CR_TPR, vector);
                        ia64_srlz_d();
 
-                       __do_IRQ(local_vector_to_irq(vector));
+                       generic_handle_irq(local_vector_to_irq(vector));
 
                        /*
                         * Disable interrupts and send EOI:
@@ -242,7 +242,7 @@ void ia64_process_pending_intr(void)
                         * Probably could shared code.
                         */
                        vectors_in_migration[local_vector_to_irq(vector)]=0;
-                       __do_IRQ(local_vector_to_irq(vector));
+                       generic_handle_irq(local_vector_to_irq(vector));
                        set_irq_regs(old_regs);
 
                        /*
index 1ab58b09f3d7163df640f5765efd7d8d3a020c02..c2f07beb17590fcd9e2796208c1355e555d0827f 100644 (file)
@@ -34,7 +34,7 @@ static int lsapic_retrigger(unsigned int irq)
 }
 
 struct hw_interrupt_type irq_type_ia64_lsapic = {
-       .typename =     "LSAPIC",
+       .name =         "LSAPIC",
        .startup =      lsapic_noop_startup,
        .shutdown =     lsapic_noop,
        .enable =       lsapic_noop,
index 7f73ad4408aaee3ad8977ad1ef2d1a89302cfbe5..ff1c55601178b2c2ff7071b26f03bf64f5638865 100644 (file)
@@ -381,14 +381,13 @@ bte_result_t bte_unaligned_copy(u64 src, u64 dest, u64 len, u64 mode)
                 * bcopy to the destination.
                 */
 
-               /* Add the leader from source */
-               headBteLen = len + (src & L1_CACHE_MASK);
-               /* Add the trailing bytes from footer. */
-               headBteLen += L1_CACHE_BYTES - (headBteLen & L1_CACHE_MASK);
-               headBteSource = src & ~L1_CACHE_MASK;
                headBcopySrcOffset = src & L1_CACHE_MASK;
                headBcopyDest = dest;
                headBcopyLen = len;
+
+               headBteSource = src - headBcopySrcOffset;
+               /* Add the leading and trailing bytes from source */
+               headBteLen = L1_CACHE_ALIGN(len + headBcopySrcOffset);
        }
 
        if (headBcopyLen > 0) {
index 7bb6ad188ba39855f1516465e4fee89f5b4ef145..0b49459a878a92a1047f916bd40af84b489701a9 100644 (file)
@@ -201,7 +201,7 @@ static void sn_set_affinity_irq(unsigned int irq, cpumask_t mask)
 }
 
 struct hw_interrupt_type irq_type_sn = {
-       .typename       = "SN hub",
+       .name           = "SN hub",
        .startup        = sn_startup_irq,
        .shutdown       = sn_shutdown_irq,
        .enable         = sn_enable_irq,
index a19338e6215da1b20a48c4861453ac8230b01536..e55a756214375577ffa942dbc239fe79e87985fe 100644 (file)
@@ -286,9 +286,8 @@ static int sg_io(struct file *file, request_queue_t *q,
         * fill in request structure
         */
        rq->cmd_len = hdr->cmd_len;
+       memset(rq->cmd, 0, BLK_MAX_CDB); /* ATAPI hates garbage after CDB */
        memcpy(rq->cmd, cmd, hdr->cmd_len);
-       if (sizeof(rq->cmd) != hdr->cmd_len)
-               memset(rq->cmd + hdr->cmd_len, 0, sizeof(rq->cmd) - hdr->cmd_len);
 
        memset(sense, 0, sizeof(sense));
        rq->sense = sense;
index a41b8df240730f8a2fd89219fcc6b3c6100119b1..c47add8e47df3009aaf25d6dffe4ded0b64f0773 100644 (file)
@@ -2118,7 +2118,7 @@ static int ipmi_bmc_register(ipmi_smi_t intf)
                dev_set_drvdata(&bmc->dev->dev, bmc);
                kref_init(&bmc->refcount);
 
-               rv = platform_device_register(bmc->dev);
+               rv = platform_device_add(bmc->dev);
                mutex_unlock(&ipmidriver_mutex);
                if (rv) {
                        printk(KERN_ERR
index abc5149e30e820c6e41c6c3477c2071f946e777c..bb1fac104fda63470bae62d5c068263c00a5f8e6 100644 (file)
@@ -2346,7 +2346,7 @@ static int try_smi_init(struct smi_info *new_smi)
                new_smi->dev = &new_smi->pdev->dev;
                new_smi->dev->driver = &ipmi_driver;
 
-               rv = platform_device_register(new_smi->pdev);
+               rv = platform_device_add(new_smi->pdev);
                if (rv) {
                        printk(KERN_ERR
                               "ipmi_si_intf:"
index 08b16179844308ab80b4406638ff43927156cf3d..fc702e40bd431c2cfdd715beacd636fb3d886c49 100644 (file)
@@ -705,17 +705,16 @@ static struct bin_attribute rbu_packet_size_attr = {
 
 static int __init dcdrbu_init(void)
 {
-       int rc = 0;
+       int rc;
        spin_lock_init(&rbu_data.lock);
 
        init_packet_head();
-       rbu_device =
-               platform_device_register_simple("dell_rbu", -1, NULL, 0);
-       if (!rbu_device) {
+       rbu_device = platform_device_register_simple("dell_rbu", -1, NULL, 0);
+       if (IS_ERR(rbu_device)) {
                printk(KERN_ERR
                        "dell_rbu:%s:platform_device_register_simple "
                        "failed\n", __FUNCTION__);
-               return -EIO;
+               return PTR_ERR(rbu_device);
        }
 
        rc = sysfs_create_bin_file(&rbu_device->dev.kobj, &rbu_data_attr);
index 574a678e7fdd0a24199de80f9aab33bda82837a4..5ca471ac6542a269d516e89dc3cd7c24b5e275cc 100644 (file)
@@ -1,6 +1,6 @@
 config INFINIBAND_IPATH
        tristate "QLogic InfiniPath Driver"
-       depends on PCI_MSI && 64BIT && INFINIBAND
+       depends on (PCI_MSI || HT_IRQ) && 64BIT && INFINIBAND
        ---help---
        This is a driver for QLogic InfiniPath host channel adapters,
        including InfiniBand verbs support.  This driver allows these
index 5e29cb0095e568eefd85578eac42a71dbfe34b2d..7dc10551cf1857eda301afda1905e2def5a63f1a 100644 (file)
@@ -10,8 +10,6 @@ ib_ipath-y := \
        ipath_eeprom.o \
        ipath_file_ops.o \
        ipath_fs.o \
-       ipath_iba6110.o \
-       ipath_iba6120.o \
        ipath_init_chip.o \
        ipath_intr.o \
        ipath_keys.o \
@@ -31,5 +29,8 @@ ib_ipath-y := \
        ipath_verbs_mcast.o \
        ipath_verbs.o
 
+ib_ipath-$(CONFIG_HT_IRQ) += ipath_iba6110.o
+ib_ipath-$(CONFIG_PCI_MSI) += ipath_iba6120.o
+
 ib_ipath-$(CONFIG_X86_64) += ipath_wc_x86_64.o
 ib_ipath-$(CONFIG_PPC64) += ipath_wc_ppc64.o
index 09a13c1fc46aa75c56955afaeccfb2e9358821d6..1aeddb48e355651a2a18843989bb49b81a8e7390 100644 (file)
@@ -390,12 +390,16 @@ static int __devinit ipath_init_one(struct pci_dev *pdev,
 
        /* setup the chip-specific functions, as early as possible. */
        switch (ent->device) {
+#ifdef CONFIG_HT_IRQ
        case PCI_DEVICE_ID_INFINIPATH_HT:
                ipath_init_iba6110_funcs(dd);
                break;
+#endif
+#ifdef CONFIG_PCI_MSI
        case PCI_DEVICE_ID_INFINIPATH_PE800:
                ipath_init_iba6120_funcs(dd);
                break;
+#endif
        default:
                ipath_dev_err(dd, "Found unknown QLogic deviceid 0x%x, "
                              "failing\n", ent->device);
index e3e19277030a9517e4766bf0d351ef01dbd44720..ec44efdbb84e15d519b5f9553c6a5b07665de4a0 100644 (file)
@@ -780,7 +780,7 @@ static irqreturn_t parport_ip32_interrupt(int irq, void *dev_id)
        enum parport_ip32_irq_mode irq_mode = priv->irq_mode;
        switch (irq_mode) {
        case PARPORT_IP32_IRQ_FWD:
-               parport_generic_irq(irq, p, regs);
+               parport_generic_irq(irq, p);
                break;
        case PARPORT_IP32_IRQ_HERE:
                parport_ip32_wakeup(p);
index d2c02df12fdcb8b6b072a7a7e57500b21263a3d6..3ac4890ce086cfab2ff6519c1f9858760b764de5 100644 (file)
@@ -410,6 +410,7 @@ int scsi_execute_async(struct scsi_device *sdev, const unsigned char *cmd,
                goto free_req;
 
        req->cmd_len = cmd_len;
+       memset(req->cmd, 0, BLK_MAX_CDB); /* ATAPI hates garbage after CDB */
        memcpy(req->cmd, cmd, req->cmd_len);
        req->sense = sioc->sense;
        req->sense_len = 0;
index b77b30923928bd0cc3d9916927a32b7f91191b5f..e815b354c09df1f57ba5fa83bab29706ff6029f9 100644 (file)
@@ -406,7 +406,7 @@ static struct {
        { PCI_CHIP_MACH64LB, "3D RAGE LT PRO (Mach64 LB, AGP)", 236, 75, 100, 135, ATI_CHIP_264LTPRO },
        { PCI_CHIP_MACH64LD, "3D RAGE LT PRO (Mach64 LD, AGP)", 230, 100, 100, 135, ATI_CHIP_264LTPRO },
        { PCI_CHIP_MACH64LI, "3D RAGE LT PRO (Mach64 LI, PCI)", 230, 100, 100, 135, ATI_CHIP_264LTPRO | M64F_G3_PB_1_1 | M64F_G3_PB_1024x768 },
-       { PCI_CHIP_MACH64LP, "3D RAGE LT PRO (Mach64 LP, PCI)", 230, 100, 100, 135, ATI_CHIP_264LTPRO },
+       { PCI_CHIP_MACH64LP, "3D RAGE LT PRO (Mach64 LP, PCI)", 230, 100, 100, 135, ATI_CHIP_264LTPRO | M64F_G3_PB_1024x768 },
        { PCI_CHIP_MACH64LQ, "3D RAGE LT PRO (Mach64 LQ, PCI)", 230, 100, 100, 135, ATI_CHIP_264LTPRO },
 
        { PCI_CHIP_MACH64GM, "3D RAGE XL (Mach64 GM, AGP 2x)", 230, 83, 63, 135, ATI_CHIP_264XL },
index 7d9453c91a4283d5dd24153b48ac99ce290266ef..f29e66e2d774976de39115a49e0d5e2fce9e2414 100644 (file)
@@ -154,7 +154,8 @@ static int __devinit rgbfb_probe(struct platform_device *pdev)
                        goto err1;
        }
 
-       if (!fb_get_options("pnxrgbfb", &option) && !strcmp(option, "nocursor"))
+       if (!fb_get_options("pnxrgbfb", &option) && option &&
+                       !strcmp(option, "nocursor"))
                rgbfb_ops.fb_cursor = no_cursor;
 
        info->node = -1;
@@ -191,7 +192,7 @@ err:
 
 static struct platform_driver rgbfb_driver = {
        .driver = {
-               .name = "rgbfb",
+               .name = "pnx4008-rgbfb",
        },
        .probe = rgbfb_probe,
        .remove = rgbfb_remove,
index 51f0ecc2a511d3e546794355958deb58ca855d91..d23bf0d659b63c97b12be85f8b805c8de81cd31d 100644 (file)
@@ -848,7 +848,7 @@ static int sdum_remove(struct platform_device *pdev)
 
 static struct platform_driver sdum_driver = {
        .driver = {
-               .name = "sdum",
+               .name = "pnx4008-sdum",
        },
        .probe = sdum_probe,
        .remove = sdum_remove,
index 133dcc8a4150fbaa6ceb432939fb2c4c9e9910a7..7b1511d50b05a29df371a547a1d4db5fc756d2b7 100644 (file)
@@ -2060,8 +2060,7 @@ config CODA_FS_OLD_API
          For most cases you probably want to say N.
 
 config AFS_FS
-# for fs/nls/Config.in
-       tristate "Andrew File System support (AFS) (Experimental)"
+       tristate "Andrew File System support (AFS) (EXPERIMENTAL)"
        depends on INET && EXPERIMENTAL
        select RXRPC
        help
index 0b9992ab990f4cab4983a89aa4eb4f4026a1820b..52d1e36dc746a54182c2a68bf8aad19b1e1b0dbc 100644 (file)
@@ -57,6 +57,12 @@ static int ecryptfs_d_revalidate(struct dentry *dentry, struct nameidata *nd)
        rc = lower_dentry->d_op->d_revalidate(lower_dentry, nd);
        nd->dentry = dentry_save;
        nd->mnt = vfsmount_save;
+       if (dentry->d_inode) {
+               struct inode *lower_inode =
+                       ecryptfs_inode_to_lower(dentry->d_inode);
+
+               ecryptfs_copy_attr_all(dentry->d_inode, lower_inode);
+       }
 out:
        return rc;
 }
index ff4865d24f0f1061dcc7dbd47fd169330f136869..dfcc68484f47068ccb3d256283cfea67857518f6 100644 (file)
@@ -470,6 +470,7 @@ out_lock:
        unlock_dir(lower_dir_dentry);
        dput(lower_new_dentry);
        dput(lower_old_dentry);
+       d_drop(lower_old_dentry);
        d_drop(new_dentry);
        d_drop(old_dentry);
        return rc;
@@ -484,7 +485,7 @@ static int ecryptfs_unlink(struct inode *dir, struct dentry *dentry)
        lock_parent(lower_dentry);
        rc = vfs_unlink(lower_dir_inode, lower_dentry);
        if (rc) {
-               ecryptfs_printk(KERN_ERR, "Error in vfs_unlink\n");
+               printk(KERN_ERR "Error in vfs_unlink; rc = [%d]\n", rc);
                goto out_unlock;
        }
        ecryptfs_copy_attr_times(dir, lower_dir_inode);
@@ -630,6 +631,8 @@ ecryptfs_rename(struct inode *old_dir, struct dentry *old_dentry,
                ecryptfs_copy_attr_all(old_dir, lower_old_dir_dentry->d_inode);
 out_lock:
        unlock_rename(lower_old_dir_dentry, lower_new_dir_dentry);
+       dput(lower_new_dentry->d_parent);
+       dput(lower_old_dentry->d_parent);
        dput(lower_new_dentry);
        dput(lower_old_dentry);
        return rc;
index 8337451e7897abc70d00752795fade9816aee985..0aa813d944a67fec2e7955eadeb3e781b66915c9 100644 (file)
@@ -303,7 +303,17 @@ void fat_truncate(struct inode *inode)
        fat_flush_inodes(inode->i_sb, inode, NULL);
 }
 
+int fat_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat)
+{
+       struct inode *inode = dentry->d_inode;
+       generic_fillattr(inode, stat);
+       stat->blksize = MSDOS_SB(inode->i_sb)->cluster_size;
+       return 0;
+}
+EXPORT_SYMBOL_GPL(fat_getattr);
+
 struct inode_operations fat_file_inode_operations = {
        .truncate       = fat_truncate,
        .setattr        = fat_notify_change,
+       .getattr        = fat_getattr,
 };
index d43b4fcc8ad3967d08d353547af2d1f138e3e282..85b17b3fa4a0f768e8f6155800b582243a74f965 100644 (file)
@@ -390,11 +390,13 @@ static int hfs_fill_super(struct super_block *sb, void *data, int silent)
                hfs_find_exit(&fd);
                goto bail_no_root;
        }
+       res = -EINVAL;
        root_inode = hfs_iget(sb, &fd.search_key->cat, &rec);
        hfs_find_exit(&fd);
        if (!root_inode)
                goto bail_no_root;
 
+       res = -ENOMEM;
        sb->s_root = d_alloc_root(root_inode);
        if (!sb->s_root)
                goto bail_iput;
index b0f01b3b0536de2dbe775a2d2d2988d255f7fba5..452461955cbdced2ba1c4df8d936966fbb08e848 100644 (file)
@@ -654,6 +654,7 @@ static struct inode_operations msdos_dir_inode_operations = {
        .rmdir          = msdos_rmdir,
        .rename         = msdos_rename,
        .setattr        = fat_notify_change,
+       .getattr        = fat_getattr,
 };
 
 static int msdos_fill_super(struct super_block *sb, void *data, int silent)
index edb711ff7b05781b624b310dcf7b360f2c683745..0afd745a37cd7aeacef9c64d8470af619c77189a 100644 (file)
@@ -1004,6 +1004,7 @@ static struct inode_operations vfat_dir_inode_operations = {
        .rmdir          = vfat_rmdir,
        .rename         = vfat_rename,
        .setattr        = fat_notify_change,
+       .getattr        = fat_getattr,
 };
 
 static int vfat_fill_super(struct super_block *sb, void *data, int silent)
index ce6c85815cbd17be44e95f9244c84bbc7c5f3b4b..24a9ef1506b612c4e98d55522ce8140a5d3825a5 100644 (file)
@@ -402,6 +402,8 @@ extern const struct file_operations fat_file_operations;
 extern struct inode_operations fat_file_inode_operations;
 extern int fat_notify_change(struct dentry * dentry, struct iattr * attr);
 extern void fat_truncate(struct inode *inode);
+extern int fat_getattr(struct vfsmount *mnt, struct dentry *dentry,
+                      struct kstat *stat);
 
 /* fat/inode.c */
 extern void fat_attach(struct inode *inode, loff_t i_pos);
index 2d0dc3efe8137452f2ebfa194e84ff157573e66d..ebfd24a41858fd0c9751bfa356a9e85248e57c95 100644 (file)
@@ -233,6 +233,8 @@ void irq_chip_set_defaults(struct irq_chip *chip)
                chip->shutdown = chip->disable;
        if (!chip->name)
                chip->name = chip->typename;
+       if (!chip->end)
+               chip->end = dummy_irq_chip.end;
 }
 
 static inline void mask_ack_irq(struct irq_desc *desc, int irq)
index 7dc6aa745166cf680092103195e725619c4ce633..86897ee792d6b4a2f8e00a94cf4b12e2c1d6f075 100644 (file)
@@ -181,14 +181,13 @@ static struct vm_struct *__get_vm_area_node(unsigned long size, unsigned long fl
        }
        addr = ALIGN(start, align);
        size = PAGE_ALIGN(size);
+       if (unlikely(!size))
+               return NULL;
 
        area = kmalloc_node(sizeof(*area), gfp_mask & GFP_LEVEL_MASK, node);
        if (unlikely(!area))
                return NULL;
 
-       if (unlikely(!size))
-               return NULL;
-
        /*
         * We always allocate a guard page.
         */