]> git.neil.brown.name Git - history.git/commitdiff
Import 2.3.39pre2 2.3.39pre2
authorLinus Torvalds <torvalds@linuxfoundation.org>
Fri, 23 Nov 2007 20:30:01 +0000 (15:30 -0500)
committerLinus Torvalds <torvalds@linuxfoundation.org>
Fri, 23 Nov 2007 20:30:01 +0000 (15:30 -0500)
35 files changed:
arch/i386/defconfig
drivers/acorn/block/fd1772.c
drivers/acorn/block/mfmhd.c
drivers/ap1000/ddv.c
drivers/block/DAC960.c
drivers/block/acsi.c
drivers/block/amiflop.c
drivers/block/ataflop.c
drivers/block/cpqarray.c
drivers/block/floppy.c
drivers/block/hd.c
drivers/block/ide.c
drivers/block/loop.c
drivers/block/md.c
drivers/block/nbd.c
drivers/block/paride/pd.c
drivers/block/paride/pf.c
drivers/block/ps2esdi.c
drivers/block/swim3.c
drivers/block/swim_iop.c
drivers/block/xd.c
drivers/block/z2ram.c
drivers/cdrom/aztcd.c
drivers/cdrom/cdrom.c
drivers/cdrom/gscd.c
drivers/cdrom/optcd.c
drivers/cdrom/sjcd.c
drivers/cdrom/sonycd535.c
drivers/i2o/i2o_block.c
drivers/pci/pci.c
drivers/pcmcia/cardbus.c
drivers/scsi/sd.c
fs/block_dev.c
include/linux/fs.h
kernel/ksyms.c

index 9b248a6be03f52e3aa3fcfa14ba95ce2fa7b0fc7..5399a0ecb9f6640d55fa37a9fd2725fb27fdf7da 100644 (file)
@@ -59,7 +59,6 @@ CONFIG_PCI_NAMES=y
 #
 CONFIG_PCMCIA=y
 CONFIG_CARDBUS=y
-CONFIG_YENTA=y
 # CONFIG_I82365 is not set
 CONFIG_TCIC=y
 CONFIG_SYSVIPC=y
@@ -314,6 +313,7 @@ CONFIG_PCMCIA_PCNET=y
 # CONFIG_PCMCIA_SMC91C92 is not set
 # CONFIG_PCMCIA_XIRC2PS is not set
 # CONFIG_AIRONET4500_CS is not set
+# CONFIG_ARCNET_COM20020_CS is not set
 # CONFIG_PCMCIA_3C575 is not set
 # CONFIG_PCMCIA_TULIP is not set
 # CONFIG_PCMCIA_EPIC100 is not set
@@ -401,6 +401,7 @@ CONFIG_DRM_TDFX=y
 #
 # PCMCIA character device support
 #
+CONFIG_PCMCIA_SERIAL=y
 # CONFIG_PCMCIA_SERIAL_CS is not set
 # CONFIG_PCMCIA_SERIAL_CB is not set
 
