summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arch/cris/arch-v10/drivers/eeprom.c4
-rw-r--r--arch/cris/arch-v10/drivers/gpio.c2
-rw-r--r--arch/i386/kernel/cpuid.c4
-rw-r--r--arch/i386/kernel/msr.c6
-rw-r--r--arch/m68k/kernel/vmlinux-std.lds (renamed from arch/m68k/vmlinux-std.lds)0
-rw-r--r--arch/m68k/kernel/vmlinux-sun3.lds (renamed from arch/m68k/vmlinux-sun3.lds)0
-rw-r--r--arch/m68knommu/platform/5206/config.c3
-rw-r--r--arch/m68knommu/platform/5206e/config.c3
-rw-r--r--arch/m68knommu/platform/5249/config.c2
-rw-r--r--arch/m68knommu/platform/5272/config.c3
-rw-r--r--arch/mips/sibyte/cfe/console.c4
-rw-r--r--arch/mips/sibyte/sb1250/bcm1250_tbprof.c4
-rw-r--r--arch/parisc/kernel/ioctl32.c2
-rw-r--r--arch/ppc/8260_io/uart.c2
-rw-r--r--arch/ppc/8xx_io/cs4218_tdm.c4
-rw-r--r--arch/sparc/kernel/sys_sunos.c4
-rw-r--r--arch/sparc64/kernel/sys_sunos32.c2
-rw-r--r--arch/sparc64/mm/hugetlbpage.c201
-rw-r--r--arch/sparc64/solaris/misc.c4
-rw-r--r--arch/sparc64/solaris/socksys.c4
-rw-r--r--arch/sparc64/solaris/timod.c2
-rw-r--r--arch/x86_64/defconfig59
-rw-r--r--arch/x86_64/ia32/sys_ia32.c2
-rw-r--r--arch/x86_64/kernel/apic.c4
-rw-r--r--arch/x86_64/kernel/io_apic.c20
-rw-r--r--arch/x86_64/kernel/ioport.c12
-rw-r--r--arch/x86_64/kernel/mpparse.c4
-rw-r--r--arch/x86_64/kernel/msr.c6
-rw-r--r--arch/x86_64/kernel/setup.c10
-rw-r--r--arch/x86_64/kernel/smpboot.c16
-rw-r--r--arch/x86_64/kernel/time.c1
-rw-r--r--arch/x86_64/kernel/vsyscall.c1
-rw-r--r--drivers/acorn/block/fd1772.c6
-rw-r--r--drivers/acpi/Kconfig1
-rw-r--r--drivers/block/acsi_slm.c10
-rw-r--r--drivers/block/amiflop.c21
-rw-r--r--drivers/block/ataflop.c23
-rw-r--r--drivers/block/cciss.c22
-rw-r--r--drivers/block/cpqarray.c2
-rw-r--r--drivers/block/floppy.c24
-rw-r--r--drivers/block/floppy98.c24
-rw-r--r--drivers/block/genhd.c24
-rw-r--r--drivers/block/ioctl.c21
-rw-r--r--drivers/block/ll_rw_blk.c31
-rw-r--r--drivers/block/paride/pg.c4
-rw-r--r--drivers/block/paride/pt.c14
-rw-r--r--drivers/block/rd.c15
-rw-r--r--drivers/block/z2ram.c4
-rw-r--r--drivers/char/agp/frontend.c2
-rw-r--r--drivers/char/busmouse.c4
-rw-r--r--drivers/char/drm/drm_drv.h2
-rw-r--r--drivers/char/drm/drm_fops.h2
-rw-r--r--drivers/char/drm/drm_stub.h2
-rw-r--r--drivers/char/dsp56k.c12
-rw-r--r--drivers/char/dtlk.c8
-rw-r--r--drivers/char/ftape/zftape/zftape-init.c16
-rw-r--r--drivers/char/ip2main.c6
-rw-r--r--drivers/char/ipmi/ipmi_devintf.c2
-rw-r--r--drivers/char/ipmi/ipmi_watchdog.c4
-rw-r--r--drivers/char/istallion.c6
-rw-r--r--drivers/char/ite_gpio.c2
-rw-r--r--drivers/char/lp.c10
-rw-r--r--drivers/char/lp_old98.c2
-rw-r--r--drivers/char/mem.c2
-rw-r--r--drivers/char/misc.c2
-rw-r--r--drivers/char/ppdev.c10
-rw-r--r--drivers/char/raw.c8
-rw-r--r--drivers/char/scx200_gpio.c6
-rw-r--r--drivers/char/stallion.c2
-rw-r--r--drivers/char/tipar.c10
-rw-r--r--drivers/char/tpqic02.c63
-rw-r--r--drivers/char/tty_io.c18
-rw-r--r--drivers/char/vc_screen.c8
-rw-r--r--drivers/char/watchdog/acquirewdt.c4
-rw-r--r--drivers/char/watchdog/cpu5wdt.c4
-rw-r--r--drivers/char/watchdog/ib700wdt.c4
-rw-r--r--drivers/char/watchdog/machzwd.c4
-rw-r--r--drivers/char/watchdog/pcwd.c6
-rw-r--r--drivers/char/watchdog/wdt.c6
-rw-r--r--drivers/char/watchdog/wdt_pci.c6
-rw-r--r--drivers/i2c/i2c-dev.c8
-rw-r--r--drivers/ide/ide-io.c2
-rw-r--r--drivers/ide/ide-lib.c17
-rw-r--r--drivers/ide/ide-probe.c60
-rw-r--r--drivers/ide/ide-tape.c6
-rw-r--r--drivers/ide/ide.c33
-rw-r--r--drivers/ide/ide_modes.h41
-rw-r--r--drivers/ide/legacy/ali14xx.c2
-rw-r--r--drivers/ide/legacy/dtc2278.c2
-rw-r--r--drivers/ide/legacy/ht6560b.c2
-rw-r--r--drivers/ide/legacy/macide.c2
-rw-r--r--drivers/ide/legacy/qd65xx.c1
-rw-r--r--drivers/ide/legacy/umc8672.c2
-rw-r--r--drivers/ide/pci/aec62xx.c1
-rw-r--r--drivers/ide/pci/alim15x3.c1
-rw-r--r--drivers/ide/pci/cmd640.c2
-rw-r--r--drivers/ide/pci/cmd64x.c1
-rw-r--r--drivers/ide/pci/cs5520.c1
-rw-r--r--drivers/ide/pci/cs5530.c1
-rw-r--r--drivers/ide/pci/cy82c693.c3
-rw-r--r--drivers/ide/pci/hpt34x.c1
-rw-r--r--drivers/ide/pci/hpt366.c36
-rw-r--r--drivers/ide/pci/it8172.c1
-rw-r--r--drivers/ide/pci/opti621.c1
-rw-r--r--drivers/ide/pci/pdc202xx_new.c1
-rw-r--r--drivers/ide/pci/pdc202xx_old.c1
-rw-r--r--drivers/ide/pci/pdcadma.c1
-rw-r--r--drivers/ide/pci/piix.c1
-rw-r--r--drivers/ide/pci/sc1200.c1
-rw-r--r--drivers/ide/pci/serverworks.c1
-rw-r--r--drivers/ide/pci/siimage.c1
-rw-r--r--drivers/ide/pci/sis5513.c1
-rw-r--r--drivers/ide/pci/sl82c105.c1
-rw-r--r--drivers/ide/pci/slc90e66.c1
-rw-r--r--drivers/ide/pci/triflex.c1
-rw-r--r--drivers/ide/ppc/mpc8xx.c1
-rw-r--r--drivers/ide/ppc/pmac.c3
-rw-r--r--drivers/ieee1394/ieee1394_core.c2
-rw-r--r--drivers/ieee1394/ieee1394_core.h2
-rw-r--r--drivers/ieee1394/pcilynx.c2
-rw-r--r--drivers/input/evdev.c2
-rw-r--r--drivers/input/input.c2
-rw-r--r--drivers/input/joydev.c2
-rw-r--r--drivers/input/mousedev.c4
-rw-r--r--drivers/input/tsdev.c2
-rw-r--r--drivers/isdn/capi/capi.c2
-rw-r--r--drivers/isdn/hardware/eicon/divasi.c2
-rw-r--r--drivers/isdn/i4l/isdn_common.c4
-rw-r--r--drivers/isdn/i4l/isdn_ppp.c2
-rw-r--r--drivers/macintosh/adb.c2
-rw-r--r--drivers/md/md.c29
-rw-r--r--drivers/md/raid0.c7
-rw-r--r--drivers/md/raid5.c7
-rw-r--r--drivers/md/xor.c3
-rw-r--r--drivers/media/common/saa7146_fops.c2
-rw-r--r--drivers/media/dvb/dvb-core/dvbdev.c2
-rw-r--r--drivers/media/video/bttv-driver.c4
-rw-r--r--drivers/media/video/saa7134/saa7134-oss.c4
-rw-r--r--drivers/media/video/saa7134/saa7134-ts.c2
-rw-r--r--drivers/media/video/saa7134/saa7134-video.c2
-rw-r--r--drivers/media/video/stradis.c2
-rw-r--r--drivers/media/video/tvmixer.c2
-rw-r--r--drivers/media/video/videodev.c4
-rw-r--r--drivers/mtd/mtdchar.c2
-rw-r--r--drivers/net/sis190.c2
-rw-r--r--drivers/net/wan/cosa.c6
-rw-r--r--drivers/pcmcia/ds.c12
-rw-r--r--drivers/s390/char/tape_char.c10
-rw-r--r--drivers/s390/char/tubio.h2
-rw-r--r--drivers/sbus/char/bpp.c10
-rw-r--r--drivers/sbus/char/cpwatchdog.c2
-rw-r--r--drivers/sbus/char/display7seg.c4
-rw-r--r--drivers/sbus/char/vfc_dev.c10
-rw-r--r--drivers/scsi/3w-xxxx.c4
-rw-r--r--drivers/scsi/aacraid/linit.c4
-rw-r--r--drivers/scsi/dpt_i2o.c6
-rw-r--r--drivers/scsi/osst.c14
-rw-r--r--drivers/scsi/sg.c2
-rw-r--r--drivers/scsi/st.c10
-rw-r--r--drivers/telephony/ixj.c22
-rw-r--r--drivers/telephony/phonedev.c2
-rw-r--r--drivers/usb/class/audio.c4
-rw-r--r--drivers/usb/class/usb-midi.c2
-rw-r--r--drivers/usb/class/usblp.c2
-rw-r--r--drivers/usb/core/file.c2
-rw-r--r--drivers/usb/image/scanner.h2
-rw-r--r--drivers/usb/input/hiddev.c2
-rw-r--r--drivers/usb/media/dabusb.c2
-rw-r--r--drivers/usb/misc/auerswald.c2
-rw-r--r--drivers/usb/misc/brlvger.c2
-rw-r--r--drivers/usb/misc/tiglusb.c2
-rw-r--r--drivers/usb/usb-skeleton.c2
-rw-r--r--drivers/video/fbmem.c12
-rw-r--r--drivers/video/stifb.c4
-rw-r--r--fs/afs/callback.c2
-rw-r--r--fs/afs/dir.c2
-rw-r--r--fs/bio.c6
-rw-r--r--fs/block_dev.c260
-rw-r--r--fs/cifs/cifsfs.c10
-rw-r--r--fs/coda/inode.c4
-rw-r--r--fs/coda/psdev.c2
-rw-r--r--fs/compat_ioctl.c2
-rw-r--r--fs/hpfs/namei.c1
-rw-r--r--fs/intermezzo/presto.c4
-rw-r--r--fs/intermezzo/vfs.c6
-rw-r--r--fs/jffs/inode-v23.c15
-rw-r--r--fs/jffs2/file.c4
-rw-r--r--fs/jffs2/os-linux.h4
-rw-r--r--fs/nfs/inode.c19
-rw-r--r--fs/nfsd/nfs4state.c46
-rw-r--r--fs/nfsd/nfs4xdr.c4
-rw-r--r--fs/partitions/check.c12
-rw-r--r--fs/proc/task_mmu.c8
-rw-r--r--fs/smbfs/inode.c4
-rw-r--r--include/asm-m68k/local.h6
-rw-r--r--include/asm-m68k/sections.h6
-rw-r--r--include/asm-m68k/system.h7
-rw-r--r--include/asm-x86_64/bitops.h2
-rw-r--r--include/asm-x86_64/mpspec.h45
-rw-r--r--include/asm-x86_64/percpu.h5
-rw-r--r--include/asm-x86_64/processor.h1
-rw-r--r--include/asm-x86_64/smp.h1
-rw-r--r--include/asm-x86_64/suspend.h2
-rw-r--r--include/asm-x86_64/topology.h11
-rw-r--r--include/linux/fs.h23
-rw-r--r--include/linux/genhd.h2
-rw-r--r--include/linux/ide.h38
-rw-r--r--include/linux/kdev_t.h15
-rw-r--r--include/linux/nfsd/nfsfh.h4
-rw-r--r--include/linux/nfsd/state.h10
-rw-r--r--include/linux/tpqic02.h6
-rw-r--r--include/linux/tty.h2
-rw-r--r--ipc/msg.c4
-rw-r--r--ipc/sem.c8
-rw-r--r--ipc/shm.c6
-rw-r--r--net/netlink/netlink_dev.c12
-rw-r--r--sound/core/control.c2
-rw-r--r--sound/core/hwdep.c8
-rw-r--r--sound/core/oss/mixer_oss.c2
-rw-r--r--sound/core/oss/pcm_oss.c2
-rw-r--r--sound/core/pcm_native.c8
-rw-r--r--sound/core/rawmidi.c10
-rw-r--r--sound/core/seq/oss/seq_oss.c2
-rw-r--r--sound/core/sound.c2
-rw-r--r--sound/oss/ad1889.c4
-rw-r--r--sound/oss/ali5455.c2
-rw-r--r--sound/oss/au1000.c2
-rw-r--r--sound/oss/btaudio.c6
-rw-r--r--sound/oss/cmpci.c8
-rw-r--r--sound/oss/cs4281/cs4281m.c6
-rw-r--r--sound/oss/cs46xx.c8
-rw-r--r--sound/oss/dmasound/dmasound_core.c2
-rw-r--r--sound/oss/emu10k1/audio.c2
-rw-r--r--sound/oss/emu10k1/midi.c2
-rw-r--r--sound/oss/emu10k1/mixer.c2
-rw-r--r--sound/oss/es1370.c8
-rw-r--r--sound/oss/es1371.c8
-rw-r--r--sound/oss/esssolo1.c8
-rw-r--r--sound/oss/hal2.c4
-rw-r--r--sound/oss/i810_audio.c2
-rw-r--r--sound/oss/ite8172.c4
-rw-r--r--sound/oss/maestro.c4
-rw-r--r--sound/oss/maestro3.c4
-rw-r--r--sound/oss/msnd_pinnacle.c10
-rw-r--r--sound/oss/nec_vrc5477.c4
-rw-r--r--sound/oss/rme96xx.c4
-rw-r--r--sound/oss/sonicvibes.c8
-rw-r--r--sound/oss/soundcard.c14
-rw-r--r--sound/oss/swarm_cs4297a.c4
-rw-r--r--sound/oss/trident.c4
-rw-r--r--sound/oss/via82cxxx_audio.c4
-rw-r--r--sound/oss/vwsnd.c4
-rw-r--r--sound/oss/ymfpci.c4
-rw-r--r--sound/sound_core.c2
254 files changed, 938 insertions, 1267 deletions
diff --git a/arch/cris/arch-v10/drivers/eeprom.c b/arch/cris/arch-v10/drivers/eeprom.c
index 67523549dd96..f0ea4701478a 100644
--- a/arch/cris/arch-v10/drivers/eeprom.c
+++ b/arch/cris/arch-v10/drivers/eeprom.c
@@ -441,9 +441,9 @@ int __init eeprom_init(void)
static int eeprom_open(struct inode * inode, struct file * file)
{
- if(minor(inode->i_rdev) != EEPROM_MINOR_NR)
+ if(iminor(inode) != EEPROM_MINOR_NR)
return -ENXIO;
- if(major(inode->i_rdev) != EEPROM_MAJOR_NR)
+ if(imajor(inode) != EEPROM_MAJOR_NR)
return -ENXIO;
if( eeprom.size > 0 )
diff --git a/arch/cris/arch-v10/drivers/gpio.c b/arch/cris/arch-v10/drivers/gpio.c
index a105cadaeed1..f3a57162bde1 100644
--- a/arch/cris/arch-v10/drivers/gpio.c
+++ b/arch/cris/arch-v10/drivers/gpio.c
@@ -386,7 +386,7 @@ static int
gpio_open(struct inode *inode, struct file *filp)
{
struct gpio_private *priv;
- int p = minor(inode->i_rdev);
+ int p = iminor(inode);
if (p > GPIO_MINOR_LAST)
return -EINVAL;
diff --git a/arch/i386/kernel/cpuid.c b/arch/i386/kernel/cpuid.c
index f68ad5461b22..e97a2ca3463d 100644
--- a/arch/i386/kernel/cpuid.c
+++ b/arch/i386/kernel/cpuid.c
@@ -115,7 +115,7 @@ static ssize_t cpuid_read(struct file * file, char * buf,
u32 data[4];
size_t rv;
u32 reg = *ppos;
- int cpu = minor(file->f_dentry->d_inode->i_rdev);
+ int cpu = iminor(file->f_dentry->d_inode);
if ( count % 16 )
return -EINVAL; /* Invalid chunk size */
@@ -133,7 +133,7 @@ static ssize_t cpuid_read(struct file * file, char * buf,
static int cpuid_open(struct inode *inode, struct file *file)
{
- int cpu = minor(file->f_dentry->d_inode->i_rdev);
+ int cpu = iminor(file->f_dentry->d_inode);
struct cpuinfo_x86 *c = &(cpu_data)[cpu];
if (!cpu_online(cpu))
diff --git a/arch/i386/kernel/msr.c b/arch/i386/kernel/msr.c
index 0290647851c8..056c6ad024b4 100644
--- a/arch/i386/kernel/msr.c
+++ b/arch/i386/kernel/msr.c
@@ -194,7 +194,7 @@ static ssize_t msr_read(struct file * file, char __user * buf,
u32 data[2];
size_t rv;
u32 reg = *ppos;
- int cpu = minor(file->f_dentry->d_inode->i_rdev);
+ int cpu = iminor(file->f_dentry->d_inode);
int err;
if ( count % 8 )
@@ -219,7 +219,7 @@ static ssize_t msr_write(struct file * file, const char __user * buf,
u32 data[2];
size_t rv;
u32 reg = *ppos;
- int cpu = minor(file->f_dentry->d_inode->i_rdev);
+ int cpu = iminor(file->f_dentry->d_inode);
int err;
if ( count % 8 )
@@ -239,7 +239,7 @@ static ssize_t msr_write(struct file * file, const char __user * buf,
static int msr_open(struct inode *inode, struct file *file)
{
- int cpu = minor(file->f_dentry->d_inode->i_rdev);
+ int cpu = iminor(file->f_dentry->d_inode);
struct cpuinfo_x86 *c = &(cpu_data)[cpu];
if (!cpu_online(cpu))
diff --git a/arch/m68k/vmlinux-std.lds b/arch/m68k/kernel/vmlinux-std.lds
index bd41fc992169..bd41fc992169 100644
--- a/arch/m68k/vmlinux-std.lds
+++ b/arch/m68k/kernel/vmlinux-std.lds
diff --git a/arch/m68k/vmlinux-sun3.lds b/arch/m68k/kernel/vmlinux-sun3.lds
index 2e81cde14987..2e81cde14987 100644
--- a/arch/m68k/vmlinux-sun3.lds
+++ b/arch/m68k/kernel/vmlinux-sun3.lds
diff --git a/arch/m68knommu/platform/5206/config.c b/arch/m68knommu/platform/5206/config.c
index 41d855503050..8c73768d65b2 100644
--- a/arch/m68knommu/platform/5206/config.c
+++ b/arch/m68knommu/platform/5206/config.c
@@ -14,6 +14,7 @@
#include <linux/sched.h>
#include <linux/param.h>
#include <linux/init.h>
+#include <linux/interrupt.h>
#include <asm/irq.h>
#include <asm/dma.h>
#include <asm/traps.h>
@@ -26,7 +27,7 @@
/***************************************************************************/
void coldfire_tick(void);
-void coldfire_timer_init(void (*handler)(int, void *, struct pt_regs *));
+void coldfire_timer_init(irqreturn_t (*handler)(int, void *, struct pt_regs *));
unsigned long coldfire_timer_offset(void);
void coldfire_trap_init(void);
void coldfire_reset(void);
diff --git a/arch/m68knommu/platform/5206e/config.c b/arch/m68knommu/platform/5206e/config.c
index a31398a5a2d8..75e79b6fbf13 100644
--- a/arch/m68knommu/platform/5206e/config.c
+++ b/arch/m68knommu/platform/5206e/config.c
@@ -12,6 +12,7 @@
#include <linux/kernel.h>
#include <linux/sched.h>
#include <linux/param.h>
+#include <linux/interrupt.h>
#include <asm/irq.h>
#include <asm/dma.h>
#include <asm/traps.h>
@@ -26,7 +27,7 @@
/***************************************************************************/
void coldfire_tick(void);
-void coldfire_timer_init(void (*handler)(int, void *, struct pt_regs *));
+void coldfire_timer_init(irqreturn_t (*handler)(int, void *, struct pt_regs *));
unsigned long coldfire_timer_offset(void);
void coldfire_trap_init(void);
void coldfire_reset(void);
diff --git a/arch/m68knommu/platform/5249/config.c b/arch/m68knommu/platform/5249/config.c
index a038092a2e47..f0a68d04eb10 100644
--- a/arch/m68knommu/platform/5249/config.c
+++ b/arch/m68knommu/platform/5249/config.c
@@ -26,7 +26,7 @@
/***************************************************************************/
void coldfire_tick(void);
-void coldfire_timer_init(void (*handler)(int, void *, struct pt_regs *));
+void coldfire_timer_init(irqreturn_t (*handler)(int, void *, struct pt_regs *));
unsigned long coldfire_timer_offset(void);
void coldfire_trap_init(void);
void coldfire_reset(void);
diff --git a/arch/m68knommu/platform/5272/config.c b/arch/m68knommu/platform/5272/config.c
index 1809554f0e26..77ce91e4bd11 100644
--- a/arch/m68knommu/platform/5272/config.c
+++ b/arch/m68knommu/platform/5272/config.c
@@ -14,6 +14,7 @@
#include <linux/sched.h>
#include <linux/param.h>
#include <linux/init.h>
+#include <linux/interrupt.h>
#include <asm/irq.h>
#include <asm/dma.h>
#include <asm/traps.h>
@@ -27,7 +28,7 @@
/***************************************************************************/
void coldfire_tick(void);
-void coldfire_timer_init(void (*handler)(int, void *, struct pt_regs *));
+void coldfire_timer_init(irqreturn_t (*handler)(int, void *, struct pt_regs *));
unsigned long coldfire_timer_offset(void);
void coldfire_trap_init(void);
void coldfire_reset(void);
diff --git a/arch/mips/sibyte/cfe/console.c b/arch/mips/sibyte/cfe/console.c
index 4ecbf1d0061a..52b562eb2a09 100644
--- a/arch/mips/sibyte/cfe/console.c
+++ b/arch/mips/sibyte/cfe/console.c
@@ -9,7 +9,6 @@
#include "cfe_error.h"
extern int cfe_cons_handle;
-static kdev_t cfe_consdev;
static void cfe_console_write(struct console *cons, const char *str,
unsigned int count)
@@ -57,15 +56,12 @@ static int cfe_console_setup(struct console *cons, char *str)
#ifdef CONFIG_SIBYTE_SB1250_DUART
if (!strcmp(consdev, "uart0")) {
setleds("u0cn");
-// cfe_consdev = MKDEV(TTY_MAJOR, SB1250_DUART_MINOR_BASE + 0);
} else if (!strcmp(consdev, "uart1")) {
setleds("u1cn");
-// cfe_consdev = MKDEV(TTY_MAJOR, SB1250_DUART_MINOR_BASE + 1);
#endif
#ifdef CONFIG_VGA_CONSOLE
} else if (!strcmp(consdev, "pcconsole0")) {
setleds("pccn");
-// cfe_consdev = MKDEV(TTY_MAJOR, 0);
#endif
} else
return -ENODEV;
diff --git a/arch/mips/sibyte/sb1250/bcm1250_tbprof.c b/arch/mips/sibyte/sb1250/bcm1250_tbprof.c
index bfdc101d2c9e..9b96207af406 100644
--- a/arch/mips/sibyte/sb1250/bcm1250_tbprof.c
+++ b/arch/mips/sibyte/sb1250/bcm1250_tbprof.c
@@ -253,7 +253,7 @@ static int sbprof_tb_open(struct inode *inode, struct file *filp)
{
int minor;
- minor = minor(inode->i_rdev);
+ minor = iminor(inode);
if (minor != 0) {
return -ENODEV;
}
@@ -278,7 +278,7 @@ static int sbprof_tb_release(struct inode *inode, struct file *filp)
{
int minor;
- minor = minor(inode->i_rdev);
+ minor = iminor(inode);
if (minor != 0 || !sbp.open) {
return -ENODEV;
}
diff --git a/arch/parisc/kernel/ioctl32.c b/arch/parisc/kernel/ioctl32.c
index 41db315b2c99..d481533c9322 100644
--- a/arch/parisc/kernel/ioctl32.c
+++ b/arch/parisc/kernel/ioctl32.c
@@ -1426,7 +1426,7 @@ static int vt_check(struct file *file)
return -EINVAL;
tty = (struct tty_struct *)file->private_data;
- if (tty_paranoia_check(tty, inode->i_rdev, "tty_ioctl"))
+ if (tty_paranoia_check(tty, inode, "tty_ioctl"))
return -EINVAL;
if (tty->driver->ioctl != vt_ioctl)
diff --git a/arch/ppc/8260_io/uart.c b/arch/ppc/8260_io/uart.c
index c30a7e88ac51..6b6442cce77c 100644
--- a/arch/ppc/8260_io/uart.c
+++ b/arch/ppc/8260_io/uart.c
@@ -2462,7 +2462,7 @@ void kgdb_map_scc(void)
}
#endif
-static kdev_t serial_console_device(struct console *c)
+static struct tty_driver *serial_console_device(struct console *c, int *index)
{
*index = c->index;
return serial_driver;
diff --git a/arch/ppc/8xx_io/cs4218_tdm.c b/arch/ppc/8xx_io/cs4218_tdm.c
index 7d02a583018a..db592c0ae867 100644
--- a/arch/ppc/8xx_io/cs4218_tdm.c
+++ b/arch/ppc/8xx_io/cs4218_tdm.c
@@ -2106,11 +2106,11 @@ static int sq_open(struct inode *inode, struct file *file)
*/
cs4218_ctl_write(cs4218_control);
- sound.minDev = MINOR(inode->i_rdev) & 0x0f;
+ sound.minDev = iminor(inode) & 0x0f;
sound.soft = sound.dsp;
sound.hard = sound.dsp;
sound_init();
- if ((MINOR(inode->i_rdev) & 0x0f) == SND_DEV_AUDIO) {
+ if ((iminor(inode) & 0x0f) == SND_DEV_AUDIO) {
sound_set_speed(8000);
sound_set_stereo(0);
sound_set_format(AFMT_MU_LAW);
diff --git a/arch/sparc/kernel/sys_sunos.c b/arch/sparc/kernel/sys_sunos.c
index 5f01a82145df..65a98e403eb8 100644
--- a/arch/sparc/kernel/sys_sunos.c
+++ b/arch/sparc/kernel/sys_sunos.c
@@ -92,8 +92,8 @@ asmlinkage unsigned long sunos_mmap(unsigned long addr, unsigned long len,
* SunOS is so stupid some times... hmph!
*/
if (file) {
- if(major(file->f_dentry->d_inode->i_rdev) == MEM_MAJOR &&
- minor(file->f_dentry->d_inode->i_rdev) == 5) {
+ if(imajor(file->f_dentry->d_inode) == MEM_MAJOR &&
+ iminor(file->f_dentry->d_inode) == 5) {
flags |= MAP_ANONYMOUS;
fput(file);
file = 0;
diff --git a/arch/sparc64/kernel/sys_sunos32.c b/arch/sparc64/kernel/sys_sunos32.c
index f4088d499d34..69104cdae35e 100644
--- a/arch/sparc64/kernel/sys_sunos32.c
+++ b/arch/sparc64/kernel/sys_sunos32.c
@@ -90,7 +90,7 @@ asmlinkage u32 sunos_mmap(u32 addr, u32 len, u32 prot, u32 flags, u32 fd, u32 of
if (!file)
goto out;
inode = file->f_dentry->d_inode;
- if (minor(inode->i_rdev) == MEM_MAJOR && minor(inode->i_rdev) == 5) {
+ if (imajor(inode) == MEM_MAJOR && iminor(inode) == 5) {
flags |= MAP_ANONYMOUS;
fput(file);
file = NULL;
diff --git a/arch/sparc64/mm/hugetlbpage.c b/arch/sparc64/mm/hugetlbpage.c
index 1c7138d4c174..b79104a06155 100644
--- a/arch/sparc64/mm/hugetlbpage.c
+++ b/arch/sparc64/mm/hugetlbpage.c
@@ -380,207 +380,6 @@ int free_hugepages(struct vm_area_struct *mpnt)
return 1;
}
-static struct inode *set_new_inode(unsigned long len, int prot, int flag, int key)
-{
- struct inode *inode;
- int i;
-
- for (i = 0; i < MAX_ID; i++) {
- if (htlbpagek[i].key == 0)
- break;
- }
- if (i == MAX_ID)
- return NULL;
- inode = kmalloc(sizeof (struct inode), GFP_KERNEL);
- if (inode == NULL)
- return NULL;
-
- inode_init_once(inode);
- atomic_inc(&inode->i_writecount);
- inode->i_mapping = &inode->i_data;
- inode->i_mapping->host = inode;
- inode->i_ino = (unsigned long)key;
-
- htlbpagek[i].key = key;
- htlbpagek[i].in = inode;
- inode->i_uid = current->fsuid;
- inode->i_gid = current->fsgid;
- inode->i_mode = prot;
- inode->i_size = len;
- return inode;
-}
-
-static int check_size_prot(struct inode *inode, unsigned long len, int prot, int flag)
-{
- if (inode->i_uid != current->fsuid)
- return -1;
- if (inode->i_gid != current->fsgid)
- return -1;
- if (inode->i_size != len)
- return -1;
- return 0;
-}
-
-static int alloc_shared_hugetlb_pages(int key, unsigned long addr, unsigned long len,
- int prot, int flag)
-{
- struct mm_struct *mm = current->mm;
- struct vm_area_struct *vma;
- struct inode *inode;
- struct address_space *mapping;
- struct page *page;
- int idx;
- int retval = -ENOMEM;
- int newalloc = 0;
-
-try_again:
- spin_lock(&htlbpage_lock);
-
- inode = find_key_inode(key);
- if (inode == NULL) {
- if (!capable(CAP_SYS_ADMIN)) {
- if (!in_group_p(0)) {
- retval = -EPERM;
- goto out_err;
- }
- }
- if (!(flag & IPC_CREAT)) {
- retval = -ENOENT;
- goto out_err;
- }
- inode = set_new_inode(len, prot, flag, key);
- if (inode == NULL)
- goto out_err;
- newalloc = 1;
- } else {
- if (check_size_prot(inode, len, prot, flag) < 0) {
- retval = -EINVAL;
- goto out_err;
- } else if (atomic_read(&inode->i_writecount)) {
- spin_unlock(&htlbpage_lock);
- goto try_again;
- }
- }
- spin_unlock(&htlbpage_lock);
- mapping = inode->i_mapping;
-
- addr = do_mmap_pgoff(NULL, addr, len, (unsigned long) prot,
- MAP_NORESERVE|MAP_FIXED|MAP_PRIVATE|MAP_ANONYMOUS, 0);
- if (IS_ERR((void *) addr))
- goto freeinode;
-
- vma = find_vma(mm, addr);
- if (!vma) {
- retval = -EINVAL;
- goto freeinode;
- }
-
- spin_lock(&mm->page_table_lock);
- do {
- pte_t *pte = huge_pte_alloc_map(mm, addr);
-
- if (!pte || !pte_none(pte)) {
- if (pte)
- pte_unmap(pte);
- goto out;
- }
-
- idx = (addr - vma->vm_start) >> HPAGE_SHIFT;
- page = find_get_page(mapping, idx);
- if (page == NULL) {
- page = alloc_hugetlb_page();
- if (page == NULL) {
- pte_unmap(pte);
- retval = -ENOMEM;
- goto out;
- }
- retval = add_to_page_cache(page, mapping,
- idx, GFP_ATOMIC);
- if (retval) {
- pte_unmap(pte);
- free_hugetlb_page(page);
- goto out;
- }
- }
- set_huge_pte(mm, vma, page, pte,
- (vma->vm_flags & VM_WRITE));
- pte_unmap(pte);
-
- addr += HPAGE_SIZE;
- } while (addr < vma->vm_end);
-
- retval = 0;
- vma->vm_flags |= (VM_HUGETLB | VM_RESERVED);
- vma->vm_ops = &hugetlb_vm_ops;
- spin_unlock(&mm->page_table_lock);
- spin_lock(&htlbpage_lock);
- atomic_set(&inode->i_writecount, 0);
- spin_unlock(&htlbpage_lock);
-
- return retval;
-
-out:
- if (addr > vma->vm_start) {
- unsigned long raddr;
- raddr = vma->vm_end;
- vma->vm_end = addr;
-
- flush_cache_range(vma, vma->vm_start, vma->vm_end);
- zap_hugetlb_resources(vma);
- flush_tlb_range(vma, vma->vm_start, vma->vm_end);
-
- vma->vm_end = raddr;
- }
- spin_unlock(&mm->page_table_lock);
- do_munmap(mm, vma->vm_start, len);
- if (newalloc)
- goto freeinode;
-
- return retval;
-
-out_err:
- spin_unlock(&htlbpage_lock);
-
-freeinode:
- if (newalloc) {
- for (idx = 0; idx < MAX_ID; idx++) {
- if (htlbpagek[idx].key == inode->i_ino) {
- htlbpagek[idx].key = 0;
- htlbpagek[idx].in = NULL;
- break;
- }
- }
- kfree(inode);
- }
- return retval;
-}
-
-static int alloc_private_hugetlb_pages(int key, unsigned long addr, unsigned long len,
- int prot, int flag)
-{
- if (!capable(CAP_SYS_ADMIN)) {
- if (!in_group_p(0))
- return -EPERM;
- }
- addr = do_mmap_pgoff(NULL, addr, len, prot,
- MAP_NORESERVE|MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, 0);
- if (IS_ERR((void *) addr))
- return -ENOMEM;
- if (make_hugetlb_pages_present(addr, (addr + len), flag) < 0) {
- do_munmap(current->mm, addr, len);
- return -ENOMEM;
- }
- return 0;
-}
-
-int alloc_hugetlb_pages(int key, unsigned long addr, unsigned long len, int prot,
- int flag)
-{
- if (key > 0)
- return alloc_shared_hugetlb_pages(key, addr, len, prot, flag);
- return alloc_private_hugetlb_pages(key, addr, len, prot, flag);
-}
-
extern long htlbzone_pages;
extern struct list_head htlbpage_freelist;
diff --git a/arch/sparc64/solaris/misc.c b/arch/sparc64/solaris/misc.c
index 6a1c2ee94815..024b74c9d8b5 100644
--- a/arch/sparc64/solaris/misc.c
+++ b/arch/sparc64/solaris/misc.c
@@ -77,8 +77,8 @@ static u32 do_solaris_mmap(u32 addr, u32 len, u32 prot, u32 flags, u32 fd, u64 o
goto out;
else {
struct inode * inode = file->f_dentry->d_inode;
- if(major(inode->i_rdev) == MEM_MAJOR &&
- minor(inode->i_rdev) == 5) {
+ if(imajor(inode) == MEM_MAJOR &&
+ iminor(inode) == 5) {
flags |= MAP_ANONYMOUS;
fput(file);
file = NULL;
diff --git a/arch/sparc64/solaris/socksys.c b/arch/sparc64/solaris/socksys.c
index 18252eea15b7..e37bd91677ff 100644
--- a/arch/sparc64/solaris/socksys.c
+++ b/arch/sparc64/solaris/socksys.c
@@ -70,14 +70,14 @@ static int socksys_open(struct inode * inode, struct file * filp)
(int (*)(int,int,int))SUNOS(97);
struct sol_socket_struct * sock;
- family = ((minor(inode->i_rdev) >> 4) & 0xf);
+ family = ((iminor(inode) >> 4) & 0xf);
switch (family) {
case AF_UNIX:
type = SOCK_STREAM;
protocol = 0;
break;
case AF_INET:
- protocol = af_inet_protocols[minor(inode->i_rdev) & 0xf];
+ protocol = af_inet_protocols[iminor(inode) & 0xf];
switch (protocol) {
case IPPROTO_TCP: type = SOCK_STREAM; break;
case IPPROTO_UDP: type = SOCK_DGRAM; break;
diff --git a/arch/sparc64/solaris/timod.c b/arch/sparc64/solaris/timod.c
index 342183044a93..8609d1abf206 100644
--- a/arch/sparc64/solaris/timod.c
+++ b/arch/sparc64/solaris/timod.c
@@ -924,7 +924,7 @@ asmlinkage int solaris_putmsg(unsigned int fd, u32 arg1, u32 arg2, u32 arg3)
if (!ino) goto out;
if (!ino->i_sock &&
- (major(ino->i_rdev) != 30 || minor(ino->i_rdev) != 1))
+ (imajor(ino) != 30 || iminor(ino) != 1))
goto out;
ctlptr = (struct strbuf *)A(arg1);
diff --git a/arch/x86_64/defconfig b/arch/x86_64/defconfig
index 3018aafd56fd..c0474ff8674b 100644
--- a/arch/x86_64/defconfig
+++ b/arch/x86_64/defconfig
@@ -14,6 +14,7 @@ CONFIG_GENERIC_ISA_DMA=y
# Code maturity level options
#
CONFIG_EXPERIMENTAL=y
+# CONFIG_BROKEN is not set
#
# General setup
@@ -23,10 +24,12 @@ CONFIG_SYSVIPC=y
# CONFIG_BSD_PROCESS_ACCT is not set
CONFIG_SYSCTL=y
CONFIG_LOG_BUF_SHIFT=18
+# CONFIG_IKCONFIG is not set
# CONFIG_EMBEDDED is not set
CONFIG_KALLSYMS=y
CONFIG_FUTEX=y
CONFIG_EPOLL=y
+CONFIG_IOSCHED_NOOP=y
CONFIG_IOSCHED_AS=y
CONFIG_IOSCHED_DEADLINE=y
@@ -72,10 +75,10 @@ CONFIG_PM=y
CONFIG_SOFTWARE_SUSPEND=y
#
-# ACPI Support
+# ACPI (Advanced Configuration and Power Interface) Support
#
+# CONFIG_ACPI_HT is not set
CONFIG_ACPI=y
-# CONFIG_ACPI_HT_ONLY is not set
CONFIG_ACPI_BOOT=y
CONFIG_ACPI_SLEEP=y
CONFIG_ACPI_SLEEP_PROC_FS=y
@@ -117,7 +120,6 @@ CONFIG_UID16=y
#
# Generic Driver Options
#
-# CONFIG_FW_LOADER is not set
#
# Memory Technology Devices (MTD)
@@ -159,6 +161,7 @@ CONFIG_BLK_DEV_IDEDISK=y
CONFIG_IDEDISK_MULTI_MODE=y
# CONFIG_IDEDISK_STROKE is not set
CONFIG_BLK_DEV_IDECD=y
+# CONFIG_BLK_DEV_IDETAPE is not set
# CONFIG_BLK_DEV_IDEFLOPPY is not set
# CONFIG_BLK_DEV_IDESCSI is not set
# CONFIG_IDE_TASK_IOCTL is not set
@@ -318,7 +321,6 @@ CONFIG_IP_MULTICAST=y
# CONFIG_DECNET is not set
# CONFIG_BRIDGE is not set
# CONFIG_NETFILTER is not set
-# CONFIG_XFRM_USER is not set
#
# SCTP Configuration (EXPERIMENTAL)
@@ -405,6 +407,7 @@ CONFIG_E1000=m
# CONFIG_HAMACHI is not set
# CONFIG_YELLOWFIN is not set
# CONFIG_R8169 is not set
+# CONFIG_SIS190 is not set
# CONFIG_SK98LIN is not set
CONFIG_TIGON3=y
@@ -595,10 +598,7 @@ CONFIG_FS_MBCACHE=y
CONFIG_REISERFS_FS=y
# CONFIG_REISERFS_CHECK is not set
# CONFIG_REISERFS_PROC_INFO is not set
-CONFIG_JFS_FS=y
-CONFIG_JFS_POSIX_ACL=y
-# CONFIG_JFS_DEBUG is not set
-# CONFIG_JFS_STATISTICS is not set
+# CONFIG_JFS_FS is not set
CONFIG_FS_POSIX_ACL=y
# CONFIG_XFS_FS is not set
# CONFIG_MINIX_FS is not set
@@ -674,49 +674,6 @@ CONFIG_SUNRPC=y
#
# CONFIG_PARTITION_ADVANCED is not set
CONFIG_MSDOS_PARTITION=y
-CONFIG_NLS=y
-
-#
-# Native Language Support
-#
-CONFIG_NLS_DEFAULT="iso8859-1"
-# CONFIG_NLS_CODEPAGE_437 is not set
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-# CONFIG_NLS_CODEPAGE_850 is not set
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-# CONFIG_NLS_CODEPAGE_1251 is not set
-# CONFIG_NLS_ISO8859_1 is not set
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-# CONFIG_NLS_UTF8 is not set
#
# Graphics support
diff --git a/arch/x86_64/ia32/sys_ia32.c b/arch/x86_64/ia32/sys_ia32.c
index 727fbc26147a..9e3aaa491ecd 100644
--- a/arch/x86_64/ia32/sys_ia32.c
+++ b/arch/x86_64/ia32/sys_ia32.c
@@ -1170,8 +1170,6 @@ sys32_rt_sigqueueinfo(int pid, int sig, siginfo_t32 *uinfo)
return ret;
}
-extern void check_pending(int signum);
-
asmlinkage long sys_utimes(char *, struct timeval *);
asmlinkage long
diff --git a/arch/x86_64/kernel/apic.c b/arch/x86_64/kernel/apic.c
index a55dfe9abb7c..032bec4120e0 100644
--- a/arch/x86_64/kernel/apic.c
+++ b/arch/x86_64/kernel/apic.c
@@ -299,7 +299,7 @@ void __init setup_local_APIC (void)
* This is meaningless in clustered apic mode, so we skip it.
*/
if (!clustered_apic_mode &&
- !cpu_isset(GET_APIC_ID(apic_read(APIC_ID)), phys_cpu_present_map))
+ !physid_isset(GET_APIC_ID(apic_read(APIC_ID)), phys_cpu_present_map))
BUG();
/*
@@ -993,7 +993,7 @@ int __init APIC_init_uniprocessor (void)
connect_bsp_APIC();
- phys_cpu_present_map = cpumask_of_cpu(0);
+ phys_cpu_present_map = physid_mask_of_physid(0);
apic_write_around(APIC_ID, boot_cpu_id);
setup_local_APIC();
diff --git a/arch/x86_64/kernel/io_apic.c b/arch/x86_64/kernel/io_apic.c
index f477c5b9771d..86dc573355e6 100644
--- a/arch/x86_64/kernel/io_apic.c
+++ b/arch/x86_64/kernel/io_apic.c
@@ -1014,7 +1014,7 @@ void disable_IO_APIC(void)
static void __init setup_ioapic_ids_from_mpc (void)
{
union IO_APIC_reg_00 reg_00;
- cpumask_t phys_id_present_map = phys_cpu_present_map;
+ physid_mask_t phys_id_present_map = phys_cpu_present_map;
int apic;
int i;
unsigned char old_id;
@@ -1047,22 +1047,22 @@ static void __init setup_ioapic_ids_from_mpc (void)
* system must have a unique ID or we get lots of nice
* 'stuck on smp_invalidate_needed IPI wait' messages.
*/
- if (cpu_isset(mp_ioapics[apic].mpc_apicid, phys_id_present_map)) {
+ if (physid_isset(mp_ioapics[apic].mpc_apicid, phys_id_present_map)) {
printk(KERN_ERR "BIOS bug, IO-APIC#%d ID %d is already used!...\n",
apic, mp_ioapics[apic].mpc_apicid);
for (i = 0; i < 0xf; i++)
- if (!cpu_isset(i, phys_id_present_map))
+ if (!physid_isset(i, phys_id_present_map))
break;
if (i >= 0xf)
panic("Max APIC ID exceeded!\n");
printk(KERN_ERR "... fixing up to %d. (tell your hw vendor)\n",
i);
- cpu_set(i, phys_id_present_map);
+ physid_set(i, phys_id_present_map);
mp_ioapics[apic].mpc_apicid = i;
} else {
printk(KERN_INFO
"Using IO-APIC %d\n", mp_ioapics[apic].mpc_apicid);
- cpu_set(mp_ioapics[apic].mpc_apicid, phys_id_present_map);
+ physid_set(mp_ioapics[apic].mpc_apicid, phys_id_present_map);
}
@@ -1642,7 +1642,7 @@ void __init mp_config_ioapic_for_sci(int irq)
int __init io_apic_get_unique_id (int ioapic, int apic_id)
{
union IO_APIC_reg_00 reg_00;
- static cpumask_t apic_id_map;
+ static physid_mask_t apic_id_map;
unsigned long flags;
int i = 0;
@@ -1655,7 +1655,7 @@ int __init io_apic_get_unique_id (int ioapic, int apic_id)
* advantage of new APIC bus architecture.
*/
- if (!cpus_empty(apic_id_map))
+ if (!physids_empty(apic_id_map))
apic_id_map = phys_cpu_present_map;
spin_lock_irqsave(&ioapic_lock, flags);
@@ -1672,10 +1672,10 @@ int __init io_apic_get_unique_id (int ioapic, int apic_id)
* Every APIC in a system must have a unique ID or we get lots of nice
* 'stuck on smp_invalidate_needed IPI wait' messages.
*/
- if (cpu_isset(apic_id, apic_id_map)) {
+ if (physid_isset(apic_id, apic_id_map)) {
for (i = 0; i < IO_APIC_MAX_ID; i++) {
- if (!cpu_isset(i, apic_id_map))
+ if (!physid_isset(i, apic_id_map))
break;
}
@@ -1688,7 +1688,7 @@ int __init io_apic_get_unique_id (int ioapic, int apic_id)
apic_id = i;
}
- cpu_set(apic_id, apic_id_map);
+ physid_set(apic_id, apic_id_map);
if (reg_00.bits.ID != apic_id) {
reg_00.bits.ID = apic_id;
diff --git a/arch/x86_64/kernel/ioport.c b/arch/x86_64/kernel/ioport.c
index e19f439d5782..ac942c03b012 100644
--- a/arch/x86_64/kernel/ioport.c
+++ b/arch/x86_64/kernel/ioport.c
@@ -10,12 +10,11 @@
#include <linux/errno.h>
#include <linux/types.h>
#include <linux/ioport.h>
-#include <linux/mm.h>
#include <linux/smp.h>
#include <linux/smp_lock.h>
#include <linux/stddef.h>
#include <linux/slab.h>
-#include <asm/io.h>
+#include <linux/thread_info.h>
/* Set EXTENT bits starting at BASE in BITMAP to value TURN_ON. */
static void set_bitmap(unsigned long *bitmap, unsigned int base, unsigned int extent, int new_value)
@@ -118,12 +117,7 @@ asmlinkage long sys_iopl(unsigned int level, struct pt_regs regs)
return -EPERM;
}
regs.eflags = (regs.eflags &~ 0x3000UL) | (level << 12);
+ /* Make sure we return the long way (not sysenter) */
+ set_thread_flag(TIF_IRET);
return 0;
}
-
-void eat_key(void)
-{
- if (inb(0x60) & 1)
- inb(0x64);
-}
-
diff --git a/arch/x86_64/kernel/mpparse.c b/arch/x86_64/kernel/mpparse.c
index fbf0f26e623e..4dc5c02051f0 100644
--- a/arch/x86_64/kernel/mpparse.c
+++ b/arch/x86_64/kernel/mpparse.c
@@ -67,7 +67,7 @@ unsigned int boot_cpu_id = -1U;
static unsigned int num_processors = 0;
/* Bitmask of physically existing CPUs */
-cpumask_t phys_cpu_present_map = CPU_MASK_NONE;
+physid_mask_t phys_cpu_present_map = PHYSID_MASK_NONE;
/* ACPI MADT entry parsing functions */
#ifdef CONFIG_ACPI_BOOT
@@ -126,7 +126,7 @@ static void __init MP_processor_info (struct mpc_config_processor *m)
}
ver = m->mpc_apicver;
- cpu_set(m->mpc_apicid, phys_cpu_present_map);
+ physid_set(m->mpc_apicid, phys_cpu_present_map);
/*
* Validate version
*/
diff --git a/arch/x86_64/kernel/msr.c b/arch/x86_64/kernel/msr.c
index 0576c9236b7e..2621d9f0bba2 100644
--- a/arch/x86_64/kernel/msr.c
+++ b/arch/x86_64/kernel/msr.c
@@ -194,7 +194,7 @@ static ssize_t msr_read(struct file * file, char * buf,
u32 data[2];
size_t rv;
u32 reg = *ppos;
- int cpu = minor(file->f_dentry->d_inode->i_rdev);
+ int cpu = iminor(file->f_dentry->d_inode);
int err;
if ( count % 8 )
@@ -219,7 +219,7 @@ static ssize_t msr_write(struct file * file, const char * buf,
u32 data[2];
size_t rv;
u32 reg = *ppos;
- int cpu = minor(file->f_dentry->d_inode->i_rdev);
+ int cpu = iminor(file->f_dentry->d_inode);
int err;
if ( count % 8 )
@@ -239,7 +239,7 @@ static ssize_t msr_write(struct file * file, const char * buf,
static int msr_open(struct inode *inode, struct file *file)
{
- int cpu = minor(file->f_dentry->d_inode->i_rdev);
+ int cpu = iminor(file->f_dentry->d_inode);
struct cpuinfo_x86 *c = &(cpu_data)[cpu];
if (!cpu_online(cpu))
diff --git a/arch/x86_64/kernel/setup.c b/arch/x86_64/kernel/setup.c
index 16dd7fb483ce..771ac31d3b15 100644
--- a/arch/x86_64/kernel/setup.c
+++ b/arch/x86_64/kernel/setup.c
@@ -243,6 +243,8 @@ static void __init contig_initmem_init(void)
void __init setup_arch(char **cmdline_p)
{
+ unsigned long low_mem_size;
+
ROOT_DEV = ORIG_ROOT_DEV;
drive_info = DRIVE_INFO;
screen_info = SCREEN_INFO;
@@ -378,7 +380,13 @@ void __init setup_arch(char **cmdline_p)
request_resource(&ioport_resource, standard_io_resources+i);
}
- pci_mem_start = IOMAP_START;
+ /* Will likely break when you have unassigned resources with more
+ than 4GB memory and bridges that don't support more than 4GB.
+ Doing it properly would require to allocate GFP_DMA memory
+ in this case. */
+ low_mem_size = ((end_pfn << PAGE_SHIFT) + 0xfffff) & ~0xfffff;
+ if (low_mem_size > pci_mem_start)
+ pci_mem_start = low_mem_size;
#ifdef CONFIG_GART_IOMMU
iommu_hole_init();
diff --git a/arch/x86_64/kernel/smpboot.c b/arch/x86_64/kernel/smpboot.c
index eacc7929094a..c1700f7f3046 100644
--- a/arch/x86_64/kernel/smpboot.c
+++ b/arch/x86_64/kernel/smpboot.c
@@ -734,10 +734,10 @@ static void __init smp_boot_cpus(unsigned int max_cpus)
current_thread_info()->cpu = 0;
smp_tune_scheduling();
- if (!cpu_isset(hard_smp_processor_id(), phys_cpu_present_map)) {
+ if (!physid_isset(hard_smp_processor_id(), phys_cpu_present_map)) {
printk("weird, boot CPU (#%d) not listed by the BIOS.\n",
hard_smp_processor_id());
- cpu_set(hard_smp_processor_id(), phys_cpu_present_map);
+ physid_set(hard_smp_processor_id(), phys_cpu_present_map);
}
/*
@@ -748,7 +748,7 @@ static void __init smp_boot_cpus(unsigned int max_cpus)
printk(KERN_NOTICE "SMP motherboard not detected.\n");
io_apic_irqs = 0;
cpu_online_map = cpumask_of_cpu(0);
- phys_cpu_present_map = cpumask_of_cpu(0);
+ phys_cpu_present_map = physid_mask_of_physid(0);
if (APIC_init_uniprocessor())
printk(KERN_NOTICE "Local APIC not detected."
" Using dummy APIC emulation.\n");
@@ -759,10 +759,10 @@ static void __init smp_boot_cpus(unsigned int max_cpus)
* Should not be necessary because the MP table should list the boot
* CPU too, but we do it for the sake of robustness anyway.
*/
- if (!cpu_isset(boot_cpu_id, phys_cpu_present_map)) {
+ if (!physid_isset(boot_cpu_id, phys_cpu_present_map)) {
printk(KERN_NOTICE "weird, boot CPU (#%d) not listed by the BIOS.\n",
boot_cpu_id);
- cpu_set(hard_smp_processor_id(), phys_cpu_present_map);
+ physid_set(hard_smp_processor_id(), phys_cpu_present_map);
}
/*
@@ -774,7 +774,7 @@ static void __init smp_boot_cpus(unsigned int max_cpus)
printk(KERN_ERR "... forcing use of dummy APIC emulation. (tell your hw vendor)\n");
io_apic_irqs = 0;
cpu_online_map = cpumask_of_cpu(0);
- phys_cpu_present_map = cpumask_of_cpu(0);
+ phys_cpu_present_map = physid_mask_of_physid(0);
disable_apic = 1;
goto smp_done;
}
@@ -789,7 +789,7 @@ static void __init smp_boot_cpus(unsigned int max_cpus)
printk(KERN_INFO "SMP mode deactivated, forcing use of dummy APIC emulation.\n");
io_apic_irqs = 0;
cpu_online_map = cpumask_of_cpu(0);
- phys_cpu_present_map = cpumask_of_cpu(0);
+ phys_cpu_present_map = physid_mask_of_physid(0);
disable_apic = 1;
goto smp_done;
}
@@ -803,7 +803,7 @@ static void __init smp_boot_cpus(unsigned int max_cpus)
/*
* Now scan the CPU present map and fire up the other CPUs.
*/
- Dprintk("CPU present map: %lx\n", phys_cpu_present_map);
+ Dprintk("CPU present map: %lx\n", physids_coerce(phys_cpu_present_map));
for (apicid = 0; apicid < NR_CPUS; apicid++) {
/*
diff --git a/arch/x86_64/kernel/time.c b/arch/x86_64/kernel/time.c
index 53ab37b7d99c..92b8ffe633f6 100644
--- a/arch/x86_64/kernel/time.c
+++ b/arch/x86_64/kernel/time.c
@@ -79,6 +79,7 @@ static inline unsigned int do_gettimeoffset_tsc(void)
unsigned long t;
unsigned long x;
rdtscll_sync(&t);
+ if (t < vxtime.last_tsc) t = vxtime.last_tsc; /* hack */
x = ((t - vxtime.last_tsc) * vxtime.tsc_quot) >> 32;
return x;
}
diff --git a/arch/x86_64/kernel/vsyscall.c b/arch/x86_64/kernel/vsyscall.c
index cb52162ae495..5f6640ce3f5f 100644
--- a/arch/x86_64/kernel/vsyscall.c
+++ b/arch/x86_64/kernel/vsyscall.c
@@ -85,6 +85,7 @@ static force_inline void do_vgettimeofday(struct timeval * tv)
if (__vxtime.mode == VXTIME_TSC) {
sync_core();
rdtscll(t);
+ if (t < __vxtime.last_tsc) t = __vxtime.last_tsc;
usec += ((t - __vxtime.last_tsc) *
__vxtime.tsc_quot) >> 32;
} else {
diff --git a/drivers/acorn/block/fd1772.c b/drivers/acorn/block/fd1772.c
index f5efa0190dd5..0e7a399d2470 100644
--- a/drivers/acorn/block/fd1772.c
+++ b/drivers/acorn/block/fd1772.c
@@ -1455,8 +1455,8 @@ static void config_types(void)
static int floppy_open(struct inode *inode, struct file *filp)
{
- int drive = minor(inode->i_rdev) & 3;
- int type = minor(inode->i_rdev) >> 2;
+ int drive = iminor(inode) & 3;
+ int type = iminor(inode) >> 2;
int old_dev = fd_device[drive];
if (fd_ref[drive] && old_dev != type)
@@ -1490,7 +1490,7 @@ static int floppy_open(struct inode *inode, struct file *filp)
static int floppy_release(struct inode *inode, struct file *filp)
{
- int drive = minor(inode->i_rdev) & 3;
+ int drive = iminor(inode) & 3;
if (fd_ref[drive] < 0)
fd_ref[drive] = 0;
diff --git a/drivers/acpi/Kconfig b/drivers/acpi/Kconfig
index d9e1a83ab8ef..edc45e94669f 100644
--- a/drivers/acpi/Kconfig
+++ b/drivers/acpi/Kconfig
@@ -69,6 +69,7 @@ config ACPI_SLEEP
bool "Sleep States (EXPERIMENTAL)"
depends on X86 && ACPI
depends on EXPERIMENTAL && PM
+ select SOFTWARE_SUSPEND
default y
---help---
This option adds support for ACPI suspend states.
diff --git a/drivers/block/acsi_slm.c b/drivers/block/acsi_slm.c
index f352b5d111a3..e3be8c31a74c 100644
--- a/drivers/block/acsi_slm.c
+++ b/drivers/block/acsi_slm.c
@@ -374,7 +374,7 @@ static ssize_t slm_read( struct file *file, char *buf, size_t count,
if (!(page = __get_free_page( GFP_KERNEL )))
return( -ENOMEM );
- length = slm_getstats( (char *)page, MINOR(node->i_rdev) );
+ length = slm_getstats( (char *)page, iminor(node) );
if (length < 0) {
count = length;
goto out;
@@ -622,7 +622,7 @@ static ssize_t slm_write( struct file *file, const char *buf, size_t count,
{
struct inode *node = file->f_dentry->d_inode;
- int device = MINOR( node->i_rdev );
+ int device = iminor(node);
int n, filled, w, h;
while( SLMState == PRINTING ||
@@ -694,7 +694,7 @@ static ssize_t slm_write( struct file *file, const char *buf, size_t count,
static int slm_ioctl( struct inode *inode, struct file *file,
unsigned int cmd, unsigned long arg )
-{ int device = MINOR( inode->i_rdev ), err;
+{ int device = iminor(inode), err;
/* I can think of setting:
* - manual feed
@@ -768,7 +768,7 @@ static int slm_open( struct inode *inode, struct file *file )
{ int device;
struct slm *sip;
- device = MINOR(inode->i_rdev);
+ device = iminor(inode);
if (device >= N_SLM_Printers)
return( -ENXIO );
sip = &slm_info[device];
@@ -797,7 +797,7 @@ static int slm_release( struct inode *inode, struct file *file )
{ int device;
struct slm *sip;
- device = MINOR(inode->i_rdev);
+ device = iminor(inode);
sip = &slm_info[device];
if (file->f_mode & 2)
diff --git a/drivers/block/amiflop.c b/drivers/block/amiflop.c
index d9495c1bc4f3..b34ee99f5870 100644
--- a/drivers/block/amiflop.c
+++ b/drivers/block/amiflop.c
@@ -55,24 +55,15 @@
#include <linux/module.h>
-#include <linux/sched.h>
-#include <linux/fs.h>
-#include <linux/fcntl.h>
-#include <linux/kernel.h>
-#include <linux/timer.h>
#include <linux/fd.h>
#include <linux/hdreg.h>
-#include <linux/errno.h>
-#include <linux/types.h>
#include <linux/delay.h>
-#include <linux/string.h>
-#include <linux/slab.h>
#include <linux/init.h>
#include <linux/amifdreg.h>
#include <linux/amifd.h>
-#include <linux/ioport.h>
#include <linux/buffer_head.h>
-#include <linux/interrupt.h>
+#include <linux/blkdev.h>
+#include <linux/elevator.h>
#include <asm/setup.h>
#include <asm/uaccess.h>
@@ -1446,7 +1437,7 @@ static void do_fd_request(request_queue_t * q)
static int fd_ioctl(struct inode *inode, struct file *filp,
unsigned int cmd, unsigned long param)
{
- int drive = minor(inode->i_rdev) & 3;
+ int drive = iminor(inode) & 3;
static struct floppy_struct getprm;
switch(cmd){
@@ -1570,8 +1561,8 @@ static void fd_probe(int dev)
*/
static int floppy_open(struct inode *inode, struct file *filp)
{
- int drive = minor(inode->i_rdev) & 3;
- int system = (minor(inode->i_rdev) & 4) >> 2;
+ int drive = iminor(inode) & 3;
+ int system = (iminor(inode) & 4) >> 2;
int old_dev;
unsigned long flags;
@@ -1618,7 +1609,7 @@ static int floppy_open(struct inode *inode, struct file *filp)
static int floppy_release(struct inode * inode, struct file * filp)
{
- int drive = minor(inode->i_rdev) & 3;
+ int drive = iminor(inode) & 3;
if (unit[drive].dirty == 1) {
del_timer (flush_track_timer + drive);
diff --git a/drivers/block/ataflop.c b/drivers/block/ataflop.c
index 803f5638f794..b98fa53f3c3d 100644
--- a/drivers/block/ataflop.c
+++ b/drivers/block/ataflop.c
@@ -63,35 +63,16 @@
#include <linux/module.h>
-#include <linux/sched.h>
-#include <linux/string.h>
-#include <linux/fs.h>
-#include <linux/fcntl.h>
-#include <linux/kernel.h>
-#include <linux/timer.h>
#include <linux/fd.h>
-#include <linux/errno.h>
-#include <linux/types.h>
#include <linux/delay.h>
-#include <linux/mm.h>
-#include <linux/slab.h>
#include <linux/init.h>
-#include <linux/buffer_head.h> /* for invalidate_buffers() */
-
-#include <asm/setup.h>
-#include <asm/system.h>
-#include <asm/bitops.h>
-#include <asm/irq.h>
-#include <asm/pgtable.h>
-#include <asm/uaccess.h>
+#include <linux/blkdev.h>
#include <asm/atafd.h>
#include <asm/atafdreg.h>
-#include <asm/atarihw.h>
#include <asm/atariints.h>
#include <asm/atari_stdma.h>
#include <asm/atari_stram.h>
-#include <linux/blkpg.h>
#define FD_MAX_UNITS 2
@@ -1838,7 +1819,7 @@ static void __init config_types( void )
static int floppy_open( struct inode *inode, struct file *filp )
{
struct atari_floppy_struct *p = inode->i_bdev->bd_disk->private_data;
- int type = minor(inode->i_rdev) >> 2;
+ int type = iminor(inode) >> 2;
DPRINT(("fd_open: type=%d\n",type));
if (p->ref && p->type != type)
diff --git a/drivers/block/cciss.c b/drivers/block/cciss.c
index e16a993f539b..34b490615ce3 100644
--- a/drivers/block/cciss.c
+++ b/drivers/block/cciss.c
@@ -356,11 +356,11 @@ static void cmd_free(ctlr_info_t *h, CommandList_struct *c, int got_from_pool)
*/
static int cciss_open(struct inode *inode, struct file *filep)
{
- int ctlr = major(inode->i_rdev) - COMPAQ_CISS_MAJOR;
- int dsk = minor(inode->i_rdev) >> NWD_SHIFT;
+ int ctlr = imajor(inode) - COMPAQ_CISS_MAJOR;
+ int dsk = iminor(inode) >> NWD_SHIFT;
#ifdef CCISS_DEBUG
- printk(KERN_DEBUG "cciss_open %x (%x:%x)\n", inode->i_rdev, ctlr, dsk);
+ printk(KERN_DEBUG "cciss_open %s (%x:%x)\n", inode->i_bdev->bd_disk->disk_name, ctlr, dsk);
#endif /* CCISS_DEBUG */
if (ctlr >= MAX_CTLR || hba[ctlr] == NULL)
@@ -372,7 +372,7 @@ static int cciss_open(struct inode *inode, struct file *filep)
* for "raw controller".
*/
if (hba[ctlr]->drv[dsk].nr_blocks == 0) {
- if (minor(inode->i_rdev) != 0)
+ if (iminor(inode) != 0)
return -ENXIO;
if (!capable(CAP_SYS_ADMIN))
return -EPERM;
@@ -386,11 +386,11 @@ static int cciss_open(struct inode *inode, struct file *filep)
*/
static int cciss_release(struct inode *inode, struct file *filep)
{
- int ctlr = major(inode->i_rdev) - COMPAQ_CISS_MAJOR;
- int dsk = minor(inode->i_rdev) >> NWD_SHIFT;
+ int ctlr = imajor(inode) - COMPAQ_CISS_MAJOR;
+ int dsk = iminor(inode) >> NWD_SHIFT;
#ifdef CCISS_DEBUG
- printk(KERN_DEBUG "cciss_release %x (%x:%x)\n", inode->i_rdev, ctlr, dsk);
+ printk(KERN_DEBUG "cciss_release %s (%x:%x)\n", inode->i_bdev->bd_disk->disk_name, ctlr, dsk);
#endif /* CCISS_DEBUG */
/* fsync_dev(inode->i_rdev); */
@@ -406,8 +406,8 @@ static int cciss_release(struct inode *inode, struct file *filep)
static int cciss_ioctl(struct inode *inode, struct file *filep,
unsigned int cmd, unsigned long arg)
{
- int ctlr = major(inode->i_rdev) - COMPAQ_CISS_MAJOR;
- int dsk = minor(inode->i_rdev) >> NWD_SHIFT;
+ int ctlr = imajor(inode) - COMPAQ_CISS_MAJOR;
+ int dsk = iminor(inode) >> NWD_SHIFT;
#ifdef CCISS_DEBUG
printk(KERN_DEBUG "cciss_ioctl: Called with cmd=%x %lx\n", cmd, arg);
@@ -2525,6 +2525,9 @@ err_all:
if (!q)
goto err_all;
+ hba[i]->queue = q;
+ q->queuedata = hba[i];
+
/* Initialize the pdev driver private data.
have it point to hba[i]. */
pci_set_drvdata(pdev, hba[i]);
@@ -2545,7 +2548,6 @@ err_all:
cciss_procinit(i);
- q->queuedata = hba[i];
blk_queue_bounce_limit(q, hba[i]->pdev->dma_mask);
/* This is a hardware imposed limit. */
diff --git a/drivers/block/cpqarray.c b/drivers/block/cpqarray.c
index 16f0b8b9d433..0fbd001c3452 100644
--- a/drivers/block/cpqarray.c
+++ b/drivers/block/cpqarray.c
@@ -1078,7 +1078,7 @@ out_passthru:
put_user(host->ctlr_sig, (int*)arg);
return 0;
case IDAREVALIDATEVOLS:
- if (minor(inode->i_rdev) != 0)
+ if (iminor(inode) != 0)
return -ENXIO;
return revalidate_allvol(host);
case IDADRIVERVERSION:
diff --git a/drivers/block/floppy.c b/drivers/block/floppy.c
index 433e221a42d7..aa3a82af569f 100644
--- a/drivers/block/floppy.c
+++ b/drivers/block/floppy.c
@@ -3781,9 +3781,9 @@ static int floppy_open(struct inode * inode, struct file * filp)
}
}
- UDRS->fd_device = minor(inode->i_rdev);
- set_capacity(disks[drive], floppy_sizes[minor(inode->i_rdev)]);
- if (old_dev != -1 && old_dev != minor(inode->i_rdev)) {
+ UDRS->fd_device = iminor(inode);
+ set_capacity(disks[drive], floppy_sizes[iminor(inode)]);
+ if (old_dev != -1 && old_dev != iminor(inode)) {
if (buffer_drive == drive)
buffer_track = -1;
}
@@ -3910,22 +3910,6 @@ static int __floppy_read_block_0(struct block_device *bdev)
return 0;
}
-static int floppy_read_block_0(struct gendisk *disk)
-{
- struct block_device *bdev;
- int ret;
-
- bdev = bdget_disk(disk, 0);
- if (!bdev) {
- printk("No block device for %s\n", disk->disk_name);
- BUG();
- }
- bdev->bd_disk = disk; /* ewww */
- ret = __floppy_read_block_0(bdev);
- atomic_dec(&bdev->bd_count);
- return ret;
-}
-
/* revalidate the floppy disk, i.e. trigger format autodetection by reading
* the bootblock (block 0). "Autodetection" is also needed to check whether
* there is a disk in the drive at all... Thus we also do it for fixed
@@ -3961,7 +3945,7 @@ static int floppy_revalidate(struct gendisk *disk)
UDRS->generation++;
if (NO_GEOM){
/* auto-sensing */
- res = floppy_read_block_0(disk);
+ res = __floppy_read_block_0(opened_bdev[drive]);
} else {
if (cf)
poll_drive(0, FD_RAW_NEED_DISK);
diff --git a/drivers/block/floppy98.c b/drivers/block/floppy98.c
index 52460926cdc1..d861fdbc3466 100644
--- a/drivers/block/floppy98.c
+++ b/drivers/block/floppy98.c
@@ -3844,9 +3844,9 @@ static int floppy_open(struct inode * inode, struct file * filp)
}
}
- UDRS->fd_device = minor(inode->i_rdev);
- set_capacity(disks[drive], floppy_sizes[minor(inode->i_rdev)]);
- if (old_dev != -1 && old_dev != minor(inode->i_rdev)) {
+ UDRS->fd_device = iminor(inode);
+ set_capacity(disks[drive], floppy_sizes[iminor(inode)]);
+ if (old_dev != -1 && old_dev != iminor(inode)) {
if (buffer_drive == drive)
buffer_track = -1;
}
@@ -3989,22 +3989,6 @@ static int __floppy_read_block_0(struct block_device *bdev)
return 0;
}
-static int floppy_read_block_0(struct gendisk *disk)
-{
- struct block_device *bdev;
- int ret;
-
- bdev = bdget_disk(disk, 0);
- if (!bdev) {
- printk("No block device for %s\n", disk->disk_name);
- BUG();
- }
- bdev->bd_disk = disk; /* ewww */
- ret = __floppy_read_block_0(bdev);
- atomic_dec(&bdev->bd_count);
- return ret;
-}
-
/* revalidate the floppy disk, i.e. trigger format autodetection by reading
* the bootblock (block 0). "Autodetection" is also needed to check whether
* there is a disk in the drive at all... Thus we also do it for fixed
@@ -4040,7 +4024,7 @@ static int floppy_revalidate(struct gendisk *disk)
UDRS->generation++;
if (NO_GEOM){
/* auto-sensing */
- res = floppy_read_block_0(disk);
+ res = __floppy_read_block_0(opened_bdev[drive]);
} else {
if (cf)
poll_drive(0, FD_RAW_NEED_DISK);
diff --git a/drivers/block/genhd.c b/drivers/block/genhd.c
index 24e066a8fb35..16a58ad04008 100644
--- a/drivers/block/genhd.c
+++ b/drivers/block/genhd.c
@@ -576,13 +576,10 @@ EXPORT_SYMBOL(put_disk);
void set_device_ro(struct block_device *bdev, int flag)
{
- struct gendisk *disk = bdev->bd_disk;
- if (bdev->bd_contains != bdev) {
- int part = bdev->bd_dev - MKDEV(disk->major, disk->first_minor);
- struct hd_struct *p = disk->part[part-1];
- if (p) p->policy = flag;
- } else
- disk->policy = flag;
+ if (bdev->bd_contains != bdev)
+ bdev->bd_part->policy = flag;
+ else
+ bdev->bd_disk->policy = flag;
}
void set_disk_ro(struct gendisk *disk, int flag)
@@ -595,17 +592,12 @@ void set_disk_ro(struct gendisk *disk, int flag)
int bdev_read_only(struct block_device *bdev)
{
- struct gendisk *disk;
if (!bdev)
return 0;
- disk = bdev->bd_disk;
- if (bdev->bd_contains != bdev) {
- int part = bdev->bd_dev - MKDEV(disk->major, disk->first_minor);
- struct hd_struct *p = disk->part[part-1];
- if (p) return p->policy;
- return 0;
- } else
- return disk->policy;
+ else if (bdev->bd_contains != bdev)
+ return bdev->bd_part->policy;
+ else
+ return bdev->bd_disk->policy;
}
int invalidate_partition(struct gendisk *disk, int index)
diff --git a/drivers/block/ioctl.c b/drivers/block/ioctl.c
index 9f3f411f2389..701461265c34 100644
--- a/drivers/block/ioctl.c
+++ b/drivers/block/ioctl.c
@@ -8,7 +8,6 @@
static int blkpg_ioctl(struct block_device *bdev, struct blkpg_ioctl_arg *arg)
{
struct block_device *bdevp;
- int holder;
struct gendisk *disk;
struct blkpg_ioctl_arg a;
struct blkpg_partition p;
@@ -41,8 +40,11 @@ static int blkpg_ioctl(struct block_device *bdev, struct blkpg_ioctl_arg *arg)
return -EINVAL;
}
/* partition number in use? */
- if (disk->part[part - 1])
+ down(&bdev->bd_sem);
+ if (disk->part[part - 1]) {
+ up(&bdev->bd_sem);
return -EBUSY;
+ }
/* overlap? */
for (i = 0; i < disk->minors - 1; i++) {
struct hd_struct *s = disk->part[i];
@@ -50,22 +52,26 @@ static int blkpg_ioctl(struct block_device *bdev, struct blkpg_ioctl_arg *arg)
if (!s)
continue;
if (!(start+length <= s->start_sect ||
- start >= s->start_sect + s->nr_sects))
+ start >= s->start_sect + s->nr_sects)) {
+ up(&bdev->bd_sem);
return -EBUSY;
+ }
}
/* all seems OK */
add_partition(disk, part, start, length);
+ up(&bdev->bd_sem);
return 0;
case BLKPG_DEL_PARTITION:
if (!disk->part[part-1])
return -ENXIO;
if (disk->part[part - 1]->nr_sects == 0)
return -ENXIO;
- /* partition in use? Incomplete check for now. */
bdevp = bdget_disk(disk, part);
if (!bdevp)
return -ENOMEM;
- if (bd_claim(bdevp, &holder) < 0) {
+ down(&bdevp->bd_sem);
+ if (bdevp->bd_openers) {
+ up(&bdevp->bd_sem);
bdput(bdevp);
return -EBUSY;
}
@@ -73,9 +79,12 @@ static int blkpg_ioctl(struct block_device *bdev, struct blkpg_ioctl_arg *arg)
fsync_bdev(bdevp);
invalidate_bdev(bdevp, 0);
+ down(&bdev->bd_sem);
delete_partition(disk, part);
- bd_release(bdevp);
+ up(&bdev->bd_sem);
+ up(&bdevp->bd_sem);
bdput(bdevp);
+
return 0;
default:
return -EINVAL;
diff --git a/drivers/block/ll_rw_blk.c b/drivers/block/ll_rw_blk.c
index f09d20d1e41a..98a3182919c5 100644
--- a/drivers/block/ll_rw_blk.c
+++ b/drivers/block/ll_rw_blk.c
@@ -2043,24 +2043,23 @@ end_io:
static inline void blk_partition_remap(struct bio *bio)
{
struct block_device *bdev = bio->bi_bdev;
- struct gendisk *disk = bdev->bd_disk;
- struct hd_struct *p;
- if (bdev == bdev->bd_contains)
- return;
- p = disk->part[bdev->bd_dev-MKDEV(disk->major,disk->first_minor)-1];
- switch (bio->bi_rw) {
- case READ:
- p->read_sectors += bio_sectors(bio);
- p->reads++;
- break;
- case WRITE:
- p->write_sectors += bio_sectors(bio);
- p->writes++;
- break;
+ if (bdev != bdev->bd_contains) {
+ struct hd_struct *p = bdev->bd_part;
+
+ switch (bio->bi_rw) {
+ case READ:
+ p->read_sectors += bio_sectors(bio);
+ p->reads++;
+ break;
+ case WRITE:
+ p->write_sectors += bio_sectors(bio);
+ p->writes++;
+ break;
+ }
+ bio->bi_sector += p->start_sect;
+ bio->bi_bdev = bdev->bd_contains;
}
- bio->bi_sector += bdev->bd_offset;
- bio->bi_bdev = bdev->bd_contains;
}
/**
diff --git a/drivers/block/paride/pg.c b/drivers/block/paride/pg.c
index b6e854b8613a..506f982e5518 100644
--- a/drivers/block/paride/pg.c
+++ b/drivers/block/paride/pg.c
@@ -527,11 +527,9 @@ static int pg_detect(void)
return -1;
}
-#define DEVICE_NR(dev) (minor(dev) & 0x7F)
-
static int pg_open(struct inode *inode, struct file *file)
{
- int unit = DEVICE_NR(inode->i_rdev);
+ int unit = iminor(inode) & 0x7f;
struct pg *dev = &devices[unit];
if ((unit >= PG_UNITS) || (!dev->present))
diff --git a/drivers/block/paride/pt.c b/drivers/block/paride/pt.c
index c2145ac9da66..feb1d9950dc7 100644
--- a/drivers/block/paride/pt.c
+++ b/drivers/block/paride/pt.c
@@ -670,11 +670,11 @@ static int pt_detect(void)
return -1;
}
-#define DEVICE_NR(dev) (minor(dev) & 0x7F)
+#define DEVICE_NR(inode) (iminor(inode) & 0x7F)
static int pt_open(struct inode *inode, struct file *file)
{
- int unit = DEVICE_NR(inode->i_rdev);
+ int unit = DEVICE_NR(inode);
if ((unit >= PT_UNITS) || (!PT.present))
return -ENODEV;
@@ -696,7 +696,7 @@ static int pt_open(struct inode *inode, struct file *file)
return -EROFS;
}
- if (!(minor(inode->i_rdev) & 128))
+ if (!(iminor(inode) & 128))
PT.flags |= PT_REWIND;
PT.bufptr = kmalloc(PT_BUFSIZE, GFP_KERNEL);
@@ -715,7 +715,7 @@ static int pt_ioctl(struct inode *inode, struct file *file,
int unit;
struct mtop mtop;
- unit = DEVICE_NR(inode->i_rdev);
+ unit = DEVICE_NR(inode);
if (unit >= PT_UNITS)
return -EINVAL;
if (!PT.present)
@@ -753,7 +753,7 @@ static int pt_ioctl(struct inode *inode, struct file *file,
static int
pt_release(struct inode *inode, struct file *file)
{
- int unit = DEVICE_NR(inode->i_rdev);
+ int unit = DEVICE_NR(inode);
if ((unit >= PT_UNITS) || (atomic_read(&PT.available) > 1))
return -EINVAL;
@@ -776,7 +776,7 @@ pt_release(struct inode *inode, struct file *file)
static ssize_t pt_read(struct file *filp, char *buf, size_t count, loff_t * ppos)
{
struct inode *ino = filp->f_dentry->d_inode;
- int unit = DEVICE_NR(ino->i_rdev);
+ int unit = DEVICE_NR(ino);
char rd_cmd[12] = { ATAPI_READ_6, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
int k, n, r, p, s, t, b;
@@ -873,7 +873,7 @@ static ssize_t pt_read(struct file *filp, char *buf, size_t count, loff_t * ppos
static ssize_t pt_write(struct file *filp, const char *buf, size_t count, loff_t * ppos)
{
struct inode *ino = filp->f_dentry->d_inode;
- int unit = DEVICE_NR(ino->i_rdev);
+ int unit = DEVICE_NR(ino);
char wr_cmd[12] = { ATAPI_WRITE_6, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
int k, n, r, p, s, t, b;
diff --git a/drivers/block/rd.c b/drivers/block/rd.c
index 5eb9dbe93a66..775b0d42908e 100644
--- a/drivers/block/rd.c
+++ b/drivers/block/rd.c
@@ -245,6 +245,7 @@ fail:
static int rd_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)
{
int error;
+ struct block_device *bdev = inode->i_bdev;
if (cmd != BLKFLSBUF)
return -EINVAL;
@@ -253,12 +254,12 @@ static int rd_ioctl(struct inode *inode, struct file *file, unsigned int cmd, un
it's not like with the other blockdevices where
this ioctl only flushes away the buffer cache. */
error = -EBUSY;
- down(&inode->i_bdev->bd_sem);
- if (inode->i_bdev->bd_openers <= 2) {
- truncate_inode_pages(inode->i_mapping, 0);
+ down(&bdev->bd_sem);
+ if (bdev->bd_openers <= 2) {
+ truncate_inode_pages(bdev->bd_inode->i_mapping, 0);
error = 0;
}
- up(&inode->i_bdev->bd_sem);
+ up(&bdev->bd_sem);
return error;
}
@@ -269,18 +270,18 @@ static struct backing_dev_info rd_backing_dev_info = {
static int rd_open(struct inode * inode, struct file * filp)
{
- unsigned unit = minor(inode->i_rdev);
+ unsigned unit = iminor(inode);
/*
* Immunize device against invalidate_buffers() and prune_icache().
*/
if (rd_bdev[unit] == NULL) {
struct block_device *bdev = inode->i_bdev;
- atomic_inc(&bdev->bd_count);
+ inode = igrab(bdev->bd_inode);
rd_bdev[unit] = bdev;
bdev->bd_openers++;
bdev->bd_block_size = rd_blocksize;
- bdev->bd_inode->i_size = get_capacity(rd_disks[unit])<<9;
+ inode->i_size = get_capacity(rd_disks[unit])<<9;
inode->i_mapping->a_ops = &ramdisk_aops;
inode->i_mapping->backing_dev_info = &rd_backing_dev_info;
}
diff --git a/drivers/block/z2ram.c b/drivers/block/z2ram.c
index f3a7a2b8fc7d..c952ff90a23d 100644
--- a/drivers/block/z2ram.c
+++ b/drivers/block/z2ram.c
@@ -28,10 +28,10 @@
#define DEVICE_NAME "Z2RAM"
#include <linux/major.h>
-#include <linux/slab.h>
#include <linux/vmalloc.h>
#include <linux/init.h>
#include <linux/module.h>
+#include <linux/blkdev.h>
#include <asm/setup.h>
#include <asm/bitops.h>
@@ -150,7 +150,7 @@ z2_open( struct inode *inode, struct file *filp )
sizeof( z2ram_map[0] );
int rc = -ENOMEM;
- device = minor( inode->i_rdev );
+ device = iminor(inode);
if ( current_device != -1 && current_device != device )
{
diff --git a/drivers/char/agp/frontend.c b/drivers/char/agp/frontend.c
index 803513180b6a..6ff8d157fc6d 100644
--- a/drivers/char/agp/frontend.c
+++ b/drivers/char/agp/frontend.c
@@ -698,7 +698,7 @@ static int agp_release(struct inode *inode, struct file *file)
static int agp_open(struct inode *inode, struct file *file)
{
- int minor = minor(inode->i_rdev);
+ int minor = iminor(inode);
struct agp_file_private *priv;
struct agp_client *client;
int rc = -ENXIO;
diff --git a/drivers/char/busmouse.c b/drivers/char/busmouse.c
index ad6163f8d9ef..126d77f8a215 100644
--- a/drivers/char/busmouse.c
+++ b/drivers/char/busmouse.c
@@ -51,7 +51,7 @@ struct busmouse_data {
#define NR_MICE 15
#define FIRST_MOUSE 0
-#define DEV_TO_MOUSE(dev) MINOR_TO_MOUSE(minor(dev))
+#define DEV_TO_MOUSE(inode) MINOR_TO_MOUSE(iminor(inode))
#define MINOR_TO_MOUSE(minor) ((minor) - FIRST_MOUSE)
/*
@@ -190,7 +190,7 @@ static int busmouse_open(struct inode *inode, struct file *file)
unsigned int mousedev;
int ret;
- mousedev = DEV_TO_MOUSE(inode->i_rdev);
+ mousedev = DEV_TO_MOUSE(inode);
if (mousedev >= NR_MICE)
return -EINVAL;
diff --git a/drivers/char/drm/drm_drv.h b/drivers/char/drm/drm_drv.h
index d62156b35fcf..62c0cad7fe9b 100644
--- a/drivers/char/drm/drm_drv.h
+++ b/drivers/char/drm/drm_drv.h
@@ -795,7 +795,7 @@ int DRM(open)( struct inode *inode, struct file *filp )
int i;
for (i = 0; i < DRM(numdevs); i++) {
- if (minor(inode->i_rdev) == DRM(minor)[i]) {
+ if (iminor(inode) == DRM(minor)[i]) {
dev = &(DRM(device)[i]);
break;
}
diff --git a/drivers/char/drm/drm_fops.h b/drivers/char/drm/drm_fops.h
index 1039df122317..a925c669b845 100644
--- a/drivers/char/drm/drm_fops.h
+++ b/drivers/char/drm/drm_fops.h
@@ -51,7 +51,7 @@
*/
int DRM(open_helper)(struct inode *inode, struct file *filp, drm_device_t *dev)
{
- int minor = minor(inode->i_rdev);
+ int minor = iminor(inode);
drm_file_t *priv;
if (filp->f_flags & O_EXCL) return -EBUSY; /* No exclusive opens */
diff --git a/drivers/char/drm/drm_stub.h b/drivers/char/drm/drm_stub.h
index 706615eb7237..63033c13b197 100644
--- a/drivers/char/drm/drm_stub.h
+++ b/drivers/char/drm/drm_stub.h
@@ -62,7 +62,7 @@ static struct drm_stub_info {
*/
static int DRM(stub_open)(struct inode *inode, struct file *filp)
{
- int minor = minor(inode->i_rdev);
+ int minor = iminor(inode);
int err = -ENODEV;
struct file_operations *old_fops;
diff --git a/drivers/char/dsp56k.c b/drivers/char/dsp56k.c
index d9cf9097afeb..cfd6527bc514 100644
--- a/drivers/char/dsp56k.c
+++ b/drivers/char/dsp56k.c
@@ -207,7 +207,7 @@ static ssize_t dsp56k_read(struct file *file, char *buf, size_t count,
loff_t *ppos)
{
struct inode *inode = file->f_dentry->d_inode;
- int dev = minor(inode->i_rdev) & 0x0f;
+ int dev = iminor(inode) & 0x0f;
switch(dev)
{
@@ -270,7 +270,7 @@ static ssize_t dsp56k_write(struct file *file, const char *buf, size_t count,
loff_t *ppos)
{
struct inode *inode = file->f_dentry->d_inode;
- int dev = minor(inode->i_rdev) & 0x0f;
+ int dev = iminor(inode) & 0x0f;
switch(dev)
{
@@ -331,7 +331,7 @@ static ssize_t dsp56k_write(struct file *file, const char *buf, size_t count,
static int dsp56k_ioctl(struct inode *inode, struct file *file,
unsigned int cmd, unsigned long arg)
{
- int dev = minor(inode->i_rdev) & 0x0f;
+ int dev = iminor(inode) & 0x0f;
switch(dev)
{
@@ -424,7 +424,7 @@ static int dsp56k_ioctl(struct inode *inode, struct file *file,
#if 0
static unsigned int dsp56k_poll(struct file *file, poll_table *wait)
{
- int dev = minor(file->f_dentry->d_inode->i_rdev) & 0x0f;
+ int dev = iminor(file->f_dentry->d_inode) & 0x0f;
switch(dev)
{
@@ -441,7 +441,7 @@ static unsigned int dsp56k_poll(struct file *file, poll_table *wait)
static int dsp56k_open(struct inode *inode, struct file *file)
{
- int dev = minor(inode->i_rdev) & 0x0f;
+ int dev = iminor(inode) & 0x0f;
switch(dev)
{
@@ -472,7 +472,7 @@ static int dsp56k_open(struct inode *inode, struct file *file)
static int dsp56k_release(struct inode *inode, struct file *file)
{
- int dev = minor(inode->i_rdev) & 0x0f;
+ int dev = iminor(inode) & 0x0f;
switch(dev)
{
diff --git a/drivers/char/dtlk.c b/drivers/char/dtlk.c
index 6bf29e34c692..748c8a17295a 100644
--- a/drivers/char/dtlk.c
+++ b/drivers/char/dtlk.c
@@ -125,7 +125,7 @@ static void dtlk_timer_tick(unsigned long data);
static ssize_t dtlk_read(struct file *file, char *buf,
size_t count, loff_t * ppos)
{
- unsigned int minor = minor(file->f_dentry->d_inode->i_rdev);
+ unsigned int minor = iminor(file->f_dentry->d_inode);
char ch;
int i = 0, retries;
@@ -185,7 +185,7 @@ static ssize_t dtlk_write(struct file *file, const char *buf,
if (ppos != &file->f_pos)
return -ESPIPE;
- if (minor(file->f_dentry->d_inode->i_rdev) != DTLK_MINOR)
+ if (iminor(file->f_dentry->d_inode) != DTLK_MINOR)
return -EINVAL;
while (1) {
@@ -304,7 +304,7 @@ static int dtlk_open(struct inode *inode, struct file *file)
{
TRACE_TEXT("(dtlk_open");
- switch (minor(inode->i_rdev)) {
+ switch (iminor(inode)) {
case DTLK_MINOR:
if (dtlk_busy)
return -EBUSY;
@@ -319,7 +319,7 @@ static int dtlk_release(struct inode *inode, struct file *file)
{
TRACE_TEXT("(dtlk_release");
- switch (minor(inode->i_rdev)) {
+ switch (iminor(inode)) {
case DTLK_MINOR:
break;
diff --git a/drivers/char/ftape/zftape/zftape-init.c b/drivers/char/ftape/zftape/zftape-init.c
index 788e032f379d..80f4f09c4194 100644
--- a/drivers/char/ftape/zftape/zftape-init.c
+++ b/drivers/char/ftape/zftape/zftape-init.c
@@ -110,11 +110,11 @@ static int zft_open(struct inode *ino, struct file *filep)
int result;
TRACE_FUN(ft_t_flow);
- TRACE(ft_t_flow, "called for minor %d", minor(ino->i_rdev));
+ TRACE(ft_t_flow, "called for minor %d", iminor(ino));
if ( test_and_set_bit(0,&busy_flag) ) {
TRACE_ABORT(-EBUSY, ft_t_warn, "failed: already busy");
}
- if ((minor(ino->i_rdev) & ~(ZFT_MINOR_OP_MASK | FTAPE_NO_REWIND))
+ if ((iminor(ino) & ~(ZFT_MINOR_OP_MASK | FTAPE_NO_REWIND))
>
FTAPE_SEL_D) {
clear_bit(0,&busy_flag);
@@ -122,7 +122,7 @@ static int zft_open(struct inode *ino, struct file *filep)
}
orig_sigmask = current->blocked;
sigfillset(&current->blocked);
- result = _zft_open(minor(ino->i_rdev), filep->f_flags & O_ACCMODE);
+ result = _zft_open(iminor(ino), filep->f_flags & O_ACCMODE);
if (result < 0) {
current->blocked = orig_sigmask; /* restore mask */
clear_bit(0,&busy_flag);
@@ -144,7 +144,7 @@ static int zft_close(struct inode *ino, struct file *filep)
int result;
TRACE_FUN(ft_t_flow);
- if ( !test_bit(0,&busy_flag) || minor(ino->i_rdev) != zft_unit) {
+ if ( !test_bit(0,&busy_flag) || iminor(ino) != zft_unit) {
TRACE(ft_t_err, "failed: not busy or wrong unit");
TRACE_EXIT 0;
}
@@ -167,7 +167,7 @@ static int zft_ioctl(struct inode *ino, struct file *filep,
sigset_t old_sigmask;
TRACE_FUN(ft_t_flow);
- if ( !test_bit(0,&busy_flag) || minor(ino->i_rdev) != zft_unit || ft_failure) {
+ if ( !test_bit(0,&busy_flag) || iminor(ino) != zft_unit || ft_failure) {
TRACE_ABORT(-EIO, ft_t_err,
"failed: not busy, failure or wrong unit");
}
@@ -188,7 +188,7 @@ static int zft_mmap(struct file *filep, struct vm_area_struct *vma)
TRACE_FUN(ft_t_flow);
if ( !test_bit(0,&busy_flag) ||
- minor(filep->f_dentry->d_inode->i_rdev) != zft_unit ||
+ iminor(filep->f_dentry->d_inode) != zft_unit ||
ft_failure)
{
TRACE_ABORT(-EIO, ft_t_err,
@@ -217,7 +217,7 @@ static ssize_t zft_read(struct file *fp, char *buff,
TRACE_FUN(ft_t_flow);
TRACE(ft_t_data_flow, "called with count: %ld", (unsigned long)req_len);
- if (!test_bit(0,&busy_flag) || minor(ino->i_rdev) != zft_unit || ft_failure) {
+ if (!test_bit(0,&busy_flag) || iminor(ino) != zft_unit || ft_failure) {
TRACE_ABORT(-EIO, ft_t_err,
"failed: not busy, failure or wrong unit");
}
@@ -240,7 +240,7 @@ static ssize_t zft_write(struct file *fp, const char *buff,
TRACE_FUN(ft_t_flow);
TRACE(ft_t_flow, "called with count: %ld", (unsigned long)req_len);
- if (!test_bit(0,&busy_flag) || minor(ino->i_rdev) != zft_unit || ft_failure) {
+ if (!test_bit(0,&busy_flag) || iminor(ino) != zft_unit || ft_failure) {
TRACE_ABORT(-EIO, ft_t_err,
"failed: not busy, failure or wrong unit");
}
diff --git a/drivers/char/ip2main.c b/drivers/char/ip2main.c
index 0dd339726bb7..eef32735a70d 100644
--- a/drivers/char/ip2main.c
+++ b/drivers/char/ip2main.c
@@ -2733,7 +2733,7 @@ static
ssize_t
ip2_ipl_read(struct file *pFile, char *pData, size_t count, loff_t *off )
{
- unsigned int minor = minor( pFile->f_dentry->d_inode->i_rdev );
+ unsigned int minor = iminor(pFile->f_dentry->d_inode);
int rc = 0;
#ifdef IP2DEBUG_IPL
@@ -2863,7 +2863,7 @@ ip2_ipl_write(struct file *pFile, const char *pData, size_t count, loff_t *off)
static int
ip2_ipl_ioctl ( struct inode *pInode, struct file *pFile, UINT cmd, ULONG arg )
{
- unsigned int iplminor = minor(pInode->i_rdev);
+ unsigned int iplminor = iminor(pInode);
int rc = 0;
ULONG *pIndex = (ULONG*)arg;
i2eBordStrPtr pB = i2BoardPtrTable[iplminor / 4];
@@ -2998,7 +2998,7 @@ ip2_ipl_ioctl ( struct inode *pInode, struct file *pFile, UINT cmd, ULONG arg )
static int
ip2_ipl_open( struct inode *pInode, struct file *pFile )
{
- unsigned int iplminor = minor(pInode->i_rdev);
+ unsigned int iplminor = iminor(pInode);
i2eBordStrPtr pB;
i2ChanStrPtr pCh;
diff --git a/drivers/char/ipmi/ipmi_devintf.c b/drivers/char/ipmi/ipmi_devintf.c
index 0457f37d0a08..b69ff3d19284 100644
--- a/drivers/char/ipmi/ipmi_devintf.c
+++ b/drivers/char/ipmi/ipmi_devintf.c
@@ -110,7 +110,7 @@ static struct ipmi_user_hndl ipmi_hndlrs =
static int ipmi_open(struct inode *inode, struct file *file)
{
- int if_num = minor(inode->i_rdev);
+ int if_num = iminor(inode);
int rv;
struct ipmi_file_private *priv;
diff --git a/drivers/char/ipmi/ipmi_watchdog.c b/drivers/char/ipmi/ipmi_watchdog.c
index 185ed6ade2a2..eb213e416d23 100644
--- a/drivers/char/ipmi/ipmi_watchdog.c
+++ b/drivers/char/ipmi/ipmi_watchdog.c
@@ -645,7 +645,7 @@ static ssize_t ipmi_read(struct file *file,
static int ipmi_open(struct inode *ino, struct file *filep)
{
- switch (minor(ino->i_rdev))
+ switch (iminor(ino))
{
case WATCHDOG_MINOR:
if (ipmi_wdog_open)
@@ -688,7 +688,7 @@ static int ipmi_fasync(int fd, struct file *file, int on)
static int ipmi_close(struct inode *ino, struct file *filep)
{
- if (minor(ino->i_rdev)==WATCHDOG_MINOR)
+ if (iminor(ino)==WATCHDOG_MINOR)
{
#ifndef CONFIG_WATCHDOG_NOWAYOUT
ipmi_watchdog_state = WDOG_TIMEOUT_NONE;
diff --git a/drivers/char/istallion.c b/drivers/char/istallion.c
index 429fb2955573..ff543516731d 100644
--- a/drivers/char/istallion.c
+++ b/drivers/char/istallion.c
@@ -4805,7 +4805,7 @@ static ssize_t stli_memread(struct file *fp, char *buf, size_t count, loff_t *of
(int) fp, (int) buf, count, (int) offp);
#endif
- brdnr = minor(fp->f_dentry->d_inode->i_rdev);
+ brdnr = iminor(fp->f_dentry->d_inode);
if (brdnr >= stli_nrbrds)
return(-ENODEV);
brdp = stli_brds[brdnr];
@@ -4860,7 +4860,7 @@ static ssize_t stli_memwrite(struct file *fp, const char *buf, size_t count, lof
(int) fp, (int) buf, count, (int) offp);
#endif
- brdnr = minor(fp->f_dentry->d_inode->i_rdev);
+ brdnr = iminor(fp->f_dentry->d_inode);
if (brdnr >= stli_nrbrds)
return(-ENODEV);
brdp = stli_brds[brdnr];
@@ -5201,7 +5201,7 @@ static int stli_memioctl(struct inode *ip, struct file *fp, unsigned int cmd, un
* Now handle the board specific ioctls. These all depend on the
* minor number of the device they were called from.
*/
- brdnr = minor(ip->i_rdev);
+ brdnr = iminor(ip);
if (brdnr >= STL_MAXBRDS)
return(-ENODEV);
brdp = stli_brds[brdnr];
diff --git a/drivers/char/ite_gpio.c b/drivers/char/ite_gpio.c
index 1d76b81180d5..f3a6c78bd322 100644
--- a/drivers/char/ite_gpio.c
+++ b/drivers/char/ite_gpio.c
@@ -238,7 +238,7 @@ EXPORT_SYMBOL(ite_gpio_int_wait);
static int ite_gpio_open(struct inode *inode, struct file *file)
{
- unsigned int minor = minor(inode->i_rdev);
+ unsigned int minor = iminor(inode);
if (minor != GPIO_MINOR)
return -ENODEV;
diff --git a/drivers/char/lp.c b/drivers/char/lp.c
index 6f3ba6d76be7..46be7a8ac3d3 100644
--- a/drivers/char/lp.c
+++ b/drivers/char/lp.c
@@ -292,7 +292,7 @@ static int lp_wait_ready(int minor, int nonblock)
static ssize_t lp_write(struct file * file, const char * buf,
size_t count, loff_t *ppos)
{
- unsigned int minor = minor(file->f_dentry->d_inode->i_rdev);
+ unsigned int minor = iminor(file->f_dentry->d_inode);
struct parport *port = lp_table[minor].dev->port;
char *kbuf = lp_table[minor].lp_buffer;
ssize_t retv = 0;
@@ -408,7 +408,7 @@ static ssize_t lp_write(struct file * file, const char * buf,
static ssize_t lp_read(struct file * file, char * buf,
size_t count, loff_t *ppos)
{
- unsigned int minor=minor(file->f_dentry->d_inode->i_rdev);
+ unsigned int minor=iminor(file->f_dentry->d_inode);
struct parport *port = lp_table[minor].dev->port;
ssize_t retval = 0;
char *kbuf = lp_table[minor].lp_buffer;
@@ -483,7 +483,7 @@ static ssize_t lp_read(struct file * file, char * buf,
static int lp_open(struct inode * inode, struct file * file)
{
- unsigned int minor = minor(inode->i_rdev);
+ unsigned int minor = iminor(inode);
if (minor >= LP_NO)
return -ENXIO;
@@ -540,7 +540,7 @@ static int lp_open(struct inode * inode, struct file * file)
static int lp_release(struct inode * inode, struct file * file)
{
- unsigned int minor = minor(inode->i_rdev);
+ unsigned int minor = iminor(inode);
lp_claim_parport_or_block (&lp_table[minor]);
parport_negotiate (lp_table[minor].dev->port, IEEE1284_MODE_COMPAT);
@@ -555,7 +555,7 @@ static int lp_release(struct inode * inode, struct file * file)
static int lp_ioctl(struct inode *inode, struct file *file,
unsigned int cmd, unsigned long arg)
{
- unsigned int minor = minor(inode->i_rdev);
+ unsigned int minor = iminor(inode);
int status;
int retval = 0;
diff --git a/drivers/char/lp_old98.c b/drivers/char/lp_old98.c
index fe5d3de82e0a..87695ee2ec07 100644
--- a/drivers/char/lp_old98.c
+++ b/drivers/char/lp_old98.c
@@ -219,7 +219,7 @@ static ssize_t lp_old98_write(struct file * file,
static int lp_old98_open(struct inode * inode, struct file * file)
{
- if (minor(inode->i_rdev) != 0)
+ if (iminor(inode) != 0)
return -ENXIO;
if (lp.flags & LP_BUSY)
diff --git a/drivers/char/mem.c b/drivers/char/mem.c
index 7f1464f3e6b8..82b44f1c1a13 100644
--- a/drivers/char/mem.c
+++ b/drivers/char/mem.c
@@ -607,7 +607,7 @@ static struct file_operations kmsg_fops = {
static int memory_open(struct inode * inode, struct file * filp)
{
- switch (minor(inode->i_rdev)) {
+ switch (iminor(inode)) {
case 1:
filp->f_op = &mem_fops;
break;
diff --git a/drivers/char/misc.c b/drivers/char/misc.c
index b1c42c73b763..8cc75c28a105 100644
--- a/drivers/char/misc.c
+++ b/drivers/char/misc.c
@@ -100,7 +100,7 @@ static int misc_read_proc(char *buf, char **start, off_t offset,
static int misc_open(struct inode * inode, struct file * file)
{
- int minor = minor(inode->i_rdev);
+ int minor = iminor(inode);
struct miscdevice *c;
int err = -ENODEV;
struct file_operations *old_fops, *new_fops = NULL;
diff --git a/drivers/char/ppdev.c b/drivers/char/ppdev.c
index b1e6721199e9..7428e4d3ce99 100644
--- a/drivers/char/ppdev.c
+++ b/drivers/char/ppdev.c
@@ -104,7 +104,7 @@ static inline void pp_enable_irq (struct pp_struct *pp)
static ssize_t pp_read (struct file * file, char * buf, size_t count,
loff_t * ppos)
{
- unsigned int minor = minor (file->f_dentry->d_inode->i_rdev);
+ unsigned int minor = iminor(file->f_dentry->d_inode);
struct pp_struct *pp = file->private_data;
char * kbuffer;
ssize_t bytes_read = 0;
@@ -187,7 +187,7 @@ static ssize_t pp_read (struct file * file, char * buf, size_t count,
static ssize_t pp_write (struct file * file, const char * buf, size_t count,
loff_t * ppos)
{
- unsigned int minor = minor (file->f_dentry->d_inode->i_rdev);
+ unsigned int minor = iminor(file->f_dentry->d_inode);
struct pp_struct *pp = file->private_data;
char * kbuffer;
ssize_t bytes_written = 0;
@@ -330,7 +330,7 @@ static enum ieee1284_phase init_phase (int mode)
static int pp_ioctl(struct inode *inode, struct file *file,
unsigned int cmd, unsigned long arg)
{
- unsigned int minor = minor(inode->i_rdev);
+ unsigned int minor = iminor(inode);
struct pp_struct *pp = file->private_data;
struct parport * port;
@@ -638,7 +638,7 @@ static int pp_ioctl(struct inode *inode, struct file *file,
static int pp_open (struct inode * inode, struct file * file)
{
- unsigned int minor = minor (inode->i_rdev);
+ unsigned int minor = iminor(inode);
struct pp_struct *pp;
if (minor >= PARPORT_MAX)
@@ -667,7 +667,7 @@ static int pp_open (struct inode * inode, struct file * file)
static int pp_release (struct inode * inode, struct file * file)
{
- unsigned int minor = minor (inode->i_rdev);
+ unsigned int minor = iminor(inode);
struct pp_struct *pp = file->private_data;
int compat_negot;
diff --git a/drivers/char/raw.c b/drivers/char/raw.c
index 8aeb7cbbe9b8..a7a1a31db6e2 100644
--- a/drivers/char/raw.c
+++ b/drivers/char/raw.c
@@ -43,7 +43,7 @@ static struct file_operations raw_ctl_fops; /* forward declaration */
*/
static int raw_open(struct inode *inode, struct file *filp)
{
- const int minor = minor(inode->i_rdev);
+ const int minor = iminor(inode);
struct block_device *bdev;
int err;
@@ -63,7 +63,9 @@ static int raw_open(struct inode *inode, struct file *filp)
err = bd_claim(bdev, raw_open);
if (err)
goto out;
- atomic_inc(&bdev->bd_count);
+ err = -ENODEV;
+ if (!igrab(bdev->bd_inode))
+ goto out;
err = blkdev_get(bdev, filp->f_mode, 0, BDEV_RAW);
if (err) {
bd_release(bdev);
@@ -90,7 +92,7 @@ out:
*/
static int raw_release(struct inode *inode, struct file *filp)
{
- const int minor= minor(inode->i_rdev);
+ const int minor= iminor(inode);
struct block_device *bdev;
down(&raw_mutex);
diff --git a/drivers/char/scx200_gpio.c b/drivers/char/scx200_gpio.c
index e366643396df..3758fb1b1171 100644
--- a/drivers/char/scx200_gpio.c
+++ b/drivers/char/scx200_gpio.c
@@ -29,7 +29,7 @@ MODULE_PARM_DESC(major, "Major device number");
static ssize_t scx200_gpio_write(struct file *file, const char *data,
size_t len, loff_t *ppos)
{
- unsigned m = minor(file->f_dentry->d_inode->i_rdev);
+ unsigned m = iminor(file->f_dentry->d_inode);
size_t i;
if (ppos != &file->f_pos)
@@ -80,7 +80,7 @@ static ssize_t scx200_gpio_write(struct file *file, const char *data,
static ssize_t scx200_gpio_read(struct file *file, char *buf,
size_t len, loff_t *ppos)
{
- unsigned m = minor(file->f_dentry->d_inode->i_rdev);
+ unsigned m = iminor(file->f_dentry->d_inode);
int value;
if (ppos != &file->f_pos)
@@ -95,7 +95,7 @@ static ssize_t scx200_gpio_read(struct file *file, char *buf,
static int scx200_gpio_open(struct inode *inode, struct file *file)
{
- unsigned m = minor(inode->i_rdev);
+ unsigned m = iminor(inode);
if (m > 63)
return -EINVAL;
return 0;
diff --git a/drivers/char/stallion.c b/drivers/char/stallion.c
index d3a4f5eae2c2..88e764f891bc 100644
--- a/drivers/char/stallion.c
+++ b/drivers/char/stallion.c
@@ -3078,7 +3078,7 @@ static int stl_memioctl(struct inode *ip, struct file *fp, unsigned int cmd, uns
(int) fp, cmd, (int) arg);
#endif
- brdnr = minor(ip->i_rdev);
+ brdnr = iminor(ip);
if (brdnr >= STL_MAXBRDS)
return(-ENODEV);
rc = 0;
diff --git a/drivers/char/tipar.c b/drivers/char/tipar.c
index b88f7d0d4ddb..660f7b0f1487 100644
--- a/drivers/char/tipar.c
+++ b/drivers/char/tipar.c
@@ -248,7 +248,7 @@ probe_ti_parallel(int minor)
static int
tipar_open(struct inode *inode, struct file *file)
{
- unsigned int minor = minor(inode->i_rdev) - TIPAR_MINOR;
+ unsigned int minor = iminor(inode) - TIPAR_MINOR;
if (minor > tp_count - 1)
return -ENXIO;
@@ -266,7 +266,7 @@ tipar_open(struct inode *inode, struct file *file)
static int
tipar_close(struct inode *inode, struct file *file)
{
- unsigned int minor = minor(inode->i_rdev) - TIPAR_MINOR;
+ unsigned int minor = iminor(inode) - TIPAR_MINOR;
if (minor > tp_count - 1)
return -ENXIO;
@@ -279,8 +279,7 @@ tipar_close(struct inode *inode, struct file *file)
static ssize_t
tipar_write(struct file *file, const char *buf, size_t count, loff_t * ppos)
{
- unsigned int minor =
- minor(file->f_dentry->d_inode->i_rdev) - TIPAR_MINOR;
+ unsigned int minor = iminor(file->f_dentry->d_inode) - TIPAR_MINOR;
ssize_t n;
parport_claim_or_block(table[minor].dev);
@@ -308,8 +307,7 @@ static ssize_t
tipar_read(struct file *file, char *buf, size_t count, loff_t * ppos)
{
int b = 0;
- unsigned int minor =
- minor(file->f_dentry->d_inode->i_rdev) - TIPAR_MINOR;
+ unsigned int minor = iminor(file->f_dentry->d_inode) - TIPAR_MINOR;
ssize_t retval = 0;
ssize_t n = 0;
diff --git a/drivers/char/tpqic02.c b/drivers/char/tpqic02.c
index 4429c89ac7c3..ec6861ef30cb 100644
--- a/drivers/char/tpqic02.c
+++ b/drivers/char/tpqic02.c
@@ -169,7 +169,7 @@ static unsigned long dma_bytes_done;
static volatile unsigned dma_mode; /* !=0 also means DMA in use */
static flag need_rewind = YES;
-static kdev_t current_tape_dev;
+static int current_type;
static int extra_blocks_left = BLOCKS_BEYOND_EW;
static struct timer_list tp_timer;
@@ -677,7 +677,7 @@ static int rdstatus(char *stp, unsigned size, char qcmd)
* exception flag from previous exception which we are trying to clear.
*/
- if (TP_DIAGS(current_tape_dev))
+ if (TP_DIAGS(current_type))
printk(TPQIC02_NAME ": reading status bytes: ");
for (q = stp; q < stp + size; q++) {
@@ -693,7 +693,7 @@ static int rdstatus(char *stp, unsigned size, char qcmd)
*q = inb_p(QIC02_DATA_PORT); /* read status byte */
- if (TP_DIAGS(current_tape_dev))
+ if (TP_DIAGS(current_type))
printk("[%1d]=0x%x ", q - stp, (unsigned) (*q) & 0xff);
outb_p(ctlbits | QIC02_CTL_REQUEST, QIC02_CTL_PORT); /* set request */
@@ -714,7 +714,7 @@ static int rdstatus(char *stp, unsigned size, char qcmd)
cpu_relax();
/* wait for ready */
- if (TP_DIAGS(current_tape_dev))
+ if (TP_DIAGS(current_type))
printk("\n");
return TE_OK;
@@ -1614,7 +1614,7 @@ static irqreturn_t qic02_tape_interrupt(int irq, void *dev_id,
if (status_expect_int) {
#ifdef WANT_EXTRA_FULL_DEBUGGING
- if (TP_DIAGS(current_tape_dev))
+ if (TP_DIAGS(current_type))
printk("@");
#endif
stat = inb(QIC02_STAT_PORT); /* Knock, knock */
@@ -1726,7 +1726,7 @@ static irqreturn_t qic02_tape_interrupt(int irq, void *dev_id,
static ssize_t qic02_tape_read(struct file *filp, char *buf, size_t count, loff_t * ppos)
{
- kdev_t dev = filp->f_dentry->d_inode->i_rdev;
+ int type = iminor(filp->f_dentry->d_inode);
unsigned short flags = filp->f_flags;
unsigned long bytes_todo, bytes_done, total_bytes_done = 0;
int stat;
@@ -1736,8 +1736,8 @@ static ssize_t qic02_tape_read(struct file *filp, char *buf, size_t count, loff_
return -ENXIO;
}
- if (TP_DIAGS(current_tape_dev))
- printk(TPQIC02_NAME ": request READ, minor=%x, buf=%p, count=%lx, pos=%Lx, flags=%x\n", minor(dev), buf,
+ if (TP_DIAGS(current_type))
+ printk(TPQIC02_NAME ": request READ, minor=%x, buf=%p, count=%lx, pos=%Lx, flags=%x\n", type, buf,
(long) count, filp->f_pos, flags);
if (count % TAPE_BLKSIZE) { /* Only allow mod 512 bytes at a time. */
@@ -1904,7 +1904,7 @@ static ssize_t qic02_tape_read(struct file *filp, char *buf, size_t count, loff_
*/
static ssize_t qic02_tape_write(struct file *filp, const char *buf, size_t count, loff_t * ppos)
{
- kdev_t dev = filp->f_dentry->d_inode->i_rdev;
+ int type = iminor(filp->f_dentry->d_inode);
unsigned short flags = filp->f_flags;
unsigned long bytes_todo, bytes_done, total_bytes_done = 0;
@@ -1913,9 +1913,9 @@ static ssize_t qic02_tape_write(struct file *filp, const char *buf, size_t count
return -ENXIO;
}
- if (TP_DIAGS(current_tape_dev)) {
+ if (TP_DIAGS(current_type)) {
printk(TPQIC02_NAME ": request WRITE, minor=%x, buf=%p, count=%lx, pos=%Lx, flags=%x\n",
- minor(dev), buf, (long) count, filp->f_pos, flags);
+ type, buf, (long) count, filp->f_pos, flags);
}
if (count % TAPE_BLKSIZE) { /* only allow mod 512 bytes at a time */
@@ -2070,17 +2070,18 @@ static int qic02_tape_open(struct inode *inode, struct file *filp)
static int qic02_tape_open_no_use_count(struct inode *inode,
struct file *filp)
{
- kdev_t dev = inode->i_rdev;
+ int type = iminor(inode);
unsigned short flags = filp->f_flags;
unsigned short dens = 0;
int s;
- if (TP_DIAGS(dev)) {
- printk("qic02_tape_open: dev=%s, flags=%x ", cdevname(dev), flags);
+ if (TP_DIAGS(type)) {
+ printk("qic02_tape_open: dev=tpqic2(%d), flags=%x ",
+ type, flags);
}
- if (minor(dev) == 255) { /* special case for resetting */
+ if (type == 255) { /* special case for resetting */
if (capable(CAP_SYS_ADMIN)) {
return (tape_reset(1) == TE_OK) ? -EAGAIN : -ENXIO;
} else {
@@ -2162,7 +2163,7 @@ static int qic02_tape_open_no_use_count(struct inode *inode,
*/
/* not allowed to do QCMD_DENS_* unless tape is rewound */
- if ((TP_DENS(dev) != 0) && (TP_DENS(current_tape_dev) != TP_DENS(dev))) {
+ if ((TP_DENS(type) != 0) && (TP_DENS(current_type) != TP_DENS(type))) {
/* force rewind if minor bits have changed,
* i.e. user wants to use tape in different format.
* [assuming single drive operation]
@@ -2175,7 +2176,7 @@ static int qic02_tape_open_no_use_count(struct inode *inode,
/* density bits still the same, but TP_DIAGS bit
* may have changed.
*/
- current_tape_dev = dev;
+ current_type = type;
}
if (need_rewind == YES) {
@@ -2212,14 +2213,14 @@ static int qic02_tape_open_no_use_count(struct inode *inode,
* so we must have done a rewind by now. If not, just skip over.
* Only give set density command when minor bits have changed.
*/
- if (TP_DENS(current_tape_dev) == TP_DENS(dev)) {
+ if (TP_DENS(current_type) == TP_DENS(type)) {
return 0;
}
- current_tape_dev = dev;
+ current_type = type;
need_rewind = NO;
if (TP_HAVE_DENS) {
- dens = TP_DENS(dev);
+ dens = TP_DENS(type);
}
if (dens < sizeof(format_names) / sizeof(char *))
@@ -2227,7 +2228,7 @@ static int qic02_tape_open_no_use_count(struct inode *inode,
else
tpqputs(TPQD_REWIND, "Wait for retensioning...");
- switch (TP_DENS(dev)) {
+ switch (TP_DENS(type)) {
case 0: /* Minor 0 is for drives without set-density support */
s = 0;
break;
@@ -2254,7 +2255,7 @@ static int qic02_tape_open_no_use_count(struct inode *inode,
}
if (s != 0) {
status_dead = YES; /* force reset */
- current_tape_dev = NODEV;/* earlier 0xff80 */
+ current_type = 0;/* earlier 0xff80 */
return -EIO;
}
@@ -2264,10 +2265,10 @@ static int qic02_tape_open_no_use_count(struct inode *inode,
static int qic02_tape_release(struct inode *inode, struct file *filp)
{
- kdev_t dev = inode->i_rdev;
+ int type = iminor(inode);
- if (TP_DIAGS(dev)) {
- printk("qic02_tape_release: dev=%s\n", cdevname(dev));
+ if (TP_DIAGS(type)) {
+ printk("qic02_tape_release: dev=tpqic2(%d)\n", type);
}
if (status_zombie == NO) { /* don't rewind in zombie mode */
@@ -2283,7 +2284,7 @@ static int qic02_tape_release(struct inode *inode, struct file *filp)
/* Rewind only if minor number requires it AND
* read/writes have been done. ************* IS THIS CORRECT??????????
*/
- if ((TP_REWCLOSE(dev)) && (status_bytes_rd | status_bytes_wr)) {
+ if (TP_REWCLOSE(type) && (status_bytes_rd | status_bytes_wr)) {
tpqputs(TPQD_REWIND, "release: Doing rewind...");
(void) do_qic_cmd(QCMD_REWIND, TIM_R);
}
@@ -2398,7 +2399,7 @@ static int qic02_tape_ioctl(struct inode *inode, struct file *filp, unsigned int
struct mtpos ioctl_tell;
- if (TP_DIAGS(current_tape_dev))
+ if (TP_DIAGS(current_type))
printk(TPQIC02_NAME ": ioctl(%4x, %4lx)\n", iocmd, ioarg);
if (!inode)
@@ -2459,7 +2460,7 @@ static int qic02_tape_ioctl(struct inode *inode, struct file *filp, unsigned int
* --- tape at the beginning of the current file.
*/
- if (TP_DIAGS(current_tape_dev))
+ if (TP_DIAGS(current_type))
printk("OP op=%4x, count=%4x\n", operation.mt_op, operation.mt_count);
if (operation.mt_count < 0)
@@ -2492,7 +2493,7 @@ static int qic02_tape_ioctl(struct inode *inode, struct file *filp, unsigned int
return 0;
} else if (c == _IOC_NR(MTIOCGET)) {
- if (TP_DIAGS(current_tape_dev))
+ if (TP_DIAGS(current_type))
printk("GET ");
CHECK_IOC_SIZE(mtget);
@@ -2507,7 +2508,7 @@ static int qic02_tape_ioctl(struct inode *inode, struct file *filp, unsigned int
return -EFAULT;
return 0;
} else if (TP_HAVE_TELL && (c == _IOC_NR(MTIOCPOS))) {
- if (TP_DIAGS(current_tape_dev))
+ if (TP_DIAGS(current_type))
printk("POS ");
CHECK_IOC_SIZE(mtpos);
@@ -2664,7 +2665,7 @@ int __init qic02_tape_init(void)
return -ENODEV;
}
- current_tape_dev = mk_kdev(QIC02_TAPE_MAJOR, 0);
+ current_type = 0;
#ifndef CONFIG_QIC02_DYNCONF
printk(TPQIC02_NAME ": IRQ %d, DMA %d, IO 0x%x, IFC %s, %s, %s\n",
diff --git a/drivers/char/tty_io.c b/drivers/char/tty_io.c
index ba53772c8fd9..d0e06f0e6bcf 100644
--- a/drivers/char/tty_io.c
+++ b/drivers/char/tty_io.c
@@ -177,7 +177,7 @@ char *tty_name(struct tty_struct *tty, char *buf)
EXPORT_SYMBOL(tty_name);
-inline int tty_paranoia_check(struct tty_struct *tty, kdev_t device,
+inline int tty_paranoia_check(struct tty_struct *tty, struct inode *inode,
const char *routine)
{
#ifdef TTY_PARANOIA_CHECK
@@ -187,11 +187,11 @@ inline int tty_paranoia_check(struct tty_struct *tty, kdev_t device,
"Warning: null TTY for (%s) in %s\n";
if (!tty) {
- printk(badtty, cdevname(device), routine);
+ printk(badtty, cdevname(inode->i_rdev), routine);
return 1;
}
if (tty->magic != TTY_MAGIC) {
- printk(badmagic, cdevname(device), routine);
+ printk(badmagic, cdevname(inode->i_rdev), routine);
return 1;
}
#endif
@@ -646,7 +646,7 @@ static ssize_t tty_read(struct file * file, char * buf, size_t count,
tty = (struct tty_struct *)file->private_data;
inode = file->f_dentry->d_inode;
- if (tty_paranoia_check(tty, inode->i_rdev, "tty_read"))
+ if (tty_paranoia_check(tty, inode, "tty_read"))
return -EIO;
if (!tty || (test_bit(TTY_IO_ERROR, &tty->flags)))
return -EIO;
@@ -763,7 +763,7 @@ static ssize_t tty_write(struct file * file, const char * buf, size_t count,
}
tty = (struct tty_struct *)file->private_data;
- if (tty_paranoia_check(tty, inode->i_rdev, "tty_write"))
+ if (tty_paranoia_check(tty, inode, "tty_write"))
return -EIO;
if (!tty || !tty->driver->write || (test_bit(TTY_IO_ERROR, &tty->flags)))
return -EIO;
@@ -1059,7 +1059,7 @@ static void release_dev(struct file * filp)
char buf[64];
tty = (struct tty_struct *)filp->private_data;
- if (tty_paranoia_check(tty, filp->f_dentry->d_inode->i_rdev, "release_dev"))
+ if (tty_paranoia_check(tty, filp->f_dentry->d_inode, "release_dev"))
return;
check_tty_count(tty, "release_dev");
@@ -1439,7 +1439,7 @@ static unsigned int tty_poll(struct file * filp, poll_table * wait)
struct tty_struct * tty;
tty = (struct tty_struct *)filp->private_data;
- if (tty_paranoia_check(tty, filp->f_dentry->d_inode->i_rdev, "tty_poll"))
+ if (tty_paranoia_check(tty, filp->f_dentry->d_inode, "tty_poll"))
return 0;
if (tty->ldisc.poll)
@@ -1453,7 +1453,7 @@ static int tty_fasync(int fd, struct file * filp, int on)
int retval;
tty = (struct tty_struct *)filp->private_data;
- if (tty_paranoia_check(tty, filp->f_dentry->d_inode->i_rdev, "tty_fasync"))
+ if (tty_paranoia_check(tty, filp->f_dentry->d_inode, "tty_fasync"))
return 0;
retval = fasync_helper(fd, filp, on, &tty->fasync);
@@ -1727,7 +1727,7 @@ int tty_ioctl(struct inode * inode, struct file * file,
int retval;
tty = (struct tty_struct *)file->private_data;
- if (tty_paranoia_check(tty, inode->i_rdev, "tty_ioctl"))
+ if (tty_paranoia_check(tty, inode, "tty_ioctl"))
return -EINVAL;
real_tty = tty;
diff --git a/drivers/char/vc_screen.c b/drivers/char/vc_screen.c
index 07e16dbdb4e0..15c28a5edb5c 100644
--- a/drivers/char/vc_screen.c
+++ b/drivers/char/vc_screen.c
@@ -49,7 +49,7 @@ static int
vcs_size(struct inode *inode)
{
int size;
- int minor = minor(inode->i_rdev);
+ int minor = iminor(inode);
int currcons = minor & 127;
if (currcons == 0)
currcons = fg_console;
@@ -104,7 +104,7 @@ static ssize_t
vcs_read(struct file *file, char *buf, size_t count, loff_t *ppos)
{
struct inode *inode = file->f_dentry->d_inode;
- unsigned int currcons = minor(inode->i_rdev);
+ unsigned int currcons = iminor(inode);
long pos = *ppos;
long viewed, attr, read;
int col, maxcol;
@@ -273,7 +273,7 @@ static ssize_t
vcs_write(struct file *file, const char *buf, size_t count, loff_t *ppos)
{
struct inode *inode = file->f_dentry->d_inode;
- unsigned int currcons = minor(inode->i_rdev);
+ unsigned int currcons = iminor(inode);
long pos = *ppos;
long viewed, attr, size, written;
char *con_buf0;
@@ -456,7 +456,7 @@ unlock_out:
static int
vcs_open(struct inode *inode, struct file *filp)
{
- unsigned int currcons = minor(inode->i_rdev) & 127;
+ unsigned int currcons = iminor(inode) & 127;
if(currcons && !vc_cons_allocated(currcons-1))
return -ENXIO;
return 0;
diff --git a/drivers/char/watchdog/acquirewdt.c b/drivers/char/watchdog/acquirewdt.c
index 2e6e98ac932d..e25bd42b9963 100644
--- a/drivers/char/watchdog/acquirewdt.c
+++ b/drivers/char/watchdog/acquirewdt.c
@@ -130,7 +130,7 @@ static int acq_ioctl(struct inode *inode, struct file *file, unsigned int cmd,
static int acq_open(struct inode *inode, struct file *file)
{
- if ((minor(inode->i_rdev) == WATCHDOG_MINOR)) {
+ if ((iminor(inode) == WATCHDOG_MINOR)) {
spin_lock(&acq_lock);
if(acq_is_open) {
spin_unlock(&acq_lock);
@@ -152,7 +152,7 @@ static int acq_open(struct inode *inode, struct file *file)
static int acq_close(struct inode *inode, struct file *file)
{
- if(minor(inode->i_rdev)==WATCHDOG_MINOR) {
+ if(iminor(inode)==WATCHDOG_MINOR) {
spin_lock(&acq_lock);
if (expect_close)
inb_p(WDT_STOP);
diff --git a/drivers/char/watchdog/cpu5wdt.c b/drivers/char/watchdog/cpu5wdt.c
index 8b23114ea122..36897e1ad3e0 100644
--- a/drivers/char/watchdog/cpu5wdt.c
+++ b/drivers/char/watchdog/cpu5wdt.c
@@ -134,7 +134,7 @@ static int cpu5wdt_stop(void)
static int cpu5wdt_open(struct inode *inode, struct file *file)
{
- switch(minor(inode->i_rdev)) {
+ switch(iminor(inode)) {
case WATCHDOG_MINOR:
if ( test_and_set_bit(0, &cpu5wdt_device.inuse) )
return -EBUSY;
@@ -148,7 +148,7 @@ static int cpu5wdt_open(struct inode *inode, struct file *file)
static int cpu5wdt_release(struct inode *inode, struct file *file)
{
- if(minor(inode->i_rdev)==WATCHDOG_MINOR) {
+ if(iminor(inode)==WATCHDOG_MINOR) {
clear_bit(0, &cpu5wdt_device.inuse);
}
return 0;
diff --git a/drivers/char/watchdog/ib700wdt.c b/drivers/char/watchdog/ib700wdt.c
index 3cb496f8efb3..91ae8dc73c1a 100644
--- a/drivers/char/watchdog/ib700wdt.c
+++ b/drivers/char/watchdog/ib700wdt.c
@@ -218,7 +218,7 @@ ibwdt_ioctl(struct inode *inode, struct file *file, unsigned int cmd,
static int
ibwdt_open(struct inode *inode, struct file *file)
{
- if (minor(inode->i_rdev) == WATCHDOG_MINOR) {
+ if (iminor(inode) == WATCHDOG_MINOR) {
spin_lock(&ibwdt_lock);
if (ibwdt_is_open) {
spin_unlock(&ibwdt_lock);
@@ -240,7 +240,7 @@ ibwdt_open(struct inode *inode, struct file *file)
static int
ibwdt_close(struct inode *inode, struct file *file)
{
- if (minor(inode->i_rdev) == WATCHDOG_MINOR) {
+ if (iminor(inode) == WATCHDOG_MINOR) {
spin_lock(&ibwdt_lock);
if (expect_close)
outb_p(wd_times[wd_margin], WDT_STOP);
diff --git a/drivers/char/watchdog/machzwd.c b/drivers/char/watchdog/machzwd.c
index 87bfb0edb03a..f175809cc7cd 100644
--- a/drivers/char/watchdog/machzwd.c
+++ b/drivers/char/watchdog/machzwd.c
@@ -377,7 +377,7 @@ static int zf_ioctl(struct inode *inode, struct file *file, unsigned int cmd,
static int zf_open(struct inode *inode, struct file *file)
{
- switch(minor(inode->i_rdev)){
+ switch(iminor(inode)){
case WATCHDOG_MINOR:
spin_lock(&zf_lock);
if(zf_is_open){
@@ -402,7 +402,7 @@ static int zf_open(struct inode *inode, struct file *file)
static int zf_close(struct inode *inode, struct file *file)
{
- if(minor(inode->i_rdev) == WATCHDOG_MINOR){
+ if(iminor(inode) == WATCHDOG_MINOR){
if(zf_expect_close){
zf_timer_off();
diff --git a/drivers/char/watchdog/pcwd.c b/drivers/char/watchdog/pcwd.c
index a9167cf89341..6d3ceaeeb11a 100644
--- a/drivers/char/watchdog/pcwd.c
+++ b/drivers/char/watchdog/pcwd.c
@@ -426,7 +426,7 @@ static ssize_t pcwd_write(struct file *file, const char *buf, size_t len,
static int pcwd_open(struct inode *ino, struct file *filep)
{
- switch (minor(ino->i_rdev)) {
+ switch (iminor(ino)) {
case WATCHDOG_MINOR:
if (!atomic_dec_and_test(&open_allowed) ) {
atomic_inc( &open_allowed );
@@ -457,7 +457,7 @@ static ssize_t pcwd_read(struct file *file, char *buf, size_t count,
/* Can't seek (pread) on this device */
if (ppos != &file->f_pos)
return -ESPIPE;
- switch(minor(file->f_dentry->d_inode->i_rdev))
+ switch(iminor(file->f_dentry->d_inode))
{
case TEMP_MINOR:
/*
@@ -477,7 +477,7 @@ static ssize_t pcwd_read(struct file *file, char *buf, size_t count,
static int pcwd_close(struct inode *ino, struct file *filep)
{
- if (minor(ino->i_rdev)==WATCHDOG_MINOR) {
+ if (iminor(ino)==WATCHDOG_MINOR) {
if (expect_close) {
/* Disable the board */
if (revision == PCWD_REVISION_C) {
diff --git a/drivers/char/watchdog/wdt.c b/drivers/char/watchdog/wdt.c
index 1c2680425d2e..e1760847f6d3 100644
--- a/drivers/char/watchdog/wdt.c
+++ b/drivers/char/watchdog/wdt.c
@@ -290,7 +290,7 @@ static ssize_t wdt_read(struct file *file, char *buf, size_t count, loff_t *ptr)
if (ptr != &file->f_pos)
return -ESPIPE;
- switch(minor(file->f_dentry->d_inode->i_rdev))
+ switch(iminor(file->f_dentry->d_inode))
{
case TEMP_MINOR:
c*=11;
@@ -373,7 +373,7 @@ static int wdt_ioctl(struct inode *inode, struct file *file, unsigned int cmd,
static int wdt_open(struct inode *inode, struct file *file)
{
- switch(minor(inode->i_rdev))
+ switch(iminor(inode))
{
case WATCHDOG_MINOR:
if(test_and_set_bit(0, &wdt_is_open))
@@ -413,7 +413,7 @@ static int wdt_open(struct inode *inode, struct file *file)
static int wdt_release(struct inode *inode, struct file *file)
{
- if(minor(inode->i_rdev)==WATCHDOG_MINOR)
+ if(iminor(inode)==WATCHDOG_MINOR)
{
if (expect_close) {
inb_p(WDT_DC); /* Disable counters */
diff --git a/drivers/char/watchdog/wdt_pci.c b/drivers/char/watchdog/wdt_pci.c
index 07982732389b..93ff3659675a 100644
--- a/drivers/char/watchdog/wdt_pci.c
+++ b/drivers/char/watchdog/wdt_pci.c
@@ -276,7 +276,7 @@ static ssize_t wdtpci_read(struct file *file, char *buf, size_t count, loff_t *p
if (ptr != &file->f_pos)
return -ESPIPE;
- switch(minor(file->f_dentry->d_inode->i_rdev))
+ switch(iminor(file->f_dentry->d_inode))
{
case TEMP_MINOR:
c*=11;
@@ -361,7 +361,7 @@ static int wdtpci_open(struct inode *inode, struct file *file)
{
unsigned long flags;
- switch(minor(inode->i_rdev))
+ switch(iminor(inode))
{
case WATCHDOG_MINOR:
if (down_trylock(&open_sem))
@@ -423,7 +423,7 @@ static int wdtpci_open(struct inode *inode, struct file *file)
static int wdtpci_release(struct inode *inode, struct file *file)
{
- if (minor(inode->i_rdev)==WATCHDOG_MINOR) {
+ if (iminor(inode)==WATCHDOG_MINOR) {
unsigned long flags;
if (expect_close) {
spin_lock_irqsave(&wdtpci_lock, flags);
diff --git a/drivers/i2c/i2c-dev.c b/drivers/i2c/i2c-dev.c
index d2360ca2a7ca..32b886b031f0 100644
--- a/drivers/i2c/i2c-dev.c
+++ b/drivers/i2c/i2c-dev.c
@@ -138,7 +138,7 @@ static ssize_t i2cdev_read (struct file *file, char __user *buf, size_t count,
return -ENOMEM;
pr_debug("i2c-dev.o: i2c-%d reading %d bytes.\n",
- minor(file->f_dentry->d_inode->i_rdev), count);
+ iminor(file->f_dentry->d_inode), count);
ret = i2c_master_recv(client,tmp,count);
if (ret >= 0)
@@ -166,7 +166,7 @@ static ssize_t i2cdev_write (struct file *file, const char __user *buf, size_t c
}
pr_debug("i2c-dev.o: i2c-%d writing %d bytes.\n",
- minor(file->f_dentry->d_inode->i_rdev), count);
+ iminor(file->f_dentry->d_inode), count);
ret = i2c_master_send(client,tmp,count);
kfree(tmp);
@@ -186,7 +186,7 @@ int i2cdev_ioctl (struct inode *inode, struct file *file, unsigned int cmd,
unsigned long funcs;
dev_dbg(&client->dev, "i2c-%d ioctl, cmd: 0x%x, arg: %lx.\n",
- minor(inode->i_rdev),cmd, arg);
+ iminor(inode),cmd, arg);
switch ( cmd ) {
case I2C_SLAVE:
@@ -373,7 +373,7 @@ int i2cdev_ioctl (struct inode *inode, struct file *file, unsigned int cmd,
static int i2cdev_open(struct inode *inode, struct file *file)
{
- unsigned int minor = minor(inode->i_rdev);
+ unsigned int minor = iminor(inode);
struct i2c_client *client;
struct i2c_adapter *adap;
struct i2c_dev *i2c_dev;
diff --git a/drivers/ide/ide-io.c b/drivers/ide/ide-io.c
index 33cc048eb328..2b94c9450336 100644
--- a/drivers/ide/ide-io.c
+++ b/drivers/ide/ide-io.c
@@ -54,8 +54,6 @@
#include <asm/io.h>
#include <asm/bitops.h>
-#include "ide_modes.h"
-
#if (DISK_RECOVERY_TIME > 0)
#error So the User Has To Fix the Compilation And Stop Hacking Port 0x43. Does anyone ever use this anyway ??
diff --git a/drivers/ide/ide-lib.c b/drivers/ide/ide-lib.c
index 75ed2fc094a7..f670de4e8e8e 100644
--- a/drivers/ide/ide-lib.c
+++ b/drivers/ide/ide-lib.c
@@ -22,8 +22,6 @@
#include <asm/io.h>
#include <asm/bitops.h>
-#include "ide_modes.h"
-
/*
* IDE library routines. These are plug in code that most
* drivers can use but occasionally may be weird enough
@@ -170,7 +168,7 @@ u8 ide_rate_filter (u8 mode, u8 speed)
BUG();
return min(speed, speed_max[mode]);
#else /* !CONFIG_BLK_DEV_IDEDMA */
- return min(speed, XFER_PIO_4);
+ return min(speed, (u8)XFER_PIO_4);
#endif /* CONFIG_BLK_DEV_IDEDMA */
}
@@ -188,6 +186,12 @@ int ide_dma_enable (ide_drive_t *drive)
EXPORT_SYMBOL(ide_dma_enable);
+/*
+ * Standard (generic) timings for PIO modes, from ATA2 specification.
+ * These timings are for access to the IDE data port register *only*.
+ * Some drives may specify a mode, while also specifying a different
+ * value for cycle_time (from drive identification data).
+ */
const ide_pio_timings_t ide_pio_timings[6] = {
{ 70, 165, 600 }, /* PIO Mode 0 */
{ 50, 125, 383 }, /* PIO Mode 1 */
@@ -200,6 +204,13 @@ const ide_pio_timings_t ide_pio_timings[6] = {
EXPORT_SYMBOL_GPL(ide_pio_timings);
/*
+ * Shared data/functions for determining best PIO mode for an IDE drive.
+ * Most of this stuff originally lived in cmd640.c, and changes to the
+ * ide_pio_blacklist[] table should be made with EXTREME CAUTION to avoid
+ * breaking the fragile cmd640.c support.
+ */
+
+/*
* Black list. Some drives incorrectly report their maximal PIO mode,
* at least in respect to CMD640. Here we keep info on some known drives.
*/
diff --git a/drivers/ide/ide-probe.c b/drivers/ide/ide-probe.c
index e95cf073e345..f0c5cc5b5685 100644
--- a/drivers/ide/ide-probe.c
+++ b/drivers/ide/ide-probe.c
@@ -649,10 +649,13 @@ static void hwif_register (ide_hwif_t *hwif)
/* register with global device tree */
strlcpy(hwif->gendev.bus_id,hwif->name,BUS_ID_SIZE);
hwif->gendev.driver_data = hwif;
- if (hwif->pci_dev)
- hwif->gendev.parent = &hwif->pci_dev->dev;
- else
- hwif->gendev.parent = NULL; /* Would like to do = &device_legacy */
+ if (hwif->gendev.parent == NULL) {
+ if (hwif->pci_dev)
+ hwif->gendev.parent = &hwif->pci_dev->dev;
+ else
+ /* Would like to do = &device_legacy */
+ hwif->gendev.parent = NULL;
+ }
device_register(&hwif->gendev);
}
@@ -770,8 +773,7 @@ void probe_hwif (ide_hwif_t *hwif)
*/
for (unit = 0; unit < MAX_DRIVES; ++unit) {
ide_drive_t *drive = &hwif->drives[unit];
- drive->dn = ((hwif->channel ? 2 : 0) + unit);
- hwif->drives[unit].dn = ((hwif->channel ? 2 : 0) + unit);
+ drive->dn = (hwif->channel ? 2 : 0) + unit;
(void) probe_for_drive(drive);
if (drive->present && !hwif->present) {
hwif->present = 1;
@@ -945,15 +947,10 @@ static int ide_init_queue(ide_drive_t *drive)
if (drive->disk)
drive->disk->queue = drive->queue;
- return 0;
-}
-
-/*
- * Setup the drive for request handling.
- */
-static void ide_init_drive(ide_drive_t *drive)
-{
+ /* needs drive->queue to be set */
ide_toggle_bounce(drive, 1);
+
+ return 0;
}
/*
@@ -1068,10 +1065,9 @@ static int init_irq (ide_hwif_t *hwif)
}
/*
- * Link any new drives into the hwgroup, allocate
- * the block device queue and initialize the drive.
- * Note that ide_init_drive sends commands to the new
- * drive.
+ * For any present drive:
+ * - allocate the block device queue
+ * - link drive into the hwgroup
*/
for (index = 0; index < MAX_DRIVES; ++index) {
ide_drive_t *drive = &hwif->drives[index];
@@ -1092,7 +1088,6 @@ static int init_irq (ide_hwif_t *hwif)
hwgroup->drive->next = drive;
}
spin_unlock_irq(&ide_lock);
- ide_init_drive(drive);
}
#if !defined(__mc68000__) && !defined(CONFIG_APUS) && !defined(__sparc__)
@@ -1303,31 +1298,6 @@ out:
EXPORT_SYMBOL(hwif_init);
-int export_ide_init_queue (ide_drive_t *drive)
-{
- if (ide_init_queue(drive))
- return 1;
-
- ide_init_drive(drive);
- return 0;
-}
-
-EXPORT_SYMBOL(export_ide_init_queue);
-
-u8 export_probe_for_drive (ide_drive_t *drive)
-{
- return probe_for_drive(drive);
-}
-
-EXPORT_SYMBOL(export_probe_for_drive);
-
-int ideprobe_init (void);
-static ide_module_t ideprobe_module = {
- IDE_PROBE_MODULE,
- ideprobe_init,
- NULL
-};
-
int ideprobe_init (void)
{
unsigned int index;
@@ -1359,7 +1329,7 @@ int ideprobe_init (void)
}
}
if (!ide_probe)
- ide_probe = &ideprobe_module;
+ ide_probe = &ideprobe_init;
MOD_DEC_USE_COUNT;
return 0;
}
diff --git a/drivers/ide/ide-tape.c b/drivers/ide/ide-tape.c
index 6434e5878ef0..e2bdaa457727 100644
--- a/drivers/ide/ide-tape.c
+++ b/drivers/ide/ide-tape.c
@@ -4922,7 +4922,7 @@ static ssize_t idetape_chrdev_write (struct file *file, const char *buf,
struct inode *inode = file->f_dentry->d_inode;
ide_drive_t *drive = file->private_data;
idetape_tape_t *tape = drive->driver_data;
- unsigned int minor = minor(inode->i_rdev);
+ unsigned int minor = iminor(inode);
ssize_t retval, actually_written = 0;
int position;
@@ -5568,7 +5568,7 @@ ok:
*/
static int idetape_chrdev_open (struct inode *inode, struct file *filp)
{
- unsigned int minor = minor(inode->i_rdev), i = minor & ~0xc0;
+ unsigned int minor = iminor(inode), i = minor & ~0xc0;
ide_drive_t *drive;
idetape_tape_t *tape;
idetape_pc_t pc;
@@ -5649,7 +5649,7 @@ static int idetape_chrdev_release (struct inode *inode, struct file *filp)
ide_drive_t *drive = filp->private_data;
idetape_tape_t *tape;
idetape_pc_t pc;
- unsigned int minor = minor(inode->i_rdev);
+ unsigned int minor = iminor(inode);
lock_kernel();
tape = drive->driver_data;
diff --git a/drivers/ide/ide.c b/drivers/ide/ide.c
index dd0ad3ff074c..465867ad54a5 100644
--- a/drivers/ide/ide.c
+++ b/drivers/ide/ide.c
@@ -161,8 +161,6 @@
#include <asm/io.h>
#include <asm/bitops.h>
-#include "ide_modes.h"
-
/* default maximum number of failures */
#define IDE_DEFAULT_MAX_FAILURES 1
@@ -180,7 +178,9 @@ static int initializing; /* set while initializing built-in drivers */
DECLARE_MUTEX(ide_cfg_sem);
spinlock_t ide_lock __cacheline_aligned_in_smp = SPIN_LOCK_UNLOCKED;
+#ifdef CONFIG_BLK_DEV_IDEPCI
static int ide_scan_direction; /* THIS was formerly 2.2.x pci=reverse */
+#endif
#ifdef CONFIG_IDEDMA_AUTO
int noautodma = 0;
@@ -190,11 +190,7 @@ int noautodma = 1;
EXPORT_SYMBOL(noautodma);
-/*
- * ide_modules keeps track of the available IDE chipset/probe/driver modules.
- */
-ide_module_t *ide_chipsets;
-ide_module_t *ide_probe;
+int (*ide_probe)(void);
/*
* This is declared extern in ide.h, for access by other IDE modules:
@@ -452,7 +448,7 @@ void ide_probe_module (void)
(void) request_module("ide-probe-mod");
#endif /* (CONFIG_KMOD) && (CONFIG_BLK_DEV_IDE_MODULE) */
} else {
- (void) ide_probe->init();
+ (void)ide_probe();
}
}
@@ -1046,21 +1042,6 @@ found:
EXPORT_SYMBOL(ide_register_hw);
/*
- * Compatibility function with existing drivers. If you want
- * something different, use the function above.
- */
-int ide_register (int arg1, int arg2, int irq)
-{
- hw_regs_t hw;
- ide_init_hwif_ports(&hw, (unsigned long) arg1, (unsigned long) arg2, NULL);
- hw.irq = irq;
- return ide_register_hw(&hw, NULL);
-}
-
-EXPORT_SYMBOL(ide_register);
-
-
-/*
* Locks for IDE setting functionality
*/
@@ -1658,11 +1639,15 @@ int generic_ide_ioctl(struct block_device *bdev, unsigned int cmd,
case HDIO_SCAN_HWIF:
{
+ hw_regs_t hw;
int args[3];
if (!capable(CAP_SYS_RAWIO)) return -EACCES;
if (copy_from_user(args, (void *)arg, 3 * sizeof(int)))
return -EFAULT;
- if (ide_register(args[0], args[1], args[2]) == -1)
+ ide_init_hwif_ports(&hw, (unsigned long) args[0],
+ (unsigned long) args[1], NULL);
+ hw.irq = args[2];
+ if (ide_register_hw(&hw, NULL) == -1)
return -EIO;
return 0;
}
diff --git a/drivers/ide/ide_modes.h b/drivers/ide/ide_modes.h
deleted file mode 100644
index ce7c036cc5c9..000000000000
--- a/drivers/ide/ide_modes.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * linux/drivers/ide/ide_modes.h
- *
- * Copyright (C) 1996 Linus Torvalds, Igor Abramov, and Mark Lord
- */
-
-#ifndef _IDE_MODES_H
-#define _IDE_MODES_H
-
-#include <linux/config.h>
-
-/*
- * Shared data/functions for determining best PIO mode for an IDE drive.
- * Most of this stuff originally lived in cmd640.c, and changes to the
- * ide_pio_blacklist[] table should be made with EXTREME CAUTION to avoid
- * breaking the fragile cmd640.c support.
- */
-
-/*
- * Standard (generic) timings for PIO modes, from ATA2 specification.
- * These timings are for access to the IDE data port register *only*.
- * Some drives may specify a mode, while also specifying a different
- * value for cycle_time (from drive identification data).
- */
-typedef struct ide_pio_timings_s {
- int setup_time; /* Address setup (ns) minimum */
- int active_time; /* Active pulse (ns) minimum */
- int cycle_time; /* Cycle time (ns) minimum = (setup + active + recovery) */
-} ide_pio_timings_t;
-
-typedef struct ide_pio_data_s {
- u8 pio_mode;
- u8 use_iordy;
- u8 overridden;
- u8 blacklisted;
- unsigned int cycle_time;
-} ide_pio_data_t;
-
-u8 ide_get_best_pio_mode (ide_drive_t *drive, u8 mode_wanted, u8 max_mode, ide_pio_data_t *d);
-extern const ide_pio_timings_t ide_pio_timings[6];
-#endif /* _IDE_MODES_H */
diff --git a/drivers/ide/legacy/ali14xx.c b/drivers/ide/legacy/ali14xx.c
index c9bcf4105325..55c3a2954686 100644
--- a/drivers/ide/legacy/ali14xx.c
+++ b/drivers/ide/legacy/ali14xx.c
@@ -54,8 +54,6 @@
#include <asm/io.h>
-#include "ide_modes.h"
-
/* port addresses for auto-detection */
#define ALI_NUM_PORTS 4
static int ports[ALI_NUM_PORTS] __initdata = {0x074, 0x0f4, 0x034, 0x0e4};
diff --git a/drivers/ide/legacy/dtc2278.c b/drivers/ide/legacy/dtc2278.c
index ad4c604b9f1a..0f87da816ab5 100644
--- a/drivers/ide/legacy/dtc2278.c
+++ b/drivers/ide/legacy/dtc2278.c
@@ -21,8 +21,6 @@
#include <asm/io.h>
-#include "ide_modes.h"
-
/*
* Changing this #undef to #define may solve start up problems in some systems.
*/
diff --git a/drivers/ide/legacy/ht6560b.c b/drivers/ide/legacy/ht6560b.c
index 157040b3e90b..412c221d8bfe 100644
--- a/drivers/ide/legacy/ht6560b.c
+++ b/drivers/ide/legacy/ht6560b.c
@@ -53,8 +53,6 @@
#include <asm/io.h>
-#include "ide_modes.h"
-
/* #define DEBUG */ /* remove comments for DEBUG messages */
/*
diff --git a/drivers/ide/legacy/macide.c b/drivers/ide/legacy/macide.c
index ee2d59679e77..bec3549cddc4 100644
--- a/drivers/ide/legacy/macide.c
+++ b/drivers/ide/legacy/macide.c
@@ -126,7 +126,7 @@ void macide_init(void)
/* probing the drive which freezes a 190. */
ide_drive_t *drive = &ide_hwifs[index].drives[0];
- drive->capacity = drive->cyl*drive->head*drive->sect;
+ drive->capacity64 = drive->cyl*drive->head*drive->sect;
#ifdef CONFIG_BLK_DEV_MAC_MEDIABAY
request_irq(IRQ_BABOON_2, macide_mediabay_interrupt,
diff --git a/drivers/ide/legacy/qd65xx.c b/drivers/ide/legacy/qd65xx.c
index cdbbd71b651d..1881dd18af8a 100644
--- a/drivers/ide/legacy/qd65xx.c
+++ b/drivers/ide/legacy/qd65xx.c
@@ -42,7 +42,6 @@
#include <asm/system.h>
#include <asm/io.h>
-#include "ide_modes.h"
#include "qd65xx.h"
/*
diff --git a/drivers/ide/legacy/umc8672.c b/drivers/ide/legacy/umc8672.c
index 43dfad8a209d..64fee6a1c919 100644
--- a/drivers/ide/legacy/umc8672.c
+++ b/drivers/ide/legacy/umc8672.c
@@ -54,8 +54,6 @@
#include <asm/io.h>
-#include "ide_modes.h"
-
/*
* Default speeds. These can be changed with "auto-tune" and/or hdparm.
*/
diff --git a/drivers/ide/pci/aec62xx.c b/drivers/ide/pci/aec62xx.c
index c45d070125c6..9b67e7897fc4 100644
--- a/drivers/ide/pci/aec62xx.c
+++ b/drivers/ide/pci/aec62xx.c
@@ -16,7 +16,6 @@
#include <asm/io.h>
-#include "ide_modes.h"
#include "aec62xx.h"
#if defined(DISPLAY_AEC62XX_TIMINGS) && defined(CONFIG_PROC_FS)
diff --git a/drivers/ide/pci/alim15x3.c b/drivers/ide/pci/alim15x3.c
index 34c9d38b2142..7c75d4301f86 100644
--- a/drivers/ide/pci/alim15x3.c
+++ b/drivers/ide/pci/alim15x3.c
@@ -37,7 +37,6 @@
#include <asm/io.h>
-#include "ide_modes.h"
#include "alim15x3.h"
/*
diff --git a/drivers/ide/pci/cmd640.c b/drivers/ide/pci/cmd640.c
index d1273b51be1f..bfba1336126f 100644
--- a/drivers/ide/pci/cmd640.c
+++ b/drivers/ide/pci/cmd640.c
@@ -115,8 +115,6 @@
#include <asm/io.h>
-#include "ide_modes.h"
-
/*
* This flag is set in ide.c by the parameter: ide0=cmd640_vlb
*/
diff --git a/drivers/ide/pci/cmd64x.c b/drivers/ide/pci/cmd64x.c
index b15292030db5..e5712c8303d7 100644
--- a/drivers/ide/pci/cmd64x.c
+++ b/drivers/ide/pci/cmd64x.c
@@ -25,7 +25,6 @@
#include <asm/io.h>
-#include "ide_modes.h"
#include "cmd64x.h"
#if defined(DISPLAY_CMD64X_TIMINGS) && defined(CONFIG_PROC_FS)
diff --git a/drivers/ide/pci/cs5520.c b/drivers/ide/pci/cs5520.c
index 83a5bf8d65c6..6d6313e8ae49 100644
--- a/drivers/ide/pci/cs5520.c
+++ b/drivers/ide/pci/cs5520.c
@@ -51,7 +51,6 @@
#include <asm/io.h>
#include <asm/irq.h>
-#include "ide_modes.h"
#include "cs5520.h"
#if defined(DISPLAY_CS5520_TIMINGS) && defined(CONFIG_PROC_FS)
diff --git a/drivers/ide/pci/cs5530.c b/drivers/ide/pci/cs5530.c
index 61d4e8a9cc4a..027bd89b57b2 100644
--- a/drivers/ide/pci/cs5530.c
+++ b/drivers/ide/pci/cs5530.c
@@ -31,7 +31,6 @@
#include <asm/io.h>
#include <asm/irq.h>
-#include "ide_modes.h"
#include "cs5530.h"
#if defined(DISPLAY_CS5530_TIMINGS) && defined(CONFIG_PROC_FS)
diff --git a/drivers/ide/pci/cy82c693.c b/drivers/ide/pci/cy82c693.c
index 4ff56586e366..eeb125aa11fe 100644
--- a/drivers/ide/pci/cy82c693.c
+++ b/drivers/ide/pci/cy82c693.c
@@ -54,7 +54,6 @@
#include <asm/io.h>
-#include "ide_modes.h"
#include "cy82c693.h"
/*
@@ -113,7 +112,7 @@ static void compute_clocks (u8 pio, pio_clocks_t *p_pclk)
/* note: we use the same values for 16bit IOR and IOW
* those are all the same, since I don't have other
- * timings than those from ide_modes.h
+ * timings than those from ide-lib.c
*/
p_pclk->time_16r = (u8)clk1;
diff --git a/drivers/ide/pci/hpt34x.c b/drivers/ide/pci/hpt34x.c
index 76a3181da6b0..6e17ca6e10e2 100644
--- a/drivers/ide/pci/hpt34x.c
+++ b/drivers/ide/pci/hpt34x.c
@@ -42,7 +42,6 @@
#include <asm/io.h>
#include <asm/irq.h>
-#include "ide_modes.h"
#include "hpt34x.h"
#if defined(DISPLAY_HPT34X_TIMINGS) && defined(CONFIG_PROC_FS)
diff --git a/drivers/ide/pci/hpt366.c b/drivers/ide/pci/hpt366.c
index ecbb7a9f6299..6d36d39192dc 100644
--- a/drivers/ide/pci/hpt366.c
+++ b/drivers/ide/pci/hpt366.c
@@ -62,7 +62,6 @@
#include <asm/io.h>
#include <asm/irq.h>
-#include "ide_modes.h"
#include "hpt366.h"
#if defined(DISPLAY_HPT366_TIMINGS) && defined(CONFIG_PROC_FS)
@@ -989,7 +988,40 @@ static void __init init_hwif_hpt366 (ide_hwif_t *hwif)
hwif->intrproc = &hpt3xx_intrproc;
hwif->maskproc = &hpt3xx_maskproc;
- pci_read_config_byte(hwif->pci_dev, 0x5a, &ata66);
+ /*
+ * The HPT37x uses the CBLID pins as outputs for MA15/MA16
+ * address lines to access an external eeprom. To read valid
+ * cable detect state the pins must be enabled as inputs.
+ */
+ if (hpt_minimum_revision(dev, 8) && PCI_FUNC(dev->devfn) & 1) {
+ /*
+ * HPT374 PCI function 1
+ * - set bit 15 of reg 0x52 to enable TCBLID as input
+ * - set bit 15 of reg 0x56 to enable FCBLID as input
+ */
+ u16 mcr3, mcr6;
+ pci_read_config_word(dev, 0x52, &mcr3);
+ pci_read_config_word(dev, 0x56, &mcr6);
+ pci_write_config_word(dev, 0x52, mcr3 | 0x8000);
+ pci_write_config_word(dev, 0x56, mcr6 | 0x8000);
+ /* now read cable id register */
+ pci_read_config_byte(dev, 0x5a, &ata66);
+ pci_write_config_word(dev, 0x52, mcr3);
+ pci_write_config_word(dev, 0x56, mcr6);
+ } else if (hpt_minimum_revision(dev, 3)) {
+ /*
+ * HPT370/372 and 374 pcifn 0
+ * - clear bit 0 of 0x5b to enable P/SCBLID as inputs
+ */
+ u8 scr2;
+ pci_read_config_byte(dev, 0x5b, &scr2);
+ pci_write_config_byte(dev, 0x5b, scr2 & ~1);
+ /* now read cable id register */
+ pci_read_config_byte(dev, 0x5a, &ata66);
+ pci_write_config_byte(dev, 0x5b, scr2);
+ } else {
+ pci_read_config_byte(dev, 0x5a, &ata66);
+ }
#ifdef DEBUG
printk("HPT366: reg5ah=0x%02x ATA-%s Cable Port%d\n",
diff --git a/drivers/ide/pci/it8172.c b/drivers/ide/pci/it8172.c
index 5500c3fb0d0e..131952949d0e 100644
--- a/drivers/ide/pci/it8172.c
+++ b/drivers/ide/pci/it8172.c
@@ -42,7 +42,6 @@
#include <asm/io.h>
#include <asm/it8172/it8172_int.h>
-#include "ide_modes.h"
#include "it8172.h"
/*
diff --git a/drivers/ide/pci/opti621.c b/drivers/ide/pci/opti621.c
index 5c069045f988..ffed20f7fccd 100644
--- a/drivers/ide/pci/opti621.c
+++ b/drivers/ide/pci/opti621.c
@@ -104,7 +104,6 @@
#include <asm/io.h>
-#include "ide_modes.h"
#include "opti621.h"
#define OPTI621_MAX_PIO 3
diff --git a/drivers/ide/pci/pdc202xx_new.c b/drivers/ide/pci/pdc202xx_new.c
index bc494871ad30..0eadfc0b6a92 100644
--- a/drivers/ide/pci/pdc202xx_new.c
+++ b/drivers/ide/pci/pdc202xx_new.c
@@ -32,7 +32,6 @@
#include <asm/io.h>
#include <asm/irq.h>
-#include "ide_modes.h"
#include "pdc202xx_new.h"
#define PDC202_DEBUG_CABLE 0
diff --git a/drivers/ide/pci/pdc202xx_old.c b/drivers/ide/pci/pdc202xx_old.c
index a11f49627151..4bcd3bb1a1f5 100644
--- a/drivers/ide/pci/pdc202xx_old.c
+++ b/drivers/ide/pci/pdc202xx_old.c
@@ -46,7 +46,6 @@
#include <asm/io.h>
#include <asm/irq.h>
-#include "ide_modes.h"
#include "pdc202xx_old.h"
#define PDC202_DEBUG_CABLE 0
diff --git a/drivers/ide/pci/pdcadma.c b/drivers/ide/pci/pdcadma.c
index 4976072a5f03..2980800c17ef 100644
--- a/drivers/ide/pci/pdcadma.c
+++ b/drivers/ide/pci/pdcadma.c
@@ -24,7 +24,6 @@
#include <asm/io.h>
#include <asm/irq.h>
-#include "ide_modes.h"
#include "pdcadma.h"
#if defined(DISPLAY_PDCADMA_TIMINGS) && defined(CONFIG_PROC_FS)
diff --git a/drivers/ide/pci/piix.c b/drivers/ide/pci/piix.c
index 794eea412bf0..d22b7a5cd212 100644
--- a/drivers/ide/pci/piix.c
+++ b/drivers/ide/pci/piix.c
@@ -103,7 +103,6 @@
#include <asm/io.h>
-#include "ide_modes.h"
#include "piix.h"
static int no_piix_dma;
diff --git a/drivers/ide/pci/sc1200.c b/drivers/ide/pci/sc1200.c
index 7ac27da660ea..3cd0d0d3da88 100644
--- a/drivers/ide/pci/sc1200.c
+++ b/drivers/ide/pci/sc1200.c
@@ -29,7 +29,6 @@
#include <asm/io.h>
#include <asm/irq.h>
-#include "ide_modes.h"
#include "sc1200.h"
#define SC1200_REV_A 0x00
diff --git a/drivers/ide/pci/serverworks.c b/drivers/ide/pci/serverworks.c
index 6494cdabaa1c..513a0c5651d0 100644
--- a/drivers/ide/pci/serverworks.c
+++ b/drivers/ide/pci/serverworks.c
@@ -39,7 +39,6 @@
#include <asm/io.h>
-#include "ide_modes.h"
#include "serverworks.h"
static u8 svwks_revision = 0;
diff --git a/drivers/ide/pci/siimage.c b/drivers/ide/pci/siimage.c
index 774032d1744f..49940bf4bd94 100644
--- a/drivers/ide/pci/siimage.c
+++ b/drivers/ide/pci/siimage.c
@@ -15,7 +15,6 @@
#include <asm/io.h>
-#include "ide_modes.h"
#include "siimage.h"
#if defined(DISPLAY_SIIMAGE_TIMINGS) && defined(CONFIG_PROC_FS)
diff --git a/drivers/ide/pci/sis5513.c b/drivers/ide/pci/sis5513.c
index c4112d9df072..cd6313e13d12 100644
--- a/drivers/ide/pci/sis5513.c
+++ b/drivers/ide/pci/sis5513.c
@@ -63,7 +63,6 @@
#include <asm/irq.h>
#include "ide-timing.h"
-#include "ide_modes.h"
#include "sis5513.h"
/* registers layout and init values are chipset family dependant */
diff --git a/drivers/ide/pci/sl82c105.c b/drivers/ide/pci/sl82c105.c
index e6cec5892083..4c060b926432 100644
--- a/drivers/ide/pci/sl82c105.c
+++ b/drivers/ide/pci/sl82c105.c
@@ -29,7 +29,6 @@
#include <asm/io.h>
#include <asm/dma.h>
-#include "ide_modes.h"
#include "sl82c105.h"
#undef DEBUG
diff --git a/drivers/ide/pci/slc90e66.c b/drivers/ide/pci/slc90e66.c
index 68c91116a849..f4be2bac9934 100644
--- a/drivers/ide/pci/slc90e66.c
+++ b/drivers/ide/pci/slc90e66.c
@@ -21,7 +21,6 @@
#include <asm/io.h>
-#include "ide_modes.h"
#include "slc90e66.h"
#if defined(DISPLAY_SLC90E66_TIMINGS) && defined(CONFIG_PROC_FS)
diff --git a/drivers/ide/pci/triflex.c b/drivers/ide/pci/triflex.c
index b71af07f3755..cbb1b6afff41 100644
--- a/drivers/ide/pci/triflex.c
+++ b/drivers/ide/pci/triflex.c
@@ -41,7 +41,6 @@
#include <linux/ide.h>
#include <linux/init.h>
-#include "ide_modes.h"
#include "triflex.h"
static struct pci_dev *triflex_dev;
diff --git a/drivers/ide/ppc/mpc8xx.c b/drivers/ide/ppc/mpc8xx.c
index f1e8ad6af336..b80c6135ae93 100644
--- a/drivers/ide/ppc/mpc8xx.c
+++ b/drivers/ide/ppc/mpc8xx.c
@@ -42,7 +42,6 @@
#include <asm/machdep.h>
#include <asm/irq.h>
-#include "ide_modes.h"
static int identify (volatile u8 *p);
static void print_fixed (volatile u8 *p);
static void print_funcid (int func);
diff --git a/drivers/ide/ppc/pmac.c b/drivers/ide/ppc/pmac.c
index e24c7fee9bc8..4dc1b6a2811a 100644
--- a/drivers/ide/ppc/pmac.c
+++ b/drivers/ide/ppc/pmac.c
@@ -42,7 +42,6 @@
#include <linux/adb.h>
#include <linux/pmu.h>
#endif
-#include "ide_modes.h"
extern void ide_do_request(ide_hwgroup_t *hwgroup, int masked_irq);
@@ -942,7 +941,7 @@ pmac_ide_build_sglist(ide_drive_t *drive, struct request *rq)
if (hwif->sg_dma_active)
BUG();
- nents = blk_rq_map_sg(&drive->queue, rq, sg);
+ nents = blk_rq_map_sg(drive->queue, rq, sg);
if (rq_data_dir(rq) == READ)
pmif->sg_dma_direction = PCI_DMA_FROMDEVICE;
diff --git a/drivers/ieee1394/ieee1394_core.c b/drivers/ieee1394/ieee1394_core.c
index 6aa18e0bcd4b..1f2ddaed055f 100644
--- a/drivers/ieee1394/ieee1394_core.c
+++ b/drivers/ieee1394/ieee1394_core.c
@@ -1124,7 +1124,7 @@ static int ieee1394_dispatch_open(struct inode *inode, struct file *file)
to get the index of the ieee1394_driver
we want */
- blocknum = (minor(inode->i_rdev) >> 4) & 0xF;
+ blocknum = (iminor(inode) >> 4) & 0xF;
/* look up the driver */
diff --git a/drivers/ieee1394/ieee1394_core.h b/drivers/ieee1394/ieee1394_core.h
index 2e496d3331aa..e63fc695b26f 100644
--- a/drivers/ieee1394/ieee1394_core.h
+++ b/drivers/ieee1394/ieee1394_core.h
@@ -202,7 +202,7 @@ void hpsb_packet_received(struct hpsb_host *host, quadlet_t *data, size_t size,
/* return the index (within a minor number block) of a file */
static inline unsigned char ieee1394_file_to_instance(struct file *file)
{
- unsigned char minor = minor(file->f_dentry->d_inode->i_rdev);
+ unsigned char minor = iminor(file->f_dentry->d_inode);
/* return lower 4 bits */
return minor & 0xF;
diff --git a/drivers/ieee1394/pcilynx.c b/drivers/ieee1394/pcilynx.c
index 06f721ac7627..449f5610cadc 100644
--- a/drivers/ieee1394/pcilynx.c
+++ b/drivers/ieee1394/pcilynx.c
@@ -875,7 +875,7 @@ static void aux_setup_pcls(struct ti_lynx *lynx)
static int mem_open(struct inode *inode, struct file *file)
{
- int cid = minor(inode->i_rdev);
+ int cid = iminor(inode);
enum { t_rom, t_aux, t_ram } type;
struct memdata *md;
diff --git a/drivers/input/evdev.c b/drivers/input/evdev.c
index ab5f8fef58b7..6dbf60eac724 100644
--- a/drivers/input/evdev.c
+++ b/drivers/input/evdev.c
@@ -122,7 +122,7 @@ static int evdev_release(struct inode * inode, struct file * file)
static int evdev_open(struct inode * inode, struct file * file)
{
struct evdev_list *list;
- int i = minor(inode->i_rdev) - EVDEV_MINOR_BASE;
+ int i = iminor(inode) - EVDEV_MINOR_BASE;
int accept_err;
if (i >= EVDEV_MINORS || !evdev_table[i])
diff --git a/drivers/input/input.c b/drivers/input/input.c
index fb307a765ded..5cee24bf4383 100644
--- a/drivers/input/input.c
+++ b/drivers/input/input.c
@@ -527,7 +527,7 @@ void input_unregister_handler(struct input_handler *handler)
static int input_open_file(struct inode *inode, struct file *file)
{
- struct input_handler *handler = input_table[minor(inode->i_rdev) >> 5];
+ struct input_handler *handler = input_table[iminor(inode) >> 5];
struct file_operations *old_fops, *new_fops = NULL;
int err;
diff --git a/drivers/input/joydev.c b/drivers/input/joydev.c
index 2f80d8222820..5a0bf404f758 100644
--- a/drivers/input/joydev.c
+++ b/drivers/input/joydev.c
@@ -170,7 +170,7 @@ static int joydev_release(struct inode * inode, struct file * file)
static int joydev_open(struct inode *inode, struct file *file)
{
struct joydev_list *list;
- int i = minor(inode->i_rdev) - JOYDEV_MINOR_BASE;
+ int i = iminor(inode) - JOYDEV_MINOR_BASE;
if (i >= JOYDEV_MINORS || !joydev_table[i])
return -ENODEV;
diff --git a/drivers/input/mousedev.c b/drivers/input/mousedev.c
index e2fe3e3347c5..11aec91ce558 100644
--- a/drivers/input/mousedev.c
+++ b/drivers/input/mousedev.c
@@ -228,11 +228,11 @@ static int mousedev_open(struct inode * inode, struct file * file)
int i;
#ifdef CONFIG_INPUT_MOUSEDEV_PSAUX
- if (major(inode->i_rdev) == MISC_MAJOR)
+ if (imajor(inode) == MISC_MAJOR)
i = MOUSEDEV_MIX;
else
#endif
- i = minor(inode->i_rdev) - MOUSEDEV_MINOR_BASE;
+ i = iminor(inode) - MOUSEDEV_MINOR_BASE;
if (i >= MOUSEDEV_MINORS || !mousedev_table[i])
return -ENODEV;
diff --git a/drivers/input/tsdev.c b/drivers/input/tsdev.c
index 99a567c7d522..d2362bbf6615 100644
--- a/drivers/input/tsdev.c
+++ b/drivers/input/tsdev.c
@@ -96,7 +96,7 @@ static int tsdev_fasync(int fd, struct file *file, int on)
static int tsdev_open(struct inode *inode, struct file *file)
{
- int i = minor(inode->i_rdev) - TSDEV_MINOR_BASE;
+ int i = iminor(inode) - TSDEV_MINOR_BASE;
struct tsdev_list *list;
if (i >= TSDEV_MINORS || !tsdev_table[i])
diff --git a/drivers/isdn/capi/capi.c b/drivers/isdn/capi/capi.c
index 6599c4c7078e..2bf1a17b6c0f 100644
--- a/drivers/isdn/capi/capi.c
+++ b/drivers/isdn/capi/capi.c
@@ -964,7 +964,7 @@ static int capinc_tty_open(struct tty_struct * tty, struct file * file)
{
struct capiminor *mp;
- if ((mp = capiminor_find(minor(file->f_dentry->d_inode->i_rdev))) == 0)
+ if ((mp = capiminor_find(iminor(file->f_dentry->d_inode))) == 0)
return -ENXIO;
if (mp->nccip == 0)
return -ENXIO;
diff --git a/drivers/isdn/hardware/eicon/divasi.c b/drivers/isdn/hardware/eicon/divasi.c
index cae5a2e2e231..6572ab938b27 100644
--- a/drivers/isdn/hardware/eicon/divasi.c
+++ b/drivers/isdn/hardware/eicon/divasi.c
@@ -432,7 +432,7 @@ static int um_idi_open(struct inode *inode, struct file *file)
static int um_idi_release(struct inode *inode, struct file *file)
{
- unsigned int adapter_nr = minor(inode->i_rdev);
+ unsigned int adapter_nr = iminor(inode);
int ret = 0;
if (!(file->private_data)) {
diff --git a/drivers/isdn/i4l/isdn_common.c b/drivers/isdn/i4l/isdn_common.c
index d9c52b731b5b..08562d0329f1 100644
--- a/drivers/isdn/i4l/isdn_common.c
+++ b/drivers/isdn/i4l/isdn_common.c
@@ -1432,7 +1432,7 @@ static struct file_operations isdn_status_fops =
static int
isdn_ctrl_open(struct inode *ino, struct file *file)
{
- unsigned int minor = minor(ino->i_rdev);
+ unsigned int minor = iminor(ino);
struct isdn_slot *slot = get_slot_by_minor(minor - ISDN_MINOR_CTRL);
if (!slot)
@@ -1795,7 +1795,7 @@ static struct file_operations isdn_ctrl_fops =
static int
isdn_open(struct inode * inode, struct file * file)
{
- int minor = minor(inode->i_rdev);
+ int minor = iminor(inode);
int err = -ENODEV;
struct file_operations *old_fops, *new_fops = NULL;
diff --git a/drivers/isdn/i4l/isdn_ppp.c b/drivers/isdn/i4l/isdn_ppp.c
index c688f580b27b..1a66c5723fec 100644
--- a/drivers/isdn/i4l/isdn_ppp.c
+++ b/drivers/isdn/i4l/isdn_ppp.c
@@ -119,7 +119,7 @@ static int
ipppd_open(struct inode *ino, struct file *file)
{
unsigned long flags;
- unsigned int minor = minor(ino->i_rdev) - ISDN_MINOR_PPP;
+ unsigned int minor = iminor(ino) - ISDN_MINOR_PPP;
struct ipppd *ipppd;
ipppd = kmalloc(sizeof(*ipppd), GFP_KERNEL);
diff --git a/drivers/macintosh/adb.c b/drivers/macintosh/adb.c
index cbbb09995340..438e05f462d5 100644
--- a/drivers/macintosh/adb.c
+++ b/drivers/macintosh/adb.c
@@ -712,7 +712,7 @@ static int adb_open(struct inode *inode, struct file *file)
{
struct adbdev_state *state;
- if (minor(inode->i_rdev) > 0 || adb_controller == NULL)
+ if (iminor(inode) > 0 || adb_controller == NULL)
return -ENXIO;
state = kmalloc(sizeof(struct adbdev_state), GFP_KERNEL);
if (state == 0)
diff --git a/drivers/md/md.c b/drivers/md/md.c
index c49e0d4216fb..b95a323cdf41 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -179,7 +179,6 @@ static void mddev_put(mddev_t *mddev)
mddev_map[mdidx(mddev)] = NULL;
blk_put_queue(mddev->queue);
kfree(mddev);
- MOD_DEC_USE_COUNT;
}
spin_unlock(&all_mddevs_lock);
}
@@ -201,7 +200,6 @@ static mddev_t * mddev_find(int unit)
mddev_map[unit] = new;
list_add(&new->all_mddevs, &all_mddevs);
spin_unlock(&all_mddevs_lock);
- MOD_INC_USE_COUNT;
return new;
}
spin_unlock(&all_mddevs_lock);
@@ -640,14 +638,13 @@ static void super_90_sync(mddev_t *mddev, mdk_rdev_t *rdev)
/* make rdev->sb match mddev data..
*
* 1/ zero out disks
- * 2/ Add info for each disk, keeping track of highest desc_nr
- * 3/ any empty disks < highest become removed
+ * 2/ Add info for each disk, keeping track of highest desc_nr (next_spare);
+ * 3/ any empty disks < next_spare become removed
*
* disks[0] gets initialised to REMOVED because
* we cannot be sure from other fields if it has
* been initialised or not.
*/
- int highest = 0;
int i;
int active=0, working=0,failed=0,spare=0,nr_disks=0;
@@ -718,17 +715,17 @@ static void super_90_sync(mddev_t *mddev, mdk_rdev_t *rdev)
spare++;
working++;
}
- if (rdev2->desc_nr > highest)
- highest = rdev2->desc_nr;
}
- /* now set the "removed" bit on any non-trailing holes */
- for (i=0; i<highest; i++) {
+ /* now set the "removed" and "faulty" bits on any missing devices */
+ for (i=0 ; i < mddev->raid_disks ; i++) {
mdp_disk_t *d = &sb->disks[i];
if (d->state == 0 && d->number == 0) {
d->number = i;
d->raid_disk = i;
d->state = (1<<MD_DISK_REMOVED);
+ d->state |= (1<<MD_DISK_FAULTY);
+ failed++;
}
}
sb->nr_disks = nr_disks;
@@ -1612,12 +1609,6 @@ static int do_md_run(mddev_t * mddev)
spin_unlock(&pers_lock);
blk_queue_make_request(mddev->queue, mddev->pers->make_request);
- printk("%s: setting max_sectors to %d, segment boundary to %d\n",
- disk->disk_name,
- chunk_size >> 9,
- (chunk_size>>1)-1);
- blk_queue_max_sectors(mddev->queue, chunk_size >> 9);
- blk_queue_segment_boundary(mddev->queue, (chunk_size>>1) - 1);
mddev->queue->queuedata = mddev;
err = mddev->pers->run(mddev);
@@ -2366,17 +2357,14 @@ static int md_ioctl(struct inode *inode, struct file *file,
unsigned int cmd, unsigned long arg)
{
char b[BDEVNAME_SIZE];
- unsigned int minor;
+ unsigned int minor = iminor(inode);
int err = 0;
struct hd_geometry *loc = (struct hd_geometry *) arg;
mddev_t *mddev = NULL;
- kdev_t dev;
if (!capable(CAP_SYS_ADMIN))
return -EACCES;
- dev = inode->i_rdev;
- minor = minor(dev);
if (minor >= MAX_MD_DEVS) {
MD_BUG();
return -EINVAL;
@@ -2615,7 +2603,7 @@ static int md_open(struct inode *inode, struct file *file)
/*
* Succeed if we can find or allocate a mddev structure.
*/
- mddev_t *mddev = mddev_find(minor(inode->i_rdev));
+ mddev_t *mddev = mddev_find(iminor(inode));
int err = -ENOMEM;
if (!mddev)
@@ -3590,6 +3578,7 @@ static __exit void md_exit(void)
if (!disks[i])
continue;
mddev = disk->private_data;
+ export_array(mddev);
del_gendisk(disk);
put_disk(disk);
mddev_put(mddev);
diff --git a/drivers/md/raid0.c b/drivers/md/raid0.c
index 26b23d06e3d5..eb4368751307 100644
--- a/drivers/md/raid0.c
+++ b/drivers/md/raid0.c
@@ -231,6 +231,13 @@ static int raid0_run (mddev_t *mddev)
mdk_rdev_t *rdev;
struct list_head *tmp;
+ printk("md%d: setting max_sectors to %d, segment boundary to %d\n",
+ mdidx(mddev),
+ mddev->chunk_size >> 9,
+ (mddev->chunk_size>>1)-1);
+ blk_queue_max_sectors(mddev->queue, mddev->chunk_size >> 9);
+ blk_queue_segment_boundary(mddev->queue, (mddev->chunk_size>>1) - 1);
+
conf = kmalloc(sizeof (raid0_conf_t), GFP_KERNEL);
if (!conf)
goto out;
diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
index 5995ee02775e..67ec3d3c32b6 100644
--- a/drivers/md/raid5.c
+++ b/drivers/md/raid5.c
@@ -1326,7 +1326,7 @@ static int make_request (request_queue_t *q, struct bio * bi)
(unsigned long long)new_sector,
(unsigned long long)logical_sector);
- sh = get_active_stripe(conf, new_sector, pd_idx, 0/*(bi->bi_rw&RWA_MASK)*/);
+ sh = get_active_stripe(conf, new_sector, pd_idx, (bi->bi_rw&RWA_MASK));
if (sh) {
add_stripe_bio(sh, bi, dd_idx, (bi->bi_rw&RW_MASK));
@@ -1334,7 +1334,12 @@ static int make_request (request_queue_t *q, struct bio * bi)
raid5_plug_device(conf);
handle_stripe(sh);
release_stripe(sh);
+ } else {
+ /* cannot get stripe for read-ahead, just give-up */
+ clear_bit(BIO_UPTODATE, &bi->bi_flags);
+ break;
}
+
}
spin_lock_irq(&conf->device_lock);
if (--bi->bi_phys_segments == 0) {
diff --git a/drivers/md/xor.c b/drivers/md/xor.c
index d625c9034a92..e2103a8bb75a 100644
--- a/drivers/md/xor.c
+++ b/drivers/md/xor.c
@@ -134,7 +134,10 @@ calibrate_xor_block(void)
return 0;
}
+static __exit void xor_exit(void) { }
+
EXPORT_SYMBOL(xor_block);
MODULE_LICENSE("GPL");
module_init(calibrate_xor_block);
+module_exit(xor_exit);
diff --git a/drivers/media/common/saa7146_fops.c b/drivers/media/common/saa7146_fops.c
index 794e88ca609d..b3423b7e6c4d 100644
--- a/drivers/media/common/saa7146_fops.c
+++ b/drivers/media/common/saa7146_fops.c
@@ -157,7 +157,7 @@ void saa7146_buffer_timeout(unsigned long data)
static int fops_open(struct inode *inode, struct file *file)
{
- unsigned int minor = minor(inode->i_rdev);
+ unsigned int minor = iminor(inode);
struct saa7146_dev *h = NULL, *dev = NULL;
struct list_head *list;
struct saa7146_fh *fh = NULL;
diff --git a/drivers/media/dvb/dvb-core/dvbdev.c b/drivers/media/dvb/dvb-core/dvbdev.c
index cd97493d9c79..77ee97465c78 100644
--- a/drivers/media/dvb/dvb-core/dvbdev.c
+++ b/drivers/media/dvb/dvb-core/dvbdev.c
@@ -73,7 +73,7 @@ static int dvb_device_open(struct inode *inode, struct file *file)
{
struct dvb_device *dvbdev;
- dvbdev = dvbdev_find_device (minor(inode->i_rdev));
+ dvbdev = dvbdev_find_device (iminor(inode));
if (dvbdev && dvbdev->fops) {
int err = 0;
diff --git a/drivers/media/video/bttv-driver.c b/drivers/media/video/bttv-driver.c
index b670fe42d4b4..76f91782da48 100644
--- a/drivers/media/video/bttv-driver.c
+++ b/drivers/media/video/bttv-driver.c
@@ -2758,7 +2758,7 @@ static unsigned int bttv_poll(struct file *file, poll_table *wait)
static int bttv_open(struct inode *inode, struct file *file)
{
- int minor = minor(inode->i_rdev);
+ int minor = iminor(inode);
struct bttv *btv = NULL;
struct bttv_fh *fh;
enum v4l2_buf_type type = 0;
@@ -2894,7 +2894,7 @@ struct video_device bttv_vbi_template =
static int radio_open(struct inode *inode, struct file *file)
{
- int minor = minor(inode->i_rdev);
+ int minor = iminor(inode);
struct bttv *btv = NULL;
u32 v = 400*16;
unsigned int i;
diff --git a/drivers/media/video/saa7134/saa7134-oss.c b/drivers/media/video/saa7134/saa7134-oss.c
index f4b72611b09b..dedcc3485ff8 100644
--- a/drivers/media/video/saa7134/saa7134-oss.c
+++ b/drivers/media/video/saa7134/saa7134-oss.c
@@ -215,7 +215,7 @@ static int dsp_rec_stop(struct saa7134_dev *dev)
static int dsp_open(struct inode *inode, struct file *file)
{
- int minor = minor(inode->i_rdev);
+ int minor = iminor(inode);
struct saa7134_dev *h,*dev = NULL;
struct list_head *list;
int err;
@@ -598,7 +598,7 @@ mixer_level(struct saa7134_dev *dev, enum saa7134_audio_in src, int level)
static int mixer_open(struct inode *inode, struct file *file)
{
- int minor = minor(inode->i_rdev);
+ int minor = iminor(inode);
struct saa7134_dev *h,*dev = NULL;
struct list_head *list;
diff --git a/drivers/media/video/saa7134/saa7134-ts.c b/drivers/media/video/saa7134/saa7134-ts.c
index 3e2c49620066..79ab83904002 100644
--- a/drivers/media/video/saa7134/saa7134-ts.c
+++ b/drivers/media/video/saa7134/saa7134-ts.c
@@ -166,7 +166,7 @@ static struct videobuf_queue_ops ts_qops = {
static int ts_open(struct inode *inode, struct file *file)
{
- int minor = minor(inode->i_rdev);
+ int minor = iminor(inode);
struct saa7134_dev *h,*dev = NULL;
struct list_head *list;
int err;
diff --git a/drivers/media/video/saa7134/saa7134-video.c b/drivers/media/video/saa7134/saa7134-video.c
index b1ea74245c5b..da6aabf0e282 100644
--- a/drivers/media/video/saa7134/saa7134-video.c
+++ b/drivers/media/video/saa7134/saa7134-video.c
@@ -1131,7 +1131,7 @@ static int saa7134_resource(struct saa7134_fh *fh)
static int video_open(struct inode *inode, struct file *file)
{
- int minor = minor(inode->i_rdev);
+ int minor = iminor(inode);
struct saa7134_dev *h,*dev = NULL;
struct saa7134_fh *fh;
struct list_head *list;
diff --git a/drivers/media/video/stradis.c b/drivers/media/video/stradis.c
index 25747e02e5c4..c54a1db155c5 100644
--- a/drivers/media/video/stradis.c
+++ b/drivers/media/video/stradis.c
@@ -1946,7 +1946,7 @@ static ssize_t saa_write(struct file *file, const char *buf,
static int saa_open(struct inode *inode, struct file *file)
{
struct saa7146 *saa = NULL;
- unsigned int minor = minor(inode->i_rdev);
+ unsigned int minor = iminor(inode);
int i;
for (i = 0; i < SAA7146_MAX; i++) {
diff --git a/drivers/media/video/tvmixer.c b/drivers/media/video/tvmixer.c
index 05d9d6870319..cffcdfae3470 100644
--- a/drivers/media/video/tvmixer.c
+++ b/drivers/media/video/tvmixer.c
@@ -173,7 +173,7 @@ static int tvmixer_ioctl(struct inode *inode, struct file *file, unsigned int cm
static int tvmixer_open(struct inode *inode, struct file *file)
{
- int i, minor = minor(inode->i_rdev);
+ int i, minor = iminor(inode);
struct TVMIXER *mix = NULL;
struct i2c_client *client = NULL;
diff --git a/drivers/media/video/videodev.c b/drivers/media/video/videodev.c
index e28834d1590e..91a7970e9389 100644
--- a/drivers/media/video/videodev.c
+++ b/drivers/media/video/videodev.c
@@ -99,7 +99,7 @@ static DECLARE_MUTEX(videodev_lock);
struct video_device* video_devdata(struct file *file)
{
- return video_device[minor(file->f_dentry->d_inode->i_rdev)];
+ return video_device[iminor(file->f_dentry->d_inode)];
}
/*
@@ -107,7 +107,7 @@ struct video_device* video_devdata(struct file *file)
*/
static int video_open(struct inode *inode, struct file *file)
{
- unsigned int minor = minor(inode->i_rdev);
+ unsigned int minor = iminor(inode);
int err = 0;
struct video_device *vfl;
struct file_operations *old_fops;
diff --git a/drivers/mtd/mtdchar.c b/drivers/mtd/mtdchar.c
index 5a7782514437..801bcc8f08d4 100644
--- a/drivers/mtd/mtdchar.c
+++ b/drivers/mtd/mtdchar.c
@@ -59,7 +59,7 @@ static loff_t mtd_lseek (struct file *file, loff_t offset, int orig)
static int mtd_open(struct inode *inode, struct file *file)
{
- int minor = minor(inode->i_rdev);
+ int minor = iminor(inode);
int devnum = minor >> 1;
struct mtd_info *mtd;
diff --git a/drivers/net/sis190.c b/drivers/net/sis190.c
index 3094b09fa4e5..c7896375bb1c 100644
--- a/drivers/net/sis190.c
+++ b/drivers/net/sis190.c
@@ -1111,7 +1111,7 @@ SiS190_close(struct net_device *dev)
spin_unlock_irq(&tp->lock);
- synchronize_irq();
+ synchronize_irq(dev->irq);
free_irq(dev->irq, dev);
SiS190_tx_clear(tp);
diff --git a/drivers/net/wan/cosa.c b/drivers/net/wan/cosa.c
index 869b2c47e469..f90a63b5c56f 100644
--- a/drivers/net/wan/cosa.c
+++ b/drivers/net/wan/cosa.c
@@ -961,12 +961,12 @@ static int cosa_open(struct inode *inode, struct file *file)
unsigned long flags;
int n;
- if ((n=minor(file->f_dentry->d_inode->i_rdev)>>CARD_MINOR_BITS)
+ if ((n=iminor(file->f_dentry->d_inode)>>CARD_MINOR_BITS)
>= nr_cards)
return -ENODEV;
cosa = cosa_cards+n;
- if ((n=minor(file->f_dentry->d_inode->i_rdev)
+ if ((n=iminor(file->f_dentry->d_inode)
& ((1<<CARD_MINOR_BITS)-1)) >= cosa->nchannels)
return -ENODEV;
chan = cosa->chan + n;
@@ -1009,7 +1009,7 @@ static struct fasync_struct *fasync[256] = { NULL, };
/* To be done ... */
static int cosa_fasync(struct inode *inode, struct file *file, int on)
{
- int port = MINOR(inode->i_rdev);
+ int port = iminor(inode);
int rv = fasync_helper(inode, file, on, &fasync[port]);
return rv < 0 ? rv : 0;
}
diff --git a/drivers/pcmcia/ds.c b/drivers/pcmcia/ds.c
index 31d89c588ec1..229cffa45e72 100644
--- a/drivers/pcmcia/ds.c
+++ b/drivers/pcmcia/ds.c
@@ -495,7 +495,7 @@ static int unbind_request(struct pcmcia_bus_socket *s, bind_info_t *bind_info)
static int ds_open(struct inode *inode, struct file *file)
{
- socket_t i = minor(inode->i_rdev);
+ socket_t i = iminor(inode);
struct pcmcia_bus_socket *s;
user_info_t *user;
@@ -529,7 +529,7 @@ static int ds_open(struct inode *inode, struct file *file)
static int ds_release(struct inode *inode, struct file *file)
{
- socket_t i = minor(inode->i_rdev);
+ socket_t i = iminor(inode);
struct pcmcia_bus_socket *s;
user_info_t *user, **link;
@@ -563,7 +563,7 @@ out:
static ssize_t ds_read(struct file *file, char *buf,
size_t count, loff_t *ppos)
{
- socket_t i = minor(file->f_dentry->d_inode->i_rdev);
+ socket_t i = iminor(file->f_dentry->d_inode);
struct pcmcia_bus_socket *s;
user_info_t *user;
@@ -594,7 +594,7 @@ static ssize_t ds_read(struct file *file, char *buf,
static ssize_t ds_write(struct file *file, const char *buf,
size_t count, loff_t *ppos)
{
- socket_t i = minor(file->f_dentry->d_inode->i_rdev);
+ socket_t i = iminor(file->f_dentry->d_inode);
struct pcmcia_bus_socket *s;
user_info_t *user;
@@ -629,7 +629,7 @@ static ssize_t ds_write(struct file *file, const char *buf,
/* No kernel lock - fine */
static u_int ds_poll(struct file *file, poll_table *wait)
{
- socket_t i = minor(file->f_dentry->d_inode->i_rdev);
+ socket_t i = iminor(file->f_dentry->d_inode);
struct pcmcia_bus_socket *s;
user_info_t *user;
@@ -653,7 +653,7 @@ static u_int ds_poll(struct file *file, poll_table *wait)
static int ds_ioctl(struct inode * inode, struct file * file,
u_int cmd, u_long arg)
{
- socket_t i = minor(inode->i_rdev);
+ socket_t i = iminor(inode);
struct pcmcia_bus_socket *s;
u_int size;
int ret, err;
diff --git a/drivers/s390/char/tape_char.c b/drivers/s390/char/tape_char.c
index 5524a408f70a..89d9ad076e23 100644
--- a/drivers/s390/char/tape_char.c
+++ b/drivers/s390/char/tape_char.c
@@ -238,14 +238,14 @@ tapechar_open (struct inode *inode, struct file *filp)
struct tape_device *device;
int minor, rc;
- if (major(filp->f_dentry->d_inode->i_rdev) != tapechar_major)
+ if (imajor(filp->f_dentry->d_inode) != tapechar_major)
return -ENODEV;
- minor = minor(filp->f_dentry->d_inode->i_rdev);
+ minor = iminor(filp->f_dentry->d_inode);
device = tape_get_device(minor / TAPE_MINORS_PER_DEV);
if (IS_ERR(device)) {
return PTR_ERR(device);
}
- DBF_EVENT(6, "TCHAR:open: %x\n", minor(inode->i_rdev));
+ DBF_EVENT(6, "TCHAR:open: %x\n", iminor(inode));
rc = tape_open(device);
if (rc == 0) {
rc = tape_assign(device);
@@ -269,7 +269,7 @@ tapechar_release(struct inode *inode, struct file *filp)
struct tape_device *device;
device = (struct tape_device *) filp->private_data;
- DBF_EVENT(6, "TCHAR:release: %x\n", minor(inode->i_rdev));
+ DBF_EVENT(6, "TCHAR:release: %x\n", iminor(inode));
#if 0
// FIXME: this is broken. Either MTWEOF/MTWEOF/MTBSR is done
// EVERYTIME the user switches from write to something different
@@ -281,7 +281,7 @@ tapechar_release(struct inode *inode, struct file *filp)
/*
* If this is the rewinding tape minor then rewind.
*/
- if ((minor(inode->i_rdev) & 1) != 0)
+ if ((iminor(inode) & 1) != 0)
tape_mtop(device, MTREW, 1);
if (device->char_data.idal_buf != NULL) {
idal_buffer_free(device->char_data.idal_buf);
diff --git a/drivers/s390/char/tubio.h b/drivers/s390/char/tubio.h
index 45f6499fdd9f..92cd4fe8dbd1 100644
--- a/drivers/s390/char/tubio.h
+++ b/drivers/s390/char/tubio.h
@@ -377,7 +377,7 @@ extern tub_t *tubfindbyirq(int);
*/
extern inline tub_t *INODE2TUB(struct inode *ip)
{
- unsigned int minor = minor(ip->i_rdev);
+ unsigned int minor = iminor(ip);
tub_t *tubp = NULL;
if (minor == 0 && current->tty) {
if (current->tty->driver == tty3270_driver)
diff --git a/drivers/sbus/char/bpp.c b/drivers/sbus/char/bpp.c
index fc49372e52c4..ab7cc1b2f72f 100644
--- a/drivers/sbus/char/bpp.c
+++ b/drivers/sbus/char/bpp.c
@@ -440,7 +440,7 @@ static spinlock_t bpp_open_lock = SPIN_LOCK_UNLOCKED;
*/
static int bpp_open(struct inode *inode, struct file *f)
{
- unsigned minor = minor(inode->i_rdev);
+ unsigned minor = iminor(inode);
int ret;
spin_lock(&bpp_open_lock);
@@ -470,7 +470,7 @@ static int bpp_open(struct inode *inode, struct file *f)
*/
static int bpp_release(struct inode *inode, struct file *f)
{
- unsigned minor = minor(inode->i_rdev);
+ unsigned minor = iminor(inode);
spin_lock(&bpp_open_lock);
instances[minor].opened = 0;
@@ -634,7 +634,7 @@ static long read_ecp(unsigned minor, char *c, unsigned long cnt)
static ssize_t bpp_read(struct file *f, char *c, size_t cnt, loff_t * ppos)
{
long rc;
- const unsigned minor = minor(f->f_dentry->d_inode->i_rdev);
+ unsigned minor = iminor(f->f_dentry->d_inode);
if (minor >= BPP_NO) return -ENODEV;
if (!instances[minor].present) return -ENODEV;
@@ -787,7 +787,7 @@ static long write_ecp(unsigned minor, const char *c, unsigned long cnt)
static ssize_t bpp_write(struct file *f, const char *c, size_t cnt, loff_t * ppos)
{
long errno = 0;
- const unsigned minor = minor(f->f_dentry->d_inode->i_rdev);
+ unsigned minor = iminor(f->f_dentry->d_inode);
if (minor >= BPP_NO) return -ENODEV;
if (!instances[minor].present) return -ENODEV;
@@ -813,7 +813,7 @@ static int bpp_ioctl(struct inode *inode, struct file *f, unsigned int cmd,
{
int errno = 0;
- unsigned minor = minor(inode->i_rdev);
+ unsigned minor = iminor(inode);
if (minor >= BPP_NO) return -ENODEV;
if (!instances[minor].present) return -ENODEV;
diff --git a/drivers/sbus/char/cpwatchdog.c b/drivers/sbus/char/cpwatchdog.c
index 5a3efa2b53ad..4a99ad0c5e32 100644
--- a/drivers/sbus/char/cpwatchdog.c
+++ b/drivers/sbus/char/cpwatchdog.c
@@ -295,7 +295,7 @@ static inline int wd_opt_timeout(void)
static int wd_open(struct inode *inode, struct file *f)
{
- switch(minor(inode->i_rdev))
+ switch(iminor(inode))
{
case WD0_MINOR:
f->private_data = &wd_dev.watchdog[WD0_ID];
diff --git a/drivers/sbus/char/display7seg.c b/drivers/sbus/char/display7seg.c
index 10c6b4fddd14..a35e60ee1f87 100644
--- a/drivers/sbus/char/display7seg.c
+++ b/drivers/sbus/char/display7seg.c
@@ -91,7 +91,7 @@ static atomic_t d7s_users = ATOMIC_INIT(0);
static int d7s_open(struct inode *inode, struct file *f)
{
- if (D7S_MINOR != minor(inode->i_rdev))
+ if (D7S_MINOR != iminor(inode))
return -ENODEV;
atomic_inc(&d7s_users);
return 0;
@@ -121,7 +121,7 @@ static int d7s_ioctl(struct inode *inode, struct file *f,
__u8 regs = readb(d7s_regs);
__u8 ireg = 0;
- if (D7S_MINOR != minor(inode->i_rdev))
+ if (D7S_MINOR != iminor(inode))
return -ENODEV;
switch (cmd) {
diff --git a/drivers/sbus/char/vfc_dev.c b/drivers/sbus/char/vfc_dev.c
index d778964a586b..27dac275ab71 100644
--- a/drivers/sbus/char/vfc_dev.c
+++ b/drivers/sbus/char/vfc_dev.c
@@ -184,7 +184,7 @@ static int vfc_open(struct inode *inode, struct file *file)
struct vfc_dev *dev;
spin_lock(&vfc_dev_lock);
- dev = vfc_get_dev_ptr(MINOR(inode->i_rdev));
+ dev = vfc_get_dev_ptr(iminor(inode));
if (dev == NULL) {
spin_unlock(&vfc_dev_lock);
return -ENODEV;
@@ -215,7 +215,7 @@ static int vfc_release(struct inode *inode,struct file *file)
struct vfc_dev *dev;
spin_lock(&vfc_dev_lock);
- dev = vfc_get_dev_ptr(MINOR(inode->i_rdev));
+ dev = vfc_get_dev_ptr(iminor(inode));
if (!dev || !dev->busy) {
spin_unlock(&vfc_dev_lock);
return -EINVAL;
@@ -557,7 +557,7 @@ static int vfc_ioctl(struct inode *inode, struct file *file, unsigned int cmd,
unsigned int tmp;
struct vfc_dev *dev;
- dev = vfc_get_dev_ptr(MINOR(inode->i_rdev));
+ dev = vfc_get_dev_ptr(iminor(inode));
if(dev == NULL)
return -ENODEV;
@@ -602,7 +602,7 @@ static int vfc_ioctl(struct inode *inode, struct file *file, unsigned int cmd,
VFC_IOCTL_DEBUG_PRINTK(("vfc%d: IOCTL(VFCRDINFO)\n", dev->instance));
break;
default:
- ret = vfc_debug(vfc_get_dev_ptr(MINOR(inode->i_rdev)),
+ ret = vfc_debug(vfc_get_dev_ptr(iminor(inode)),
cmd, arg);
break;
};
@@ -616,7 +616,7 @@ static int vfc_mmap(struct inode *inode, struct file *file,
unsigned int map_size, ret, map_offset;
struct vfc_dev *dev;
- dev = vfc_get_dev_ptr(MINOR(inode->i_rdev));
+ dev = vfc_get_dev_ptr(iminor(inode));
if(dev == NULL)
return -ENODEV;
diff --git a/drivers/scsi/3w-xxxx.c b/drivers/scsi/3w-xxxx.c
index 01b76cfaad76..8de649829c01 100644
--- a/drivers/scsi/3w-xxxx.c
+++ b/drivers/scsi/3w-xxxx.c
@@ -628,7 +628,7 @@ static int tw_chrdev_ioctl(struct inode *inode, struct file *file, unsigned int
unsigned long *cpu_addr;
TW_New_Ioctl *tw_ioctl;
TW_Passthru *passthru;
- TW_Device_Extension *tw_dev = tw_device_extension_list[minor(inode->i_rdev)];
+ TW_Device_Extension *tw_dev = tw_device_extension_list[iminor(inode)];
int retval = -EFAULT;
dprintk(KERN_WARNING "3w-xxxx: tw_chrdev_ioctl()\n");
@@ -786,7 +786,7 @@ static int tw_chrdev_open(struct inode *inode, struct file *file)
dprintk(KERN_WARNING "3w-xxxx: tw_ioctl_open()\n");
- minor_number = minor(inode->i_rdev);
+ minor_number = iminor(inode);
if (minor_number >= tw_device_extension_count)
return -ENODEV;
diff --git a/drivers/scsi/aacraid/linit.c b/drivers/scsi/aacraid/linit.c
index 89f88dbf4cf4..aacadf809baa 100644
--- a/drivers/scsi/aacraid/linit.c
+++ b/drivers/scsi/aacraid/linit.c
@@ -565,7 +565,7 @@ static int aac_ioctl(Scsi_Device * scsi_dev_ptr, int cmd, void * arg)
static int aac_cfg_open(struct inode * inode, struct file * file )
{
- unsigned minor_number = minor(inode->i_rdev);
+ unsigned minor_number = iminor(inode);
if(minor_number >= aac_count)
return -ENODEV;
return 0;
@@ -601,7 +601,7 @@ static int aac_cfg_release(struct inode * inode, struct file * file )
static int aac_cfg_ioctl(struct inode * inode, struct file * file, unsigned int cmd, unsigned long arg )
{
- struct aac_dev *dev = aac_devices[minor(inode->i_rdev)];
+ struct aac_dev *dev = aac_devices[iminor(inode)];
return aac_do_ioctl(dev, cmd, (void *)arg);
}
diff --git a/drivers/scsi/dpt_i2o.c b/drivers/scsi/dpt_i2o.c
index abfa675b5f7b..c248dc3e2922 100644
--- a/drivers/scsi/dpt_i2o.c
+++ b/drivers/scsi/dpt_i2o.c
@@ -1551,7 +1551,7 @@ static int adpt_open(struct inode *inode, struct file *file)
//TODO check for root access
//
- minor = minor(inode->i_rdev);
+ minor = iminor(inode);
if (minor >= hba_count) {
return -ENXIO;
}
@@ -1582,7 +1582,7 @@ static int adpt_close(struct inode *inode, struct file *file)
int minor;
adpt_hba* pHba;
- minor = minor(inode->i_rdev);
+ minor = iminor(inode);
if (minor >= hba_count) {
return -ENXIO;
}
@@ -1878,7 +1878,7 @@ static int adpt_ioctl(struct inode *inode, struct file *file, uint cmd,
adpt_hba* pHba;
ulong flags;
- minor = minor(inode->i_rdev);
+ minor = iminor(inode);
if (minor >= DPTI_MAX_HBA){
return -ENXIO;
}
diff --git a/drivers/scsi/osst.c b/drivers/scsi/osst.c
index 1c238c4082a1..48afbdd2faa8 100644
--- a/drivers/scsi/osst.c
+++ b/drivers/scsi/osst.c
@@ -132,9 +132,9 @@ static int debugging = 1;
#define OSST_TIMEOUT (200 * HZ)
#define OSST_LONG_TIMEOUT (1800 * HZ)
-#define TAPE_NR(x) (minor(x) & ~(-1 << ST_MODE_SHIFT))
-#define TAPE_MODE(x) ((minor(x) & ST_MODE_MASK) >> ST_MODE_SHIFT)
-#define TAPE_REWIND(x) ((minor(x) & 0x80) == 0)
+#define TAPE_NR(x) (iminor(x) & ~(-1 << ST_MODE_SHIFT))
+#define TAPE_MODE(x) ((iminor(x) & ST_MODE_MASK) >> ST_MODE_SHIFT)
+#define TAPE_REWIND(x) ((iminor(x) & 0x80) == 0)
#define TAPE_IS_RAW(x) (TAPE_MODE(x) & (ST_NBR_MODES >> 1))
/* Internal ioctl to set both density (uppermost 8 bits) and blocksize (lower
@@ -4215,8 +4215,8 @@ static int os_scsi_tape_open(struct inode * inode, struct file * filp)
ST_mode * STm;
ST_partstat * STps;
char * name;
- int dev = TAPE_NR(inode->i_rdev);
- int mode = TAPE_MODE(inode->i_rdev);
+ int dev = TAPE_NR(inode);
+ int mode = TAPE_MODE(inode);
write_lock(&os_scsi_tapes_lock);
if (dev >= osst_max_dev || os_scsi_tapes == NULL ||
@@ -4244,7 +4244,7 @@ static int os_scsi_tape_open(struct inode * inode, struct file * filp)
filp->private_data = STp;
STp->in_use = 1;
write_unlock(&os_scsi_tapes_lock);
- STp->rew_at_close = TAPE_REWIND(inode->i_rdev);
+ STp->rew_at_close = TAPE_REWIND(inode);
if( !scsi_block_when_processing_errors(STp->device) ) {
return -ENXIO;
@@ -4264,7 +4264,7 @@ static int os_scsi_tape_open(struct inode * inode, struct file * filp)
flags = filp->f_flags;
STp->write_prot = ((flags & O_ACCMODE) == O_RDONLY);
- STp->raw = TAPE_IS_RAW(inode->i_rdev);
+ STp->raw = TAPE_IS_RAW(inode);
if (STp->raw)
STp->header_ok = 0;
diff --git a/drivers/scsi/sg.c b/drivers/scsi/sg.c
index cb7dc291de89..813364338aea 100644
--- a/drivers/scsi/sg.c
+++ b/drivers/scsi/sg.c
@@ -238,7 +238,7 @@ static int sg_nr_dev;
static int
sg_open(struct inode *inode, struct file *filp)
{
- int dev = minor(inode->i_rdev);
+ int dev = iminor(inode);
int flags = filp->f_flags;
Sg_device *sdp;
Sg_fd *sfp;
diff --git a/drivers/scsi/st.c b/drivers/scsi/st.c
index afd0a5c8b1c5..85969cd26c84 100644
--- a/drivers/scsi/st.c
+++ b/drivers/scsi/st.c
@@ -140,8 +140,8 @@ DEB( static int debugging = DEBUG; )
#define ST_TIMEOUT (900 * HZ)
#define ST_LONG_TIMEOUT (14000 * HZ)
-#define TAPE_NR(x) (minor(x) & ~(-1 << ST_MODE_SHIFT))
-#define TAPE_MODE(x) ((minor(x) & ST_MODE_MASK) >> ST_MODE_SHIFT)
+#define TAPE_NR(x) (iminor(x) & ~(-1 << ST_MODE_SHIFT))
+#define TAPE_MODE(x) ((iminor(x) & ST_MODE_MASK) >> ST_MODE_SHIFT)
/* Internal ioctl to set both density (uppermost 8 bits) and blocksize (lower
24 bits) */
@@ -786,7 +786,7 @@ static int check_tape(Scsi_Tape *STp, struct file *filp)
ST_partstat *STps;
char *name = tape_name(STp);
struct inode *inode = filp->f_dentry->d_inode;
- int mode = TAPE_MODE(inode->i_rdev);
+ int mode = TAPE_MODE(inode);
STp->ready = ST_READY;
@@ -980,7 +980,7 @@ static int st_open(struct inode *inode, struct file *filp)
int i, retval = (-EIO);
Scsi_Tape *STp;
ST_partstat *STps;
- int dev = TAPE_NR(inode->i_rdev);
+ int dev = TAPE_NR(inode);
char *name;
write_lock(&st_dev_arr_lock);
@@ -1004,7 +1004,7 @@ static int st_open(struct inode *inode, struct file *filp)
}
STp->in_use = 1;
write_unlock(&st_dev_arr_lock);
- STp->rew_at_close = STp->autorew_dev = (minor(inode->i_rdev) & 0x80) == 0;
+ STp->rew_at_close = STp->autorew_dev = (iminor(inode) & 0x80) == 0;
if (!scsi_block_when_processing_errors(STp->device)) {
diff --git a/drivers/telephony/ixj.c b/drivers/telephony/ixj.c
index b70bb6daa14f..5778788a2020 100644
--- a/drivers/telephony/ixj.c
+++ b/drivers/telephony/ixj.c
@@ -278,8 +278,8 @@ static char ixj_c_revision[] = "$Revision: 4.7 $";
#include "ixj.h"
-#define TYPE(dev) (minor(dev) >> 4)
-#define NUM(dev) (minor(dev) & 0xf)
+#define TYPE(inode) (iminor(inode) >> 4)
+#define NUM(inode) (iminor(inode) & 0xf)
static int ixjdebug;
static int hertz = HZ;
@@ -2273,7 +2273,7 @@ int ixj_release(struct inode *inode, struct file *file_p)
schedule_timeout(1);
}
if (ixjdebug & 0x0002)
- printk(KERN_INFO "Closing board %d\n", NUM(inode->i_rdev));
+ printk(KERN_INFO "Closing board %d\n", NUM(inode));
if (j->cardtype == QTI_PHONECARD)
ixj_set_port(j, PORT_SPEAKER);
@@ -2858,7 +2858,7 @@ static void alaw2ulaw(unsigned char *buff, unsigned long len)
static ssize_t ixj_read(struct file * file_p, char *buf, size_t length, loff_t * ppos)
{
unsigned long i = *ppos;
- IXJ * j = get_ixj(NUM(file_p->f_dentry->d_inode->i_rdev));
+ IXJ * j = get_ixj(NUM(file_p->f_dentry->d_inode));
DECLARE_WAITQUEUE(wait, current);
@@ -2915,7 +2915,7 @@ static ssize_t ixj_enhanced_read(struct file * file_p, char *buf, size_t length,
{
int pre_retval;
ssize_t read_retval = 0;
- IXJ *j = get_ixj(NUM(file_p->f_dentry->d_inode->i_rdev));
+ IXJ *j = get_ixj(NUM(file_p->f_dentry->d_inode));
pre_retval = ixj_PreRead(j, 0L);
switch (pre_retval) {
@@ -2994,7 +2994,7 @@ static ssize_t ixj_enhanced_write(struct file * file_p, const char *buf, size_t
int pre_retval;
ssize_t write_retval = 0;
- IXJ *j = get_ixj(NUM(file_p->f_dentry->d_inode->i_rdev));
+ IXJ *j = get_ixj(NUM(file_p->f_dentry->d_inode));
pre_retval = ixj_PreWrite(j, 0L);
switch (pre_retval) {
@@ -4707,7 +4707,7 @@ static unsigned int ixj_poll(struct file *file_p, poll_table * wait)
{
unsigned int mask = 0;
- IXJ *j = get_ixj(NUM(file_p->f_dentry->d_inode->i_rdev));
+ IXJ *j = get_ixj(NUM(file_p->f_dentry->d_inode));
poll_wait(file_p, &(j->poll_q), wait);
if (j->read_buffer_ready > 0)
@@ -6208,10 +6208,10 @@ static int ixj_ioctl(struct inode *inode, struct file *file_p, unsigned int cmd,
IXJ_FILTER_RAW jfr;
unsigned int raise, mant;
- unsigned int minor = minor(inode->i_rdev);
- int board = NUM(inode->i_rdev);
+ unsigned int minor = iminor(inode);
+ int board = NUM(inode);
- IXJ *j = get_ixj(NUM(inode->i_rdev));
+ IXJ *j = get_ixj(NUM(inode));
int retval = 0;
@@ -6764,7 +6764,7 @@ static int ixj_ioctl(struct inode *inode, struct file *file_p, unsigned int cmd,
static int ixj_fasync(int fd, struct file *file_p, int mode)
{
- IXJ *j = get_ixj(NUM(file_p->f_dentry->d_inode->i_rdev));
+ IXJ *j = get_ixj(NUM(file_p->f_dentry->d_inode));
return fasync_helper(fd, file_p, mode, &j->async_queue);
}
diff --git a/drivers/telephony/phonedev.c b/drivers/telephony/phonedev.c
index a5c1d3337141..c6dccf6b8c42 100644
--- a/drivers/telephony/phonedev.c
+++ b/drivers/telephony/phonedev.c
@@ -46,7 +46,7 @@ static DECLARE_MUTEX(phone_lock);
static int phone_open(struct inode *inode, struct file *file)
{
- unsigned int minor = minor(inode->i_rdev);
+ unsigned int minor = iminor(inode);
int err = 0;
struct phone_device *p;
struct file_operations *old_fops, *new_fops = NULL;
diff --git a/drivers/usb/class/audio.c b/drivers/usb/class/audio.c
index 63790413949a..d87ddb18d9bd 100644
--- a/drivers/usb/class/audio.c
+++ b/drivers/usb/class/audio.c
@@ -1955,7 +1955,7 @@ static inline int prog_dmabuf_out(struct usb_audiodev *as)
static int usb_audio_open_mixdev(struct inode *inode, struct file *file)
{
- unsigned int minor = minor(inode->i_rdev);
+ unsigned int minor = iminor(inode);
struct list_head *devs, *mdevs;
struct usb_mixerdev *ms;
struct usb_audio_state *s;
@@ -2633,7 +2633,7 @@ static int usb_audio_ioctl(struct inode *inode, struct file *file, unsigned int
static int usb_audio_open(struct inode *inode, struct file *file)
{
- unsigned int minor = minor(inode->i_rdev);
+ unsigned int minor = iminor(inode);
DECLARE_WAITQUEUE(wait, current);
struct list_head *devs, *adevs;
struct usb_audiodev *as;
diff --git a/drivers/usb/class/usb-midi.c b/drivers/usb/class/usb-midi.c
index 7cd4ab7e1dc4..23da0eb2123d 100644
--- a/drivers/usb/class/usb-midi.c
+++ b/drivers/usb/class/usb-midi.c
@@ -812,7 +812,7 @@ static unsigned int usb_midi_poll(struct file *file, struct poll_table_struct *w
static int usb_midi_open(struct inode *inode, struct file *file)
{
- int minor = minor(inode->i_rdev);
+ int minor = iminor(inode);
DECLARE_WAITQUEUE(wait, current);
struct list_head *devs, *mdevs;
struct usb_midi_state *s;
diff --git a/drivers/usb/class/usblp.c b/drivers/usb/class/usblp.c
index 335ea43e8a09..d9fe5681d6a9 100644
--- a/drivers/usb/class/usblp.c
+++ b/drivers/usb/class/usblp.c
@@ -318,7 +318,7 @@ static int usblp_check_status(struct usblp *usblp, int err)
static int usblp_open(struct inode *inode, struct file *file)
{
- int minor = minor(inode->i_rdev);
+ int minor = iminor(inode);
struct usblp *usblp;
struct usb_interface *intf;
int retval;
diff --git a/drivers/usb/core/file.c b/drivers/usb/core/file.c
index ea8b5313d986..1ca974ab745a 100644
--- a/drivers/usb/core/file.c
+++ b/drivers/usb/core/file.c
@@ -34,7 +34,7 @@ static spinlock_t minor_lock = SPIN_LOCK_UNLOCKED;
static int usb_open(struct inode * inode, struct file * file)
{
- int minor = minor(inode->i_rdev);
+ int minor = iminor(inode);
struct file_operations *c;
int err = -ENODEV;
struct file_operations *old_fops, *new_fops = NULL;
diff --git a/drivers/usb/image/scanner.h b/drivers/usb/image/scanner.h
index 44a90a13f4d9..f5a4be152899 100644
--- a/drivers/usb/image/scanner.h
+++ b/drivers/usb/image/scanner.h
@@ -313,7 +313,7 @@ MODULE_DEVICE_TABLE (usb, scanner_device_ids);
#define IS_EP_BULK_OUT(ep) (IS_EP_BULK(ep) && ((ep)->bEndpointAddress & USB_ENDPOINT_DIR_MASK) == USB_DIR_OUT)
#define IS_EP_INTR(ep) ((ep)->bmAttributes == USB_ENDPOINT_XFER_INT ? 1 : 0)
-#define USB_SCN_MINOR(X) minor((X)->i_rdev)
+#define USB_SCN_MINOR(X) iminor(X)
#ifdef DEBUG
#define SCN_DEBUG(X) X
diff --git a/drivers/usb/input/hiddev.c b/drivers/usb/input/hiddev.c
index 65ac080b0142..6d0d97ceadf6 100644
--- a/drivers/usb/input/hiddev.c
+++ b/drivers/usb/input/hiddev.c
@@ -271,7 +271,7 @@ static int hiddev_release(struct inode * inode, struct file * file)
static int hiddev_open(struct inode * inode, struct file * file) {
struct hiddev_list *list;
- int i = minor(inode->i_rdev) - HIDDEV_MINOR_BASE;
+ int i = iminor(inode) - HIDDEV_MINOR_BASE;
if (i >= HIDDEV_MINORS || !hiddev_table[i])
return -ENODEV;
diff --git a/drivers/usb/media/dabusb.c b/drivers/usb/media/dabusb.c
index ac741ab0de50..61fbbfc317ef 100644
--- a/drivers/usb/media/dabusb.c
+++ b/drivers/usb/media/dabusb.c
@@ -583,7 +583,7 @@ static ssize_t dabusb_read (struct file *file, char *buf, size_t count, loff_t *
static int dabusb_open (struct inode *inode, struct file *file)
{
- int devnum = minor (inode->i_rdev);
+ int devnum = iminor(inode);
pdabusb_t s;
if (devnum < DABUSB_MINOR || devnum >= (DABUSB_MINOR + NRDABUSB))
diff --git a/drivers/usb/misc/auerswald.c b/drivers/usb/misc/auerswald.c
index f0a4089bcfe4..4ef570f5cb84 100644
--- a/drivers/usb/misc/auerswald.c
+++ b/drivers/usb/misc/auerswald.c
@@ -1380,7 +1380,7 @@ static void auerswald_removeservice (pauerswald_t cp, pauerscon_t scp)
/* Open a new character device */
static int auerchar_open (struct inode *inode, struct file *file)
{
- int dtindex = minor(inode->i_rdev);
+ int dtindex = iminor(inode);
pauerswald_t cp = NULL;
pauerchar_t ccp = NULL;
struct usb_interface *intf;
diff --git a/drivers/usb/misc/brlvger.c b/drivers/usb/misc/brlvger.c
index d9128c13f457..3ad25fb4e294 100644
--- a/drivers/usb/misc/brlvger.c
+++ b/drivers/usb/misc/brlvger.c
@@ -432,7 +432,7 @@ brlvger_disconnect(struct usb_interface *intf)
static int
brlvger_open(struct inode *inode, struct file *file)
{
- int devnum = minor (inode->i_rdev);
+ int devnum = iminor(inode);
struct usb_interface *intf = NULL;
struct brlvger_priv *priv = NULL;
int n, ret;
diff --git a/drivers/usb/misc/tiglusb.c b/drivers/usb/misc/tiglusb.c
index 0d9d4dd8909b..c77d60ed51b4 100644
--- a/drivers/usb/misc/tiglusb.c
+++ b/drivers/usb/misc/tiglusb.c
@@ -93,7 +93,7 @@ clear_pipes (struct usb_device *dev)
static int
tiglusb_open (struct inode *inode, struct file *filp)
{
- int devnum = minor (inode->i_rdev);
+ int devnum = iminor(inode);
ptiglusb_t s;
if (devnum < TIUSB_MINOR || devnum >= (TIUSB_MINOR + MAXTIGL))
diff --git a/drivers/usb/usb-skeleton.c b/drivers/usb/usb-skeleton.c
index 271804d2089f..a4cb3f94c577 100644
--- a/drivers/usb/usb-skeleton.c
+++ b/drivers/usb/usb-skeleton.c
@@ -229,7 +229,7 @@ static int skel_open (struct inode *inode, struct file *file)
dbg("%s", __FUNCTION__);
- subminor = minor (inode->i_rdev);
+ subminor = iminor(inode);
/* prevent disconnects */
down (&disconnect_sem);
diff --git a/drivers/video/fbmem.c b/drivers/video/fbmem.c
index 72c1855f60c1..a89dbc7e59ed 100644
--- a/drivers/video/fbmem.c
+++ b/drivers/video/fbmem.c
@@ -768,7 +768,7 @@ fb_read(struct file *file, char *buf, size_t count, loff_t *ppos)
{
unsigned long p = *ppos;
struct inode *inode = file->f_dentry->d_inode;
- int fbidx = minor(inode->i_rdev);
+ int fbidx = iminor(inode);
struct fb_info *info = registered_fb[fbidx];
if (!info || ! info->screen_base)
@@ -802,7 +802,7 @@ fb_write(struct file *file, const char *buf, size_t count, loff_t *ppos)
{
unsigned long p = *ppos;
struct inode *inode = file->f_dentry->d_inode;
- int fbidx = minor(inode->i_rdev);
+ int fbidx = iminor(inode);
struct fb_info *info = registered_fb[fbidx];
int err;
@@ -964,7 +964,7 @@ static int
fb_ioctl(struct inode *inode, struct file *file, unsigned int cmd,
unsigned long arg)
{
- int fbidx = minor(inode->i_rdev);
+ int fbidx = iminor(inode);
struct fb_info *info = registered_fb[fbidx];
struct fb_ops *fb = info->fbops;
struct fb_var_screeninfo var;
@@ -1050,7 +1050,7 @@ fb_ioctl(struct inode *inode, struct file *file, unsigned int cmd,
static int
fb_mmap(struct file *file, struct vm_area_struct * vma)
{
- int fbidx = minor(file->f_dentry->d_inode->i_rdev);
+ int fbidx = iminor(file->f_dentry->d_inode);
struct fb_info *info = registered_fb[fbidx];
struct fb_ops *fb = info->fbops;
unsigned long off;
@@ -1149,7 +1149,7 @@ fb_mmap(struct file *file, struct vm_area_struct * vma)
static int
fb_open(struct inode *inode, struct file *file)
{
- int fbidx = minor(inode->i_rdev);
+ int fbidx = iminor(inode);
struct fb_info *info;
int res = 0;
@@ -1174,7 +1174,7 @@ fb_open(struct inode *inode, struct file *file)
static int
fb_release(struct inode *inode, struct file *file)
{
- int fbidx = minor(inode->i_rdev);
+ int fbidx = iminor(inode);
struct fb_info *info;
lock_kernel();
diff --git a/drivers/video/stifb.c b/drivers/video/stifb.c
index 0e2bf70dafd8..1c02cb0b6a9c 100644
--- a/drivers/video/stifb.c
+++ b/drivers/video/stifb.c
@@ -890,7 +890,7 @@ stifb_read(struct file *file, char *buf, size_t count, loff_t *ppos)
{
unsigned long p = *ppos;
struct inode *inode = file->f_dentry->d_inode;
- int fbidx = minor(inode->i_rdev);
+ int fbidx = iminor(inode);
struct fb_info *info = registered_fb[fbidx];
char tmpbuf[TMPBUFLEN];
@@ -922,7 +922,7 @@ static ssize_t
stifb_write(struct file *file, const char *buf, size_t count, loff_t *ppos)
{
struct inode *inode = file->f_dentry->d_inode;
- int fbidx = minor(inode->i_rdev);
+ int fbidx = iminor(inode);
struct fb_info *info = registered_fb[fbidx];
unsigned long p = *ppos;
size_t c;
diff --git a/fs/afs/callback.c b/fs/afs/callback.c
index 8d030bd67aa0..368a94a285a0 100644
--- a/fs/afs/callback.c
+++ b/fs/afs/callback.c
@@ -146,7 +146,7 @@ int SRXAFSCM_CallBack(afs_server_t *server, size_t count, afs_callback_t callbac
spin_unlock(&vnode->lock);
if (valid) {
- invalidate_inode_pages(inode->i_mapping);
+ invalidate_remote_inode(inode);
afs_put_server(server);
}
iput(inode);
diff --git a/fs/afs/dir.c b/fs/afs/dir.c
index a63e3e9679fe..30d3246cc91e 100644
--- a/fs/afs/dir.c
+++ b/fs/afs/dir.c
@@ -569,7 +569,7 @@ static int afs_d_revalidate(struct dentry *dentry, struct nameidata *nd)
spin_lock(&AFS_FS_I(inode)->lock);
AFS_FS_I(inode)->flags |= AFS_VNODE_DELETED;
spin_unlock(&AFS_FS_I(inode)->lock);
- invalidate_inode_pages(inode->i_mapping);
+ invalidate_remote_inode(inode);
goto out_bad;
}
diff --git a/fs/bio.c b/fs/bio.c
index 5aebadd84cf4..d80b7d19dc08 100644
--- a/fs/bio.c
+++ b/fs/bio.c
@@ -793,10 +793,6 @@ static void __init biovec_init_pools(void)
mempool_free_slab, bp->slab);
if (!bp->pool)
panic("biovec: can't init mempool\n");
-
- printk("biovec pool[%d]: %3d bvecs: %3d entries (%d bytes)\n",
- i, bp->nr_vecs, pool_entries,
- size);
}
}
@@ -810,8 +806,6 @@ static int __init init_bio(void)
if (!bio_pool)
panic("bio: can't create mempool\n");
- printk("BIO: pool of %d setup, %ZuKb (%Zd bytes/bio)\n", BIO_POOL_SIZE, BIO_POOL_SIZE * sizeof(struct bio) >> 10, sizeof(struct bio));
-
biovec_init_pools();
bio_split_pool = mempool_create(BIO_SPLIT_ENTRIES, bio_pair_alloc, bio_pair_free, NULL);
diff --git a/fs/block_dev.c b/fs/block_dev.c
index d7a6d259d4a0..ddfcb6284b5a 100644
--- a/fs/block_dev.c
+++ b/fs/block_dev.c
@@ -197,40 +197,36 @@ static int block_fsync(struct file *filp, struct dentry *dentry, int datasync)
* pseudo-fs
*/
-static struct super_block *bd_get_sb(struct file_system_type *fs_type,
- int flags, const char *dev_name, void *data)
-{
- return get_sb_pseudo(fs_type, "bdev:", NULL, 0x62646576);
-}
+static spinlock_t bdev_lock __cacheline_aligned_in_smp = SPIN_LOCK_UNLOCKED;
+static kmem_cache_t * bdev_cachep;
-static struct file_system_type bd_type = {
- .name = "bdev",
- .get_sb = bd_get_sb,
- .kill_sb = kill_anon_super,
+struct bdev_inode {
+ struct block_device bdev;
+ struct inode vfs_inode;
};
-static struct vfsmount *bd_mnt;
-struct super_block *blockdev_superblock;
-
-/*
- * bdev cache handling - shamelessly stolen from inode.c
- * We use smaller hashtable, though.
- */
+static inline struct bdev_inode *BDEV_I(struct inode *inode)
+{
+ return container_of(inode, struct bdev_inode, vfs_inode);
+}
-#define HASH_BITS 6
-#define HASH_SIZE (1UL << HASH_BITS)
-#define HASH_MASK (HASH_SIZE-1)
-static struct list_head bdev_hashtable[HASH_SIZE];
-static spinlock_t bdev_lock __cacheline_aligned_in_smp = SPIN_LOCK_UNLOCKED;
-static kmem_cache_t * bdev_cachep;
+static struct inode *bdev_alloc_inode(struct super_block *sb)
+{
+ struct bdev_inode *ei = kmem_cache_alloc(bdev_cachep, SLAB_KERNEL);
+ if (!ei)
+ return NULL;
+ return &ei->vfs_inode;
+}
-#define alloc_bdev() \
- ((struct block_device *) kmem_cache_alloc(bdev_cachep, SLAB_KERNEL))
-#define destroy_bdev(bdev) kmem_cache_free(bdev_cachep, (bdev))
+static void bdev_destroy_inode(struct inode *inode)
+{
+ kmem_cache_free(bdev_cachep, BDEV_I(inode));
+}
static void init_once(void * foo, kmem_cache_t * cachep, unsigned long flags)
{
- struct block_device * bdev = (struct block_device *) foo;
+ struct bdev_inode *ei = (struct bdev_inode *) foo;
+ struct block_device *bdev = &ei->bdev;
if ((flags & (SLAB_CTOR_VERIFY|SLAB_CTOR_CONSTRUCTOR)) ==
SLAB_CTOR_CONSTRUCTOR)
@@ -238,25 +234,62 @@ static void init_once(void * foo, kmem_cache_t * cachep, unsigned long flags)
memset(bdev, 0, sizeof(*bdev));
sema_init(&bdev->bd_sem, 1);
INIT_LIST_HEAD(&bdev->bd_inodes);
+ INIT_LIST_HEAD(&bdev->bd_list);
+ inode_init_once(&ei->vfs_inode);
}
}
-void __init bdev_cache_init(void)
+static inline void __bd_forget(struct inode *inode)
+{
+ list_del_init(&inode->i_devices);
+ inode->i_bdev = NULL;
+ inode->i_mapping = &inode->i_data;
+}
+
+static void bdev_clear_inode(struct inode *inode)
+{
+ struct block_device *bdev = &BDEV_I(inode)->bdev;
+ struct list_head *p;
+ spin_lock(&bdev_lock);
+ while ( (p = bdev->bd_inodes.next) != &bdev->bd_inodes ) {
+ __bd_forget(list_entry(p, struct inode, i_devices));
+ }
+ list_del_init(&bdev->bd_list);
+ spin_unlock(&bdev_lock);
+}
+
+static struct super_operations bdev_sops = {
+ .statfs = simple_statfs,
+ .alloc_inode = bdev_alloc_inode,
+ .destroy_inode = bdev_destroy_inode,
+ .drop_inode = generic_delete_inode,
+ .clear_inode = bdev_clear_inode,
+};
+
+static struct super_block *bd_get_sb(struct file_system_type *fs_type,
+ int flags, const char *dev_name, void *data)
{
- int i, err;
- struct list_head *head = bdev_hashtable;
+ return get_sb_pseudo(fs_type, "bdev:", &bdev_sops, 0x62646576);
+}
+
+static struct file_system_type bd_type = {
+ .name = "bdev",
+ .get_sb = bd_get_sb,
+ .kill_sb = kill_anon_super,
+};
- i = HASH_SIZE;
- do {
- INIT_LIST_HEAD(head);
- head++;
- i--;
- } while (i);
+static struct vfsmount *bd_mnt;
+struct super_block *blockdev_superblock;
+void __init bdev_cache_init(void)
+{
+ int err;
bdev_cachep = kmem_cache_create("bdev_cache",
- sizeof(struct block_device),
- 0, SLAB_HWCACHE_ALIGN, init_once,
- NULL);
+ sizeof(struct bdev_inode),
+ 0,
+ SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT,
+ init_once,
+ NULL);
if (!bdev_cachep)
panic("Cannot create bdev_cache SLAB cache");
err = register_filesystem(&bd_type);
@@ -272,123 +305,83 @@ void __init bdev_cache_init(void)
/*
* Most likely _very_ bad one - but then it's hardly critical for small
* /dev and can be fixed when somebody will need really large one.
+ * Keep in mind that it will be fed through icache hash function too.
*/
static inline unsigned long hash(dev_t dev)
{
- unsigned long tmp = dev;
- tmp = tmp + (tmp >> HASH_BITS) + (tmp >> HASH_BITS*2);
- return tmp & HASH_MASK;
+ return MAJOR(dev)+MINOR(dev);
}
-static struct block_device *bdfind(dev_t dev, struct list_head *head)
+static int bdev_test(struct inode *inode, void *data)
{
- struct list_head *p;
- struct block_device *bdev;
- list_for_each(p, head) {
- bdev = list_entry(p, struct block_device, bd_hash);
- if (bdev->bd_dev != dev)
- continue;
- atomic_inc(&bdev->bd_count);
- return bdev;
- }
- return NULL;
+ return BDEV_I(inode)->bdev.bd_dev == *(dev_t *)data;
+}
+
+static int bdev_set(struct inode *inode, void *data)
+{
+ BDEV_I(inode)->bdev.bd_dev = *(dev_t *)data;
+ return 0;
}
+static LIST_HEAD(all_bdevs);
+
struct block_device *bdget(dev_t dev)
{
- struct list_head * head = bdev_hashtable + hash(dev);
- struct block_device *bdev, *new_bdev;
- spin_lock(&bdev_lock);
- bdev = bdfind(dev, head);
- spin_unlock(&bdev_lock);
- if (bdev)
- return bdev;
- new_bdev = alloc_bdev();
- if (new_bdev) {
- struct inode *inode = new_inode(bd_mnt->mnt_sb);
- if (inode) {
- kdev_t kdev = to_kdev_t(dev);
-
- atomic_set(&new_bdev->bd_count,1);
- new_bdev->bd_dev = dev;
- new_bdev->bd_contains = NULL;
- new_bdev->bd_inode = inode;
- new_bdev->bd_block_size = (1 << inode->i_blkbits);
- new_bdev->bd_part_count = 0;
- new_bdev->bd_invalidated = 0;
- inode->i_mode = S_IFBLK;
- inode->i_rdev = kdev;
- inode->i_bdev = new_bdev;
- inode->i_data.a_ops = &def_blk_aops;
- mapping_set_gfp_mask(&inode->i_data, GFP_USER);
- inode->i_data.backing_dev_info = &default_backing_dev_info;
- spin_lock(&bdev_lock);
- bdev = bdfind(dev, head);
- if (!bdev) {
- list_add(&new_bdev->bd_hash, head);
- spin_unlock(&bdev_lock);
- return new_bdev;
- }
- spin_unlock(&bdev_lock);
- iput(new_bdev->bd_inode);
- }
- destroy_bdev(new_bdev);
+ struct block_device *bdev;
+ struct inode *inode;
+
+ inode = iget5_locked(bd_mnt->mnt_sb, hash(dev),
+ bdev_test, bdev_set, &dev);
+
+ if (!inode)
+ return NULL;
+
+ bdev = &BDEV_I(inode)->bdev;
+
+ if (inode->i_state & I_NEW) {
+ bdev->bd_contains = NULL;
+ bdev->bd_inode = inode;
+ bdev->bd_block_size = (1 << inode->i_blkbits);
+ bdev->bd_part_count = 0;
+ bdev->bd_invalidated = 0;
+ inode->i_mode = S_IFBLK;
+ inode->i_rdev = to_kdev_t(dev);
+ inode->i_bdev = bdev;
+ inode->i_data.a_ops = &def_blk_aops;
+ mapping_set_gfp_mask(&inode->i_data, GFP_USER);
+ inode->i_data.backing_dev_info = &default_backing_dev_info;
+ spin_lock(&bdev_lock);
+ list_add(&bdev->bd_list, &all_bdevs);
+ spin_unlock(&bdev_lock);
+ unlock_new_inode(inode);
}
return bdev;
}
long nr_blockdev_pages(void)
{
+ struct list_head *p;
long ret = 0;
- int i;
-
spin_lock(&bdev_lock);
- for (i = 0; i < ARRAY_SIZE(bdev_hashtable); i++) {
- struct list_head *head = &bdev_hashtable[i];
- struct list_head *lh;
-
- if (head == NULL)
- continue;
- list_for_each(lh, head) {
- struct block_device *bdev;
-
- bdev = list_entry(lh, struct block_device, bd_hash);
- ret += bdev->bd_inode->i_mapping->nrpages;
- }
+ list_for_each(p, &all_bdevs) {
+ struct block_device *bdev;
+ bdev = list_entry(p, struct block_device, bd_list);
+ ret += bdev->bd_inode->i_mapping->nrpages;
}
spin_unlock(&bdev_lock);
return ret;
}
-static inline void __bd_forget(struct inode *inode)
-{
- list_del_init(&inode->i_devices);
- inode->i_bdev = NULL;
- inode->i_mapping = &inode->i_data;
-}
-
void bdput(struct block_device *bdev)
{
- if (atomic_dec_and_lock(&bdev->bd_count, &bdev_lock)) {
- struct list_head *p;
- if (bdev->bd_openers)
- BUG();
- list_del(&bdev->bd_hash);
- while ( (p = bdev->bd_inodes.next) != &bdev->bd_inodes ) {
- __bd_forget(list_entry(p, struct inode, i_devices));
- }
- spin_unlock(&bdev_lock);
- iput(bdev->bd_inode);
- destroy_bdev(bdev);
- }
+ iput(bdev->bd_inode);
}
int bd_acquire(struct inode *inode)
{
struct block_device *bdev;
spin_lock(&bdev_lock);
- if (inode->i_bdev) {
- atomic_inc(&inode->i_bdev->bd_count);
+ if (inode->i_bdev && igrab(inode->i_bdev->bd_inode)) {
spin_unlock(&bdev_lock);
return 0;
}
@@ -397,12 +390,11 @@ int bd_acquire(struct inode *inode)
if (!bdev)
return -ENOMEM;
spin_lock(&bdev_lock);
- if (!inode->i_bdev) {
- inode->i_bdev = bdev;
- inode->i_mapping = bdev->bd_inode->i_mapping;
- list_add(&inode->i_devices, &bdev->bd_inodes);
- } else if (inode->i_bdev != bdev)
- BUG();
+ if (inode->i_bdev)
+ __bd_forget(inode);
+ inode->i_bdev = bdev;
+ inode->i_mapping = bdev->bd_inode->i_mapping;
+ list_add(&inode->i_devices, &bdev->bd_inodes);
spin_unlock(&bdev_lock);
return 0;
}
@@ -548,7 +540,6 @@ static int do_open(struct block_device *bdev, struct inode *inode, struct file *
if (ret)
goto out_first;
}
- bdev->bd_offset = 0;
if (!bdev->bd_openers) {
bd_set_size(bdev,(loff_t)get_capacity(disk)<<9);
bdi = blk_get_backing_dev_info(bdev);
@@ -580,7 +571,8 @@ static int do_open(struct block_device *bdev, struct inode *inode, struct file *
ret = -ENXIO;
goto out_first;
}
- bdev->bd_offset = p->start_sect;
+ kobject_get(&p->kobj);
+ bdev->bd_part = p;
bd_set_size(bdev, (loff_t) p->nr_sects << 9);
up(&whole->bd_sem);
}
@@ -701,6 +693,10 @@ int blkdev_put(struct block_device *bdev, int kind)
put_disk(disk);
module_put(owner);
+ if (bdev->bd_contains != bdev) {
+ kobject_put(&bdev->bd_part->kobj);
+ bdev->bd_part = NULL;
+ }
bdev->bd_disk = NULL;
bdev->bd_inode->i_data.backing_dev_info = &default_backing_dev_info;
if (bdev != bdev->bd_contains) {
diff --git a/fs/cifs/cifsfs.c b/fs/cifs/cifsfs.c
index f600f27df21f..ea39e21685c8 100644
--- a/fs/cifs/cifsfs.c
+++ b/fs/cifs/cifsfs.c
@@ -598,10 +598,12 @@ static int cifs_oplock_thread(void * dummyarg)
netfid = oplock_item->netfid;
DeleteOplockQEntry(oplock_item);
write_unlock(&GlobalMid_Lock);
- rc = filemap_fdatawrite(inode->i_mapping);
- if(rc)
- CIFS_I(inode)->write_behind_rc
- = rc;
+ if (S_ISREG(inode->i_mode))
+ rc = filemap_fdatawrite(inode->i_mapping);
+ else
+ rc = 0;
+ if (rc)
+ CIFS_I(inode)->write_behind_rc = rc;
cFYI(1,("Oplock flush inode %p rc %d",inode,rc));
rc = CIFSSMBLock(0, pTcon, netfid,
0 /* len */ , 0 /* offset */, 0,
diff --git a/fs/coda/inode.c b/fs/coda/inode.c
index 91087269e255..75b933ab6373 100644
--- a/fs/coda/inode.c
+++ b/fs/coda/inode.c
@@ -115,7 +115,7 @@ static int get_device_index(struct coda_mount_data *data)
inode = file->f_dentry->d_inode;
if(!inode || !S_ISCHR(inode->i_mode) ||
- major(inode->i_rdev) != CODA_PSDEV_MAJOR) {
+ imajor(inode) != CODA_PSDEV_MAJOR) {
if(file)
fput(file);
@@ -123,7 +123,7 @@ static int get_device_index(struct coda_mount_data *data)
return -1;
}
- idx = minor(inode->i_rdev);
+ idx = iminor(inode);
fput(file);
if(idx < 0 || idx >= MAX_CODADEVS) {
diff --git a/fs/coda/psdev.c b/fs/coda/psdev.c
index 691a14f27724..9ae607705839 100644
--- a/fs/coda/psdev.c
+++ b/fs/coda/psdev.c
@@ -279,7 +279,7 @@ static int coda_psdev_open(struct inode * inode, struct file * file)
int idx;
lock_kernel();
- idx = minor(inode->i_rdev);
+ idx = iminor(inode);
if(idx >= MAX_CODADEVS) {
unlock_kernel();
return -ENODEV;
diff --git a/fs/compat_ioctl.c b/fs/compat_ioctl.c
index f5c44a1e0952..cceb654cf0b3 100644
--- a/fs/compat_ioctl.c
+++ b/fs/compat_ioctl.c
@@ -1573,7 +1573,7 @@ static int vt_check(struct file *file)
return -EINVAL;
tty = (struct tty_struct *)file->private_data;
- if (tty_paranoia_check(tty, inode->i_rdev, "tty_ioctl"))
+ if (tty_paranoia_check(tty, inode, "tty_ioctl"))
return -EINVAL;
if (tty->driver->ioctl != vt_ioctl)
diff --git a/fs/hpfs/namei.c b/fs/hpfs/namei.c
index 866976557245..18f8b1c00e93 100644
--- a/fs/hpfs/namei.c
+++ b/fs/hpfs/namei.c
@@ -375,6 +375,7 @@ again:
spin_lock(&dentry->d_lock);
if (atomic_read(&dentry->d_count) > 1 ||
permission(inode, MAY_WRITE, NULL) ||
+ !S_ISREG(inode->i_mode) ||
get_write_access(inode)) {
spin_unlock(&dentry->d_lock);
d_rehash(dentry);
diff --git a/fs/intermezzo/presto.c b/fs/intermezzo/presto.c
index 76593ad45f53..8b29fe3d053f 100644
--- a/fs/intermezzo/presto.c
+++ b/fs/intermezzo/presto.c
@@ -66,8 +66,8 @@ int presto_i2m(struct inode *inode)
cache = presto_get_cache(inode);
CDEBUG(D_PSDEV, "\n");
if ( !cache ) {
- CERROR("PRESTO: BAD: cannot find cache for dev %d, ino %ld\n",
- inode->i_sb->s_dev, inode->i_ino);
+ CERROR("PRESTO: BAD: cannot find cache for dev %s, ino %ld\n",
+ inode->i_sb->s_id, inode->i_ino);
EXIT;
return -1;
}
diff --git a/fs/intermezzo/vfs.c b/fs/intermezzo/vfs.c
index 6629dff1c874..920ba2773961 100644
--- a/fs/intermezzo/vfs.c
+++ b/fs/intermezzo/vfs.c
@@ -743,7 +743,7 @@ int presto_do_link(struct presto_file_set *fset, struct dentry *old_dentry,
goto exit_lock;
error = -EXDEV;
- if (dir->d_inode->i_sb->s_dev != inode->i_sb->s_dev)
+ if (dir->d_inode->i_sb != inode->i_sb)
goto exit_lock;
/*
@@ -1800,7 +1800,7 @@ int presto_rename_dir(struct presto_file_set *fset, struct dentry *old_parent,
if (error)
return error;
- if (new_dir->i_sb->s_dev != old_dir->i_sb->s_dev)
+ if (new_dir->i_sb != old_dir->i_sb)
return -EXDEV;
if (!new_dentry->d_inode)
@@ -1881,7 +1881,7 @@ int presto_rename_other(struct presto_file_set *fset, struct dentry *old_parent,
if (error)
return error;
- if (new_dir->i_sb->s_dev != old_dir->i_sb->s_dev)
+ if (new_dir->i_sb != old_dir->i_sb)
return -EXDEV;
if (!new_dentry->d_inode)
diff --git a/fs/jffs/inode-v23.c b/fs/jffs/inode-v23.c
index 447ecc14e4e0..81bb564f984f 100644
--- a/fs/jffs/inode-v23.c
+++ b/fs/jffs/inode-v23.c
@@ -1080,9 +1080,11 @@ jffs_mknod(struct inode *dir, struct dentry *dentry, int mode, dev_t rdev)
struct jffs_control *c;
struct inode *inode;
int result = 0;
- kdev_t dev = to_kdev_t(rdev);
+ u16 data;
int err;
+ data = (MAJOR(rdev) << 8) | MINOR(rdev);
+
D1(printk("***jffs_mknod()\n"));
lock_kernel();
@@ -1114,7 +1116,7 @@ jffs_mknod(struct inode *dir, struct dentry *dentry, int mode, dev_t rdev)
raw_inode.mtime = raw_inode.atime;
raw_inode.ctime = raw_inode.atime;
raw_inode.offset = 0;
- raw_inode.dsize = sizeof(kdev_t);
+ raw_inode.dsize = 2;
raw_inode.rsize = 0;
raw_inode.nsize = dentry->d_name.len;
raw_inode.nlink = 1;
@@ -1124,7 +1126,7 @@ jffs_mknod(struct inode *dir, struct dentry *dentry, int mode, dev_t rdev)
/* Write the new node to the flash. */
if ((err = jffs_write_node(c, node, &raw_inode, dentry->d_name.name,
- (unsigned char *)&dev, 0, NULL)) < 0) {
+ (unsigned char *)&data, 0, NULL)) < 0) {
D(printk("jffs_mknod(): jffs_write_node() failed.\n"));
result = err;
goto jffs_mknod_err;
@@ -1732,9 +1734,10 @@ jffs_read_inode(struct inode *inode)
/* If the node is a device of some sort, then the number of
the device should be read from the flash memory and then
added to the inode's i_rdev member. */
- kdev_t rdev;
- jffs_read_data(f, (char *)&rdev, 0, sizeof(kdev_t));
- init_special_inode(inode, inode->i_mode, kdev_t_to_nr(rdev));
+ u16 val;
+ jffs_read_data(f, (char *)val, 0, 2);
+ init_special_inode(inode, inode->i_mode,
+ MKDEV((val >> 8) & 255, val & 255));
}
D3(printk (KERN_NOTICE "read_inode(): up biglock\n"));
diff --git a/fs/jffs2/file.c b/fs/jffs2/file.c
index 4d241373dc15..9441b7159489 100644
--- a/fs/jffs2/file.c
+++ b/fs/jffs2/file.c
@@ -103,8 +103,8 @@ int jffs2_setattr (struct dentry *dentry, struct iattr *iattr)
it out again with the appropriate data attached */
if (S_ISBLK(inode->i_mode) || S_ISCHR(inode->i_mode)) {
/* For these, we don't actually need to read the old node */
- dev = (major(dentry->d_inode->i_rdev) << 8) |
- minor(dentry->d_inode->i_rdev);
+ dev = (imajor(dentry->d_inode) << 8) |
+ iminor(dentry->d_inode);
mdata = (char *)&dev;
mdatalen = sizeof(dev);
D1(printk(KERN_DEBUG "jffs2_setattr(): Writing %d bytes of kdev_t\n", mdatalen));
diff --git a/fs/jffs2/os-linux.h b/fs/jffs2/os-linux.h
index c4699f223ec2..d06443ceec68 100644
--- a/fs/jffs2/os-linux.h
+++ b/fs/jffs2/os-linux.h
@@ -44,8 +44,8 @@
#define JFFS2_F_I_GID(f) (OFNI_EDONI_2SFFJ(f)->i_gid)
#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,1)
-#define JFFS2_F_I_RDEV_MIN(f) (minor(OFNI_EDONI_2SFFJ(f)->i_rdev))
-#define JFFS2_F_I_RDEV_MAJ(f) (major(OFNI_EDONI_2SFFJ(f)->i_rdev))
+#define JFFS2_F_I_RDEV_MIN(f) (iminor(OFNI_EDONI_2SFFJ(f)))
+#define JFFS2_F_I_RDEV_MAJ(f) (imajor(OFNI_EDONI_2SFFJ(f)))
#else
#define JFFS2_F_I_RDEV_MIN(f) (MINOR(to_kdev_t(OFNI_EDONI_2SFFJ(f)->i_rdev)))
#define JFFS2_F_I_RDEV_MAJ(f) (MAJOR(to_kdev_t(OFNI_EDONI_2SFFJ(f)->i_rdev)))
diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c
index c8e3191d91ca..4ecb69586bab 100644
--- a/fs/nfs/inode.c
+++ b/fs/nfs/inode.c
@@ -620,7 +620,7 @@ nfs_zap_caches(struct inode *inode)
NFS_ATTRTIMEO(inode) = NFS_MINATTRTIMEO(inode);
NFS_ATTRTIMEO_UPDATE(inode) = jiffies;
- invalidate_inode_pages(inode->i_mapping);
+ invalidate_remote_inode(inode);
memset(NFS_COOKIEVERF(inode), 0, sizeof(NFS_COOKIEVERF(inode)));
NFS_CACHEINV(inode);
@@ -823,14 +823,15 @@ printk("nfs_setattr: revalidate failed, error=%d\n", error);
goto out;
}
- if (!S_ISREG(inode->i_mode))
+ if (!S_ISREG(inode->i_mode)) {
attr->ia_valid &= ~ATTR_SIZE;
-
- filemap_fdatawrite(inode->i_mapping);
- error = nfs_wb_all(inode);
- filemap_fdatawait(inode->i_mapping);
- if (error)
- goto out;
+ } else {
+ filemap_fdatawrite(inode->i_mapping);
+ error = nfs_wb_all(inode);
+ filemap_fdatawait(inode->i_mapping);
+ if (error)
+ goto out;
+ }
error = NFS_PROTO(inode)->setattr(dentry, &fattr, attr);
if (error)
@@ -1205,7 +1206,7 @@ __nfs_refresh_inode(struct inode *inode, struct nfs_fattr *fattr)
if (invalid) {
nfsi->attrtimeo = NFS_MINATTRTIMEO(inode);
nfsi->attrtimeo_timestamp = jiffies;
- invalidate_inode_pages(inode->i_mapping);
+ invalidate_remote_inode(inode);
memset(NFS_COOKIEVERF(inode), 0, sizeof(NFS_COOKIEVERF(inode)));
} else if (time_after(jiffies, nfsi->attrtimeo_timestamp+nfsi->attrtimeo)) {
if ((nfsi->attrtimeo <<= 1) > NFS_MAXATTRTIMEO(inode))
diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
index 0297636053d1..5c05b8ad9c55 100644
--- a/fs/nfsd/nfs4state.c
+++ b/fs/nfsd/nfs4state.c
@@ -688,7 +688,7 @@ static struct list_head ownerstr_hashtbl[OWNER_HASH_SIZE];
#define OPENSTATEID_HASH_MASK (OPENSTATEID_HASH_SIZE - 1)
#define file_hashval(x) \
- ((unsigned int)((x)->dev + (x)->ino + (x)->generation) & FILE_HASH_MASK)
+ hash_ptr(x, FILE_HASH_BITS)
#define openstateid_hashval(owner_id, file_id) \
(((owner_id) + (file_id)) & OPENSTATEID_HASH_MASK)
@@ -697,13 +697,13 @@ static struct list_head openstateid_hashtbl[OPENSTATEID_HASH_SIZE];
/* OPEN Share state helper functions */
static inline struct nfs4_file *
-alloc_init_file(unsigned int hashval, nfs4_ino_desc_t *ino) {
+alloc_init_file(unsigned int hashval, struct inode *ino) {
struct nfs4_file *fp;
if ((fp = kmalloc(sizeof(struct nfs4_file),GFP_KERNEL))) {
INIT_LIST_HEAD(&fp->fi_hash);
INIT_LIST_HEAD(&fp->fi_perfile);
list_add(&fp->fi_hash, &file_hashtbl[hashval]);
- memcpy(&fp->fi_ino, ino, sizeof(nfs4_ino_desc_t));
+ fp->fi_ino = igrab(ino);
fp->fi_id = current_fileid++;
alloc_file++;
return fp;
@@ -841,11 +841,12 @@ release_file(struct nfs4_file *fp)
{
free_file++;
list_del_init(&fp->fi_hash);
+ iput(fp->ino);
kfree(fp);
}
void
-release_open_state(struct nfs4_stateid *stp)
+release_open_state(struct nfs4_stateid *stp, struct nfsd4_close *cl)
{
struct nfs4_stateowner *sop = stp->st_stateowner;
struct nfs4_file *fp = stp->st_file;
@@ -860,6 +861,7 @@ release_open_state(struct nfs4_stateid *stp)
*/
if (sop->so_confirmed && list_empty(&sop->so_peropenstate)) {
release_stateowner(sop);
+ cl->cl_stateowner = NULL;
}
/* unused nfs4_file's are releseed. XXX slab cache? */
if (list_empty(&fp->fi_perfile)) {
@@ -934,24 +936,10 @@ test_share(struct nfs4_stateid *stp, struct nfsd4_open *open) {
return 1;
}
-static inline void
-nfs4_init_ino(nfs4_ino_desc_t *ino, struct svc_fh *fhp)
-{
- struct inode *inode;
- if (!fhp->fh_dentry)
- BUG();
- inode = fhp->fh_dentry->d_inode;
- if (!inode)
- BUG();
- ino->dev = inode->i_sb->s_dev;
- ino->ino = inode->i_ino;
- ino->generation = inode->i_generation;
-}
-
int
nfs4_share_conflict(struct svc_fh *current_fh, unsigned int deny_type)
{
- nfs4_ino_desc_t ino;
+ struct inode *ino = current_fh->fh_dentry->d_inode;
unsigned int fi_hashval;
struct nfs4_file *fp;
struct nfs4_stateid *stp;
@@ -959,9 +947,8 @@ nfs4_share_conflict(struct svc_fh *current_fh, unsigned int deny_type)
dprintk("NFSD: nfs4_share_conflict\n");
- nfs4_init_ino(&ino, current_fh);
- fi_hashval = file_hashval(&ino);
- if (find_file(fi_hashval, &ino, &fp)) {
+ fi_hashval = file_hashval(ino);
+ if (find_file(fi_hashval, ino, &fp)) {
/* Search for conflicting share reservations */
list_for_each_safe(pos, next, &fp->fi_perfile) {
stp = list_entry(pos, struct nfs4_stateid, st_perfile);
@@ -1084,7 +1071,7 @@ nfsd4_process_open2(struct svc_rqst *rqstp, struct svc_fh *current_fh, struct nf
struct iattr iattr;
struct nfs4_stateowner *sop = open->op_stateowner;
struct nfs4_file *fp;
- nfs4_ino_desc_t ino;
+ struct inode *ino;
unsigned int fi_hashval;
struct list_head *pos, *next;
struct nfs4_stateid *stq, *stp = NULL;
@@ -1094,11 +1081,11 @@ nfsd4_process_open2(struct svc_rqst *rqstp, struct svc_fh *current_fh, struct nf
if (!sop)
goto out;
- nfs4_init_ino(&ino, current_fh);
+ ino = current_fh->fh_dentry->d_inode;
down(&client_sema); /*XXX need finer grained locking */
- fi_hashval = file_hashval(&ino);
- if (find_file(fi_hashval, &ino, &fp)) {
+ fi_hashval = file_hashval(ino);
+ if (find_file(fi_hashval, ino, &fp)) {
/* Search for conflicting share reservations */
status = nfserr_share_denied;
list_for_each_safe(pos, next, &fp->fi_perfile) {
@@ -1113,7 +1100,7 @@ nfsd4_process_open2(struct svc_rqst *rqstp, struct svc_fh *current_fh, struct nf
} else {
/* No nfs4_file found; allocate and init a new one */
status = nfserr_resource;
- if ((fp = alloc_init_file(fi_hashval, &ino)) == NULL)
+ if ((fp = alloc_init_file(fi_hashval, ino)) == NULL)
goto out;
}
@@ -1172,6 +1159,9 @@ nfsd4_process_open2(struct svc_rqst *rqstp, struct svc_fh *current_fh, struct nf
open->op_delegate_type = NFS4_OPEN_DELEGATE_NONE;
status = nfs_ok;
out:
+ if (fp && list_empty(&fp->fi_perfile))
+ release_file(fp);
+
/*
* To finish the open response, we just need to set the rflags.
*/
@@ -1584,7 +1574,7 @@ nfsd4_close(struct svc_rqst *rqstp, struct svc_fh *current_fh, struct nfsd4_clos
memcpy(&close->cl_stateid, &stp->st_stateid, sizeof(stateid_t));
/* release_open_state() calls nfsd_close() if needed */
- release_open_state(stp);
+ release_open_state(stp,close);
out:
up(&client_sema);
return status;
diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c
index 986aed1b5ac0..dd76f066aac0 100644
--- a/fs/nfsd/nfs4xdr.c
+++ b/fs/nfsd/nfs4xdr.c
@@ -1631,6 +1631,8 @@ nfsd4_encode_close(struct nfsd4_compoundres *resp, int nfserr, struct nfsd4_clos
WRITEMEM(&close->cl_stateid.si_opaque, sizeof(stateid_opaque_t));
ADJUST_ARGS();
}
+ if ((close->cl_stateowner) && (close->cl_stateowner->so_confirmed))
+ close->cl_stateowner->so_seqid++;
}
@@ -1767,6 +1769,8 @@ nfsd4_encode_open(struct nfsd4_compoundres *resp, int nfserr, struct nfsd4_open
default:
BUG();
}
+
+ ENCODE_SEQID_OP_TAIL(open->op_stateowner);
}
static int
diff --git a/fs/partitions/check.c b/fs/partitions/check.c
index 7370a2f00539..08585ea0bcf1 100644
--- a/fs/partitions/check.c
+++ b/fs/partitions/check.c
@@ -267,7 +267,14 @@ static struct attribute * default_attrs[] = {
extern struct subsystem block_subsys;
+static void part_release(struct kobject *kobj)
+{
+ struct hd_struct * p = container_of(kobj,struct hd_struct,kobj);
+ kfree(p);
+}
+
struct kobj_type ktype_part = {
+ .release = part_release,
.default_attrs = default_attrs,
.sysfs_ops = &part_sysfs_ops,
};
@@ -279,13 +286,12 @@ void delete_partition(struct gendisk *disk, int part)
return;
if (!p->nr_sects)
return;
+ disk->part[part-1] = NULL;
p->start_sect = 0;
p->nr_sects = 0;
p->reads = p->writes = p->read_sectors = p->write_sectors = 0;
devfs_remove("%s/part%d", disk->devfs_name, part);
kobject_unregister(&p->kobj);
- disk->part[part-1] = NULL;
- kfree(p);
}
void add_partition(struct gendisk *disk, int part, sector_t start, sector_t len)
@@ -300,7 +306,6 @@ void add_partition(struct gendisk *disk, int part, sector_t start, sector_t len)
p->start_sect = start;
p->nr_sects = len;
p->partno = part;
- disk->part[part-1] = p;
devfs_mk_bdev(MKDEV(disk->major, disk->first_minor + part),
S_IFBLK|S_IRUSR|S_IWUSR,
@@ -310,6 +315,7 @@ void add_partition(struct gendisk *disk, int part, sector_t start, sector_t len)
p->kobj.parent = &disk->kobj;
p->kobj.ktype = &ktype_part;
kobject_register(&p->kobj);
+ disk->part[part-1] = p;
}
static void disk_sysfs_symlinks(struct gendisk *disk)
diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c
index 3d7d759c63da..3a1c3cb2d7a6 100644
--- a/fs/proc/task_mmu.c
+++ b/fs/proc/task_mmu.c
@@ -90,14 +90,14 @@ static int show_map(struct seq_file *m, void *v)
ino = inode->i_ino;
}
- seq_printf(m, "%0*lx-%0*lx %c%c%c%c %0*lx %02x:%02x %lu %n",
- (int) (2*sizeof(void*)), map->vm_start,
- (int) (2*sizeof(void*)), map->vm_end,
+ seq_printf(m, "%08lx-%08lx %c%c%c%c %08lx %02x:%02x %lu %n",
+ map->vm_start,
+ map->vm_end,
flags & VM_READ ? 'r' : '-',
flags & VM_WRITE ? 'w' : '-',
flags & VM_EXEC ? 'x' : '-',
flags & VM_MAYSHARE ? 's' : 'p',
- (int) (2*sizeof(void*)), map->vm_pgoff << PAGE_SHIFT,
+ map->vm_pgoff << PAGE_SHIFT,
MAJOR(dev), MINOR(dev), ino, &len);
if (map->vm_file) {
diff --git a/fs/smbfs/inode.c b/fs/smbfs/inode.c
index 3fce7b152ace..a01094b732f4 100644
--- a/fs/smbfs/inode.c
+++ b/fs/smbfs/inode.c
@@ -212,7 +212,7 @@ smb_set_inode_attr(struct inode *inode, struct smb_fattr *fattr)
(long) last_sz, (long) inode->i_size);
if (!S_ISDIR(inode->i_mode))
- invalidate_inode_pages(inode->i_mapping);
+ invalidate_remote_inode(inode);
}
}
@@ -276,7 +276,7 @@ smb_refresh_inode(struct dentry *dentry)
* But we do want to invalidate the caches ...
*/
if (!S_ISDIR(inode->i_mode))
- invalidate_inode_pages(inode->i_mapping);
+ invalidate_remote_inode(inode);
else
smb_invalid_dir_cache(inode);
error = -EIO;
diff --git a/include/asm-m68k/local.h b/include/asm-m68k/local.h
new file mode 100644
index 000000000000..6c259263e1f0
--- /dev/null
+++ b/include/asm-m68k/local.h
@@ -0,0 +1,6 @@
+#ifndef _ASM_M68K_LOCAL_H
+#define _ASM_M68K_LOCAL_H
+
+#include <asm-generic/local.h>
+
+#endif /* _ASM_M68K_LOCAL_H */
diff --git a/include/asm-m68k/sections.h b/include/asm-m68k/sections.h
new file mode 100644
index 000000000000..d64967ecfec6
--- /dev/null
+++ b/include/asm-m68k/sections.h
@@ -0,0 +1,6 @@
+#ifndef _ASM_M68K_SECTIONS_H
+#define _ASM_M68K_SECTIONS_H
+
+#include <asm-generic/sections.h>
+
+#endif /* _ASM_M68K_SECTIONS_H */
diff --git a/include/asm-m68k/system.h b/include/asm-m68k/system.h
index 77ac69c31981..2491ff5dd92c 100644
--- a/include/asm-m68k/system.h
+++ b/include/asm-m68k/system.h
@@ -36,9 +36,12 @@ asmlinkage void resume(void);
#define switch_to(prev,next,last) do { \
register void *_prev __asm__ ("a0") = (prev); \
register void *_next __asm__ ("a1") = (next); \
+ register void *_last __asm__ ("d1"); \
__asm__ __volatile__("jbsr resume" \
- : : "a" (_prev), "a" (_next) \
- : "d0", "d1", "d2", "d3", "d4", "d5", "a0", "a1"); \
+ : "=a" (_prev), "=a" (_next), "=d" (_last) \
+ : "0" (_prev), "1" (_next) \
+ : "d0", "d2", "d3", "d4", "d5"); \
+ (last) = _last; \
} while (0)
diff --git a/include/asm-x86_64/bitops.h b/include/asm-x86_64/bitops.h
index 6830b9ee6174..59c0a4785301 100644
--- a/include/asm-x86_64/bitops.h
+++ b/include/asm-x86_64/bitops.h
@@ -466,7 +466,7 @@ static __inline__ int ffs(int x)
__asm__("bsfl %1,%0\n\t"
"cmovzl %2,%0"
- : "=r" (r) : "g" (x), "r" (32));
+ : "=r" (r) : "g" (x), "r" (-1));
return r+1;
}
diff --git a/include/asm-x86_64/mpspec.h b/include/asm-x86_64/mpspec.h
index bf783aa470ea..02245540c2f3 100644
--- a/include/asm-x86_64/mpspec.h
+++ b/include/asm-x86_64/mpspec.h
@@ -169,7 +169,6 @@ extern int mp_bus_id_to_pci_bus [MAX_MP_BUSSES];
extern cpumask_t mp_bus_to_cpumask [MAX_MP_BUSSES];
extern unsigned int boot_cpu_physical_apicid;
-extern cpumask_t phys_cpu_present_map;
extern int smp_found_config;
extern void find_smp_config (void);
extern void get_smp_config (void);
@@ -198,5 +197,49 @@ extern void mp_config_ioapic_for_sci(int irq);
extern int using_apic_timer;
+#define PHYSID_ARRAY_SIZE BITS_TO_LONGS(MAX_APICS)
+
+struct physid_mask
+{
+ unsigned long mask[PHYSID_ARRAY_SIZE];
+};
+
+typedef struct physid_mask physid_mask_t;
+
+#define physid_set(physid, map) set_bit(physid, (map).mask)
+#define physid_clear(physid, map) clear_bit(physid, (map).mask)
+#define physid_isset(physid, map) test_bit(physid, (map).mask)
+#define physid_test_and_set(physid, map) test_and_set_bit(physid, (map).mask)
+
+#define physids_and(dst, src1, src2) bitmap_and((dst).mask, (src1).mask, (src2).mask, MAX_APICS)
+#define physids_or(dst, src1, src2) bitmap_or((dst).mask, (src1).mask, (src2).mask, MAX_APICS)
+#define physids_clear(map) bitmap_clear((map).mask, MAX_APICS)
+#define physids_complement(map) bitmap_complement((map).mask, MAX_APICS)
+#define physids_empty(map) bitmap_empty((map).mask, MAX_APICS)
+#define physids_equal(map1, map2) bitmap_equal((map1).mask, (map2).mask, MAX_APICS)
+#define physids_weight(map) bitmap_weight((map).mask, MAX_APICS)
+#define physids_shift_right(d, s, n) bitmap_shift_right((d).mask, (s).mask, n, MAX_APICS)
+#define physids_shift_left(d, s, n) bitmap_shift_left((d).mask, (s).mask, n, MAX_APICS)
+#define physids_coerce(map) ((map).mask[0])
+
+#define physids_promote(physids) \
+ ({ \
+ physid_mask_t __physid_mask = PHYSID_MASK_NONE; \
+ __physid_mask.mask[0] = physids; \
+ __physid_mask; \
+ })
+
+#define physid_mask_of_physid(physid) \
+ ({ \
+ physid_mask_t __physid_mask = PHYSID_MASK_NONE; \
+ physid_set(physid, __physid_mask); \
+ __physid_mask; \
+ })
+
+#define PHYSID_MASK_ALL { {[0 ... PHYSID_ARRAY_SIZE-1] = ~0UL} }
+#define PHYSID_MASK_NONE { {[0 ... PHYSID_ARRAY_SIZE-1] = 0UL} }
+
+extern physid_mask_t phys_cpu_present_map;
+
#endif
diff --git a/include/asm-x86_64/percpu.h b/include/asm-x86_64/percpu.h
index 832fc326fb02..d73be96517d4 100644
--- a/include/asm-x86_64/percpu.h
+++ b/include/asm-x86_64/percpu.h
@@ -31,6 +31,9 @@ do { \
memcpy((pcpudst)+__per_cpu_offset(__i), \
(src), (size)); \
} while (0)
+
+extern void setup_per_cpu_areas(void);
+
#else /* ! SMP */
#define DEFINE_PER_CPU(type, name) \
@@ -46,6 +49,4 @@ do { \
#define EXPORT_PER_CPU_SYMBOL(var) EXPORT_SYMBOL(per_cpu__##var)
#define EXPORT_PER_CPU_SYMBOL_GPL(var) EXPORT_SYMBOL_GPL(per_cpu__##var)
-extern void setup_per_cpu_areas(void);
-
#endif /* _ASM_X8664_PERCPU_H_ */
diff --git a/include/asm-x86_64/processor.h b/include/asm-x86_64/processor.h
index 12714f573352..e151dbb1e704 100644
--- a/include/asm-x86_64/processor.h
+++ b/include/asm-x86_64/processor.h
@@ -225,7 +225,6 @@ struct tss_struct {
* 8 bytes, for an extra "long" of ~0UL
*/
unsigned long io_bitmap[IO_BITMAP_LONGS + 1];
- u32 __cacheline_filler[4]; /* size is 0x100 */
} __attribute__((packed)) ____cacheline_aligned;
struct thread_struct {
diff --git a/include/asm-x86_64/smp.h b/include/asm-x86_64/smp.h
index 7959579136bd..ba4e4ad1a189 100644
--- a/include/asm-x86_64/smp.h
+++ b/include/asm-x86_64/smp.h
@@ -36,7 +36,6 @@ struct pt_regs;
*/
extern void smp_alloc_memory(void);
-extern cpumask_t phys_cpu_present_map;
extern cpumask_t cpu_online_map;
extern volatile unsigned long smp_invalidate_needed;
extern int pic_mode;
diff --git a/include/asm-x86_64/suspend.h b/include/asm-x86_64/suspend.h
index 3b3f794d9cec..e34526cd6e9f 100644
--- a/include/asm-x86_64/suspend.h
+++ b/include/asm-x86_64/suspend.h
@@ -44,7 +44,7 @@ extern unsigned long saved_context_eflags;
:"r" ((thread)->debugreg##register))
extern void fix_processor_context(void);
-extern void do_magic(int resume);
+extern int do_magic(int resume);
#ifdef CONFIG_ACPI_SLEEP
extern unsigned long saved_eip;
diff --git a/include/asm-x86_64/topology.h b/include/asm-x86_64/topology.h
index c4f359c87973..d4548e5ed6dc 100644
--- a/include/asm-x86_64/topology.h
+++ b/include/asm-x86_64/topology.h
@@ -10,21 +10,18 @@
/* Map the K8 CPU local memory controllers to a simple 1:1 CPU:NODE topology */
extern int fake_node;
-extern cpumask_t cpu_online_map;
+extern unsigned long cpu_online_map;
#define cpu_to_node(cpu) (fake_node ? 0 : (cpu))
#define memblk_to_node(memblk) (fake_node ? 0 : (memblk))
#define parent_node(node) (node)
#define node_to_first_cpu(node) (fake_node ? 0 : (node))
-#define node_to_cpu_mask(node) (fake_node ? cpu_online_map : cpumask_of_cpu(node))
+#define node_to_cpu_mask(node) (fake_node ? cpu_online_map : (1UL << (node)))
#define node_to_memblk(node) (node)
-static inline cpumask_t pcibus_to_cpumask(int bus)
+static inline unsigned long pcibus_to_cpumask(int bus)
{
- cpumask_t ret;
-
- cpus_and(ret, mp_bus_to_cpumask[bus], cpu_online_map);
- return ret;
+ return mp_bus_to_cpumask[bus] & cpu_online_map;
}
#define NODE_BALANCE_RATE 30 /* CHECKME */
diff --git a/include/linux/fs.h b/include/linux/fs.h
index a9e02e3dcdd8..108e53f176c9 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -336,10 +336,8 @@ struct address_space {
};
struct block_device {
- struct list_head bd_hash;
- atomic_t bd_count;
- struct inode * bd_inode;
dev_t bd_dev; /* not a kdev_t - it's a search key */
+ struct inode * bd_inode; /* will die */
int bd_openers;
struct semaphore bd_sem; /* open/close mutex */
struct list_head bd_inodes;
@@ -347,10 +345,11 @@ struct block_device {
int bd_holders;
struct block_device * bd_contains;
unsigned bd_block_size;
- sector_t bd_offset;
+ struct hd_struct * bd_part;
unsigned bd_part_count;
int bd_invalidated;
struct gendisk * bd_disk;
+ struct list_head bd_list;
};
/*
@@ -468,6 +467,16 @@ static inline void i_size_write(struct inode *inode, loff_t i_size)
#endif
}
+static inline unsigned iminor(struct inode *inode)
+{
+ return minor(inode->i_rdev);
+}
+
+static inline unsigned imajor(struct inode *inode)
+{
+ return major(inode->i_rdev);
+}
+
struct fown_struct {
rwlock_t lock; /* protects pid, uid, euid fields */
int pid; /* pid or -pgrp where SIGIO should be sent */
@@ -1176,6 +1185,12 @@ extern int invalidate_partition(struct gendisk *, int);
unsigned long invalidate_mapping_pages(struct address_space *mapping,
pgoff_t start, pgoff_t end);
unsigned long invalidate_inode_pages(struct address_space *mapping);
+static inline void invalidate_remote_inode(struct inode *inode)
+{
+ if (S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) ||
+ S_ISLNK(inode->i_mode))
+ invalidate_inode_pages(inode->i_mapping);
+}
extern void invalidate_inode_pages2(struct address_space *mapping);
extern void write_inode_now(struct inode *, int);
extern int filemap_fdatawrite(struct address_space *);
diff --git a/include/linux/genhd.h b/include/linux/genhd.h
index 3e4ef6b13683..623baf2fd239 100644
--- a/include/linux/genhd.h
+++ b/include/linux/genhd.h
@@ -197,7 +197,7 @@ extern void rand_initialize_disk(struct gendisk *disk);
static inline sector_t get_start_sect(struct block_device *bdev)
{
- return bdev->bd_offset;
+ return bdev->bd_part->start_sect;
}
static inline sector_t get_capacity(struct gendisk *disk)
{
diff --git a/include/linux/ide.h b/include/linux/ide.h
index a3ee36b438ca..a68f7871d3bb 100644
--- a/include/linux/ide.h
+++ b/include/linux/ide.h
@@ -1242,21 +1242,6 @@ typedef struct ide_driver_s {
extern int generic_ide_ioctl(struct block_device *, unsigned, unsigned long);
-/*
- * IDE modules.
- */
-#define IDE_CHIPSET_MODULE 0 /* not supported yet */
-#define IDE_PROBE_MODULE 1
-
-typedef int (ide_module_init_proc)(void);
-
-typedef struct ide_module_s {
- int type;
- ide_module_init_proc *init;
- void *info;
- struct ide_module_s *next;
-} ide_module_t;
-
typedef struct ide_devices_s {
char name[4]; /* hdX */
unsigned attached : 1; /* native */
@@ -1274,8 +1259,7 @@ typedef struct ide_devices_s {
*/
#ifndef _IDE_C
extern ide_hwif_t ide_hwifs[]; /* master data repository */
-extern ide_module_t *ide_chipsets;
-extern ide_module_t *ide_probe;
+extern int (*ide_probe)(void);
extern ide_devices_t *idedisk;
extern ide_devices_t *idecd;
@@ -1772,8 +1756,6 @@ extern int ide_hwif_request_regions(ide_hwif_t *hwif);
extern void ide_hwif_release_regions(ide_hwif_t* hwif);
extern void ide_unregister (unsigned int index);
-extern int export_ide_init_queue(ide_drive_t *);
-extern u8 export_probe_for_drive(ide_drive_t *);
extern int probe_hwif_init(ide_hwif_t *);
static inline void *ide_get_hwifdata (ide_hwif_t * hwif)
@@ -1794,6 +1776,24 @@ extern char *ide_xfer_verbose(u8 xfer_rate);
extern void ide_toggle_bounce(ide_drive_t *drive, int on);
extern int ide_set_xfer_rate(ide_drive_t *drive, u8 rate);
+typedef struct ide_pio_timings_s {
+ int setup_time; /* Address setup (ns) minimum */
+ int active_time; /* Active pulse (ns) minimum */
+ int cycle_time; /* Cycle time (ns) minimum = (setup + active + recovery) */
+} ide_pio_timings_t;
+
+typedef struct ide_pio_data_s {
+ u8 pio_mode;
+ u8 use_iordy;
+ u8 overridden;
+ u8 blacklisted;
+ unsigned int cycle_time;
+} ide_pio_data_t;
+
+extern u8 ide_get_best_pio_mode (ide_drive_t *drive, u8 mode_wanted, u8 max_mode, ide_pio_data_t *d);
+extern const ide_pio_timings_t ide_pio_timings[6];
+
+
extern spinlock_t ide_lock;
extern struct semaphore ide_cfg_sem;
/*
diff --git a/include/linux/kdev_t.h b/include/linux/kdev_t.h
index 337b7261247b..900a4a1e1282 100644
--- a/include/linux/kdev_t.h
+++ b/include/linux/kdev_t.h
@@ -90,23 +90,8 @@ static inline unsigned int kdev_val(kdev_t dev)
return dev.value;
}
-static inline kdev_t val_to_kdev(unsigned int val)
-{
- kdev_t dev;
- dev.value = val;
- return dev;
-}
-
-#define HASHDEV(dev) (kdev_val(dev))
#define NODEV (mk_kdev(0,0))
-static inline int kdev_same(kdev_t dev1, kdev_t dev2)
-{
- return dev1.value == dev2.value;
-}
-
-#define kdev_none(d1) (!kdev_val(d1))
-
/* Mask off the high bits for now.. */
#define minor(dev) ((dev).value & 0xff)
#define major(dev) (((dev).value >> KDEV_MINOR_BITS) & 0xff)
diff --git a/include/linux/nfsd/nfsfh.h b/include/linux/nfsd/nfsfh.h
index 19f76c700f4d..d4d63cc8e5fa 100644
--- a/include/linux/nfsd/nfsfh.h
+++ b/include/linux/nfsd/nfsfh.h
@@ -294,8 +294,8 @@ fill_post_wcc(struct svc_fh *fhp)
/* how much do we care for accuracy with MinixFS? */
fhp->fh_post_blocks = (inode->i_size+511) >> 9;
}
- fhp->fh_post_rdev[0] = htonl((u32)major(inode->i_rdev));
- fhp->fh_post_rdev[1] = htonl((u32)minor(inode->i_rdev));
+ fhp->fh_post_rdev[0] = htonl((u32)imajor(inode));
+ fhp->fh_post_rdev[1] = htonl((u32)iminor(inode));
fhp->fh_post_atime = inode->i_atime;
fhp->fh_post_mtime = inode->i_mtime;
fhp->fh_post_ctime = inode->i_ctime;
diff --git a/include/linux/nfsd/state.h b/include/linux/nfsd/state.h
index 480eebab6993..66422a1c8277 100644
--- a/include/linux/nfsd/state.h
+++ b/include/linux/nfsd/state.h
@@ -113,21 +113,15 @@ struct nfs4_stateowner {
int so_confirmed; /* successful OPEN_CONFIRM? */
};
-typedef struct {
- u32 dev; /* super_block->s_dev */
- unsigned long ino;
- u32 generation;
-} nfs4_ino_desc_t;
-
/*
* nfs4_file: a file opened by some number of (open) nfs4_stateowners.
* o fi_perfile list is used to search for conflicting
* share_acces, share_deny on the file.
*/
struct nfs4_file {
- struct list_head fi_hash; /* hash by nfs4_ino_desc_t fields */
+ struct list_head fi_hash; /* hash by "struct inode *" */
struct list_head fi_perfile; /* list: nfs4_stateid */
- nfs4_ino_desc_t fi_ino;
+ struct inode *fi_inode;
u32 fi_id; /* used with stateowner->so_id
* for openstateid_hashtbl hash */
};
diff --git a/include/linux/tpqic02.h b/include/linux/tpqic02.h
index f980d4ff01fe..f0dfcfa56273 100644
--- a/include/linux/tpqic02.h
+++ b/include/linux/tpqic02.h
@@ -587,10 +587,10 @@
* |___________________ Reserved for diagnostics during debugging.
*/
-#define TP_REWCLOSE(d) ((minor(d)&0x01) == 1) /* rewind bit */
+#define TP_REWCLOSE(d) ((d)&1) /* rewind bit */
/* rewind is only done if data has been transferred */
-#define TP_DENS(dev) ((minor(dev) >> 1) & 0x07) /* tape density */
-#define TP_UNIT(dev) ((minor(dev) >> 4) & 0x07) /* unit number */
+#define TP_DENS(d) (((d) >> 1) & 0x07) /* tape density */
+#define TP_UNIT(d) (((d) >> 4) & 0x07) /* unit number */
/* print excessive diagnostics */
#define TP_DIAGS(dev) (QIC02_TAPE_DEBUG & TPQD_DIAGS)
diff --git a/include/linux/tty.h b/include/linux/tty.h
index aa10cff1871c..205e27af55a2 100644
--- a/include/linux/tty.h
+++ b/include/linux/tty.h
@@ -367,7 +367,7 @@ extern int espserial_init(void);
extern int macserial_init(void);
extern int a2232board_init(void);
-extern int tty_paranoia_check(struct tty_struct *tty, kdev_t device,
+extern int tty_paranoia_check(struct tty_struct *tty, struct inode *inode,
const char *routine);
extern char *tty_name(struct tty_struct *tty, char *buf);
extern void tty_wait_until_sent(struct tty_struct * tty, long timeout);
diff --git a/ipc/msg.c b/ipc/msg.c
index c1e6bb646990..e9f5cecfdd4c 100644
--- a/ipc/msg.c
+++ b/ipc/msg.c
@@ -707,7 +707,7 @@ retry:
goto retry;
}
- msq->q_lspid = current->pid;
+ msq->q_lspid = current->tgid;
msq->q_stime = get_seconds();
if(!pipelined_send(msq,msg)) {
@@ -801,7 +801,7 @@ retry:
list_del(&msg->m_list);
msq->q_qnum--;
msq->q_rtime = get_seconds();
- msq->q_lrpid = current->pid;
+ msq->q_lrpid = current->tgid;
msq->q_cbytes -= msg->m_ts;
atomic_sub(msg->m_ts,&msg_bytes);
atomic_dec(&msg_hdrs);
diff --git a/ipc/sem.c b/ipc/sem.c
index b0d886377bb7..81aa6977c993 100644
--- a/ipc/sem.c
+++ b/ipc/sem.c
@@ -664,7 +664,7 @@ static int semctl_main(int semid, int semnum, int cmd, int version, union semun
for (un = sma->undo; un; un = un->id_next)
un->semadj[semnum] = 0;
curr->semval = val;
- curr->sempid = current->pid;
+ curr->sempid = current->tgid;
sma->sem_ctime = get_seconds();
/* maybe some queued-up processes were waiting for this */
update_queue(sma);
@@ -1052,7 +1052,7 @@ retry_undos:
if (error)
goto out_unlock_free;
- error = try_atomic_semop (sma, sops, nsops, un, current->pid);
+ error = try_atomic_semop (sma, sops, nsops, un, current->tgid);
if (error <= 0)
goto update;
@@ -1064,7 +1064,7 @@ retry_undos:
queue.sops = sops;
queue.nsops = nsops;
queue.undo = un;
- queue.pid = current->pid;
+ queue.pid = current->tgid;
queue.id = semid;
if (alter)
append_to_queue(sma ,&queue);
@@ -1206,7 +1206,7 @@ found:
sem->semval += u->semadj[i];
if (sem->semval < 0)
sem->semval = 0; /* shouldn't happen */
- sem->sempid = current->pid;
+ sem->sempid = current->tgid;
}
}
sma->sem_otime = get_seconds();
diff --git a/ipc/shm.c b/ipc/shm.c
index ff26adee978e..516a17e10338 100644
--- a/ipc/shm.c
+++ b/ipc/shm.c
@@ -89,7 +89,7 @@ static inline void shm_inc (int id) {
if(!(shp = shm_lock(id)))
BUG();
shp->shm_atim = get_seconds();
- shp->shm_lprid = current->pid;
+ shp->shm_lprid = current->tgid;
shp->shm_nattch++;
shm_unlock(shp);
}
@@ -136,7 +136,7 @@ static void shm_close (struct vm_area_struct *shmd)
/* remove from the list of attaches of the shm segment */
if(!(shp = shm_lock(id)))
BUG();
- shp->shm_lprid = current->pid;
+ shp->shm_lprid = current->tgid;
shp->shm_dtim = get_seconds();
shp->shm_nattch--;
if(shp->shm_nattch == 0 &&
@@ -209,7 +209,7 @@ static int newseg (key_t key, int shmflg, size_t size)
if(id == -1)
goto no_id;
- shp->shm_cprid = current->pid;
+ shp->shm_cprid = current->tgid;
shp->shm_lprid = 0;
shp->shm_atim = shp->shm_dtim = 0;
shp->shm_ctim = get_seconds();
diff --git a/net/netlink/netlink_dev.c b/net/netlink/netlink_dev.c
index 813e6431d83a..12b8008adc42 100644
--- a/net/netlink/netlink_dev.c
+++ b/net/netlink/netlink_dev.c
@@ -41,7 +41,7 @@ static struct socket *netlink_user[MAX_LINKS];
static unsigned int netlink_poll(struct file *file, poll_table * wait)
{
- struct socket *sock = netlink_user[minor(file->f_dentry->d_inode->i_rdev)];
+ struct socket *sock = netlink_user[iminor(file->f_dentry->d_inode)];
if (sock->ops->poll==NULL)
return 0;
@@ -56,7 +56,7 @@ static ssize_t netlink_write(struct file * file, const char * buf,
size_t count, loff_t *pos)
{
struct inode *inode = file->f_dentry->d_inode;
- struct socket *sock = netlink_user[minor(inode->i_rdev)];
+ struct socket *sock = netlink_user[iminor(inode)];
struct msghdr msg;
struct iovec iov;
@@ -80,7 +80,7 @@ static ssize_t netlink_read(struct file * file, char * buf,
size_t count, loff_t *pos)
{
struct inode *inode = file->f_dentry->d_inode;
- struct socket *sock = netlink_user[minor(inode->i_rdev)];
+ struct socket *sock = netlink_user[iminor(inode)];
struct msghdr msg;
struct iovec iov;
@@ -100,7 +100,7 @@ static ssize_t netlink_read(struct file * file, char * buf,
static int netlink_open(struct inode * inode, struct file * file)
{
- unsigned int minor = minor(inode->i_rdev);
+ unsigned int minor = iminor(inode);
struct socket *sock;
struct sockaddr_nl nladdr;
int err;
@@ -132,7 +132,7 @@ out:
static int netlink_release(struct inode * inode, struct file * file)
{
- unsigned int minor = minor(inode->i_rdev);
+ unsigned int minor = iminor(inode);
struct socket *sock;
sock = netlink_user[minor];
@@ -146,7 +146,7 @@ static int netlink_release(struct inode * inode, struct file * file)
static int netlink_ioctl(struct inode *inode, struct file *file,
unsigned int cmd, unsigned long arg)
{
- unsigned int minor = minor(inode->i_rdev);
+ unsigned int minor = iminor(inode);
int retval = 0;
if (minor >= MAX_LINKS)
diff --git a/sound/core/control.c b/sound/core/control.c
index 75ccb087609f..fe654fd91508 100644
--- a/sound/core/control.c
+++ b/sound/core/control.c
@@ -42,7 +42,7 @@ static LIST_HEAD(snd_control_ioctls);
static int snd_ctl_open(struct inode *inode, struct file *file)
{
- int cardnum = SNDRV_MINOR_CARD(minor(inode->i_rdev));
+ int cardnum = SNDRV_MINOR_CARD(iminor(inode));
unsigned long flags;
snd_card_t *card;
snd_ctl_file_t *ctl;
diff --git a/sound/core/hwdep.c b/sound/core/hwdep.c
index 2da3e59258e7..f7191fc7c776 100644
--- a/sound/core/hwdep.c
+++ b/sound/core/hwdep.c
@@ -73,7 +73,7 @@ static ssize_t snd_hwdep_write(struct file * file, const char *buf, size_t count
static int snd_hwdep_open(struct inode *inode, struct file * file)
{
- int major = major(inode->i_rdev);
+ int major = imajor(inode);
int cardnum;
int device;
snd_hwdep_t *hw;
@@ -82,12 +82,12 @@ static int snd_hwdep_open(struct inode *inode, struct file * file)
switch (major) {
case CONFIG_SND_MAJOR:
- cardnum = SNDRV_MINOR_CARD(minor(inode->i_rdev));
- device = SNDRV_MINOR_DEVICE(minor(inode->i_rdev)) - SNDRV_MINOR_HWDEP;
+ cardnum = SNDRV_MINOR_CARD(iminor(inode));
+ device = SNDRV_MINOR_DEVICE(iminor(inode)) - SNDRV_MINOR_HWDEP;
break;
#ifdef CONFIG_SND_OSSEMUL
case SOUND_MAJOR:
- cardnum = SNDRV_MINOR_OSS_CARD(minor(inode->i_rdev));
+ cardnum = SNDRV_MINOR_OSS_CARD(iminor(inode));
device = 0;
break;
#endif
diff --git a/sound/core/oss/mixer_oss.c b/sound/core/oss/mixer_oss.c
index 6785cb930664..0becc2d85f40 100644
--- a/sound/core/oss/mixer_oss.c
+++ b/sound/core/oss/mixer_oss.c
@@ -36,7 +36,7 @@ MODULE_LICENSE("GPL");
static int snd_mixer_oss_open(struct inode *inode, struct file *file)
{
- int cardnum = SNDRV_MINOR_OSS_CARD(minor(inode->i_rdev));
+ int cardnum = SNDRV_MINOR_OSS_CARD(iminor(inode));
snd_card_t *card;
snd_mixer_oss_file_t *fmixer;
int err;
diff --git a/sound/core/oss/pcm_oss.c b/sound/core/oss/pcm_oss.c
index 50ffd13db2a8..e5272ee9527b 100644
--- a/sound/core/oss/pcm_oss.c
+++ b/sound/core/oss/pcm_oss.c
@@ -1681,7 +1681,7 @@ static int snd_pcm_oss_open_file(struct file *file,
static int snd_pcm_oss_open(struct inode *inode, struct file *file)
{
- int minor = minor(inode->i_rdev);
+ int minor = iminor(inode);
int cardnum = SNDRV_MINOR_OSS_CARD(minor);
int device;
int err;
diff --git a/sound/core/pcm_native.c b/sound/core/pcm_native.c
index f82b4f5cfce0..bc2e16a4f6a3 100644
--- a/sound/core/pcm_native.c
+++ b/sound/core/pcm_native.c
@@ -1431,11 +1431,11 @@ static struct file *snd_pcm_file_fd(int fd)
return 0;
inode = file->f_dentry->d_inode;
if (!S_ISCHR(inode->i_mode) ||
- major(inode->i_rdev) != snd_major) {
+ imajor(inode) != snd_major) {
fput(file);
return 0;
}
- minor = minor(inode->i_rdev);
+ minor = iminor(inode);
if (minor >= 256 ||
minor % SNDRV_MINOR_DEVICES < SNDRV_MINOR_PCM_PLAYBACK) {
fput(file);
@@ -1940,8 +1940,8 @@ static int snd_pcm_open_file(struct file *file,
int snd_pcm_open(struct inode *inode, struct file *file)
{
- int cardnum = SNDRV_MINOR_CARD(minor(inode->i_rdev));
- int device = SNDRV_MINOR_DEVICE(minor(inode->i_rdev));
+ int cardnum = SNDRV_MINOR_CARD(iminor(inode));
+ int device = SNDRV_MINOR_DEVICE(iminor(inode));
int err;
snd_pcm_t *pcm;
snd_pcm_file_t *pcm_file;
diff --git a/sound/core/rawmidi.c b/sound/core/rawmidi.c
index 8be2292ad25e..480e96fc2ffc 100644
--- a/sound/core/rawmidi.c
+++ b/sound/core/rawmidi.c
@@ -345,7 +345,7 @@ int snd_rawmidi_kernel_open(int cardnum, int device, int subdevice,
static int snd_rawmidi_open(struct inode *inode, struct file *file)
{
- int maj = major(inode->i_rdev);
+ int maj = imajor(inode);
int cardnum;
snd_card_t *card;
int device, subdevice;
@@ -359,16 +359,16 @@ static int snd_rawmidi_open(struct inode *inode, struct file *file)
switch (maj) {
case CONFIG_SND_MAJOR:
- cardnum = SNDRV_MINOR_CARD(minor(inode->i_rdev));
+ cardnum = SNDRV_MINOR_CARD(iminor(inode));
cardnum %= SNDRV_CARDS;
- device = SNDRV_MINOR_DEVICE(minor(inode->i_rdev)) - SNDRV_MINOR_RAWMIDI;
+ device = SNDRV_MINOR_DEVICE(iminor(inode)) - SNDRV_MINOR_RAWMIDI;
device %= SNDRV_MINOR_RAWMIDIS;
break;
#ifdef CONFIG_SND_OSSEMUL
case SOUND_MAJOR:
- cardnum = SNDRV_MINOR_OSS_CARD(minor(inode->i_rdev));
+ cardnum = SNDRV_MINOR_OSS_CARD(iminor(inode));
cardnum %= SNDRV_CARDS;
- device = SNDRV_MINOR_OSS_DEVICE(minor(inode->i_rdev)) == SNDRV_MINOR_OSS_MIDI ?
+ device = SNDRV_MINOR_OSS_DEVICE(iminor(inode)) == SNDRV_MINOR_OSS_MIDI ?
midi_map[cardnum] : amidi_map[cardnum];
break;
#endif
diff --git a/sound/core/seq/oss/seq_oss.c b/sound/core/seq/oss/seq_oss.c
index 25a8ad617a22..b1aebe54ca50 100644
--- a/sound/core/seq/oss/seq_oss.c
+++ b/sound/core/seq/oss/seq_oss.c
@@ -121,7 +121,7 @@ odev_open(struct inode *inode, struct file *file)
{
int level, rc;
- if (minor(inode->i_rdev) == SNDRV_MINOR_OSS_MUSIC)
+ if (iminor(inode) == SNDRV_MINOR_OSS_MUSIC)
level = SNDRV_SEQ_OSS_MODE_MUSIC;
else
level = SNDRV_SEQ_OSS_MODE_SYNTH;
diff --git a/sound/core/sound.c b/sound/core/sound.c
index 5d0c19889d78..3d8b50d9d04b 100644
--- a/sound/core/sound.c
+++ b/sound/core/sound.c
@@ -117,7 +117,7 @@ static snd_minor_t *snd_minor_search(int minor)
static int snd_open(struct inode *inode, struct file *file)
{
- int minor = minor(inode->i_rdev);
+ int minor = iminor(inode);
int card = SNDRV_MINOR_CARD(minor);
int dev = SNDRV_MINOR_DEVICE(minor);
snd_minor_t *mptr = NULL;
diff --git a/sound/oss/ad1889.c b/sound/oss/ad1889.c
index aaa5d731049f..6b4ab48945d7 100644
--- a/sound/oss/ad1889.c
+++ b/sound/oss/ad1889.c
@@ -755,7 +755,7 @@ static int ad1889_ioctl(struct inode *inode, struct file *file, unsigned int cmd
static int ad1889_open(struct inode *inode, struct file *file)
{
/* check minor; only support /dev/dsp atm */
- if (minor(inode->i_rdev) != 3)
+ if (iminor(inode) != 3)
return -ENXIO;
file->private_data = ad1889_dev;
@@ -788,7 +788,7 @@ static struct file_operations ad1889_fops = {
/************************* /dev/mixer interfaces ************************ */
static int ad1889_mixer_open(struct inode *inode, struct file *file)
{
- if (ad1889_dev->ac97_codec->dev_mixer != minor(inode->i_rdev))
+ if (ad1889_dev->ac97_codec->dev_mixer != iminor(inode))
return -ENODEV;
file->private_data = ad1889_dev->ac97_codec;
diff --git a/sound/oss/ali5455.c b/sound/oss/ali5455.c
index 419097360ca2..7bb3d707d6c8 100644
--- a/sound/oss/ali5455.c
+++ b/sound/oss/ali5455.c
@@ -3026,7 +3026,7 @@ static void ali_ac97_set(struct ac97_codec *dev, u8 reg, u16 data)
static int ali_open_mixdev(struct inode *inode, struct file *file)
{
int i;
- int minor = minor(inode->i_rdev);
+ int minor = iminor(inode);
struct ali_card *card = devs;
for (card = devs; card != NULL; card = card->next) {
/*
diff --git a/sound/oss/au1000.c b/sound/oss/au1000.c
index d4ed031753ca..dc6f8aa74148 100644
--- a/sound/oss/au1000.c
+++ b/sound/oss/au1000.c
@@ -1842,7 +1842,7 @@ static int au1000_ioctl(struct inode *inode, struct file *file,
static int au1000_open(struct inode *inode, struct file *file)
{
- int minor = MINOR(inode->i_rdev);
+ int minor = iminor(inode);
DECLARE_WAITQUEUE(wait, current);
struct au1000_state *s = &au1000_state;
int ret;
diff --git a/sound/oss/btaudio.c b/sound/oss/btaudio.c
index 73d0b271279c..0d516996a6d6 100644
--- a/sound/oss/btaudio.c
+++ b/sound/oss/btaudio.c
@@ -299,7 +299,7 @@ static void stop_recording(struct btaudio *bta)
static int btaudio_mixer_open(struct inode *inode, struct file *file)
{
- int minor = minor(inode->i_rdev);
+ int minor = iminor(inode);
struct btaudio *bta;
for (bta = btaudios; bta != NULL; bta = bta->next)
@@ -458,7 +458,7 @@ static int btaudio_dsp_open(struct inode *inode, struct file *file,
static int btaudio_dsp_open_digital(struct inode *inode, struct file *file)
{
- int minor = minor(inode->i_rdev);
+ int minor = iminor(inode);
struct btaudio *bta;
for (bta = btaudios; bta != NULL; bta = bta->next)
@@ -474,7 +474,7 @@ static int btaudio_dsp_open_digital(struct inode *inode, struct file *file)
static int btaudio_dsp_open_analog(struct inode *inode, struct file *file)
{
- int minor = minor(inode->i_rdev);
+ int minor = iminor(inode);
struct btaudio *bta;
for (bta = btaudios; bta != NULL; bta = bta->next)
diff --git a/sound/oss/cmpci.c b/sound/oss/cmpci.c
index 53668ddefe86..599245fbb474 100644
--- a/sound/oss/cmpci.c
+++ b/sound/oss/cmpci.c
@@ -1448,7 +1448,7 @@ static int mixer_ioctl(struct cm_state *s, unsigned int cmd, unsigned long arg)
static int cm_open_mixdev(struct inode *inode, struct file *file)
{
- int minor = minor(inode->i_rdev);
+ int minor = iminor(inode);
struct cm_state *s = devs;
while (s && s->dev_mixer != minor)
@@ -2207,7 +2207,7 @@ static int cm_ioctl(struct inode *inode, struct file *file, unsigned int cmd, un
static int cm_open(struct inode *inode, struct file *file)
{
- int minor = minor(inode->i_rdev);
+ int minor = iminor(inode);
struct cm_state *s = devs;
unsigned char fmtm = ~0, fmts = 0;
@@ -2462,7 +2462,7 @@ static unsigned int cm_midi_poll(struct file *file, struct poll_table_struct *wa
static int cm_midi_open(struct inode *inode, struct file *file)
{
- int minor = minor(inode->i_rdev);
+ int minor = iminor(inode);
struct cm_state *s = devs;
unsigned long flags;
@@ -2679,7 +2679,7 @@ static int cm_dmfm_ioctl(struct inode *inode, struct file *file, unsigned int cm
static int cm_dmfm_open(struct inode *inode, struct file *file)
{
- int minor = minor(inode->i_rdev);
+ int minor = iminor(inode);
struct cm_state *s = devs;
while (s && s->dev_dmfm != minor)
diff --git a/sound/oss/cs4281/cs4281m.c b/sound/oss/cs4281/cs4281m.c
index 16b7c1b1e9bc..64a1d696a277 100644
--- a/sound/oss/cs4281/cs4281m.c
+++ b/sound/oss/cs4281/cs4281m.c
@@ -2567,7 +2567,7 @@ static int mixer_ioctl(struct cs4281_state *s, unsigned int cmd,
static int cs4281_open_mixdev(struct inode *inode, struct file *file)
{
- unsigned int minor = minor(inode->i_rdev);
+ unsigned int minor = iminor(inode);
struct cs4281_state *s=NULL;
struct list_head *entry;
@@ -3624,7 +3624,7 @@ static int cs4281_release(struct inode *inode, struct file *file)
static int cs4281_open(struct inode *inode, struct file *file)
{
- unsigned int minor = minor(inode->i_rdev);
+ unsigned int minor = iminor(inode);
struct cs4281_state *s=NULL;
struct list_head *entry;
@@ -3966,7 +3966,7 @@ static unsigned int cs4281_midi_poll(struct file *file,
static int cs4281_midi_open(struct inode *inode, struct file *file)
{
unsigned long flags, temp1;
- unsigned int minor = minor(inode->i_rdev);
+ unsigned int minor = iminor(inode);
struct cs4281_state *s=NULL;
struct list_head *entry;
list_for_each(entry, &cs4281_devs)
diff --git a/sound/oss/cs46xx.c b/sound/oss/cs46xx.c
index 84871cfe2ec6..da4a6daa14ef 100644
--- a/sound/oss/cs46xx.c
+++ b/sound/oss/cs46xx.c
@@ -1838,7 +1838,7 @@ static unsigned int cs_midi_poll(struct file *file, struct poll_table_struct *wa
static int cs_midi_open(struct inode *inode, struct file *file)
{
- unsigned int minor = minor(inode->i_rdev);
+ unsigned int minor = iminor(inode);
struct cs_card *card=NULL;
unsigned long flags;
struct list_head *entry;
@@ -3200,7 +3200,7 @@ static int cs_open(struct inode *inode, struct file *file)
struct cs_state *state = NULL;
struct dmabuf *dmabuf = NULL;
struct list_head *entry;
- unsigned int minor = minor(inode->i_rdev);
+ unsigned int minor = iminor(inode);
int ret=0;
unsigned int tmp;
@@ -4066,7 +4066,7 @@ static void cs_ac97_set(struct ac97_codec *dev, u8 reg, u16 val)
static int cs_open_mixdev(struct inode *inode, struct file *file)
{
int i=0;
- unsigned int minor = minor(inode->i_rdev);
+ unsigned int minor = iminor(inode);
struct cs_card *card=NULL;
struct list_head *entry;
unsigned int tmp;
@@ -4113,7 +4113,7 @@ static int cs_open_mixdev(struct inode *inode, struct file *file)
static int cs_release_mixdev(struct inode *inode, struct file *file)
{
- unsigned int minor = minor(inode->i_rdev);
+ unsigned int minor = iminor(inode);
struct cs_card *card=NULL;
struct list_head *entry;
int i;
diff --git a/sound/oss/dmasound/dmasound_core.c b/sound/oss/dmasound/dmasound_core.c
index acbac9810184..e2a8b2ab3961 100644
--- a/sound/oss/dmasound/dmasound_core.c
+++ b/sound/oss/dmasound/dmasound_core.c
@@ -904,7 +904,7 @@ static int sq_open(struct inode *inode, struct file *file)
O_RDONLY and dsp1 could be opened O_WRONLY
*/
- dmasound.minDev = minor(inode->i_rdev) & 0x0f;
+ dmasound.minDev = iminor(inode) & 0x0f;
/* OK. - we should make some attempt at consistency. At least the H'ware
options should be set with a valid mode. We will make it that the LL
diff --git a/sound/oss/emu10k1/audio.c b/sound/oss/emu10k1/audio.c
index 0c94b8fd6420..c5a00377a5e1 100644
--- a/sound/oss/emu10k1/audio.c
+++ b/sound/oss/emu10k1/audio.c
@@ -1112,7 +1112,7 @@ static int emu10k1_audio_mmap(struct file *file, struct vm_area_struct *vma)
static int emu10k1_audio_open(struct inode *inode, struct file *file)
{
- int minor = minor(inode->i_rdev);
+ int minor = iminor(inode);
struct emu10k1_card *card = NULL;
struct list_head *entry;
struct emu10k1_wavedevice *wave_dev;
diff --git a/sound/oss/emu10k1/midi.c b/sound/oss/emu10k1/midi.c
index 5022cc1defaf..06a78997d317 100644
--- a/sound/oss/emu10k1/midi.c
+++ b/sound/oss/emu10k1/midi.c
@@ -86,7 +86,7 @@ static int midiin_add_buffer(struct emu10k1_mididevice *midi_dev, struct midi_hd
static int emu10k1_midi_open(struct inode *inode, struct file *file)
{
- int minor = minor(inode->i_rdev);
+ int minor = iminor(inode);
struct emu10k1_card *card = NULL;
struct emu10k1_mididevice *midi_dev;
struct list_head *entry;
diff --git a/sound/oss/emu10k1/mixer.c b/sound/oss/emu10k1/mixer.c
index f26e6b5025ec..bc252de3c7df 100644
--- a/sound/oss/emu10k1/mixer.c
+++ b/sound/oss/emu10k1/mixer.c
@@ -654,7 +654,7 @@ static int emu10k1_mixer_ioctl(struct inode *inode, struct file *file, unsigned
static int emu10k1_mixer_open(struct inode *inode, struct file *file)
{
- int minor = minor(inode->i_rdev);
+ int minor = iminor(inode);
struct emu10k1_card *card = NULL;
struct list_head *entry;
diff --git a/sound/oss/es1370.c b/sound/oss/es1370.c
index ce7ae906e3cb..6f00a9366d3d 100644
--- a/sound/oss/es1370.c
+++ b/sound/oss/es1370.c
@@ -1023,7 +1023,7 @@ static int mixer_ioctl(struct es1370_state *s, unsigned int cmd, unsigned long a
static int es1370_open_mixdev(struct inode *inode, struct file *file)
{
- unsigned int minor = minor(inode->i_rdev);
+ unsigned int minor = iminor(inode);
struct list_head *list;
struct es1370_state *s;
@@ -1727,7 +1727,7 @@ static int es1370_ioctl(struct inode *inode, struct file *file, unsigned int cmd
static int es1370_open(struct inode *inode, struct file *file)
{
- unsigned int minor = minor(inode->i_rdev);
+ unsigned int minor = iminor(inode);
DECLARE_WAITQUEUE(wait, current);
unsigned long flags;
struct list_head *list;
@@ -2165,7 +2165,7 @@ static int es1370_ioctl_dac(struct inode *inode, struct file *file, unsigned int
static int es1370_open_dac(struct inode *inode, struct file *file)
{
- unsigned int minor = minor(inode->i_rdev);
+ unsigned int minor = iminor(inode);
DECLARE_WAITQUEUE(wait, current);
unsigned long flags;
struct list_head *list;
@@ -2408,7 +2408,7 @@ static unsigned int es1370_midi_poll(struct file *file, struct poll_table_struct
static int es1370_midi_open(struct inode *inode, struct file *file)
{
- unsigned int minor = minor(inode->i_rdev);
+ unsigned int minor = iminor(inode);
DECLARE_WAITQUEUE(wait, current);
unsigned long flags;
struct list_head *list;
diff --git a/sound/oss/es1371.c b/sound/oss/es1371.c
index 6d6d42c7b10a..043ed790205c 100644
--- a/sound/oss/es1371.c
+++ b/sound/oss/es1371.c
@@ -1210,7 +1210,7 @@ static int mixdev_ioctl(struct ac97_codec *codec, unsigned int cmd, unsigned lon
static int es1371_open_mixdev(struct inode *inode, struct file *file)
{
- int minor = minor(inode->i_rdev);
+ int minor = iminor(inode);
struct list_head *list;
struct es1371_state *s;
@@ -1914,7 +1914,7 @@ static int es1371_ioctl(struct inode *inode, struct file *file, unsigned int cmd
static int es1371_open(struct inode *inode, struct file *file)
{
- int minor = minor(inode->i_rdev);
+ int minor = iminor(inode);
DECLARE_WAITQUEUE(wait, current);
unsigned long flags;
struct list_head *list;
@@ -2345,7 +2345,7 @@ static int es1371_ioctl_dac(struct inode *inode, struct file *file, unsigned int
static int es1371_open_dac(struct inode *inode, struct file *file)
{
- int minor = minor(inode->i_rdev);
+ int minor = iminor(inode);
DECLARE_WAITQUEUE(wait, current);
unsigned long flags;
struct list_head *list;
@@ -2587,7 +2587,7 @@ static unsigned int es1371_midi_poll(struct file *file, struct poll_table_struct
static int es1371_midi_open(struct inode *inode, struct file *file)
{
- int minor = minor(inode->i_rdev);
+ int minor = iminor(inode);
DECLARE_WAITQUEUE(wait, current);
unsigned long flags;
struct list_head *list;
diff --git a/sound/oss/esssolo1.c b/sound/oss/esssolo1.c
index 5f5dda889b68..0ab2e4ba539c 100644
--- a/sound/oss/esssolo1.c
+++ b/sound/oss/esssolo1.c
@@ -913,7 +913,7 @@ static int mixer_ioctl(struct solo1_state *s, unsigned int cmd, unsigned long ar
static int solo1_open_mixdev(struct inode *inode, struct file *file)
{
- unsigned int minor = minor(inode->i_rdev);
+ unsigned int minor = iminor(inode);
struct solo1_state *s = NULL;
struct pci_dev *pci_dev = NULL;
@@ -1594,7 +1594,7 @@ static int solo1_release(struct inode *inode, struct file *file)
static int solo1_open(struct inode *inode, struct file *file)
{
- unsigned int minor = minor(inode->i_rdev);
+ unsigned int minor = iminor(inode);
DECLARE_WAITQUEUE(wait, current);
struct solo1_state *s = NULL;
struct pci_dev *pci_dev = NULL;
@@ -1884,7 +1884,7 @@ static unsigned int solo1_midi_poll(struct file *file, struct poll_table_struct
static int solo1_midi_open(struct inode *inode, struct file *file)
{
- unsigned int minor = minor(inode->i_rdev);
+ unsigned int minor = iminor(inode);
DECLARE_WAITQUEUE(wait, current);
unsigned long flags;
struct solo1_state *s = NULL;
@@ -2106,7 +2106,7 @@ static int solo1_dmfm_ioctl(struct inode *inode, struct file *file, unsigned int
static int solo1_dmfm_open(struct inode *inode, struct file *file)
{
- unsigned int minor = minor(inode->i_rdev);
+ unsigned int minor = iminor(inode);
DECLARE_WAITQUEUE(wait, current);
struct solo1_state *s = NULL;
struct pci_dev *pci_dev = NULL;
diff --git a/sound/oss/hal2.c b/sound/oss/hal2.c
index 5baa875810b9..6ad89aa8b262 100644
--- a/sound/oss/hal2.c
+++ b/sound/oss/hal2.c
@@ -867,7 +867,7 @@ static int hal2_mixer_ioctl(hal2_card_t *hal2, unsigned int cmd,
static int hal2_open_mixdev(struct inode *inode, struct file *file)
{
- hal2_card_t *hal2 = hal2_mixer_find_card(MINOR(inode->i_rdev));
+ hal2_card_t *hal2 = hal2_mixer_find_card(iminor(inode));
if (hal2) {
file->private_data = hal2;
@@ -1242,7 +1242,7 @@ static unsigned int hal2_poll(struct file *file, struct poll_table_struct *wait)
static int hal2_open(struct inode *inode, struct file *file)
{
int err;
- hal2_card_t *hal2 = hal2_dsp_find_card(MINOR(inode->i_rdev));
+ hal2_card_t *hal2 = hal2_dsp_find_card(iminor(inode));
DEBUG("opening audio device.\n");
diff --git a/sound/oss/i810_audio.c b/sound/oss/i810_audio.c
index 19cdee7e59db..1006ad599d35 100644
--- a/sound/oss/i810_audio.c
+++ b/sound/oss/i810_audio.c
@@ -2648,7 +2648,7 @@ static void i810_ac97_set(struct ac97_codec *dev, u8 reg, u16 data)
static int i810_open_mixdev(struct inode *inode, struct file *file)
{
int i;
- int minor = minor(inode->i_rdev);
+ int minor = iminor(inode);
struct i810_card *card = devs;
for (card = devs; card != NULL; card = card->next) {
diff --git a/sound/oss/ite8172.c b/sound/oss/ite8172.c
index ccaadd5f4588..9fab8abd9251 100644
--- a/sound/oss/ite8172.c
+++ b/sound/oss/ite8172.c
@@ -867,7 +867,7 @@ static loff_t it8172_llseek(struct file *file, loff_t offset, int origin)
static int it8172_open_mixdev(struct inode *inode, struct file *file)
{
- int minor = MINOR(inode->i_rdev);
+ int minor = iminor(inode);
struct list_head *list;
struct it8172_state *s;
@@ -1771,7 +1771,7 @@ static int it8172_ioctl(struct inode *inode, struct file *file,
static int it8172_open(struct inode *inode, struct file *file)
{
- int minor = MINOR(inode->i_rdev);
+ int minor = iminor(inode);
DECLARE_WAITQUEUE(wait, current);
unsigned long flags;
struct list_head *list;
diff --git a/sound/oss/maestro.c b/sound/oss/maestro.c
index f9e332f904a6..2b17c06f7e86 100644
--- a/sound/oss/maestro.c
+++ b/sound/oss/maestro.c
@@ -2138,7 +2138,7 @@ static int mixer_ioctl(struct ess_card *card, unsigned int cmd, unsigned long ar
/* --------------------------------------------------------------------- */
static int ess_open_mixdev(struct inode *inode, struct file *file)
{
- unsigned int minor = minor(inode->i_rdev);
+ unsigned int minor = iminor(inode);
struct ess_card *card = NULL;
struct pci_dev *pdev = NULL;
struct pci_driver *drvr;
@@ -2983,7 +2983,7 @@ free_buffers(struct ess_state *s)
static int
ess_open(struct inode *inode, struct file *file)
{
- unsigned int minor = minor(inode->i_rdev);
+ unsigned int minor = iminor(inode);
struct ess_state *s = NULL;
unsigned char fmtm = ~0, fmts = 0;
struct pci_dev *pdev = NULL;
diff --git a/sound/oss/maestro3.c b/sound/oss/maestro3.c
index 5a49ff4dc8e4..87fe033b9302 100644
--- a/sound/oss/maestro3.c
+++ b/sound/oss/maestro3.c
@@ -1980,7 +1980,7 @@ free_dmabuf(struct pci_dev *pci_dev, struct dmabuf *db)
static int m3_open(struct inode *inode, struct file *file)
{
- unsigned int minor = minor(inode->i_rdev);
+ unsigned int minor = iminor(inode);
struct m3_card *c;
struct m3_state *s = NULL;
int i;
@@ -2149,7 +2149,7 @@ out:
/* OSS /dev/mixer file operation methods */
static int m3_open_mixdev(struct inode *inode, struct file *file)
{
- unsigned int minor = minor(inode->i_rdev);
+ unsigned int minor = iminor(inode);
struct m3_card *card = devs;
for (card = devs; card != NULL; card = card->next) {
diff --git a/sound/oss/msnd_pinnacle.c b/sound/oss/msnd_pinnacle.c
index b8af0d4653c3..aea4a65f78fb 100644
--- a/sound/oss/msnd_pinnacle.c
+++ b/sound/oss/msnd_pinnacle.c
@@ -646,7 +646,7 @@ static int mixer_ioctl(unsigned int cmd, unsigned long arg)
static int dev_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)
{
- int minor = minor(inode->i_rdev);
+ int minor = iminor(inode);
if (cmd == OSS_GETVERSION) {
int sound_version = SOUND_VERSION;
@@ -758,7 +758,7 @@ static void set_default_audio_parameters(void)
static int dev_open(struct inode *inode, struct file *file)
{
- int minor = minor(inode->i_rdev);
+ int minor = iminor(inode);
int err = 0;
if (minor == dev.dsp_minor) {
@@ -793,7 +793,7 @@ static int dev_open(struct inode *inode, struct file *file)
static int dev_release(struct inode *inode, struct file *file)
{
- int minor = minor(inode->i_rdev);
+ int minor = iminor(inode);
int err = 0;
lock_kernel();
@@ -983,7 +983,7 @@ static int dsp_write(const char *buf, size_t len)
static ssize_t dev_read(struct file *file, char *buf, size_t count, loff_t *off)
{
- int minor = minor(file->f_dentry->d_inode->i_rdev);
+ int minor = iminor(file->f_dentry->d_inode);
if (minor == dev.dsp_minor)
return dsp_read(buf, count);
else
@@ -992,7 +992,7 @@ static ssize_t dev_read(struct file *file, char *buf, size_t count, loff_t *off)
static ssize_t dev_write(struct file *file, const char *buf, size_t count, loff_t *off)
{
- int minor = minor(file->f_dentry->d_inode->i_rdev);
+ int minor = iminor(file->f_dentry->d_inode);
if (minor == dev.dsp_minor)
return dsp_write(buf, count);
else
diff --git a/sound/oss/nec_vrc5477.c b/sound/oss/nec_vrc5477.c
index aec5f1511f25..d4b25a6605c7 100644
--- a/sound/oss/nec_vrc5477.c
+++ b/sound/oss/nec_vrc5477.c
@@ -857,7 +857,7 @@ static irqreturn_t vrc5477_ac97_interrupt(int irq, void *dev_id, struct pt_regs
static int vrc5477_ac97_open_mixdev(struct inode *inode, struct file *file)
{
- int minor = minor(inode->i_rdev);
+ int minor = iminor(inode);
struct list_head *list;
struct vrc5477_ac97_state *s;
@@ -1569,7 +1569,7 @@ static int vrc5477_ac97_ioctl(struct inode *inode, struct file *file,
static int vrc5477_ac97_open(struct inode *inode, struct file *file)
{
- int minor = minor(inode->i_rdev);
+ int minor = iminor(inode);
DECLARE_WAITQUEUE(wait, current);
unsigned long flags;
struct list_head *list;
diff --git a/sound/oss/rme96xx.c b/sound/oss/rme96xx.c
index 1daf2a93ac8d..b6f37d514752 100644
--- a/sound/oss/rme96xx.c
+++ b/sound/oss/rme96xx.c
@@ -1445,7 +1445,7 @@ static int rme96xx_ioctl(struct inode *in, struct file *file, unsigned int cmd,
static int rme96xx_open(struct inode *in, struct file *f)
{
- int minor = minor(in->i_rdev);
+ int minor = iminor(in);
struct list_head *list;
int devnum;
rme96xx_info *s;
@@ -1769,7 +1769,7 @@ static struct file_operations rme96xx_audio_fops = {
static int rme96xx_mixer_open(struct inode *inode, struct file *file)
{
- int minor = minor(inode->i_rdev);
+ int minor = iminor(inode);
struct list_head *list;
rme96xx_info *s;
diff --git a/sound/oss/sonicvibes.c b/sound/oss/sonicvibes.c
index 16cf3598616a..904eaf1fd2cf 100644
--- a/sound/oss/sonicvibes.c
+++ b/sound/oss/sonicvibes.c
@@ -1238,7 +1238,7 @@ static int mixer_ioctl(struct sv_state *s, unsigned int cmd, unsigned long arg)
static int sv_open_mixdev(struct inode *inode, struct file *file)
{
- int minor = minor(inode->i_rdev);
+ int minor = iminor(inode);
struct list_head *list;
struct sv_state *s;
@@ -1900,7 +1900,7 @@ static int sv_ioctl(struct inode *inode, struct file *file, unsigned int cmd, un
static int sv_open(struct inode *inode, struct file *file)
{
- int minor = minor(inode->i_rdev);
+ int minor = iminor(inode);
DECLARE_WAITQUEUE(wait, current);
unsigned char fmtm = ~0, fmts = 0;
struct list_head *list;
@@ -2149,7 +2149,7 @@ static unsigned int sv_midi_poll(struct file *file, struct poll_table_struct *wa
static int sv_midi_open(struct inode *inode, struct file *file)
{
- int minor = minor(inode->i_rdev);
+ int minor = iminor(inode);
DECLARE_WAITQUEUE(wait, current);
unsigned long flags;
struct list_head *list;
@@ -2371,7 +2371,7 @@ static int sv_dmfm_ioctl(struct inode *inode, struct file *file, unsigned int cm
static int sv_dmfm_open(struct inode *inode, struct file *file)
{
- int minor = minor(inode->i_rdev);
+ int minor = iminor(inode);
DECLARE_WAITQUEUE(wait, current);
struct list_head *list;
struct sv_state *s;
diff --git a/sound/oss/soundcard.c b/sound/oss/soundcard.c
index e70746b2c836..3b023a9212d8 100644
--- a/sound/oss/soundcard.c
+++ b/sound/oss/soundcard.c
@@ -144,7 +144,7 @@ static int get_mixer_levels(caddr_t arg)
static ssize_t sound_read(struct file *file, char *buf, size_t count, loff_t *ppos)
{
- int dev = minor(file->f_dentry->d_inode->i_rdev);
+ int dev = iminor(file->f_dentry->d_inode);
int ret = -EINVAL;
/*
@@ -177,7 +177,7 @@ static ssize_t sound_read(struct file *file, char *buf, size_t count, loff_t *pp
static ssize_t sound_write(struct file *file, const char *buf, size_t count, loff_t *ppos)
{
- int dev = minor(file->f_dentry->d_inode->i_rdev);
+ int dev = iminor(file->f_dentry->d_inode);
int ret = -EINVAL;
lock_kernel();
@@ -204,7 +204,7 @@ static ssize_t sound_write(struct file *file, const char *buf, size_t count, lof
static int sound_open(struct inode *inode, struct file *file)
{
- int dev = minor(inode->i_rdev);
+ int dev = iminor(inode);
int retval;
DEB(printk("sound_open(dev=%d)\n", dev));
@@ -253,7 +253,7 @@ static int sound_open(struct inode *inode, struct file *file)
static int sound_release(struct inode *inode, struct file *file)
{
- int dev = minor(inode->i_rdev);
+ int dev = iminor(inode);
lock_kernel();
DEB(printk("sound_release(dev=%d)\n", dev));
@@ -333,7 +333,7 @@ static int sound_ioctl(struct inode *inode, struct file *file,
unsigned int cmd, unsigned long arg)
{
int err, len = 0, dtype;
- int dev = minor(inode->i_rdev);
+ int dev = iminor(inode);
if (_SIOC_DIR(cmd) != _SIOC_NONE && _SIOC_DIR(cmd) != 0) {
/*
@@ -396,7 +396,7 @@ static int sound_ioctl(struct inode *inode, struct file *file,
static unsigned int sound_poll(struct file *file, poll_table * wait)
{
struct inode *inode = file->f_dentry->d_inode;
- int dev = minor(inode->i_rdev);
+ int dev = iminor(inode);
DEB(printk("sound_poll(dev=%d)\n", dev));
switch (dev & 0x0f) {
@@ -420,7 +420,7 @@ static int sound_mmap(struct file *file, struct vm_area_struct *vma)
int dev_class;
unsigned long size;
struct dma_buffparms *dmap = NULL;
- int dev = minor(file->f_dentry->d_inode->i_rdev);
+ int dev = iminor(file->f_dentry->d_inode);
dev_class = dev & 0x0f;
dev >>= 4;
diff --git a/sound/oss/swarm_cs4297a.c b/sound/oss/swarm_cs4297a.c
index a5e17dc1aa6d..8c3f93c42da8 100644
--- a/sound/oss/swarm_cs4297a.c
+++ b/sound/oss/swarm_cs4297a.c
@@ -1537,7 +1537,7 @@ static loff_t cs4297a_llseek(struct file *file, loff_t offset, int origin)
static int cs4297a_open_mixdev(struct inode *inode, struct file *file)
{
- int minor = MINOR(inode->i_rdev);
+ int minor = iminor(inode);
struct cs4297a_state *s=NULL;
struct list_head *entry;
@@ -2386,7 +2386,7 @@ static int cs4297a_release(struct inode *inode, struct file *file)
static int cs4297a_open(struct inode *inode, struct file *file)
{
- int minor = MINOR(inode->i_rdev);
+ int minor = iminor(inode);
struct cs4297a_state *s=NULL;
struct list_head *entry;
diff --git a/sound/oss/trident.c b/sound/oss/trident.c
index 117535456d47..415ab1595ac0 100644
--- a/sound/oss/trident.c
+++ b/sound/oss/trident.c
@@ -2600,7 +2600,7 @@ static int trident_ioctl(struct inode *inode, struct file *file, unsigned int cm
static int trident_open(struct inode *inode, struct file *file)
{
int i = 0;
- int minor = minor(inode->i_rdev);
+ int minor = iminor(inode);
struct trident_card *card = devs;
struct trident_state *state = NULL;
struct dmabuf *dmabuf = NULL;
@@ -3883,7 +3883,7 @@ static int ali_write_proc(struct file *file, const char *buffer, unsigned long c
static int trident_open_mixdev(struct inode *inode, struct file *file)
{
int i = 0;
- int minor = minor(inode->i_rdev);
+ int minor = iminor(inode);
struct trident_card *card = devs;
for (card = devs; card != NULL; card = card->next)
diff --git a/sound/oss/via82cxxx_audio.c b/sound/oss/via82cxxx_audio.c
index 0a9cbe2da257..1836e6934af2 100644
--- a/sound/oss/via82cxxx_audio.c
+++ b/sound/oss/via82cxxx_audio.c
@@ -1556,7 +1556,7 @@ out:
static int via_mixer_open (struct inode *inode, struct file *file)
{
- int minor = minor(inode->i_rdev);
+ int minor = iminor(inode);
struct via_info *card;
struct pci_dev *pdev = NULL;
struct pci_driver *drvr;
@@ -3252,7 +3252,7 @@ static int via_dsp_ioctl (struct inode *inode, struct file *file,
static int via_dsp_open (struct inode *inode, struct file *file)
{
- int minor = minor(inode->i_rdev);
+ int minor = iminor(inode);
struct via_info *card;
struct pci_dev *pdev = NULL;
struct via_channel *chan;
diff --git a/sound/oss/vwsnd.c b/sound/oss/vwsnd.c
index 0d4429f1c1db..78fd0bc5afad 100644
--- a/sound/oss/vwsnd.c
+++ b/sound/oss/vwsnd.c
@@ -2916,7 +2916,7 @@ static int vwsnd_audio_mmap(struct file *file, struct vm_area_struct *vma)
static int vwsnd_audio_open(struct inode *inode, struct file *file)
{
vwsnd_dev_t *devc;
- dev_t minor = minor(inode->i_rdev);
+ int minor = iminor(inode);
int sw_samplefmt;
DBGE("(inode=0x%p, file=0x%p)\n", inode, file);
@@ -3063,7 +3063,7 @@ static int vwsnd_mixer_open(struct inode *inode, struct file *file)
INC_USE_COUNT;
for (devc = vwsnd_dev_list; devc; devc = devc->next_dev)
- if (devc->mixer_minor == minor(inode->i_rdev))
+ if (devc->mixer_minor == iminor(inode))
break;
if (devc == NULL) {
diff --git a/sound/oss/ymfpci.c b/sound/oss/ymfpci.c
index 4da42da30a75..c6183e770dda 100644
--- a/sound/oss/ymfpci.c
+++ b/sound/oss/ymfpci.c
@@ -1905,7 +1905,7 @@ static int ymf_open(struct inode *inode, struct file *file)
struct ymf_state *state;
int err;
- minor = minor(inode->i_rdev);
+ minor = iminor(inode);
if ((minor & 0x0F) == 3) { /* /dev/dspN */
;
} else {
@@ -2019,7 +2019,7 @@ static int ymf_release(struct inode *inode, struct file *file)
*/
static int ymf_open_mixdev(struct inode *inode, struct file *file)
{
- int minor = minor(inode->i_rdev);
+ int minor = iminor(inode);
struct list_head *list;
ymfpci_t *unit;
int i;
diff --git a/sound/sound_core.c b/sound/sound_core.c
index 192f7ea9c260..6b675d272de5 100644
--- a/sound/sound_core.c
+++ b/sound/sound_core.c
@@ -483,7 +483,7 @@ static struct sound_unit *__look_for_unit(int chain, int unit)
int soundcore_open(struct inode *inode, struct file *file)
{
int chain;
- int unit = minor(inode->i_rdev);
+ int unit = iminor(inode);
struct sound_unit *s;
struct file_operations *new_fops = NULL;