Remove pointless lock_kernel(), replace with the standard-but-still-odd i_sem-based lseek locking. drivers/pci/proc.c | 10 ++++++---- 1 files changed, 6 insertions(+), 4 deletions(-) diff -puN drivers/pci/proc.c~proc_bus_pci_lseek-remove-lock_kernel drivers/pci/proc.c --- 25/drivers/pci/proc.c~proc_bus_pci_lseek-remove-lock_kernel 2003-11-18 18:53:25.000000000 -0800 +++ 25-akpm/drivers/pci/proc.c 2003-11-18 18:53:25.000000000 -0800 @@ -25,7 +25,7 @@ proc_bus_pci_lseek(struct file *file, lo { loff_t new = -1; - lock_kernel(); + down(&file->f_dentry->d_inode->i_sem); switch (whence) { case 0: new = off; @@ -37,10 +37,12 @@ proc_bus_pci_lseek(struct file *file, lo new = PCI_CFG_SPACE_SIZE + off; break; } - unlock_kernel(); if (new < 0 || new > PCI_CFG_SPACE_SIZE) - return -EINVAL; - return (file->f_pos = new); + new = -EINVAL; + else + file->f_pos = new; + up(&file->f_dentry->d_inode->i_sem); + return new; } static ssize_t _