diff options
| author | Linus Torvalds <torvalds@home.osdl.org> | 2003-08-30 23:45:59 -0700 |
|---|---|---|
| committer | Linus Torvalds <torvalds@home.osdl.org> | 2003-08-30 23:45:59 -0700 |
| commit | c334ec3406bd4e366a4138570332d4e19fa70128 (patch) | |
| tree | d465dd090c583e8646a98bf570a287c643ba66cb | |
| parent | ed8dff304648833f2acf9b3189a1e611355111b0 (diff) | |
| parent | 9b9f98eec3f1f66d0186f7c95e3d724cf3b6765b (diff) | |
Merge http://lia64.bkbits.net/to-linus-2.5
into home.osdl.org:/home/torvalds/v2.5/linux
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(¤t->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; } @@ -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; |