index cd2513b42b4c8d033c9f846c604d62709fddf791..54ed9ac6b38a5204712fb61580d96854b320fadb 100644 (file)
@@ -1556,11 +1556,7 @@ static int floppy_open(struct inode *inode, struct file *filp)
 
 static void floppy_release(struct inode *inode, struct file *filp)
 {
-       int drive;
-
-       drive = MINOR(inode->i_rdev) & 3;
-
-       block_fsync(inode, filp);
+       int drive = MINOR(inode->i_rdev) & 3;
 
        if (fd_ref[drive] < 0)
                fd_ref[drive] = 0;
index 5931e1d9380ff429513175c5b7613e79cc376630..f9eef09873787062393a826f30a6f2c8db4da9bd 100644 (file)
@@ -1276,7 +1276,6 @@ static int mfm_open(struct inode *inode, struct file *file)
  */
 static int mfm_release(struct inode *inode, struct file *file)
 {
-       fsync_dev(inode->i_rdev);
        mfm_info[DEVICE_NR(MINOR(inode->i_rdev))].access_count--;
        MOD_DEC_USE_COUNT;
        return 0;
index 4ab72a361baab7be959c98e4cc0bbc97e4651f69..67f8619a913920d8b4d9583735aec31e57cbc2e4 100644 (file)
@@ -166,7 +166,6 @@ static void ddv_release(struct inode * inode, struct file * filp)
 #if DEBUG
        printk("ddv_release started\n");
 #endif
-       sync_dev(inode->i_rdev);
 #if DEBUG
        printk("ddv_release done\n");
 #endif
index 256c492bae185a4ec266346e06c9b0d582309476..9a445c67fbabc543118cbc645e663cf144ea3213 100644 (file)
@@ -2466,10 +2466,6 @@ static int DAC960_Release(Inode_T *Inode, File_T *File)
   if (ControllerNumber == 0 && LogicalDriveNumber == 0 &&
       File != NULL && (File->f_flags & O_NONBLOCK))
     goto ModuleOnly;
-  /*
-    Force any buffered data to be written.
-  */
-  fsync_dev(Inode->i_rdev);
   /*
     Decrement the Logical Drive and Controller Usage Counts.
   */
index b9178e98acbbc3d8b993c1f3126d93f431231791..47ceb63acfedb08398efe6be29f55dcfbe76814c 100644 (file)
@@ -1216,11 +1216,7 @@ static int acsi_open( struct inode * inode, struct file * filp )
 
 static int acsi_release( struct inode * inode, struct file * file )
 {
-       int device;
-
-       sync_dev(inode->i_rdev);
-
-       device = DEVICE_NR(MINOR(inode->i_rdev));
+       int device = DEVICE_NR(MINOR(inode->i_rdev));
        if (--access_count[device] == 0 && acsi_info[device].removable)
                acsi_prevent_removal(device, 0);
        MOD_DEC_USE_COUNT;
index 2dfeb1c82e20c8f4b66d70afdff4dc60a12bef78..d9655d2752784c6556ff8d52d44ee6edf47282a0 100644 (file)
@@ -1686,16 +1686,6 @@ static int floppy_release(struct inode * inode, struct file * filp)
 #endif
        int drive = MINOR(inode->i_rdev) & 3;
 
-       fsync_dev(inode->i_rdev);
-
-#ifdef DEBUG
-       /* This is now handled in floppy_change, but still useful for debugging */
-       sb = get_super(inode->i_rdev);
-       if (sb)
-               invalidate_inodes(sb);
-       invalidate_buffers(inode->i_rdev);
-#endif
-
        if (unit[drive].dirty == 1) {
                del_timer (flush_track_timer + drive);
                non_int_flush_track (drive);
index 49773437243588a988a8db41fb814f0e77980fc4..b1e20b7d3fecdd5d67cdaa8be7f07559b515b086 100644 (file)
@@ -1941,11 +1941,7 @@ static int floppy_open( struct inode *inode, struct file *filp )
 
 static int floppy_release( struct inode * inode, struct file * filp )
 {
-       int drive;
-
-       drive = MINOR(inode->i_rdev) & 3;
-
-       block_fsync (filp, filp->f_dentry);
+       int drive = MINOR(inode->i_rdev) & 3;
 
        if (fd_ref[drive] < 0)
                fd_ref[drive] = 0;
index 8eac89eba55656f52bda74a1e251c99e4017cfcd..9f5cadc2cfbc04a72fb8033f6b29b20272362fb8 100644 (file)
@@ -837,7 +837,6 @@ static int ida_release(struct inode *inode, struct file *filep)
        int dsk  = MINOR(inode->i_rdev) >> NWD_SHIFT;
 
        DBGINFO(printk("ida_release %x (%x:%x)\n", inode->i_rdev, ctlr, dsk) );
-       fsync_dev(inode->i_rdev);
 
        hba[ctlr]->drv[dsk].usage_count--;
        hba[ctlr]->usage_count--;
index ec5a3fad9eaaf3a0b85f08a7b2d340c6d9204b48..4434aef1a730cd40078a0c8b006462d101faba9c 100644 (file)
@@ -3627,11 +3627,7 @@ static void config_types(void)
 
 static int floppy_release(struct inode * inode, struct file * filp)
 {
-       int drive;
-
-       drive = DRIVE(inode->i_rdev);
-
-       block_fsync(filp, filp->f_dentry);
+       int drive = DRIVE(inode->i_rdev);
 
        if (UDRS->fd_ref < 0)
                UDRS->fd_ref=0;
index e6d03518eaff983af7003f52f77bd621f459cd47..5575f54a2de5bb13000728e38ab06967b95e3fe3 100644 (file)
@@ -657,10 +657,7 @@ static int hd_open(struct inode * inode, struct file * filp)
  */
 static int hd_release(struct inode * inode, struct file * file)
 {
-        int target;
-       sync_dev(inode->i_rdev);
-
-       target =  DEVICE_NR(inode->i_rdev);
+        int target =  DEVICE_NR(inode->i_rdev);
        access_count[target]--;
        return 0;
 }
index 5bdb1d477870efbb6d763f062eb93d58dd2ff67e..996219398f7d26d831dd8b4f9394ea04f6664c8d 100644 (file)
@@ -1846,7 +1846,6 @@ static int ide_release (struct inode * inode, struct file * file)
        ide_drive_t *drive;
 
        if ((drive = get_info_ptr(inode->i_rdev)) != NULL) {
-               fsync_dev(inode->i_rdev);
                drive->usage--;
                if (drive->driver != NULL)
                        DRIVER(drive)->release(inode, file, drive);
index 37c6949eec58a2196f697ce85be53ad1aa217116..1173c3f52146a45926df4fbc5643ccd5535e9392 100644 (file)
@@ -654,7 +654,6 @@ static int lo_release(struct inode *inode, struct file *file)
        dev = MINOR(inode->i_rdev);
        if (dev >= max_loop)
                return 0;
-       err = fsync_dev(inode->i_rdev);
        lo = &loop_dev[dev];
        if (lo->lo_refcnt <= 0)
                printk(KERN_ERR "lo_release: refcount(%d) <= 0\n", lo->lo_refcnt);
index 7c5fd982a85b4dd9492b0f234be459862a67905c..5786f9765997ff5acf00b3126030b67ed32221fa 100644 (file)
@@ -675,8 +675,6 @@ static int md_open (struct inode *inode, struct file *file)
 static int md_release (struct inode *inode, struct file *file)
 {
   int minor=MINOR(inode->i_rdev);
-
-  sync_dev (inode->i_rdev);
   md_dev[minor].busy--;
   return 0;
 }
index 4cf81b9b0804dee208b7e18acd90b2df2ae2b193..d854e0e1bb8d361185103f617bda4d8d3c52b3a4 100644 (file)
@@ -435,8 +435,6 @@ static int nbd_release(struct inode *inode, struct file *file)
        dev = MINOR(inode->i_rdev);
        if (dev >= MAX_NBD)
                return -ENODEV;
-       fsync_dev(inode->i_rdev);
-       invalidate_buffers(inode->i_rdev);
        lo = &nbd_dev[dev];
        if (lo->refcnt <= 0)
                printk(KERN_ALERT "nbd_release: refcount(%d) <= 0\n", lo->refcnt);
index 902e40a659e2511ddc8fdd91bd4564483d429845..0440d7f229d46f73cb795df68fdc206f8d9346de 100644 (file)
@@ -512,15 +512,8 @@ static int pd_release (struct inode *inode, struct file *file)
 
        PD.access--;
 
-        if (!PD.access)  {
-                fsync_dev(devp);
-
-               sb = get_super(devp);
-               if (sb) invalidate_inodes(sb);
-
-                invalidate_buffers(devp);
-               if (PD.removable) pd_doorlock(unit,IDE_DOORUNLOCK);
-       }
+        if (!PD.access && PD.removable)
+               pd_doorlock(unit,IDE_DOORUNLOCK);
 
         MOD_DEC_USE_COUNT;
 
index baed43a078b37d5672145ce95dd4f19338aa11d7..ffb3f95126ed01c3c7518185519e240dfceadb51 100644 (file)
@@ -447,8 +447,6 @@ static int pf_release (struct inode *inode, struct file *file)
 {       kdev_t devp;
        int     unit;
 
-       struct super_block *sb;
-
         devp = inode->i_rdev;
         unit = DEVICE_NR(devp);
 
@@ -457,15 +455,8 @@ static int pf_release (struct inode *inode, struct file *file)
 
        PF.access--;
 
-       if (!PF.access) {
-                fsync_dev(devp);
-
-               sb = get_super(devp);
-               if (sb) invalidate_inodes(sb);
-
-                invalidate_buffers(devp);
-               if (PF.removable) pf_lock(unit,0);
-        }
+       if (!PF.access && PF.removable)
+               pf_lock(unit,0);
 
         MOD_DEC_USE_COUNT;
 
index bd4c5245a9905d9c0e96dde441de72fc763125a4..3fd4b1501aa6726758a463cbcbf86f788604d084 100644 (file)
@@ -1105,7 +1105,6 @@ static int ps2esdi_release(struct inode *inode, struct file *file)
        int dev = DEVICE_NR(inode->i_rdev);
 
        if (dev < ps2esdi_drives) {
-               sync_dev(inode->i_rdev);
                access_count[dev]--;
        }
        return 0;
index 7466b5197925b92f36546a2d9fa744f78c2e2a5b..3190c10b9fc540deae949a5b0cff5c9f4d59c942 100644 (file)
@@ -924,8 +924,6 @@ static int floppy_release(struct inode *inode, struct file *filp)
        if (devnum >= floppy_count)
                return -ENODEV;
 
-       block_fsync (filp, filp->f_dentry);
-
        fs = &floppy_states[devnum];
        sw = fs->swim3;
        if (fs->ref_count > 0 && --fs->ref_count == 0) {
index 353e0a8cc824fa8dca6f265727f5d5e27b32d54a..6a74f9a0bdc90c0e120c26fc1046a73af1205340 100644 (file)
@@ -449,8 +449,6 @@ static int floppy_release(struct inode *inode, struct file *filp)
        if (devnum >= floppy_count)
                return -ENODEV;
 
-       block_fsync (filp, filp->f_dentry);
-
        fs = &floppy_states[devnum];
        if (fs->ref_count > 0) fs->ref_count--;
        return 0;
index 363c0ae71762a56ada0348d318005ad50df1974f..d6bb7f462c46391413cc6fbda9ff1b7a5ed98dae 100644 (file)
@@ -367,17 +367,12 @@ static int xd_ioctl (struct inode *inode,struct file *file,u_int cmd,u_long arg)
 /* xd_release: release the device */
 static int xd_release (struct inode *inode, struct file *file)
 {
-       int target;
-
-       target= DEVICE_NR(inode->i_rdev);
+       int target = DEVICE_NR(inode->i_rdev);
        if (target < xd_drives) {
-               sync_dev(inode->i_rdev);
                xd_access[target]--;
-
 #ifdef MODULE
                MOD_DEC_USE_COUNT;
 #endif /* MODULE */
-
        }
        return 0;
 }
index 224db90e88e2025222010d0a64453ceccae90014..dfd0b0199eac12ec49bf2fec85ccf365d00ce99a 100644 (file)
@@ -320,8 +320,6 @@ z2_release( struct inode *inode, struct file *filp )
     if ( current_device == -1 )
        return 0;     
 
-    sync_dev( inode->i_rdev );
-
     /*
      * FIXME: unmap memory
      */
index c9bc3f9998b77eeb6d975c51062edd770a38a045..5f7cfb21ff0c05b823462768cbb5f2ddd6e99309 100644 (file)
@@ -1593,8 +1593,6 @@ static int  aztcd_release(struct inode * inode, struct file * file)
   MOD_DEC_USE_COUNT;
   if (!--azt_open_count) {
        azt_invalidate_buffers();
-       sync_dev(inode->i_rdev);             /*??? isn't it a read only dev?*/
-       invalidate_buffers(inode -> i_rdev);
        aztUnlockDoor();
         if (azt_auto_eject)
            aztSendCmd(ACMD_EJECT);
index e7585203d532b482443e4f7c24f5bda60a3aa335..f3df74f918492efb5a05d900f833178346ca0cdf 100644 (file)
@@ -640,11 +640,6 @@ int cdrom_release(struct inode *ip, struct file *fp)
                !(fp && fp->f_flags & O_NONBLOCK);
        cdo->release(cdi);
        if (cdi->use_count == 0) {      /* last process that closes dev*/
-               struct super_block *sb;
-               sync_dev(dev);
-               sb = get_super(dev);
-               if (sb) invalidate_inodes(sb);
-               invalidate_buffers(dev);
                if (opened_for_data &&
                    cdi->options & CDO_AUTO_EJECT && CDROM_CAN(CDC_OPEN_TRAY))
                        cdo->tray_move(cdi, 1);
index 73c6c950ca04ca95d010fb2bf0951e65b77828e3..b24aefa16ce1a1793c0a6e0ca2c0abcb88d21152 100644 (file)
@@ -418,8 +418,6 @@ printk ( "GSCD: release\n" );
 #endif
 
        gscd_bn = -1;
-       sync_dev(inode->i_rdev);
-       invalidate_buffers(inode -> i_rdev);
 
        MOD_DEC_USE_COUNT;
        return 0;
index f8ebde15d2c11416f02c3b19109cfa6ab539db73..a1f36ae23c7afe89a23d7a38714ea236f89b3d9d 100644 (file)
@@ -1935,8 +1935,6 @@ static int opt_release(struct inode *ip, struct file *fp)
        if (!--open_count) {
                toc_uptodate = 0;
                opt_invalidate_buffers();
-               sync_dev(ip -> i_rdev);
-               invalidate_buffers(ip -> i_rdev);
                status = exec_cmd(COMUNLOCK);   /* Unlock door */
                if (status < 0) {
                        DEBUG((DEBUG_VFS, "exec_cmd COMUNLOCK: %02x", -status));
index 7ea184b5f7515b82a9e368aa30448d67c7d2a88d..97107b96935994e3a6c581bdda8701e8440b89e6 100644 (file)
@@ -1413,8 +1413,6 @@ static int sjcd_release( struct inode *inode, struct file *file ){
 #endif
   if( --sjcd_open_count == 0 ){
     sjcd_invalidate_buffers();
-    sync_dev( inode->i_rdev );
-    invalidate_buffers( inode->i_rdev );
     s = sjcd_tray_unlock();
     if( s < 0 || !sjcd_status_valid || sjcd_command_failed ){
 #if defined( SJCD_DIAGNOSTIC )
index 14e25f90a1a66ead7772f8c9e392159339c1fc1a..4e23b783f16ca56609cc7a3ad49fd16752d3529b 100644 (file)
@@ -1451,7 +1451,6 @@ cdu_release(struct inode *inode,
                sony_usage--;
        }
        if (sony_usage == 0) {
-               sync_dev(inode->i_rdev);
                check_drive_status();
 
                if (sony_audio_status != CDROM_AUDIO_PLAY) {
index 78d3a6c53491eafca89ad6d2ac6d6c17d62a7ae5..cbc987e442eaafe58064de69c526576ec3471669 100644 (file)
@@ -685,7 +685,6 @@ static int i2ob_release(struct inode *inode, struct file *file)
        minor = MINOR(inode->i_rdev);
        if (minor >= (MAX_I2OB<<4))
                return -ENODEV;
-       sync_dev(inode->i_rdev);
        dev = &i2ob_dev[(minor&0xF0)];
        if (dev->refcnt <= 0)
                printk(KERN_ALERT "i2ob_release: refcount(%d) <= 0\n", dev->refcnt);
index b242d4fe337f10bc399b509a8958f3c5ab7d6ec4..9394c3cde0fa42fc2ecd1fd264c3bd62cd81a628 100644 (file)
@@ -238,7 +238,7 @@ pci_insert_device(struct pci_dev *dev, struct pci_bus *bus)
 #ifdef CONFIG_PROC_FS
        pci_proc_attach_device(dev);
 #endif
-       for(ln=pci_drivers.next; ln != &pci_devices; ln=ln->next) {
+       for(ln=pci_drivers.next; ln != &pci_drivers; ln=ln->next) {
                struct pci_driver *drv = list_entry(ln, struct pci_driver, node);
                if (drv->probe(dev)) {
                        dev->driver = drv;
@@ -247,6 +247,17 @@ pci_insert_device(struct pci_dev *dev, struct pci_bus *bus)
        }
 }
 
+static void pci_free_resources(struct pci_dev *dev)
+{
+       int i;
+
+       for (i = 0; i < PCI_NUM_RESOURCES; i++) {
+               struct resource *res = dev->resource + i;
+               if (res->parent)
+                       release_resource(res);
+       }
+}
+
 void
 pci_remove_device(struct pci_dev *dev)
 {
@@ -255,6 +266,7 @@ pci_remove_device(struct pci_dev *dev)
        dev->driver = NULL;
        list_del(&dev->bus_list);
        list_del(&dev->global_list);
+       pci_free_resources(dev);
 #ifdef CONFIG_PROC_FS
        pci_proc_detach_device(dev);
 #endif
index 9aaf0a724002131d5bade8715ec3c57ecafedb55..5ac103e988f9068242106406aec29023d3016913 100644 (file)
@@ -256,6 +256,21 @@ fail:
     
 =====================================================================*/
 
+static int cb_assign_irq(u32 mask)
+{
+       int irq, try;
+
+       for (try = 0; try < 2; try++) {
+               for (irq = 1; irq < 32; irq++) {
+                       if ((mask >> irq) & 1) {
+                               if (try_irq(IRQ_TYPE_EXCLUSIVE, irq, try) == 0)
+                                       return irq;
+                       }
+               }
+       }
+       return 0;
+}
+
 int cb_alloc(socket_info_t * s)
 {
        struct pci_bus *bus;
@@ -263,6 +278,7 @@ int cb_alloc(socket_info_t * s)
        u_short vend, v, dev;
        u_char i, hdr, fn;
        cb_config_t *c;
+       int irq;
 
        bus = s->cap.cb_dev->subordinate;
        memset(&tmp, 0, sizeof(tmp));
@@ -292,8 +308,10 @@ int cb_alloc(socket_info_t * s)
                return CS_OUT_OF_RESOURCE;
        memset(c, 0, fn * sizeof(struct cb_config_t));
 
+       irq = s->cap.pci_irq;
        for (i = 0; i < fn; i++) {
                struct pci_dev *dev = &c[i].dev;
+               u8 irq_pin;
                int r;
 
                dev->bus = bus;
@@ -314,26 +332,25 @@ int cb_alloc(socket_info_t * s)
                                pci_assign_resource(dev, r);
                        }
                }
+               pci_enable_device(dev);
+
+               /* Does this function have an interrupt at all? */
+               pci_readb(dev, PCI_INTERRUPT_PIN, &irq_pin);
+               if (irq_pin) {
+                       if (!irq)
+                               irq = cb_assign_irq(s->cap.irq_mask);
+                       dev->irq = irq;
+                       pci_writeb(dev, PCI_INTERRUPT_LINE, irq);
+               }
 
                pci_insert_device(dev, bus);
-               pci_enable_device(dev);
        }
 
        s->cb_config = c;
+       s->irq.AssignedIRQ = irq;
        return CS_SUCCESS;
 }
 
-static void free_resources(struct pci_dev *dev)
-{
-       int i;
-
-       for (i = 0; i < 7; i++) {
-               struct resource *res = dev->resource + i;
-               if (res->parent)
-                       release_resource(res);
-       }
-}
-
 void cb_free(socket_info_t * s)
 {
        cb_config_t *c = s->cb_config;
@@ -342,12 +359,9 @@ void cb_free(socket_info_t * s)
                int i;
 
                s->cb_config = NULL;
-               for(i=0; i<s->functions; i++) {
-                       struct pci_dev *dev = &c[i].dev;
+               for (i = 0 ; i < s->functions ; i++)
+                       pci_remove_device(&c[i].dev);
 
-                       free_resources(dev);
-                       pci_remove_device(dev);
-               }
                kfree(c);
                printk(KERN_INFO "cs: cb_free(bus %d)\n", s->cap.cb_dev->subordinate->number);
        }
@@ -365,54 +379,8 @@ void cb_free(socket_info_t * s)
     
 ======================================================================*/
 
-static int cb_assign_irq(u32 mask)
-{
-       int irq, try;
-
-       for (try = 0; try < 2; try++) {
-               for (irq = 1; irq < 32; irq++) {
-                       if ((mask >> irq) & 1) {
-                               if (try_irq(IRQ_TYPE_EXCLUSIVE, irq, try) == 0)
-                                       return irq;
-                       }
-               }
-       }
-       return 0;
-}
-
 int cb_config(socket_info_t * s)
 {
-       cb_config_t *c = s->cb_config;
-       u_char fn = s->functions;
-       int i, irq;
-
-       printk(KERN_INFO "cs: cb_config(bus %d)\n", s->cap.cb_dev->subordinate->number);
-
-       /*
-        * If we have a PCI interrupt for the bridge,
-        * then use that..
-        */
-       irq = s->cap.pci_irq;
-
-       for (i = 0; i < fn; i++) {
-               struct pci_dev *dev = &c[i].dev;
-               u8 irq_pin;
-
-               /* Does this function have an interrupt at all? */
-               pci_readb(dev, PCI_INTERRUPT_PIN, &irq_pin);
-               if (!irq_pin)
-                       continue;
-
-               if (!irq) {
-                       irq = cb_assign_irq(s->cap.irq_mask);
-                       if (!irq)
-                               return CS_OUT_OF_RESOURCE;
-               }
-
-               dev->irq = irq;
-               pci_writeb(dev, PCI_INTERRUPT_LINE, irq);
-       }
-       s->irq.AssignedIRQ = irq;
        return CS_SUCCESS;
 }
 
index 01fd69803d2399d4ac13c8ba0ffce2a43b6d00b5..6345505b31bcc3f188b2b0a3e3fad98124bafab5 100644 (file)
@@ -452,7 +452,6 @@ static int sd_open(struct inode *inode, struct file *filp)
 static int sd_release(struct inode *inode, struct file *file)
 {
        int target;
-       fsync_dev(inode->i_rdev);
 
        target = DEVICE_NR(inode->i_rdev);
 
index c32b8c0f254a4bbfcb761f934aad8a3adc9b98c8..83c729bf01d10f73aaf570e8943e947ffc106e1d 100644 (file)
@@ -298,7 +298,7 @@ ssize_t block_read(struct file * filp, char * buf, size_t count, loff_t *ppos)
  *     since the vma has no handle.
  */
  
-int block_fsync(struct file *filp, struct dentry *dentry)
+static int block_fsync(struct file *filp, struct dentry *dentry)
 {
        return fsync_dev(dentry->d_inode->i_rdev);
 }
@@ -604,8 +604,11 @@ int blkdev_put(struct block_device *bdev, int kind)
        kdev_t rdev = to_kdev_t(bdev->bd_dev); /* this should become bdev */
        down(&bdev->bd_sem);
        /* syncing will go here */
+       if (kind == BDEV_FILE || kind == BDEV_FS)
+               sync_dev(rdev);
        if (atomic_dec_and_test(&bdev->bd_openers)) {
                /* invalidating buffers will go here */
+               invalidate_buffers(rdev);
        }
        if (bdev->bd_op->release) {
                struct inode * fake_inode = get_empty_inode();
index e6c0c4c2953f8d656102a0e5735ef063634bd63f..4074c4ea76100674cb1c5ed5da6e3c51066b1a13 100644 (file)
@@ -1011,7 +1011,6 @@ extern int read_ahead[];
 extern ssize_t char_write(struct file *, const char *, size_t, loff_t *);
 extern ssize_t block_write(struct file *, const char *, size_t, loff_t *);
 
-extern int block_fsync(struct file *, struct dentry *);
 extern int file_fsync(struct file *, struct dentry *);
 extern int generic_buffer_fdatasync(struct inode *inode, unsigned long start_idx, unsigned long end_idx);
 
index b5e1c04a44a69894eb5cdcf949602e89264667ec..cb42b9c3a68f3b38f2c755c1f54bcf585a7ec089 100644 (file)
@@ -247,7 +247,6 @@ EXPORT_SYMBOL(tty_std_termios);
 /* block device driver support */
 EXPORT_SYMBOL(block_read);
 EXPORT_SYMBOL(block_write);
-EXPORT_SYMBOL(block_fsync);
 EXPORT_SYMBOL(wait_for_request);
 EXPORT_SYMBOL(blksize_size);
 EXPORT_SYMBOL(hardsect_size);