diff -purN v2.6.12-rc2-00_mutex/drivers/block/loop.c v2.6.12-rc2-01_i_sem/drivers/block/loop.c --- v2.6.12-rc2-00_mutex/drivers/block/loop.c 2005-04-07 09:53:07.000000000 -0400 +++ v2.6.12-rc2-01_i_sem/drivers/block/loop.c 2005-04-07 15:13:02.000000000 -0400 @@ -215,7 +215,7 @@ static int do_lo_send_aops(struct loop_d unsigned offset, bv_offs; int len, ret = 0; - down(&mapping->host->i_sem); + mutex_lock(&mapping->host->i_sem); index = pos >> PAGE_CACHE_SHIFT; offset = pos & ((pgoff_t)PAGE_CACHE_SIZE - 1); bv_offs = bvec->bv_offset; @@ -265,7 +265,7 @@ static int do_lo_send_aops(struct loop_d page_cache_release(page); } out: - up(&mapping->host->i_sem); + mutex_unlock(&mapping->host->i_sem); return ret; unlock: unlock_page(page); diff -purN v2.6.12-rc2-00_mutex/drivers/char/mem.c v2.6.12-rc2-01_i_sem/drivers/char/mem.c --- v2.6.12-rc2-00_mutex/drivers/char/mem.c 2005-04-07 09:53:07.000000000 -0400 +++ v2.6.12-rc2-01_i_sem/drivers/char/mem.c 2005-04-07 15:13:02.000000000 -0400 @@ -691,7 +691,7 @@ static loff_t memory_lseek(struct file * { loff_t ret; - down(&file->f_dentry->d_inode->i_sem); + mutex_lock(&file->f_dentry->d_inode->i_sem); switch (orig) { case 0: file->f_pos = offset; @@ -706,7 +706,7 @@ static loff_t memory_lseek(struct file * default: ret = -EINVAL; } - up(&file->f_dentry->d_inode->i_sem); + mutex_unlock(&file->f_dentry->d_inode->i_sem); return ret; } diff -purN v2.6.12-rc2-00_mutex/drivers/isdn/capi/capifs.c v2.6.12-rc2-01_i_sem/drivers/isdn/capi/capifs.c --- v2.6.12-rc2-00_mutex/drivers/isdn/capi/capifs.c 2005-04-06 17:28:00.000000000 -0400 +++ v2.6.12-rc2-01_i_sem/drivers/isdn/capi/capifs.c 2005-04-07 15:13:02.000000000 -0400 @@ -135,7 +135,7 @@ static struct dentry *get_node(int num) { char s[10]; struct dentry *root = capifs_root; - down(&root->d_inode->i_sem); + mutex_lock(&root->d_inode->i_sem); return lookup_one_len(s, root, sprintf(s, "%d", num)); } @@ -156,7 +156,7 @@ void capifs_new_ncci(unsigned int number dentry = get_node(number); if (!IS_ERR(dentry) && !dentry->d_inode) d_instantiate(dentry, inode); - up(&capifs_root->d_inode->i_sem); + mutex_unlock(&capifs_root->d_inode->i_sem); } void capifs_free_ncci(unsigned int number) @@ -172,7 +172,7 @@ void capifs_free_ncci(unsigned int numbe } dput(dentry); } - up(&capifs_root->d_inode->i_sem); + mutex_unlock(&capifs_root->d_inode->i_sem); } static int __init capifs_init(void) diff -purN v2.6.12-rc2-00_mutex/drivers/md/dm.c v2.6.12-rc2-01_i_sem/drivers/md/dm.c --- v2.6.12-rc2-00_mutex/drivers/md/dm.c 2005-04-07 09:53:08.000000000 -0400 +++ v2.6.12-rc2-01_i_sem/drivers/md/dm.c 2005-04-07 15:13:02.000000000 -0400 @@ -831,9 +831,9 @@ static void __set_size(struct gendisk *d set_capacity(disk, size); bdev = bdget_disk(disk, 0); if (bdev) { - down(&bdev->bd_inode->i_sem); + mutex_lock(&bdev->bd_inode->i_sem); i_size_write(bdev->bd_inode, (loff_t)size << SECTOR_SHIFT); - up(&bdev->bd_inode->i_sem); + mutex_unlock(&bdev->bd_inode->i_sem); bdput(bdev); } } diff -purN v2.6.12-rc2-00_mutex/drivers/md/md.c v2.6.12-rc2-01_i_sem/drivers/md/md.c --- v2.6.12-rc2-00_mutex/drivers/md/md.c 2005-04-07 09:53:08.000000000 -0400 +++ v2.6.12-rc2-01_i_sem/drivers/md/md.c 2005-04-07 15:13:02.000000000 -0400 @@ -2406,9 +2406,9 @@ static int update_array_info(mddev_t *md bdev = bdget_disk(mddev->gendisk, 0); if (bdev) { - down(&bdev->bd_inode->i_sem); + mutex_lock(&bdev->bd_inode->i_sem); i_size_write(bdev->bd_inode, mddev->array_size << 10); - up(&bdev->bd_inode->i_sem); + mutex_unlock(&bdev->bd_inode->i_sem); bdput(bdev); } } @@ -2428,9 +2428,9 @@ static int update_array_info(mddev_t *md bdev = bdget_disk(mddev->gendisk, 0); if (bdev) { - down(&bdev->bd_inode->i_sem); + mutex_lock(&bdev->bd_inode->i_sem); i_size_write(bdev->bd_inode, mddev->array_size << 10); - up(&bdev->bd_inode->i_sem); + mutex_unlock(&bdev->bd_inode->i_sem); bdput(bdev); } } diff -purN v2.6.12-rc2-00_mutex/drivers/pci/proc.c v2.6.12-rc2-01_i_sem/drivers/pci/proc.c --- v2.6.12-rc2-00_mutex/drivers/pci/proc.c 2005-04-07 09:53:10.000000000 -0400 +++ v2.6.12-rc2-01_i_sem/drivers/pci/proc.c 2005-04-07 15:13:02.000000000 -0400 @@ -24,7 +24,7 @@ proc_bus_pci_lseek(struct file *file, lo loff_t new = -1; struct inode *inode = file->f_dentry->d_inode; - down(&inode->i_sem); + mutex_lock(&inode->i_sem); switch (whence) { case 0: new = off; @@ -40,7 +40,7 @@ proc_bus_pci_lseek(struct file *file, lo new = -EINVAL; else file->f_pos = new; - up(&inode->i_sem); + mutex_unlock(&inode->i_sem); return new; } diff -purN v2.6.12-rc2-00_mutex/drivers/usb/core/inode.c v2.6.12-rc2-01_i_sem/drivers/usb/core/inode.c --- v2.6.12-rc2-00_mutex/drivers/usb/core/inode.c 2005-04-06 17:28:05.000000000 -0400 +++ v2.6.12-rc2-01_i_sem/drivers/usb/core/inode.c 2005-04-07 15:13:02.000000000 -0400 @@ -183,13 +183,13 @@ static void update_bus(struct dentry *bu bus->d_inode->i_gid = busgid; bus->d_inode->i_mode = S_IFDIR | busmode; - down(&bus->d_inode->i_sem); + mutex_lock(&bus->d_inode->i_sem); list_for_each_entry(dev, &bus->d_subdirs, d_child) if (dev->d_inode) update_dev(dev); - up(&bus->d_inode->i_sem); + mutex_unlock(&bus->d_inode->i_sem); } static void update_sb(struct super_block *sb) @@ -200,7 +200,7 @@ static void update_sb(struct super_block if (!root) return; - down(&root->d_inode->i_sem); + mutex_lock(&root->d_inode->i_sem); list_for_each_entry(bus, &root->d_subdirs, d_child) { if (bus->d_inode) { @@ -218,7 +218,7 @@ static void update_sb(struct super_block } } - up(&root->d_inode->i_sem); + mutex_unlock(&root->d_inode->i_sem); } static int remount(struct super_block *sb, int *flags, char *data) @@ -332,10 +332,10 @@ static int usbfs_empty (struct dentry *d static int usbfs_unlink (struct inode *dir, struct dentry *dentry) { struct inode *inode = dentry->d_inode; - down(&inode->i_sem); + mutex_lock(&inode->i_sem); dentry->d_inode->i_nlink--; dput(dentry); - up(&inode->i_sem); + mutex_unlock(&inode->i_sem); d_delete(dentry); return 0; } @@ -345,7 +345,7 @@ static int usbfs_rmdir(struct inode *dir int error = -ENOTEMPTY; struct inode * inode = dentry->d_inode; - down(&inode->i_sem); + mutex_lock(&inode->i_sem); dentry_unhash(dentry); if (usbfs_empty(dentry)) { dentry->d_inode->i_nlink -= 2; @@ -354,7 +354,7 @@ static int usbfs_rmdir(struct inode *dir dir->i_nlink--; error = 0; } - up(&inode->i_sem); + mutex_unlock(&inode->i_sem); if (!error) d_delete(dentry); dput(dentry); @@ -379,7 +379,7 @@ static loff_t default_file_lseek (struct { loff_t retval = -EINVAL; - down(&file->f_dentry->d_inode->i_sem); + mutex_lock(&file->f_dentry->d_inode->i_sem); switch(orig) { case 0: if (offset > 0) { @@ -396,7 +396,7 @@ static loff_t default_file_lseek (struct default: break; } - up(&file->f_dentry->d_inode->i_sem); + mutex_unlock(&file->f_dentry->d_inode->i_sem); return retval; } @@ -494,7 +494,7 @@ static int fs_create_by_name (const char } *dentry = NULL; - down(&parent->d_inode->i_sem); + mutex_lock(&parent->d_inode->i_sem); *dentry = get_dentry (parent, name); if (!IS_ERR(dentry)) { if ((mode & S_IFMT) == S_IFDIR) @@ -503,7 +503,7 @@ static int fs_create_by_name (const char error = usbfs_create (parent->d_inode, *dentry, mode); } else error = PTR_ERR(dentry); - up(&parent->d_inode->i_sem); + mutex_unlock(&parent->d_inode->i_sem); return error; } @@ -542,7 +542,7 @@ static void fs_remove_file (struct dentr if (!parent || !parent->d_inode) return; - down(&parent->d_inode->i_sem); + mutex_lock(&parent->d_inode->i_sem); if (usbfs_positive(dentry)) { if (dentry->d_inode) { if (S_ISDIR(dentry->d_inode->i_mode)) @@ -552,7 +552,7 @@ static void fs_remove_file (struct dentr dput(dentry); } } - up(&parent->d_inode->i_sem); + mutex_unlock(&parent->d_inode->i_sem); } /* --------------------------------------------------------------------- */ diff -purN v2.6.12-rc2-00_mutex/drivers/usb/gadget/file_storage.c v2.6.12-rc2-01_i_sem/drivers/usb/gadget/file_storage.c --- v2.6.12-rc2-00_mutex/drivers/usb/gadget/file_storage.c 2005-04-07 09:53:10.000000000 -0400 +++ v2.6.12-rc2-01_i_sem/drivers/usb/gadget/file_storage.c 2005-04-07 15:13:02.000000000 -0400 @@ -1877,7 +1877,7 @@ static int fsync_sub(struct lun *curlun) return -EINVAL; inode = filp->f_dentry->d_inode; - down(&inode->i_sem); + mutex_lock(&inode->i_sem); current->flags |= PF_SYNCWRITE; rc = filemap_fdatawrite(inode->i_mapping); err = filp->f_op->fsync(filp, filp->f_dentry, 1); @@ -1887,7 +1887,7 @@ static int fsync_sub(struct lun *curlun) if (!rc) rc = err; current->flags &= ~PF_SYNCWRITE; - up(&inode->i_sem); + mutex_unlock(&inode->i_sem); VLDBG(curlun, "fdatasync -> %d\n", rc); return rc; } diff -purN v2.6.12-rc2-00_mutex/drivers/usb/gadget/inode.c v2.6.12-rc2-01_i_sem/drivers/usb/gadget/inode.c --- v2.6.12-rc2-00_mutex/drivers/usb/gadget/inode.c 2005-04-07 09:53:10.000000000 -0400 +++ v2.6.12-rc2-01_i_sem/drivers/usb/gadget/inode.c 2005-04-07 15:13:02.000000000 -0400 @@ -1561,10 +1561,10 @@ restart: spin_unlock_irq (&dev->lock); /* break link to dcache */ - down (&parent->i_sem); + mutex_lock (&parent->i_sem); d_delete (dentry); dput (dentry); - up (&parent->i_sem); + mutex_unlock (&parent->i_sem); /* fds may still be open */ goto restart; diff -purN v2.6.12-rc2-00_mutex/fs/affs/inode.c v2.6.12-rc2-01_i_sem/fs/affs/inode.c --- v2.6.12-rc2-00_mutex/fs/affs/inode.c 2005-04-06 17:28:06.000000000 -0400 +++ v2.6.12-rc2-01_i_sem/fs/affs/inode.c 2005-04-07 15:13:02.000000000 -0400 @@ -244,10 +244,10 @@ affs_put_inode(struct inode *inode) pr_debug("AFFS: put_inode(ino=%lu, nlink=%u)\n", inode->i_ino, inode->i_nlink); affs_free_prealloc(inode); if (atomic_read(&inode->i_count) == 1) { - down(&inode->i_sem); + mutex_lock(&inode->i_sem); if (inode->i_size != AFFS_I(inode)->mmu_private) affs_truncate(inode); - up(&inode->i_sem); + mutex_unlock(&inode->i_sem); } } diff -purN v2.6.12-rc2-00_mutex/fs/autofs/root.c v2.6.12-rc2-01_i_sem/fs/autofs/root.c --- v2.6.12-rc2-00_mutex/fs/autofs/root.c 2004-12-24 16:34:45.000000000 -0500 +++ v2.6.12-rc2-01_i_sem/fs/autofs/root.c 2005-04-07 15:13:02.000000000 -0400 @@ -229,9 +229,9 @@ static struct dentry *autofs_root_lookup dentry->d_flags |= DCACHE_AUTOFS_PENDING; d_add(dentry, NULL); - up(&dir->i_sem); + mutex_unlock(&dir->i_sem); autofs_revalidate(dentry, nd); - down(&dir->i_sem); + mutex_lock(&dir->i_sem); /* * If we are still pending, check if we had to handle diff -purN v2.6.12-rc2-00_mutex/fs/autofs4/root.c v2.6.12-rc2-01_i_sem/fs/autofs4/root.c --- v2.6.12-rc2-00_mutex/fs/autofs4/root.c 2005-04-07 09:53:11.000000000 -0400 +++ v2.6.12-rc2-01_i_sem/fs/autofs4/root.c 2005-04-07 15:13:02.000000000 -0400 @@ -477,9 +477,9 @@ static struct dentry *autofs4_lookup(str d_add(dentry, NULL); if (dentry->d_op && dentry->d_op->d_revalidate) { - up(&dir->i_sem); + mutex_unlock(&dir->i_sem); (dentry->d_op->d_revalidate)(dentry, nd); - down(&dir->i_sem); + mutex_lock(&dir->i_sem); } /* diff -purN v2.6.12-rc2-00_mutex/fs/binfmt_misc.c v2.6.12-rc2-01_i_sem/fs/binfmt_misc.c --- v2.6.12-rc2-00_mutex/fs/binfmt_misc.c 2005-04-06 17:28:06.000000000 -0400 +++ v2.6.12-rc2-01_i_sem/fs/binfmt_misc.c 2005-04-07 15:13:02.000000000 -0400 @@ -588,11 +588,11 @@ static ssize_t bm_entry_write(struct fil case 2: set_bit(Enabled, &e->flags); break; case 3: root = dget(file->f_vfsmnt->mnt_sb->s_root); - down(&root->d_inode->i_sem); + mutex_lock(&root->d_inode->i_sem); kill_node(e); - up(&root->d_inode->i_sem); + mutex_unlock(&root->d_inode->i_sem); dput(root); break; default: return res; @@ -622,7 +622,7 @@ static ssize_t bm_register_write(struct return PTR_ERR(e); root = dget(sb->s_root); - down(&root->d_inode->i_sem); + mutex_lock(&root->d_inode->i_sem); dentry = lookup_one_len(e->name, root, strlen(e->name)); err = PTR_ERR(dentry); if (IS_ERR(dentry)) @@ -658,7 +658,7 @@ static ssize_t bm_register_write(struct out2: dput(dentry); out: - up(&root->d_inode->i_sem); + mutex_unlock(&root->d_inode->i_sem); dput(root); if (err) { @@ -703,12 +703,12 @@ static ssize_t bm_status_write(struct fi case 1: enabled = 0; break; case 2: enabled = 1; break; case 3: root = dget(file->f_vfsmnt->mnt_sb->s_root); - down(&root->d_inode->i_sem); + mutex_lock(&root->d_inode->i_sem); while (!list_empty(&entries)) kill_node(list_entry(entries.next, Node, list)); - up(&root->d_inode->i_sem); + mutex_unlock(&root->d_inode->i_sem); dput(root); default: return res; } diff -purN v2.6.12-rc2-00_mutex/fs/block_dev.c v2.6.12-rc2-01_i_sem/fs/block_dev.c --- v2.6.12-rc2-00_mutex/fs/block_dev.c 2005-04-06 17:28:06.000000000 -0400 +++ v2.6.12-rc2-01_i_sem/fs/block_dev.c 2005-04-07 15:13:02.000000000 -0400 @@ -202,7 +202,7 @@ static loff_t block_llseek(struct file * loff_t size; loff_t retval; - down(&bd_inode->i_sem); + mutex_lock(&bd_inode->i_sem); size = i_size_read(bd_inode); switch (origin) { @@ -219,7 +219,7 @@ static loff_t block_llseek(struct file * } retval = offset; } - up(&bd_inode->i_sem); + mutex_unlock(&bd_inode->i_sem); return retval; } diff -purN v2.6.12-rc2-00_mutex/fs/buffer.c v2.6.12-rc2-01_i_sem/fs/buffer.c --- v2.6.12-rc2-00_mutex/fs/buffer.c 2005-04-07 09:53:11.000000000 -0400 +++ v2.6.12-rc2-01_i_sem/fs/buffer.c 2005-04-07 15:13:02.000000000 -0400 @@ -357,11 +357,11 @@ asmlinkage long sys_fsync(unsigned int f * We need to protect against concurrent writers, * which could cause livelocks in fsync_buffers_list */ - down(&mapping->host->i_sem); + mutex_lock(&mapping->host->i_sem); err = file->f_op->fsync(file, file->f_dentry, 0); if (!ret) ret = err; - up(&mapping->host->i_sem); + mutex_unlock(&mapping->host->i_sem); err = filemap_fdatawait(mapping); if (!ret) ret = err; @@ -392,11 +392,11 @@ asmlinkage long sys_fdatasync(unsigned i current->flags |= PF_SYNCWRITE; ret = filemap_fdatawrite(mapping); - down(&mapping->host->i_sem); + mutex_lock(&mapping->host->i_sem); err = file->f_op->fsync(file, file->f_dentry, 1); if (!ret) ret = err; - up(&mapping->host->i_sem); + mutex_unlock(&mapping->host->i_sem); err = filemap_fdatawait(mapping); if (!ret) ret = err; diff -purN v2.6.12-rc2-00_mutex/fs/cifs/cifsfs.c v2.6.12-rc2-01_i_sem/fs/cifs/cifsfs.c --- v2.6.12-rc2-00_mutex/fs/cifs/cifsfs.c 2005-04-07 09:53:11.000000000 -0400 +++ v2.6.12-rc2-01_i_sem/fs/cifs/cifsfs.c 2005-04-07 15:13:02.000000000 -0400 @@ -790,7 +790,7 @@ static int cifs_oplock_thread(void * dum deadlock when oplock received on delete since vfs_unlink holds the i_sem across the call */ - /* down(&inode->i_sem);*/ + /* mutex_lock(&inode->i_sem);*/ if (S_ISREG(inode->i_mode)) { rc = filemap_fdatawrite(inode->i_mapping); if(CIFS_I(inode)->clientCanCacheRead == 0) { @@ -799,7 +799,7 @@ static int cifs_oplock_thread(void * dum } } else rc = 0; - /* up(&inode->i_sem);*/ + /* mutex_unlock(&inode->i_sem);*/ if (rc) CIFS_I(inode)->write_behind_rc = rc; cFYI(1,("Oplock flush inode %p rc %d",inode,rc)); diff -purN v2.6.12-rc2-00_mutex/fs/cifs/inode.c v2.6.12-rc2-01_i_sem/fs/cifs/inode.c --- v2.6.12-rc2-00_mutex/fs/cifs/inode.c 2005-04-07 09:53:11.000000000 -0400 +++ v2.6.12-rc2-01_i_sem/fs/cifs/inode.c 2005-04-07 15:13:02.000000000 -0400 @@ -818,7 +818,7 @@ int cifs_revalidate(struct dentry *diren /* can not grab this sem since kernel filesys locking documentation indicates i_sem may be taken by the kernel on lookup and rename which could deadlock if we grab the i_sem here as well */ -/* down(&direntry->d_inode->i_sem);*/ +/* mutex_lock(&direntry->d_inode->i_sem);*/ /* need to write out dirty pages here */ if (direntry->d_inode->i_mapping) { /* do we need to lock inode until after invalidate completes @@ -836,7 +836,7 @@ int cifs_revalidate(struct dentry *diren invalidate_remote_inode(direntry->d_inode); } } -/* up(&direntry->d_inode->i_sem); */ +/* mutex_unlock(&direntry->d_inode->i_sem); */ kfree(full_path); FreeXid(xid); diff -purN v2.6.12-rc2-00_mutex/fs/coda/dir.c v2.6.12-rc2-01_i_sem/fs/coda/dir.c --- v2.6.12-rc2-00_mutex/fs/coda/dir.c 2005-04-06 17:28:07.000000000 -0400 +++ v2.6.12-rc2-01_i_sem/fs/coda/dir.c 2005-04-07 15:13:02.000000000 -0400 @@ -453,7 +453,7 @@ int coda_readdir(struct file *coda_file, coda_vfs_stat.readdir++; host_inode = host_file->f_dentry->d_inode; - down(&host_inode->i_sem); + mutex_lock(&host_inode->i_sem); host_file->f_pos = coda_file->f_pos; if (!host_file->f_op->readdir) { @@ -475,7 +475,7 @@ int coda_readdir(struct file *coda_file, } out: coda_file->f_pos = host_file->f_pos; - up(&host_inode->i_sem); + mutex_unlock(&host_inode->i_sem); return ret; } diff -purN v2.6.12-rc2-00_mutex/fs/coda/file.c v2.6.12-rc2-01_i_sem/fs/coda/file.c --- v2.6.12-rc2-00_mutex/fs/coda/file.c 2005-04-06 17:28:07.000000000 -0400 +++ v2.6.12-rc2-01_i_sem/fs/coda/file.c 2005-04-07 15:13:02.000000000 -0400 @@ -77,14 +77,14 @@ coda_file_write(struct file *coda_file, return -EINVAL; host_inode = host_file->f_dentry->d_inode; - down(&coda_inode->i_sem); + mutex_lock(&coda_inode->i_sem); ret = host_file->f_op->write(host_file, buf, count, ppos); coda_inode->i_size = host_inode->i_size; coda_inode->i_blocks = (coda_inode->i_size + 511) >> 9; coda_inode->i_mtime = coda_inode->i_ctime = CURRENT_TIME_SEC; - up(&coda_inode->i_sem); + mutex_unlock(&coda_inode->i_sem); return ret; } @@ -272,9 +272,9 @@ int coda_fsync(struct file *coda_file, s if (host_file->f_op && host_file->f_op->fsync) { host_dentry = host_file->f_dentry; host_inode = host_dentry->d_inode; - down(&host_inode->i_sem); + mutex_lock(&host_inode->i_sem); err = host_file->f_op->fsync(host_file, host_dentry, datasync); - up(&host_inode->i_sem); + mutex_unlock(&host_inode->i_sem); } if ( !err && !datasync ) { diff -purN v2.6.12-rc2-00_mutex/fs/debugfs/inode.c v2.6.12-rc2-01_i_sem/fs/debugfs/inode.c --- v2.6.12-rc2-00_mutex/fs/debugfs/inode.c 2005-04-06 17:28:07.000000000 -0400 +++ v2.6.12-rc2-01_i_sem/fs/debugfs/inode.c 2005-04-07 15:13:02.000000000 -0400 @@ -156,7 +156,7 @@ static int debugfs_create_by_name(const } *dentry = NULL; - down(&parent->d_inode->i_sem); + mutex_lock(&parent->d_inode->i_sem); *dentry = get_dentry (parent, name); if (!IS_ERR(dentry)) { if ((mode & S_IFMT) == S_IFDIR) @@ -165,7 +165,7 @@ static int debugfs_create_by_name(const error = debugfs_create(parent->d_inode, *dentry, mode); } else error = PTR_ERR(dentry); - up(&parent->d_inode->i_sem); + mutex_unlock(&parent->d_inode->i_sem); return error; } @@ -283,7 +283,7 @@ void debugfs_remove(struct dentry *dentr if (!parent || !parent->d_inode) return; - down(&parent->d_inode->i_sem); + mutex_lock(&parent->d_inode->i_sem); if (debugfs_positive(dentry)) { if (dentry->d_inode) { if (S_ISDIR(dentry->d_inode->i_mode)) @@ -293,7 +293,7 @@ void debugfs_remove(struct dentry *dentr dput(dentry); } } - up(&parent->d_inode->i_sem); + mutex_unlock(&parent->d_inode->i_sem); simple_release_fs(&debugfs_mount, &debugfs_mount_count); } EXPORT_SYMBOL_GPL(debugfs_remove); diff -purN v2.6.12-rc2-00_mutex/fs/devfs/base.c v2.6.12-rc2-01_i_sem/fs/devfs/base.c --- v2.6.12-rc2-00_mutex/fs/devfs/base.c 2005-04-06 17:28:07.000000000 -0400 +++ v2.6.12-rc2-01_i_sem/fs/devfs/base.c 2005-04-07 15:13:02.000000000 -0400 @@ -2182,7 +2182,7 @@ static int devfs_d_revalidate_wait(struc (!(nd->flags & LOOKUP_CREATE) || (nd->flags & LOOKUP_PARENT)); if (need_lock) - down(&dir->i_sem); + mutex_lock(&dir->i_sem); if (is_devfsd_or_child(fs_info)) { devfs_handle_t de = lookup_info->de; @@ -2221,9 +2221,9 @@ static int devfs_d_revalidate_wait(struc add_wait_queue(&lookup_info->wait_queue, &wait); read_unlock(&parent->u.dir.lock); /* at this point it is always (hopefully) locked */ - up(&dir->i_sem); + mutex_unlock(&dir->i_sem); schedule(); - down(&dir->i_sem); + mutex_lock(&dir->i_sem); /* * This does not need nor should remove wait from wait_queue. * Wait queue head is never reused - nothing is ever added to it @@ -2238,7 +2238,7 @@ static int devfs_d_revalidate_wait(struc out: if (need_lock) - up(&dir->i_sem); + mutex_unlock(&dir->i_sem); return 1; } /* End Function devfs_d_revalidate_wait */ @@ -2284,9 +2284,9 @@ static struct dentry *devfs_lookup(struc /* Unlock directory semaphore, which will release any waiters. They will get the hashed dentry, and may be forced to wait for revalidation */ - up(&dir->i_sem); + mutex_unlock(&dir->i_sem); wait_for_devfsd_finished(fs_info); /* If I'm not devfsd, must wait */ - down(&dir->i_sem); /* Grab it again because them's the rules */ + mutex_lock(&dir->i_sem); /* Grab it again because them's the rules */ de = lookup_info.de; /* If someone else has been so kind as to make the inode, we go home early */ diff -purN v2.6.12-rc2-00_mutex/fs/devpts/inode.c v2.6.12-rc2-01_i_sem/fs/devpts/inode.c --- v2.6.12-rc2-00_mutex/fs/devpts/inode.c 2005-04-06 17:28:07.000000000 -0400 +++ v2.6.12-rc2-01_i_sem/fs/devpts/inode.c 2005-04-07 15:13:02.000000000 -0400 @@ -150,7 +150,7 @@ static struct dentry *get_node(int num) { char s[12]; struct dentry *root = devpts_root; - down(&root->d_inode->i_sem); + mutex_lock(&root->d_inode->i_sem); return lookup_one_len(s, root, sprintf(s, "%d", num)); } @@ -182,7 +182,7 @@ int devpts_pty_new(struct tty_struct *tt if (!IS_ERR(dentry) && !dentry->d_inode) d_instantiate(dentry, inode); - up(&devpts_root->d_inode->i_sem); + mutex_unlock(&devpts_root->d_inode->i_sem); return 0; } @@ -199,7 +199,7 @@ struct tty_struct *devpts_get_tty(int nu dput(dentry); } - up(&devpts_root->d_inode->i_sem); + mutex_unlock(&devpts_root->d_inode->i_sem); return tty; } @@ -217,7 +217,7 @@ void devpts_pty_kill(int number) } dput(dentry); } - up(&devpts_root->d_inode->i_sem); + mutex_unlock(&devpts_root->d_inode->i_sem); } static int __init init_devpts_fs(void) diff -purN v2.6.12-rc2-00_mutex/fs/direct-io.c v2.6.12-rc2-01_i_sem/fs/direct-io.c --- v2.6.12-rc2-00_mutex/fs/direct-io.c 2005-04-07 09:53:11.000000000 -0400 +++ v2.6.12-rc2-01_i_sem/fs/direct-io.c 2005-04-07 15:13:02.000000000 -0400 @@ -1050,7 +1050,7 @@ direct_io_worker(int rw, struct kiocb *i * of protecting us from looking up uninitialized blocks. */ if ((rw == READ) && (dio->lock_type == DIO_LOCKING)) - up(&dio->inode->i_sem); + mutex_unlock(&dio->inode->i_sem); /* * OK, all BIOs are submitted, so we can decrement bio_count to truly @@ -1212,7 +1212,7 @@ __blockdev_direct_IO(int rw, struct kioc mapping = iocb->ki_filp->f_mapping; if (dio_lock_type != DIO_OWN_LOCKING) { - down(&inode->i_sem); + mutex_lock(&inode->i_sem); reader_with_isem = 1; } @@ -1224,7 +1224,7 @@ __blockdev_direct_IO(int rw, struct kioc } if (dio_lock_type == DIO_OWN_LOCKING) { - up(&inode->i_sem); + mutex_unlock(&inode->i_sem); reader_with_isem = 0; } } @@ -1250,7 +1250,7 @@ __blockdev_direct_IO(int rw, struct kioc out: if (reader_with_isem) - up(&inode->i_sem); + mutex_unlock(&inode->i_sem); if (rw & WRITE) current->flags &= ~PF_SYNCWRITE; return retval; diff -purN v2.6.12-rc2-00_mutex/fs/dquot.c v2.6.12-rc2-01_i_sem/fs/dquot.c --- v2.6.12-rc2-00_mutex/fs/dquot.c 2005-04-07 09:53:11.000000000 -0400 +++ v2.6.12-rc2-01_i_sem/fs/dquot.c 2005-04-07 15:13:02.000000000 -0400 @@ -1378,11 +1378,11 @@ int vfs_quota_off(struct super_block *sb /* If quota was reenabled in the meantime, we have * nothing to do */ if (!sb_has_quota_enabled(sb, cnt)) { - down(&toputinode[cnt]->i_sem); + mutex_lock(&toputinode[cnt]->i_sem); toputinode[cnt]->i_flags &= ~(S_IMMUTABLE | S_NOATIME | S_NOQUOTA); truncate_inode_pages(&toputinode[cnt]->i_data, 0); - up(&toputinode[cnt]->i_sem); + mutex_unlock(&toputinode[cnt]->i_sem); mark_inode_dirty(toputinode[cnt]); iput(toputinode[cnt]); } @@ -1430,7 +1430,7 @@ static int vfs_quota_on_inode(struct ino write_inode_now(inode, 1); /* And now flush the block cache so that kernel sees the changes */ invalidate_bdev(sb->s_bdev, 0); - down(&inode->i_sem); + mutex_lock(&inode->i_sem); down(&dqopt->dqonoff_sem); if (sb_has_quota_enabled(sb, type)) { error = -EBUSY; @@ -1461,7 +1461,7 @@ static int vfs_quota_on_inode(struct ino goto out_file_init; } up(&dqopt->dqio_sem); - up(&inode->i_sem); + mutex_unlock(&inode->i_sem); set_enable_flags(dqopt, type); add_dquot_ref(sb, type); @@ -1482,7 +1482,7 @@ out_lock: inode->i_flags |= oldflags; up_write(&dqopt->dqptr_sem); } - up(&inode->i_sem); + mutex_unlock(&inode->i_sem); out_fmt: put_quota_format(fmt); diff -purN v2.6.12-rc2-00_mutex/fs/exportfs/expfs.c v2.6.12-rc2-01_i_sem/fs/exportfs/expfs.c --- v2.6.12-rc2-00_mutex/fs/exportfs/expfs.c 2005-04-07 09:53:11.000000000 -0400 +++ v2.6.12-rc2-01_i_sem/fs/exportfs/expfs.c 2005-04-07 15:13:02.000000000 -0400 @@ -177,9 +177,9 @@ find_exported_dentry(struct super_block struct dentry *ppd; struct dentry *npd; - down(&pd->d_inode->i_sem); + mutex_lock(&pd->d_inode->i_sem); ppd = CALL(nops,get_parent)(pd); - up(&pd->d_inode->i_sem); + mutex_unlock(&pd->d_inode->i_sem); if (IS_ERR(ppd)) { err = PTR_ERR(ppd); @@ -201,9 +201,9 @@ find_exported_dentry(struct super_block break; } dprintk("find_exported_dentry: found name: %s\n", nbuf); - down(&ppd->d_inode->i_sem); + mutex_lock(&ppd->d_inode->i_sem); npd = lookup_one_len(nbuf, ppd, strlen(nbuf)); - up(&ppd->d_inode->i_sem); + mutex_unlock(&ppd->d_inode->i_sem); if (IS_ERR(npd)) { err = PTR_ERR(npd); dprintk("find_exported_dentry: lookup failed: %d\n", err); @@ -242,9 +242,9 @@ find_exported_dentry(struct super_block struct dentry *nresult; err = CALL(nops,get_name)(target_dir, nbuf, result); if (!err) { - down(&target_dir->d_inode->i_sem); + mutex_lock(&target_dir->d_inode->i_sem); nresult = lookup_one_len(nbuf, target_dir, strlen(nbuf)); - up(&target_dir->d_inode->i_sem); + mutex_unlock(&target_dir->d_inode->i_sem); if (!IS_ERR(nresult)) { if (nresult->d_inode) { dput(result); diff -purN v2.6.12-rc2-00_mutex/fs/ext2/super.c v2.6.12-rc2-01_i_sem/fs/ext2/super.c --- v2.6.12-rc2-00_mutex/fs/ext2/super.c 2005-04-07 09:53:11.000000000 -0400 +++ v2.6.12-rc2-01_i_sem/fs/ext2/super.c 2005-04-07 15:13:02.000000000 -0400 @@ -1080,7 +1080,7 @@ static ssize_t ext2_quota_write(struct s struct buffer_head tmp_bh; struct buffer_head *bh; - down(&inode->i_sem); + mutex_lock(&inode->i_sem); while (towrite > 0) { tocopy = sb->s_blocksize - offset < towrite ? sb->s_blocksize - offset : towrite; @@ -1117,7 +1117,7 @@ out: inode->i_version++; inode->i_mtime = inode->i_ctime = CURRENT_TIME; mark_inode_dirty(inode); - up(&inode->i_sem); + mutex_unlock(&inode->i_sem); return len - towrite; } diff -purN v2.6.12-rc2-00_mutex/fs/ext3/super.c v2.6.12-rc2-01_i_sem/fs/ext3/super.c --- v2.6.12-rc2-00_mutex/fs/ext3/super.c 2005-04-07 09:53:11.000000000 -0400 +++ v2.6.12-rc2-01_i_sem/fs/ext3/super.c 2005-04-07 15:13:02.000000000 -0400 @@ -2443,7 +2443,7 @@ static ssize_t ext3_quota_write(struct s struct buffer_head *bh; handle_t *handle = journal_current_handle(); - down(&inode->i_sem); + mutex_lock(&inode->i_sem); while (towrite > 0) { tocopy = sb->s_blocksize - offset < towrite ? sb->s_blocksize - offset : towrite; @@ -2486,7 +2486,7 @@ out: inode->i_version++; inode->i_mtime = inode->i_ctime = CURRENT_TIME; ext3_mark_inode_dirty(handle, inode); - up(&inode->i_sem); + mutex_unlock(&inode->i_sem); return len - towrite; } diff -purN v2.6.12-rc2-00_mutex/fs/fat/dir.c v2.6.12-rc2-01_i_sem/fs/fat/dir.c --- v2.6.12-rc2-00_mutex/fs/fat/dir.c 2005-04-07 09:53:11.000000000 -0400 +++ v2.6.12-rc2-01_i_sem/fs/fat/dir.c 2005-04-07 15:13:02.000000000 -0400 @@ -733,13 +733,13 @@ static int fat_dir_ioctl(struct inode * buf.dirent = d1; buf.result = 0; - down(&inode->i_sem); + mutex_lock(&inode->i_sem); ret = -ENOENT; if (!IS_DEADDIR(inode)) { ret = fat_readdirx(inode, filp, &buf, fat_ioctl_filldir, short_only, both); } - up(&inode->i_sem); + mutex_unlock(&inode->i_sem); if (ret >= 0) ret = buf.result; return ret; diff -purN v2.6.12-rc2-00_mutex/fs/fat/file.c v2.6.12-rc2-01_i_sem/fs/fat/file.c --- v2.6.12-rc2-00_mutex/fs/fat/file.c 2005-04-07 09:53:11.000000000 -0400 +++ v2.6.12-rc2-01_i_sem/fs/fat/file.c 2005-04-07 15:13:02.000000000 -0400 @@ -73,7 +73,7 @@ int fat_generic_ioctl(struct inode *inod if (err) return err; - down(&inode->i_sem); + mutex_lock(&inode->i_sem); if (IS_RDONLY(inode)) { err = -EROFS; @@ -135,7 +135,7 @@ int fat_generic_ioctl(struct inode *inod MSDOS_I(inode)->i_attrs = attr & ATTR_UNUSED; mark_inode_dirty(inode); up: - up(&inode->i_sem); + mutex_unlock(&inode->i_sem); return err; } default: diff -purN v2.6.12-rc2-00_mutex/fs/fifo.c v2.6.12-rc2-01_i_sem/fs/fifo.c --- v2.6.12-rc2-00_mutex/fs/fifo.c 2005-04-06 17:28:07.000000000 -0400 +++ v2.6.12-rc2-01_i_sem/fs/fifo.c 2005-04-07 15:21:57.000000000 -0400 @@ -35,7 +35,7 @@ static int fifo_open(struct inode *inode int ret; ret = -ERESTARTSYS; - if (down_interruptible(PIPE_SEM(*inode))) + if (mutex_lock_interruptible(PIPE_SEM(*inode))) goto err_nolock_nocleanup; if (!inode->i_pipe) { @@ -119,7 +119,7 @@ static int fifo_open(struct inode *inode } /* Ok! */ - up(PIPE_SEM(*inode)); + mutex_unlock(PIPE_SEM(*inode)); return 0; err_rd: @@ -139,7 +139,7 @@ err: free_pipe_info(inode); err_nocleanup: - up(PIPE_SEM(*inode)); + mutex_unlock(PIPE_SEM(*inode)); err_nolock_nocleanup: return ret; diff -purN v2.6.12-rc2-00_mutex/fs/hfs/inode.c v2.6.12-rc2-01_i_sem/fs/hfs/inode.c --- v2.6.12-rc2-00_mutex/fs/hfs/inode.c 2005-04-07 09:53:11.000000000 -0400 +++ v2.6.12-rc2-01_i_sem/fs/hfs/inode.c 2005-04-07 15:13:02.000000000 -0400 @@ -548,13 +548,13 @@ static int hfs_file_release(struct inode if (atomic_read(&file->f_count) != 0) return 0; if (atomic_dec_and_test(&HFS_I(inode)->opencnt)) { - down(&inode->i_sem); + mutex_lock(&inode->i_sem); hfs_file_truncate(inode); //if (inode->i_flags & S_DEAD) { // hfs_delete_cat(inode->i_ino, HFSPLUS_SB(sb).hidden_dir, NULL); // hfs_delete_inode(inode); //} - up(&inode->i_sem); + mutex_unlock(&inode->i_sem); } return 0; } diff -purN v2.6.12-rc2-00_mutex/fs/hfsplus/bitmap.c v2.6.12-rc2-01_i_sem/fs/hfsplus/bitmap.c --- v2.6.12-rc2-00_mutex/fs/hfsplus/bitmap.c 2004-12-24 16:35:23.000000000 -0500 +++ v2.6.12-rc2-01_i_sem/fs/hfsplus/bitmap.c 2005-04-07 15:13:02.000000000 -0400 @@ -29,7 +29,7 @@ int hfsplus_block_allocate(struct super_ return size; dprint(DBG_BITMAP, "block_allocate: %u,%u,%u\n", size, offset, len); - down(&HFSPLUS_SB(sb).alloc_file->i_sem); + mutex_lock(&HFSPLUS_SB(sb).alloc_file->i_sem); mapping = HFSPLUS_SB(sb).alloc_file->i_mapping; page = read_cache_page(mapping, offset / PAGE_CACHE_BITS, (filler_t *)mapping->a_ops->readpage, NULL); @@ -143,7 +143,7 @@ done: sb->s_dirt = 1; dprint(DBG_BITMAP, "-> %u,%u\n", start, *max); out: - up(&HFSPLUS_SB(sb).alloc_file->i_sem); + mutex_unlock(&HFSPLUS_SB(sb).alloc_file->i_sem); return start; } @@ -164,7 +164,7 @@ int hfsplus_block_free(struct super_bloc if ((offset + count) > HFSPLUS_SB(sb).total_blocks) return -2; - down(&HFSPLUS_SB(sb).alloc_file->i_sem); + mutex_lock(&HFSPLUS_SB(sb).alloc_file->i_sem); mapping = HFSPLUS_SB(sb).alloc_file->i_mapping; pnr = offset / PAGE_CACHE_BITS; page = read_cache_page(mapping, pnr, (filler_t *)mapping->a_ops->readpage, NULL); @@ -215,7 +215,7 @@ out: kunmap(page); HFSPLUS_SB(sb).free_blocks += len; sb->s_dirt = 1; - up(&HFSPLUS_SB(sb).alloc_file->i_sem); + mutex_unlock(&HFSPLUS_SB(sb).alloc_file->i_sem); return 0; } diff -purN v2.6.12-rc2-00_mutex/fs/hfsplus/inode.c v2.6.12-rc2-01_i_sem/fs/hfsplus/inode.c --- v2.6.12-rc2-00_mutex/fs/hfsplus/inode.c 2005-04-07 09:53:11.000000000 -0400 +++ v2.6.12-rc2-01_i_sem/fs/hfsplus/inode.c 2005-04-07 15:13:02.000000000 -0400 @@ -277,13 +277,13 @@ static int hfsplus_file_release(struct i if (atomic_read(&file->f_count) != 0) return 0; if (atomic_dec_and_test(&HFSPLUS_I(inode).opencnt)) { - down(&inode->i_sem); + mutex_lock(&inode->i_sem); hfsplus_file_truncate(inode); if (inode->i_flags & S_DEAD) { hfsplus_delete_cat(inode->i_ino, HFSPLUS_SB(sb).hidden_dir, NULL); hfsplus_delete_inode(inode); } - up(&inode->i_sem); + mutex_unlock(&inode->i_sem); } return 0; } diff -purN v2.6.12-rc2-00_mutex/fs/hpfs/dir.c v2.6.12-rc2-01_i_sem/fs/hpfs/dir.c --- v2.6.12-rc2-00_mutex/fs/hpfs/dir.c 2004-12-24 16:34:27.000000000 -0500 +++ v2.6.12-rc2-01_i_sem/fs/hpfs/dir.c 2005-04-07 15:13:02.000000000 -0400 @@ -32,19 +32,19 @@ static loff_t hpfs_dir_lseek(struct file /*printk("dir lseek\n");*/ if (new_off == 0 || new_off == 1 || new_off == 11 || new_off == 12 || new_off == 13) goto ok; - down(&i->i_sem); + mutex_lock(&i->i_sem); pos = ((loff_t) hpfs_de_as_down_as_possible(s, hpfs_inode->i_dno) << 4) + 1; while (pos != new_off) { if (map_pos_dirent(i, &pos, &qbh)) hpfs_brelse4(&qbh); else goto fail; if (pos == 12) goto fail; } - up(&i->i_sem); + mutex_unlock(&i->i_sem); ok: unlock_kernel(); return filp->f_pos = new_off; fail: - up(&i->i_sem); + mutex_unlock(&i->i_sem); /*printk("illegal lseek: %016llx\n", new_off);*/ unlock_kernel(); return -ESPIPE; diff -purN v2.6.12-rc2-00_mutex/fs/hpfs/hpfs_fn.h v2.6.12-rc2-01_i_sem/fs/hpfs/hpfs_fn.h --- v2.6.12-rc2-00_mutex/fs/hpfs/hpfs_fn.h 2005-04-07 09:53:11.000000000 -0400 +++ v2.6.12-rc2-01_i_sem/fs/hpfs/hpfs_fn.h 2005-04-07 15:28:16.000000000 -0400 @@ -57,7 +57,7 @@ struct hpfs_inode_info { unsigned i_ea_uid : 1; /* file's uid is stored in ea */ unsigned i_ea_gid : 1; /* file's gid is stored in ea */ unsigned i_dirty : 1; - struct semaphore i_sem; + struct mutex i_sem; struct semaphore i_parent; loff_t **i_rddir_off; struct inode vfs_inode; diff -purN v2.6.12-rc2-00_mutex/fs/hpfs/inode.c v2.6.12-rc2-01_i_sem/fs/hpfs/inode.c --- v2.6.12-rc2-00_mutex/fs/hpfs/inode.c 2005-04-07 09:53:11.000000000 -0400 +++ v2.6.12-rc2-01_i_sem/fs/hpfs/inode.c 2005-04-07 15:13:02.000000000 -0400 @@ -199,9 +199,9 @@ void hpfs_write_inode(struct inode *i) hpfs_read_inode(parent); unlock_new_inode(parent); } - down(&hpfs_inode->i_sem); + mutex_lock(&hpfs_inode->i_sem); hpfs_write_inode_nolock(i); - up(&hpfs_inode->i_sem); + mutex_unlock(&hpfs_inode->i_sem); iput(parent); } else { mark_inode_dirty(i); diff -purN v2.6.12-rc2-00_mutex/fs/hpfs/namei.c v2.6.12-rc2-01_i_sem/fs/hpfs/namei.c --- v2.6.12-rc2-00_mutex/fs/hpfs/namei.c 2004-12-24 16:34:32.000000000 -0500 +++ v2.6.12-rc2-01_i_sem/fs/hpfs/namei.c 2005-04-07 15:13:03.000000000 -0400 @@ -60,7 +60,7 @@ static int hpfs_mkdir(struct inode *dir, if (dee.read_only) result->i_mode &= ~0222; - down(&hpfs_i(dir)->i_sem); + mutex_lock(&hpfs_i(dir)->i_sem); r = hpfs_add_dirent(dir, (char *)name, len, &dee, 0); if (r == 1) goto bail3; @@ -101,11 +101,11 @@ static int hpfs_mkdir(struct inode *dir, hpfs_write_inode_nolock(result); } d_instantiate(dentry, result); - up(&hpfs_i(dir)->i_sem); + mutex_unlock(&hpfs_i(dir)->i_sem); unlock_kernel(); return 0; bail3: - up(&hpfs_i(dir)->i_sem); + mutex_unlock(&hpfs_i(dir)->i_sem); iput(result); bail2: hpfs_brelse4(&qbh0); @@ -168,7 +168,7 @@ static int hpfs_create(struct inode *dir result->i_data.a_ops = &hpfs_aops; hpfs_i(result)->mmu_private = 0; - down(&hpfs_i(dir)->i_sem); + mutex_lock(&hpfs_i(dir)->i_sem); r = hpfs_add_dirent(dir, (char *)name, len, &dee, 0); if (r == 1) goto bail2; @@ -193,12 +193,12 @@ static int hpfs_create(struct inode *dir hpfs_write_inode_nolock(result); } d_instantiate(dentry, result); - up(&hpfs_i(dir)->i_sem); + mutex_unlock(&hpfs_i(dir)->i_sem); unlock_kernel(); return 0; bail2: - up(&hpfs_i(dir)->i_sem); + mutex_unlock(&hpfs_i(dir)->i_sem); iput(result); bail1: brelse(bh); @@ -254,7 +254,7 @@ static int hpfs_mknod(struct inode *dir, result->i_blocks = 1; init_special_inode(result, mode, rdev); - down(&hpfs_i(dir)->i_sem); + mutex_lock(&hpfs_i(dir)->i_sem); r = hpfs_add_dirent(dir, (char *)name, len, &dee, 0); if (r == 1) goto bail2; @@ -271,12 +271,12 @@ static int hpfs_mknod(struct inode *dir, hpfs_write_inode_nolock(result); d_instantiate(dentry, result); - up(&hpfs_i(dir)->i_sem); + mutex_unlock(&hpfs_i(dir)->i_sem); brelse(bh); unlock_kernel(); return 0; bail2: - up(&hpfs_i(dir)->i_sem); + mutex_unlock(&hpfs_i(dir)->i_sem); iput(result); bail1: brelse(bh); @@ -333,7 +333,7 @@ static int hpfs_symlink(struct inode *di result->i_op = &page_symlink_inode_operations; result->i_data.a_ops = &hpfs_symlink_aops; - down(&hpfs_i(dir)->i_sem); + mutex_lock(&hpfs_i(dir)->i_sem); r = hpfs_add_dirent(dir, (char *)name, len, &dee, 0); if (r == 1) goto bail2; @@ -352,11 +352,11 @@ static int hpfs_symlink(struct inode *di hpfs_write_inode_nolock(result); d_instantiate(dentry, result); - up(&hpfs_i(dir)->i_sem); + mutex_unlock(&hpfs_i(dir)->i_sem); unlock_kernel(); return 0; bail2: - up(&hpfs_i(dir)->i_sem); + mutex_unlock(&hpfs_i(dir)->i_sem); iput(result); bail1: brelse(bh); @@ -383,7 +383,7 @@ static int hpfs_unlink(struct inode *dir hpfs_adjust_length((char *)name, &len); again: down(&hpfs_i(inode)->i_parent); - down(&hpfs_i(dir)->i_sem); + mutex_lock(&hpfs_i(dir)->i_sem); err = -ENOENT; de = map_dirent(dir, hpfs_i(dir)->i_dno, (char *)name, len, &dno, &qbh); if (!de) @@ -410,7 +410,7 @@ again: if (rep++) break; - up(&hpfs_i(dir)->i_sem); + mutex_unlock(&hpfs_i(dir)->i_sem); up(&hpfs_i(inode)->i_parent); d_drop(dentry); spin_lock(&dentry->d_lock); @@ -442,7 +442,7 @@ again: out1: hpfs_brelse4(&qbh); out: - up(&hpfs_i(dir)->i_sem); + mutex_unlock(&hpfs_i(dir)->i_sem); up(&hpfs_i(inode)->i_parent); unlock_kernel(); return err; @@ -464,7 +464,7 @@ static int hpfs_rmdir(struct inode *dir, hpfs_adjust_length((char *)name, &len); lock_kernel(); down(&hpfs_i(inode)->i_parent); - down(&hpfs_i(dir)->i_sem); + mutex_lock(&hpfs_i(dir)->i_sem); err = -ENOENT; de = map_dirent(dir, hpfs_i(dir)->i_dno, (char *)name, len, &dno, &qbh); if (!de) @@ -502,7 +502,7 @@ static int hpfs_rmdir(struct inode *dir, out1: hpfs_brelse4(&qbh); out: - up(&hpfs_i(dir)->i_sem); + mutex_unlock(&hpfs_i(dir)->i_sem); up(&hpfs_i(inode)->i_parent); unlock_kernel(); return err; @@ -568,9 +568,9 @@ static int hpfs_rename(struct inode *old down(&hpfs_i(i)->i_parent); if (new_inode) down(&hpfs_i(new_inode)->i_parent); - down(&hpfs_i(old_dir)->i_sem); + mutex_lock(&hpfs_i(old_dir)->i_sem); if (new_dir != old_dir) - down(&hpfs_i(new_dir)->i_sem); + mutex_lock(&hpfs_i(new_dir)->i_sem); /* Erm? Moving over the empty non-busy directory is perfectly legal */ if (new_inode && S_ISDIR(new_inode->i_mode)) { @@ -650,8 +650,8 @@ static int hpfs_rename(struct inode *old hpfs_decide_conv(i, (char *)new_name, new_len); end1: if (old_dir != new_dir) - up(&hpfs_i(new_dir)->i_sem); - up(&hpfs_i(old_dir)->i_sem); + mutex_unlock(&hpfs_i(new_dir)->i_sem); + mutex_unlock(&hpfs_i(old_dir)->i_sem); up(&hpfs_i(i)->i_parent); if (new_inode) up(&hpfs_i(new_inode)->i_parent); diff -purN v2.6.12-rc2-00_mutex/fs/hpfs/super.c v2.6.12-rc2-01_i_sem/fs/hpfs/super.c --- v2.6.12-rc2-00_mutex/fs/hpfs/super.c 2005-04-07 09:53:11.000000000 -0400 +++ v2.6.12-rc2-01_i_sem/fs/hpfs/super.c 2005-04-07 15:27:23.000000000 -0400 @@ -181,8 +181,8 @@ static void init_once(void * foo, kmem_c if ((flags & (SLAB_CTOR_VERIFY|SLAB_CTOR_CONSTRUCTOR)) == SLAB_CTOR_CONSTRUCTOR) { - init_MUTEX(&ei->i_sem); - init_MUTEX(&ei->i_parent); + mutex_init(&ei->i_sem); + mutex_init(&ei->i_parent); inode_init_once(&ei->vfs_inode); } } diff -purN v2.6.12-rc2-00_mutex/fs/hppfs/hppfs_kern.c v2.6.12-rc2-01_i_sem/fs/hppfs/hppfs_kern.c --- v2.6.12-rc2-00_mutex/fs/hppfs/hppfs_kern.c 2004-12-24 16:35:23.000000000 -0500 +++ v2.6.12-rc2-01_i_sem/fs/hppfs/hppfs_kern.c 2005-04-07 15:13:03.000000000 -0400 @@ -170,12 +170,12 @@ static struct dentry *hppfs_lookup(struc err = -ENOMEM; parent = HPPFS_I(ino)->proc_dentry; - down(&parent->d_inode->i_sem); + mutex_lock(&parent->d_inode->i_sem); proc_dentry = d_lookup(parent, &dentry->d_name); if(proc_dentry == NULL){ proc_dentry = d_alloc(parent, &dentry->d_name); if(proc_dentry == NULL){ - up(&parent->d_inode->i_sem); + mutex_unlock(&parent->d_inode->i_sem); goto out; } new = (*parent->d_inode->i_op->lookup)(parent->d_inode, @@ -185,7 +185,7 @@ static struct dentry *hppfs_lookup(struc proc_dentry = new; } } - up(&parent->d_inode->i_sem); + mutex_unlock(&parent->d_inode->i_sem); if(IS_ERR(proc_dentry)) return(proc_dentry); diff -purN v2.6.12-rc2-00_mutex/fs/hugetlbfs/inode.c v2.6.12-rc2-01_i_sem/fs/hugetlbfs/inode.c --- v2.6.12-rc2-00_mutex/fs/hugetlbfs/inode.c 2005-04-07 09:53:11.000000000 -0400 +++ v2.6.12-rc2-01_i_sem/fs/hugetlbfs/inode.c 2005-04-07 15:13:03.000000000 -0400 @@ -69,7 +69,7 @@ static int hugetlbfs_file_mmap(struct fi vma_len = (loff_t)(vma->vm_end - vma->vm_start); - down(&inode->i_sem); + mutex_lock(&inode->i_sem); file_accessed(file); vma->vm_flags |= VM_HUGETLB | VM_RESERVED; vma->vm_ops = &hugetlb_vm_ops; @@ -86,7 +86,7 @@ static int hugetlbfs_file_mmap(struct fi if (inode->i_size < len) inode->i_size = len; out: - up(&inode->i_sem); + mutex_unlock(&inode->i_sem); return ret; } diff -purN v2.6.12-rc2-00_mutex/fs/inode.c v2.6.12-rc2-01_i_sem/fs/inode.c --- v2.6.12-rc2-00_mutex/fs/inode.c 2005-04-07 09:53:11.000000000 -0400 +++ v2.6.12-rc2-01_i_sem/fs/inode.c 2005-04-07 15:28:56.000000000 -0400 @@ -192,7 +192,7 @@ void inode_init_once(struct inode *inode INIT_HLIST_NODE(&inode->i_hash); INIT_LIST_HEAD(&inode->i_dentry); INIT_LIST_HEAD(&inode->i_devices); - sema_init(&inode->i_sem, 1); + mutex_init(&inode->i_sem); init_rwsem(&inode->i_alloc_sem); INIT_RADIX_TREE(&inode->i_data.page_tree, GFP_ATOMIC); rwlock_init(&inode->i_data.tree_lock); diff -purN v2.6.12-rc2-00_mutex/fs/jffs/inode-v23.c v2.6.12-rc2-01_i_sem/fs/jffs/inode-v23.c --- v2.6.12-rc2-00_mutex/fs/jffs/inode-v23.c 2005-04-07 09:53:11.000000000 -0400 +++ v2.6.12-rc2-01_i_sem/fs/jffs/inode-v23.c 2005-04-07 15:13:03.000000000 -0400 @@ -1415,7 +1415,7 @@ jffs_file_write(struct file *filp, const * This will never trigger with sane page sizes. leave it in * anyway, since I'm thinking about how to merge larger writes * (the current idea is to poke a thread that does the actual - * I/O and starts by doing a down(&inode->i_sem). then we + * I/O and starts by doing a mutex_lock(&inode->i_sem). then we * would need to get the page cache pages and have a list of * I/O requests and do write-merging here. * -- prumpf diff -purN v2.6.12-rc2-00_mutex/fs/libfs.c v2.6.12-rc2-01_i_sem/fs/libfs.c --- v2.6.12-rc2-00_mutex/fs/libfs.c 2005-04-06 17:28:07.000000000 -0400 +++ v2.6.12-rc2-01_i_sem/fs/libfs.c 2005-04-07 15:13:03.000000000 -0400 @@ -74,7 +74,7 @@ int dcache_dir_close(struct inode *inode loff_t dcache_dir_lseek(struct file *file, loff_t offset, int origin) { - down(&file->f_dentry->d_inode->i_sem); + mutex_lock(&file->f_dentry->d_inode->i_sem); switch (origin) { case 1: offset += file->f_pos; @@ -82,7 +82,7 @@ loff_t dcache_dir_lseek(struct file *fil if (offset >= 0) break; default: - up(&file->f_dentry->d_inode->i_sem); + mutex_unlock(&file->f_dentry->d_inode->i_sem); return -EINVAL; } if (offset != file->f_pos) { @@ -106,7 +106,7 @@ loff_t dcache_dir_lseek(struct file *fil spin_unlock(&dcache_lock); } } - up(&file->f_dentry->d_inode->i_sem); + mutex_unlock(&file->f_dentry->d_inode->i_sem); return offset; } diff -purN v2.6.12-rc2-00_mutex/fs/namei.c v2.6.12-rc2-01_i_sem/fs/namei.c --- v2.6.12-rc2-00_mutex/fs/namei.c 2005-04-07 09:53:11.000000000 -0400 +++ v2.6.12-rc2-01_i_sem/fs/namei.c 2005-04-07 15:13:03.000000000 -0400 @@ -393,7 +393,7 @@ static struct dentry * real_lookup(struc struct dentry * result; struct inode *dir = parent->d_inode; - down(&dir->i_sem); + mutex_lock(&dir->i_sem); /* * First re-do the cached lookup just in case it was created * while we waited for the directory semaphore.. @@ -419,7 +419,7 @@ static struct dentry * real_lookup(struc else result = dentry; } - up(&dir->i_sem); + mutex_unlock(&dir->i_sem); return result; } @@ -427,7 +427,7 @@ static struct dentry * real_lookup(struc * Uhhuh! Nasty case: the cache was re-populated while * we waited on the semaphore. Need to revalidate. */ - up(&dir->i_sem); + mutex_unlock(&dir->i_sem); if (result->d_op && result->d_op->d_revalidate) { if (!result->d_op->d_revalidate(result, nd) && !d_invalidate(result)) { dput(result); @@ -1238,7 +1238,7 @@ struct dentry *lock_rename(struct dentry struct dentry *p; if (p1 == p2) { - down(&p1->d_inode->i_sem); + mutex_lock(&p1->d_inode->i_sem); return NULL; } @@ -1246,30 +1246,30 @@ struct dentry *lock_rename(struct dentry for (p = p1; p->d_parent != p; p = p->d_parent) { if (p->d_parent == p2) { - down(&p2->d_inode->i_sem); - down(&p1->d_inode->i_sem); + mutex_lock(&p2->d_inode->i_sem); + mutex_lock(&p1->d_inode->i_sem); return p; } } for (p = p2; p->d_parent != p; p = p->d_parent) { if (p->d_parent == p1) { - down(&p1->d_inode->i_sem); - down(&p2->d_inode->i_sem); + mutex_lock(&p1->d_inode->i_sem); + mutex_lock(&p2->d_inode->i_sem); return p; } } - down(&p1->d_inode->i_sem); - down(&p2->d_inode->i_sem); + mutex_lock(&p1->d_inode->i_sem); + mutex_lock(&p2->d_inode->i_sem); return NULL; } void unlock_rename(struct dentry *p1, struct dentry *p2) { - up(&p1->d_inode->i_sem); + mutex_unlock(&p1->d_inode->i_sem); if (p1 != p2) { - up(&p2->d_inode->i_sem); + mutex_unlock(&p2->d_inode->i_sem); up(&p1->d_inode->i_sb->s_vfs_rename_sem); } } @@ -1437,13 +1437,13 @@ int open_namei(const char * pathname, in dir = nd->dentry; nd->flags &= ~LOOKUP_PARENT; - down(&dir->d_inode->i_sem); + mutex_lock(&dir->d_inode->i_sem); dentry = __lookup_hash(&nd->last, nd->dentry, nd); do_last: error = PTR_ERR(dentry); if (IS_ERR(dentry)) { - up(&dir->d_inode->i_sem); + mutex_unlock(&dir->d_inode->i_sem); goto exit; } @@ -1452,7 +1452,7 @@ do_last: if (!IS_POSIXACL(dir->d_inode)) mode &= ~current->fs->umask; error = vfs_create(dir->d_inode, dentry, mode, nd); - up(&dir->d_inode->i_sem); + mutex_unlock(&dir->d_inode->i_sem); dput(nd->dentry); nd->dentry = dentry; if (error) @@ -1466,7 +1466,7 @@ do_last: /* * It already exists. */ - up(&dir->d_inode->i_sem); + mutex_unlock(&dir->d_inode->i_sem); error = -EEXIST; if (flag & O_EXCL) @@ -1541,7 +1541,7 @@ do_link: goto exit; } dir = nd->dentry; - down(&dir->d_inode->i_sem); + mutex_lock(&dir->d_inode->i_sem); dentry = __lookup_hash(&nd->last, nd->dentry, nd); putname(nd->last.name); goto do_last; @@ -1559,7 +1559,7 @@ struct dentry *lookup_create(struct name { struct dentry *dentry; - down(&nd->dentry->d_inode->i_sem); + mutex_lock(&nd->dentry->d_inode->i_sem); dentry = ERR_PTR(-EEXIST); if (nd->last_type != LAST_NORM) goto fail; @@ -1644,7 +1644,7 @@ asmlinkage long sys_mknod(const char __u } dput(dentry); } - up(&nd.dentry->d_inode->i_sem); + mutex_unlock(&nd.dentry->d_inode->i_sem); path_release(&nd); out: putname(tmp); @@ -1698,7 +1698,7 @@ asmlinkage long sys_mkdir(const char __u error = vfs_mkdir(nd.dentry->d_inode, dentry, mode); dput(dentry); } - up(&nd.dentry->d_inode->i_sem); + mutex_unlock(&nd.dentry->d_inode->i_sem); path_release(&nd); out: putname(tmp); @@ -1747,7 +1747,7 @@ int vfs_rmdir(struct inode *dir, struct DQUOT_INIT(dir); - down(&dentry->d_inode->i_sem); + mutex_lock(&dentry->d_inode->i_sem); dentry_unhash(dentry); if (d_mountpoint(dentry)) error = -EBUSY; @@ -1759,7 +1759,7 @@ int vfs_rmdir(struct inode *dir, struct dentry->d_inode->i_flags |= S_DEAD; } } - up(&dentry->d_inode->i_sem); + mutex_unlock(&dentry->d_inode->i_sem); if (!error) { inode_dir_notify(dir, DN_DELETE); d_delete(dentry); @@ -1795,14 +1795,14 @@ asmlinkage long sys_rmdir(const char __u error = -EBUSY; goto exit1; } - down(&nd.dentry->d_inode->i_sem); + mutex_lock(&nd.dentry->d_inode->i_sem); dentry = lookup_hash(&nd.last, nd.dentry); error = PTR_ERR(dentry); if (!IS_ERR(dentry)) { error = vfs_rmdir(nd.dentry->d_inode, dentry); dput(dentry); } - up(&nd.dentry->d_inode->i_sem); + mutex_unlock(&nd.dentry->d_inode->i_sem); exit1: path_release(&nd); exit: @@ -1822,7 +1822,7 @@ int vfs_unlink(struct inode *dir, struct DQUOT_INIT(dir); - down(&dentry->d_inode->i_sem); + mutex_lock(&dentry->d_inode->i_sem); if (d_mountpoint(dentry)) error = -EBUSY; else { @@ -1830,7 +1830,7 @@ int vfs_unlink(struct inode *dir, struct if (!error) error = dir->i_op->unlink(dir, dentry); } - up(&dentry->d_inode->i_sem); + mutex_unlock(&dentry->d_inode->i_sem); /* We don't d_delete() NFS sillyrenamed files--they still exist. */ if (!error && !(dentry->d_flags & DCACHE_NFSFS_RENAMED)) { @@ -1864,7 +1864,7 @@ asmlinkage long sys_unlink(const char __ error = -EISDIR; if (nd.last_type != LAST_NORM) goto exit1; - down(&nd.dentry->d_inode->i_sem); + mutex_lock(&nd.dentry->d_inode->i_sem); dentry = lookup_hash(&nd.last, nd.dentry); error = PTR_ERR(dentry); if (!IS_ERR(dentry)) { @@ -1878,7 +1878,7 @@ asmlinkage long sys_unlink(const char __ exit2: dput(dentry); } - up(&nd.dentry->d_inode->i_sem); + mutex_unlock(&nd.dentry->d_inode->i_sem); if (inode) iput(inode); /* truncate the inode here */ exit1: @@ -1940,7 +1940,7 @@ asmlinkage long sys_symlink(const char _ error = vfs_symlink(nd.dentry->d_inode, dentry, from, S_IALLUGO); dput(dentry); } - up(&nd.dentry->d_inode->i_sem); + mutex_unlock(&nd.dentry->d_inode->i_sem); path_release(&nd); out: putname(to); @@ -1978,10 +1978,10 @@ int vfs_link(struct dentry *old_dentry, if (error) return error; - down(&old_dentry->d_inode->i_sem); + mutex_lock(&old_dentry->d_inode->i_sem); DQUOT_INIT(dir); error = dir->i_op->link(old_dentry, dir, new_dentry); - up(&old_dentry->d_inode->i_sem); + mutex_unlock(&old_dentry->d_inode->i_sem); if (!error) { inode_dir_notify(dir, DN_CREATE); security_inode_post_link(old_dentry, dir, new_dentry); @@ -2024,7 +2024,7 @@ asmlinkage long sys_link(const char __us error = vfs_link(old_nd.dentry, nd.dentry->d_inode, new_dentry); dput(new_dentry); } - up(&nd.dentry->d_inode->i_sem); + mutex_unlock(&nd.dentry->d_inode->i_sem); out_release: path_release(&nd); out: @@ -2089,7 +2089,7 @@ int vfs_rename_dir(struct inode *old_dir target = new_dentry->d_inode; if (target) { - down(&target->i_sem); + mutex_lock(&target->i_sem); dentry_unhash(new_dentry); } if (d_mountpoint(old_dentry)||d_mountpoint(new_dentry)) @@ -2099,7 +2099,7 @@ int vfs_rename_dir(struct inode *old_dir if (target) { if (!error) target->i_flags |= S_DEAD; - up(&target->i_sem); + mutex_unlock(&target->i_sem); if (d_unhashed(new_dentry)) d_rehash(new_dentry); dput(new_dentry); @@ -2125,7 +2125,7 @@ int vfs_rename_other(struct inode *old_d dget(new_dentry); target = new_dentry->d_inode; if (target) - down(&target->i_sem); + mutex_lock(&target->i_sem); if (d_mountpoint(old_dentry)||d_mountpoint(new_dentry)) error = -EBUSY; else @@ -2137,7 +2137,7 @@ int vfs_rename_other(struct inode *old_d security_inode_post_rename(old_dir, old_dentry, new_dir, new_dentry); } if (target) - up(&target->i_sem); + mutex_unlock(&target->i_sem); dput(new_dentry); return error; } diff -purN v2.6.12-rc2-00_mutex/fs/namespace.c v2.6.12-rc2-01_i_sem/fs/namespace.c --- v2.6.12-rc2-00_mutex/fs/namespace.c 2005-04-07 09:53:11.000000000 -0400 +++ v2.6.12-rc2-01_i_sem/fs/namespace.c 2005-04-07 15:13:03.000000000 -0400 @@ -588,7 +588,7 @@ static int graft_tree(struct vfsmount *m return -ENOTDIR; err = -ENOENT; - down(&nd->dentry->d_inode->i_sem); + mutex_lock(&nd->dentry->d_inode->i_sem); if (IS_DEADDIR(nd->dentry->d_inode)) goto out_unlock; @@ -609,7 +609,7 @@ static int graft_tree(struct vfsmount *m } spin_unlock(&vfsmount_lock); out_unlock: - up(&nd->dentry->d_inode->i_sem); + mutex_unlock(&nd->dentry->d_inode->i_sem); if (!err) security_sb_post_addmount(mnt, nd); return err; @@ -713,7 +713,7 @@ static int do_move_mount(struct nameidat goto out; err = -ENOENT; - down(&nd->dentry->d_inode->i_sem); + mutex_lock(&nd->dentry->d_inode->i_sem); if (IS_DEADDIR(nd->dentry->d_inode)) goto out1; @@ -747,7 +747,7 @@ static int do_move_mount(struct nameidat out2: spin_unlock(&vfsmount_lock); out1: - up(&nd->dentry->d_inode->i_sem); + mutex_unlock(&nd->dentry->d_inode->i_sem); out: up_write(¤t->namespace->sem); if (!err) @@ -1309,7 +1309,7 @@ asmlinkage long sys_pivot_root(const cha user_nd.dentry = dget(current->fs->root); read_unlock(¤t->fs->lock); down_write(¤t->namespace->sem); - down(&old_nd.dentry->d_inode->i_sem); + mutex_lock(&old_nd.dentry->d_inode->i_sem); error = -EINVAL; if (!check_mnt(user_nd.mnt)) goto out2; @@ -1353,7 +1353,7 @@ asmlinkage long sys_pivot_root(const cha path_release(&root_parent); path_release(&parent_nd); out2: - up(&old_nd.dentry->d_inode->i_sem); + mutex_unlock(&old_nd.dentry->d_inode->i_sem); up_write(¤t->namespace->sem); path_release(&user_nd); path_release(&old_nd); diff -purN v2.6.12-rc2-00_mutex/fs/nfs/file.c v2.6.12-rc2-01_i_sem/fs/nfs/file.c --- v2.6.12-rc2-00_mutex/fs/nfs/file.c 2005-04-07 09:53:11.000000000 -0400 +++ v2.6.12-rc2-01_i_sem/fs/nfs/file.c 2005-04-07 15:13:03.000000000 -0400 @@ -349,9 +349,9 @@ static int do_unlk(struct file *filp, in * with locks.. */ filemap_fdatawrite(filp->f_mapping); - down(&inode->i_sem); + mutex_lock(&inode->i_sem); nfs_wb_all(inode); - up(&inode->i_sem); + mutex_unlock(&inode->i_sem); filemap_fdatawait(filp->f_mapping); /* NOTE: special case @@ -382,9 +382,9 @@ static int do_setlk(struct file *filp, i */ status = filemap_fdatawrite(filp->f_mapping); if (status == 0) { - down(&inode->i_sem); + mutex_lock(&inode->i_sem); status = nfs_wb_all(inode); - up(&inode->i_sem); + mutex_unlock(&inode->i_sem); if (status == 0) status = filemap_fdatawait(filp->f_mapping); } @@ -413,9 +413,9 @@ static int do_setlk(struct file *filp, i * This makes locking act as a cache coherency point. */ filemap_fdatawrite(filp->f_mapping); - down(&inode->i_sem); + mutex_lock(&inode->i_sem); nfs_wb_all(inode); /* we may have slept */ - up(&inode->i_sem); + mutex_unlock(&inode->i_sem); filemap_fdatawait(filp->f_mapping); nfs_zap_caches(inode); out: diff -purN v2.6.12-rc2-00_mutex/fs/nfsd/vfs.c v2.6.12-rc2-01_i_sem/fs/nfsd/vfs.c --- v2.6.12-rc2-00_mutex/fs/nfsd/vfs.c 2005-04-07 09:53:11.000000000 -0400 +++ v2.6.12-rc2-01_i_sem/fs/nfsd/vfs.c 2005-04-07 15:13:03.000000000 -0400 @@ -384,12 +384,12 @@ set_nfsv4_acl_one(struct dentry *dentry, error = -EOPNOTSUPP; if (inode->i_op && inode->i_op->setxattr) { - down(&inode->i_sem); + mutex_lock(&inode->i_sem); security_inode_setxattr(dentry, key, buf, len, 0); error = inode->i_op->setxattr(dentry, key, buf, len, 0); if (!error) security_inode_post_setxattr(dentry, key, buf, len, 0); - up(&inode->i_sem); + mutex_unlock(&inode->i_sem); } out: kfree(buf); @@ -729,9 +729,9 @@ nfsd_sync(struct file *filp) { struct inode *inode = filp->f_dentry->d_inode; dprintk("nfsd: sync file %s\n", filp->f_dentry->d_name.name); - down(&inode->i_sem); + mutex_lock(&inode->i_sem); nfsd_dosync(filp, filp->f_dentry, filp->f_op); - up(&inode->i_sem); + mutex_unlock(&inode->i_sem); } static void @@ -925,9 +925,9 @@ nfsd_vfs_write(struct svc_rqst *rqstp, s struct iattr ia; ia.ia_valid = ATTR_KILL_SUID | ATTR_KILL_SGID; - down(&inode->i_sem); + mutex_lock(&inode->i_sem); notify_change(dentry, &ia); - up(&inode->i_sem); + mutex_unlock(&inode->i_sem); } if (err >= 0 && stable) { diff -purN v2.6.12-rc2-00_mutex/fs/ntfs/inode.c v2.6.12-rc2-01_i_sem/fs/ntfs/inode.c --- v2.6.12-rc2-00_mutex/fs/ntfs/inode.c 2004-12-24 16:35:28.000000000 -0500 +++ v2.6.12-rc2-01_i_sem/fs/ntfs/inode.c 2005-04-07 15:13:03.000000000 -0400 @@ -2120,13 +2120,13 @@ void ntfs_put_inode(struct inode *vi) ntfs_inode *ni = NTFS_I(vi); if (NInoIndexAllocPresent(ni)) { struct inode *bvi = NULL; - down(&vi->i_sem); + mutex_lock(&vi->i_sem); if (atomic_read(&vi->i_count) == 2) { bvi = ni->itype.index.bmp_ino; if (bvi) ni->itype.index.bmp_ino = NULL; } - up(&vi->i_sem); + mutex_unlock(&vi->i_sem); if (bvi) iput(bvi); } diff -purN v2.6.12-rc2-00_mutex/fs/ntfs/quota.c v2.6.12-rc2-01_i_sem/fs/ntfs/quota.c --- v2.6.12-rc2-00_mutex/fs/ntfs/quota.c 2004-12-24 16:35:59.000000000 -0500 +++ v2.6.12-rc2-01_i_sem/fs/ntfs/quota.c 2005-04-07 15:13:03.000000000 -0400 @@ -48,7 +48,7 @@ BOOL ntfs_mark_quotas_out_of_date(ntfs_v ntfs_error(vol->sb, "Quota inodes are not open."); return FALSE; } - down(&vol->quota_q_ino->i_sem); + mutex_lock(&vol->quota_q_ino->i_sem); ictx = ntfs_index_ctx_get(NTFS_I(vol->quota_q_ino)); if (!ictx) { ntfs_error(vol->sb, "Failed to get index context."); @@ -98,7 +98,7 @@ BOOL ntfs_mark_quotas_out_of_date(ntfs_v ntfs_index_entry_mark_dirty(ictx); set_done: ntfs_index_ctx_put(ictx); - up(&vol->quota_q_ino->i_sem); + mutex_unlock(&vol->quota_q_ino->i_sem); /* * We set the flag so we do not try to mark the quotas out of date * again on remount. @@ -110,7 +110,7 @@ done: err_out: if (ictx) ntfs_index_ctx_put(ictx); - up(&vol->quota_q_ino->i_sem); + mutex_unlock(&vol->quota_q_ino->i_sem); return FALSE; } diff -purN v2.6.12-rc2-00_mutex/fs/ntfs/super.c v2.6.12-rc2-01_i_sem/fs/ntfs/super.c --- v2.6.12-rc2-00_mutex/fs/ntfs/super.c 2005-04-06 17:28:08.000000000 -0400 +++ v2.6.12-rc2-01_i_sem/fs/ntfs/super.c 2005-04-07 15:13:03.000000000 -0400 @@ -1151,10 +1151,10 @@ static BOOL load_and_init_quota(ntfs_vol * Find the inode number for the quota file by looking up the filename * $Quota in the extended system files directory $Extend. */ - down(&vol->extend_ino->i_sem); + mutex_lock(&vol->extend_ino->i_sem); mref = ntfs_lookup_inode_by_name(NTFS_I(vol->extend_ino), Quota, 6, &name); - up(&vol->extend_ino->i_sem); + mutex_unlock(&vol->extend_ino->i_sem); if (IS_ERR_MREF(mref)) { /* * If the file does not exist, quotas are disabled and have @@ -1870,9 +1870,9 @@ static void ntfs_put_super(struct super_ if (!list_empty(&sb->s_dirty)) { const char *s1, *s2; - down(&vol->mft_ino->i_sem); + mutex_lock(&vol->mft_ino->i_sem); truncate_inode_pages(vol->mft_ino->i_mapping, 0); - up(&vol->mft_ino->i_sem); + mutex_unlock(&vol->mft_ino->i_sem); write_inode_now(vol->mft_ino, 1); if (!list_empty(&sb->s_dirty)) { static const char *_s1 = "inodes"; diff -purN v2.6.12-rc2-00_mutex/fs/open.c v2.6.12-rc2-01_i_sem/fs/open.c --- v2.6.12-rc2-00_mutex/fs/open.c 2005-04-06 17:28:08.000000000 -0400 +++ v2.6.12-rc2-01_i_sem/fs/open.c 2005-04-07 15:13:03.000000000 -0400 @@ -204,9 +204,9 @@ int do_truncate(struct dentry *dentry, l newattrs.ia_size = length; newattrs.ia_valid = ATTR_SIZE | ATTR_CTIME; - down(&dentry->d_inode->i_sem); + mutex_lock(&dentry->d_inode->i_sem); err = notify_change(dentry, &newattrs); - up(&dentry->d_inode->i_sem); + mutex_unlock(&dentry->d_inode->i_sem); return err; } @@ -391,9 +391,9 @@ asmlinkage long sys_utime(char __user * (error = permission(inode,MAY_WRITE,&nd)) != 0) goto dput_and_out; } - down(&inode->i_sem); + mutex_lock(&inode->i_sem); error = notify_change(nd.dentry, &newattrs); - up(&inode->i_sem); + mutex_unlock(&inode->i_sem); dput_and_out: path_release(&nd); out: @@ -444,9 +444,9 @@ long do_utimes(char __user * filename, s (error = permission(inode,MAY_WRITE,&nd)) != 0) goto dput_and_out; } - down(&inode->i_sem); + mutex_lock(&inode->i_sem); error = notify_change(nd.dentry, &newattrs); - up(&inode->i_sem); + mutex_unlock(&inode->i_sem); dput_and_out: path_release(&nd); out: @@ -613,13 +613,13 @@ asmlinkage long sys_fchmod(unsigned int err = -EPERM; if (IS_IMMUTABLE(inode) || IS_APPEND(inode)) goto out_putf; - down(&inode->i_sem); + mutex_lock(&inode->i_sem); if (mode == (mode_t) -1) mode = inode->i_mode; newattrs.ia_mode = (mode & S_IALLUGO) | (inode->i_mode & ~S_IALLUGO); newattrs.ia_valid = ATTR_MODE | ATTR_CTIME; err = notify_change(dentry, &newattrs); - up(&inode->i_sem); + mutex_unlock(&inode->i_sem); out_putf: fput(file); @@ -647,13 +647,13 @@ asmlinkage long sys_chmod(const char __u if (IS_IMMUTABLE(inode) || IS_APPEND(inode)) goto dput_and_out; - down(&inode->i_sem); + mutex_lock(&inode->i_sem); if (mode == (mode_t) -1) mode = inode->i_mode; newattrs.ia_mode = (mode & S_IALLUGO) | (inode->i_mode & ~S_IALLUGO); newattrs.ia_valid = ATTR_MODE | ATTR_CTIME; error = notify_change(nd.dentry, &newattrs); - up(&inode->i_sem); + mutex_unlock(&inode->i_sem); dput_and_out: path_release(&nd); @@ -689,9 +689,9 @@ static int chown_common(struct dentry * } if (!S_ISDIR(inode->i_mode)) newattrs.ia_valid |= ATTR_KILL_SUID|ATTR_KILL_SGID; - down(&inode->i_sem); + mutex_lock(&inode->i_sem); error = notify_change(dentry, &newattrs); - up(&inode->i_sem); + mutex_unlock(&inode->i_sem); out: return error; } diff -purN v2.6.12-rc2-00_mutex/fs/pipe.c v2.6.12-rc2-01_i_sem/fs/pipe.c --- v2.6.12-rc2-00_mutex/fs/pipe.c 2005-04-07 09:53:11.000000000 -0400 +++ v2.6.12-rc2-01_i_sem/fs/pipe.c 2005-04-07 15:23:09.000000000 -0400 @@ -40,10 +40,10 @@ void pipe_wait(struct inode * inode) DEFINE_WAIT(wait); prepare_to_wait(PIPE_WAIT(*inode), &wait, TASK_INTERRUPTIBLE); - up(PIPE_SEM(*inode)); + mutex_unlock(PIPE_SEM(*inode)); schedule(); finish_wait(PIPE_WAIT(*inode), &wait); - down(PIPE_SEM(*inode)); + mutex_lock(PIPE_SEM(*inode)); } static inline int @@ -132,7 +132,7 @@ pipe_readv(struct file *filp, const stru do_wakeup = 0; ret = 0; - down(PIPE_SEM(*inode)); + mutex_lock(PIPE_SEM(*inode)); info = inode->i_pipe; for (;;) { int bufs = info->nrbufs; @@ -196,7 +196,7 @@ pipe_readv(struct file *filp, const stru } pipe_wait(inode); } - up(PIPE_SEM(*inode)); + mutex_unlock(PIPE_SEM(*inode)); /* Signal writers asynchronously that there is more room. */ if (do_wakeup) { wake_up_interruptible(PIPE_WAIT(*inode)); @@ -233,7 +233,7 @@ pipe_writev(struct file *filp, const str do_wakeup = 0; ret = 0; - down(PIPE_SEM(*inode)); + mutex_lock(PIPE_SEM(*inode)); info = inode->i_pipe; if (!PIPE_READERS(*inode)) { @@ -337,7 +337,7 @@ pipe_writev(struct file *filp, const str PIPE_WAITING_WRITERS(*inode)--; } out: - up(PIPE_SEM(*inode)); + mutex_unlock(PIPE_SEM(*inode)); if (do_wakeup) { wake_up_interruptible(PIPE_WAIT(*inode)); kill_fasync(PIPE_FASYNC_READERS(*inode), SIGIO, POLL_IN); @@ -377,7 +377,7 @@ pipe_ioctl(struct inode *pino, struct fi switch (cmd) { case FIONREAD: - down(PIPE_SEM(*inode)); + mutex_lock(PIPE_SEM(*inode)); info = inode->i_pipe; count = 0; buf = info->curbuf; @@ -386,7 +386,7 @@ pipe_ioctl(struct inode *pino, struct fi count += info->bufs[buf].len; buf = (buf+1) & (PIPE_BUFFERS-1); } - up(PIPE_SEM(*inode)); + mutex_unlock(PIPE_SEM(*inode)); return put_user(count, (int __user *)arg); default: return -EINVAL; @@ -428,7 +428,7 @@ pipe_poll(struct file *filp, poll_table static int pipe_release(struct inode *inode, int decr, int decw) { - down(PIPE_SEM(*inode)); + mutex_lock(PIPE_SEM(*inode)); PIPE_READERS(*inode) -= decr; PIPE_WRITERS(*inode) -= decw; if (!PIPE_READERS(*inode) && !PIPE_WRITERS(*inode)) { @@ -438,7 +438,7 @@ pipe_release(struct inode *inode, int de kill_fasync(PIPE_FASYNC_READERS(*inode), SIGIO, POLL_IN); kill_fasync(PIPE_FASYNC_WRITERS(*inode), SIGIO, POLL_OUT); } - up(PIPE_SEM(*inode)); + mutex_unlock(PIPE_SEM(*inode)); return 0; } @@ -449,9 +449,9 @@ pipe_read_fasync(int fd, struct file *fi struct inode *inode = filp->f_dentry->d_inode; int retval; - down(PIPE_SEM(*inode)); + mutex_lock(PIPE_SEM(*inode)); retval = fasync_helper(fd, filp, on, PIPE_FASYNC_READERS(*inode)); - up(PIPE_SEM(*inode)); + mutex_unlock(PIPE_SEM(*inode)); if (retval < 0) return retval; @@ -466,9 +466,9 @@ pipe_write_fasync(int fd, struct file *f struct inode *inode = filp->f_dentry->d_inode; int retval; - down(PIPE_SEM(*inode)); + mutex_lock(PIPE_SEM(*inode)); retval = fasync_helper(fd, filp, on, PIPE_FASYNC_WRITERS(*inode)); - up(PIPE_SEM(*inode)); + mutex_unlock(PIPE_SEM(*inode)); if (retval < 0) return retval; @@ -483,14 +483,14 @@ pipe_rdwr_fasync(int fd, struct file *fi struct inode *inode = filp->f_dentry->d_inode; int retval; - down(PIPE_SEM(*inode)); + mutex_lock(PIPE_SEM(*inode)); retval = fasync_helper(fd, filp, on, PIPE_FASYNC_READERS(*inode)); if (retval >= 0) retval = fasync_helper(fd, filp, on, PIPE_FASYNC_WRITERS(*inode)); - up(PIPE_SEM(*inode)); + mutex_unlock(PIPE_SEM(*inode)); if (retval < 0) return retval; @@ -529,9 +529,9 @@ pipe_read_open(struct inode *inode, stru { /* We could have perhaps used atomic_t, but this and friends below are the only places. So it doesn't seem worthwhile. */ - down(PIPE_SEM(*inode)); + mutex_lock(PIPE_SEM(*inode)); PIPE_READERS(*inode)++; - up(PIPE_SEM(*inode)); + mutex_unlock(PIPE_SEM(*inode)); return 0; } @@ -539,9 +539,9 @@ pipe_read_open(struct inode *inode, stru static int pipe_write_open(struct inode *inode, struct file *filp) { - down(PIPE_SEM(*inode)); + mutex_lock(PIPE_SEM(*inode)); PIPE_WRITERS(*inode)++; - up(PIPE_SEM(*inode)); + mutex_unlock(PIPE_SEM(*inode)); return 0; } @@ -549,12 +549,12 @@ pipe_write_open(struct inode *inode, str static int pipe_rdwr_open(struct inode *inode, struct file *filp) { - down(PIPE_SEM(*inode)); + mutex_lock(PIPE_SEM(*inode)); if (filp->f_mode & FMODE_READ) PIPE_READERS(*inode)++; if (filp->f_mode & FMODE_WRITE) PIPE_WRITERS(*inode)++; - up(PIPE_SEM(*inode)); + mutex_unlock(PIPE_SEM(*inode)); return 0; } diff -purN v2.6.12-rc2-00_mutex/fs/quota.c v2.6.12-rc2-01_i_sem/fs/quota.c --- v2.6.12-rc2-00_mutex/fs/quota.c 2005-04-07 09:53:11.000000000 -0400 +++ v2.6.12-rc2-01_i_sem/fs/quota.c 2005-04-07 15:13:03.000000000 -0400 @@ -209,9 +209,9 @@ static void quota_sync_sb(struct super_b up(&sb_dqopt(sb)->dqonoff_sem); for (cnt = 0; cnt < MAXQUOTAS; cnt++) { if (discard[cnt]) { - down(&discard[cnt]->i_sem); + mutex_lock(&discard[cnt]->i_sem); truncate_inode_pages(&discard[cnt]->i_data, 0); - up(&discard[cnt]->i_sem); + mutex_unlock(&discard[cnt]->i_sem); iput(discard[cnt]); } } diff -purN v2.6.12-rc2-00_mutex/fs/readdir.c v2.6.12-rc2-01_i_sem/fs/readdir.c --- v2.6.12-rc2-00_mutex/fs/readdir.c 2005-04-06 17:28:08.000000000 -0400 +++ v2.6.12-rc2-01_i_sem/fs/readdir.c 2005-04-07 15:13:03.000000000 -0400 @@ -30,13 +30,13 @@ int vfs_readdir(struct file *file, filld if (res) goto out; - down(&inode->i_sem); + mutex_lock(&inode->i_sem); res = -ENOENT; if (!IS_DEADDIR(inode)) { res = file->f_op->readdir(file, buf, filler); file_accessed(file); } - up(&inode->i_sem); + mutex_unlock(&inode->i_sem); out: return res; } diff -purN v2.6.12-rc2-00_mutex/fs/read_write.c v2.6.12-rc2-01_i_sem/fs/read_write.c --- v2.6.12-rc2-00_mutex/fs/read_write.c 2005-04-06 17:28:08.000000000 -0400 +++ v2.6.12-rc2-01_i_sem/fs/read_write.c 2005-04-07 15:13:03.000000000 -0400 @@ -32,7 +32,7 @@ loff_t generic_file_llseek(struct file * long long retval; struct inode *inode = file->f_mapping->host; - down(&inode->i_sem); + mutex_lock(&inode->i_sem); switch (origin) { case 2: offset += inode->i_size; @@ -48,7 +48,7 @@ loff_t generic_file_llseek(struct file * } retval = offset; } - up(&inode->i_sem); + mutex_unlock(&inode->i_sem); return retval; } diff -purN v2.6.12-rc2-00_mutex/fs/reiserfs/file.c v2.6.12-rc2-01_i_sem/fs/reiserfs/file.c --- v2.6.12-rc2-00_mutex/fs/reiserfs/file.c 2005-04-06 17:28:08.000000000 -0400 +++ v2.6.12-rc2-01_i_sem/fs/reiserfs/file.c 2005-04-07 15:13:03.000000000 -0400 @@ -50,7 +50,7 @@ static int reiserfs_file_release (struct } reiserfs_write_lock(inode->i_sb); - down (&inode->i_sem); + mutex_lock (&inode->i_sem); /* freeing preallocation only involves relogging blocks that * are already in the current transaction. preallocation gets * freed at the end of each transaction, so it is impossible for @@ -100,7 +100,7 @@ static int reiserfs_file_release (struct err = reiserfs_truncate_file(inode, 0) ; } out: - up (&inode->i_sem); + mutex_unlock (&inode->i_sem); reiserfs_write_unlock(inode->i_sb); return err; } @@ -1218,7 +1218,7 @@ static ssize_t reiserfs_file_write( stru if (unlikely(!access_ok(VERIFY_READ, buf, count))) return -EFAULT; - down(&inode->i_sem); // locks the entire file for just us + mutex_lock(&inode->i_sem); // locks the entire file for just us pos = *ppos; @@ -1365,12 +1365,12 @@ static ssize_t reiserfs_file_write( stru if ((file->f_flags & O_SYNC) || IS_SYNC(inode)) res = generic_osync_inode(inode, file->f_mapping, OSYNC_METADATA|OSYNC_DATA); - up(&inode->i_sem); + mutex_unlock(&inode->i_sem); reiserfs_async_progress_wait(inode->i_sb); return (already_written != 0)?already_written:res; out: - up(&inode->i_sem); // unlock the file on exit. + mutex_unlock(&inode->i_sem); // unlock the file on exit. return res; } diff -purN v2.6.12-rc2-00_mutex/fs/reiserfs/inode.c v2.6.12-rc2-01_i_sem/fs/reiserfs/inode.c --- v2.6.12-rc2-00_mutex/fs/reiserfs/inode.c 2005-04-07 09:53:11.000000000 -0400 +++ v2.6.12-rc2-01_i_sem/fs/reiserfs/inode.c 2005-04-07 15:13:03.000000000 -0400 @@ -35,18 +35,18 @@ void reiserfs_delete_inode (struct inode /* The = 0 happens when we abort creating a new inode for some reason like lack of space.. */ if (!(inode->i_state & I_NEW) && INODE_PKEY(inode)->k_objectid != 0) { /* also handles bad_inode case */ - down (&inode->i_sem); + mutex_lock (&inode->i_sem); reiserfs_delete_xattrs (inode); if (journal_begin(&th, inode->i_sb, jbegin_count)) { - up (&inode->i_sem); + mutex_unlock (&inode->i_sem); goto out; } reiserfs_update_inode_transaction(inode) ; if (reiserfs_delete_object (&th, inode)) { - up (&inode->i_sem); + mutex_unlock (&inode->i_sem); goto out; } @@ -56,11 +56,11 @@ void reiserfs_delete_inode (struct inode DQUOT_FREE_INODE(inode); if (journal_end(&th, inode->i_sb, jbegin_count)) { - up (&inode->i_sem); + mutex_unlock (&inode->i_sem); goto out; } - up (&inode->i_sem); + mutex_unlock (&inode->i_sem); /* all items of file are deleted, so we can remove "save" link */ remove_save_link (inode, 0/* not truncate */); /* we can't do anything diff -purN v2.6.12-rc2-00_mutex/fs/reiserfs/ioctl.c v2.6.12-rc2-01_i_sem/fs/reiserfs/ioctl.c --- v2.6.12-rc2-00_mutex/fs/reiserfs/ioctl.c 2005-04-06 17:28:08.000000000 -0400 +++ v2.6.12-rc2-01_i_sem/fs/reiserfs/ioctl.c 2005-04-07 15:13:03.000000000 -0400 @@ -111,7 +111,7 @@ static int reiserfs_unpack (struct inode /* we need to make sure nobody is changing the file size beneath ** us */ - down(&inode->i_sem) ; + mutex_lock(&inode->i_sem) ; write_from = inode->i_size & (blocksize - 1) ; /* if we are on a block boundary, we are already unpacked. */ @@ -145,7 +145,7 @@ out_unlock: page_cache_release(page) ; out: - up(&inode->i_sem) ; + mutex_unlock(&inode->i_sem) ; reiserfs_write_unlock(inode->i_sb); return retval; } diff -purN v2.6.12-rc2-00_mutex/fs/reiserfs/super.c v2.6.12-rc2-01_i_sem/fs/reiserfs/super.c --- v2.6.12-rc2-00_mutex/fs/reiserfs/super.c 2005-04-06 17:28:08.000000000 -0400 +++ v2.6.12-rc2-01_i_sem/fs/reiserfs/super.c 2005-04-07 15:13:03.000000000 -0400 @@ -2039,7 +2039,7 @@ static ssize_t reiserfs_quota_write(stru size_t towrite = len; struct buffer_head tmp_bh, *bh; - down(&inode->i_sem); + mutex_lock(&inode->i_sem); while (towrite > 0) { tocopy = sb->s_blocksize - offset < towrite ? sb->s_blocksize - offset : towrite; @@ -2078,7 +2078,7 @@ out: inode->i_version++; inode->i_mtime = inode->i_ctime = CURRENT_TIME; mark_inode_dirty(inode); - up(&inode->i_sem); + mutex_unlock(&inode->i_sem); return len - towrite; } diff -purN v2.6.12-rc2-00_mutex/fs/reiserfs/xattr.c v2.6.12-rc2-01_i_sem/fs/reiserfs/xattr.c --- v2.6.12-rc2-00_mutex/fs/reiserfs/xattr.c 2005-04-07 09:53:12.000000000 -0400 +++ v2.6.12-rc2-01_i_sem/fs/reiserfs/xattr.c 2005-04-07 15:13:03.000000000 -0400 @@ -68,9 +68,9 @@ create_xa_root (struct super_block *sb) goto out; } else if (!xaroot->d_inode) { int err; - down (&privroot->d_inode->i_sem); + mutex_lock (&privroot->d_inode->i_sem); err = privroot->d_inode->i_op->mkdir (privroot->d_inode, xaroot, 0700); - up (&privroot->d_inode->i_sem); + mutex_unlock (&privroot->d_inode->i_sem); if (err) { dput (xaroot); @@ -421,7 +421,7 @@ int xattr_readdir(struct file *file, fil int res = -ENOTDIR; if (!file->f_op || !file->f_op->readdir) goto out; - down(&inode->i_sem); + mutex_lock(&inode->i_sem); // down(&inode->i_zombie); res = -ENOENT; if (!IS_DEADDIR(inode)) { @@ -430,7 +430,7 @@ int xattr_readdir(struct file *file, fil unlock_kernel(); } // up(&inode->i_zombie); - up(&inode->i_sem); + mutex_unlock(&inode->i_sem); out: return res; } @@ -534,7 +534,7 @@ open_file: /* Resize it so we're ok to write there */ newattrs.ia_size = buffer_size; newattrs.ia_valid = ATTR_SIZE | ATTR_CTIME; - down (&xinode->i_sem); + mutex_lock (&xinode->i_sem); err = notify_change(fp->f_dentry, &newattrs); if (err) goto out_filp; @@ -595,7 +595,7 @@ open_file: } out_filp: - up (&xinode->i_sem); + mutex_unlock (&xinode->i_sem); fput(fp); out: @@ -943,7 +943,7 @@ out: /* * Inode operation getxattr() - * Preliminary locking: we down dentry->d_inode->i_sem + * Preliminary locking: we mutex_lock dentry->d_inode->i_sem */ ssize_t reiserfs_getxattr (struct dentry *dentry, const char *name, void *buffer, @@ -1087,7 +1087,7 @@ reiserfs_listxattr_filler (void *buf, co /* * Inode operation listxattr() * - * Preliminary locking: we down dentry->d_inode->i_sem + * Preliminary locking: we mutex_lock dentry->d_inode->i_sem */ ssize_t reiserfs_listxattr (struct dentry *dentry, char *buffer, size_t size) @@ -1291,9 +1291,9 @@ reiserfs_xattr_init (struct super_block if (!IS_ERR (dentry)) { if (!(mount_flags & MS_RDONLY) && !dentry->d_inode) { struct inode *inode = dentry->d_parent->d_inode; - down (&inode->i_sem); + mutex_lock (&inode->i_sem); err = inode->i_op->mkdir (inode, dentry, 0700); - up (&inode->i_sem); + mutex_unlock (&inode->i_sem); if (err) { dput (dentry); dentry = NULL; diff -purN v2.6.12-rc2-00_mutex/fs/sysfs/dir.c v2.6.12-rc2-01_i_sem/fs/sysfs/dir.c --- v2.6.12-rc2-00_mutex/fs/sysfs/dir.c 2005-04-06 17:28:08.000000000 -0400 +++ v2.6.12-rc2-01_i_sem/fs/sysfs/dir.c 2005-04-07 15:13:03.000000000 -0400 @@ -98,7 +98,7 @@ static int create_dir(struct kobject * k int error; umode_t mode = S_IFDIR| S_IRWXU | S_IRUGO | S_IXUGO; - down(&p->d_inode->i_sem); + mutex_lock(&p->d_inode->i_sem); *d = sysfs_get_dentry(p,n); if (!IS_ERR(*d)) { error = sysfs_create(*d, mode, init_dir); @@ -116,7 +116,7 @@ static int create_dir(struct kobject * k dput(*d); } else error = PTR_ERR(*d); - up(&p->d_inode->i_sem); + mutex_unlock(&p->d_inode->i_sem); return error; } @@ -235,7 +235,7 @@ static void remove_dir(struct dentry * d struct dentry * parent = dget(d->d_parent); struct sysfs_dirent * sd; - down(&parent->d_inode->i_sem); + mutex_lock(&parent->d_inode->i_sem); d_delete(d); sd = d->d_fsdata; list_del_init(&sd->s_sibling); @@ -246,7 +246,7 @@ static void remove_dir(struct dentry * d pr_debug(" o %s removing done (%d)\n",d->d_name.name, atomic_read(&d->d_count)); - up(&parent->d_inode->i_sem); + mutex_unlock(&parent->d_inode->i_sem); dput(parent); } @@ -275,7 +275,7 @@ void sysfs_remove_dir(struct kobject * k return; pr_debug("sysfs %s: removing dir\n",dentry->d_name.name); - down(&dentry->d_inode->i_sem); + mutex_lock(&dentry->d_inode->i_sem); parent_sd = dentry->d_fsdata; list_for_each_entry_safe(sd, tmp, &parent_sd->s_children, s_sibling) { if (!sd->s_element || !(sd->s_type & SYSFS_NOT_PINNED)) @@ -284,7 +284,7 @@ void sysfs_remove_dir(struct kobject * k sysfs_drop_dentry(sd, dentry); sysfs_put(sd); } - up(&dentry->d_inode->i_sem); + mutex_unlock(&dentry->d_inode->i_sem); remove_dir(dentry); /** @@ -307,7 +307,7 @@ int sysfs_rename_dir(struct kobject * ko down_write(&sysfs_rename_sem); parent = kobj->parent->dentry; - down(&parent->d_inode->i_sem); + mutex_lock(&parent->d_inode->i_sem); new_dentry = sysfs_get_dentry(parent, new_name); if (!IS_ERR(new_dentry)) { @@ -323,7 +323,7 @@ int sysfs_rename_dir(struct kobject * ko error = -EEXIST; dput(new_dentry); } - up(&parent->d_inode->i_sem); + mutex_unlock(&parent->d_inode->i_sem); up_write(&sysfs_rename_sem); return error; @@ -334,9 +334,9 @@ static int sysfs_dir_open(struct inode * struct dentry * dentry = file->f_dentry; struct sysfs_dirent * parent_sd = dentry->d_fsdata; - down(&dentry->d_inode->i_sem); + mutex_lock(&dentry->d_inode->i_sem); file->private_data = sysfs_new_dirent(parent_sd, NULL); - up(&dentry->d_inode->i_sem); + mutex_unlock(&dentry->d_inode->i_sem); return file->private_data ? 0 : -ENOMEM; @@ -347,9 +347,9 @@ static int sysfs_dir_close(struct inode struct dentry * dentry = file->f_dentry; struct sysfs_dirent * cursor = file->private_data; - down(&dentry->d_inode->i_sem); + mutex_lock(&dentry->d_inode->i_sem); list_del_init(&cursor->s_sibling); - up(&dentry->d_inode->i_sem); + mutex_unlock(&dentry->d_inode->i_sem); release_sysfs_dirent(cursor); @@ -425,7 +425,7 @@ static loff_t sysfs_dir_lseek(struct fil { struct dentry * dentry = file->f_dentry; - down(&dentry->d_inode->i_sem); + mutex_lock(&dentry->d_inode->i_sem); switch (origin) { case 1: offset += file->f_pos; @@ -433,7 +433,7 @@ static loff_t sysfs_dir_lseek(struct fil if (offset >= 0) break; default: - up(&file->f_dentry->d_inode->i_sem); + mutex_unlock(&file->f_dentry->d_inode->i_sem); return -EINVAL; } if (offset != file->f_pos) { @@ -457,7 +457,7 @@ static loff_t sysfs_dir_lseek(struct fil list_add_tail(&cursor->s_sibling, p); } } - up(&dentry->d_inode->i_sem); + mutex_unlock(&dentry->d_inode->i_sem); return offset; } diff -purN v2.6.12-rc2-00_mutex/fs/sysfs/file.c v2.6.12-rc2-01_i_sem/fs/sysfs/file.c --- v2.6.12-rc2-00_mutex/fs/sysfs/file.c 2005-04-06 17:28:08.000000000 -0400 +++ v2.6.12-rc2-01_i_sem/fs/sysfs/file.c 2005-04-07 15:13:03.000000000 -0400 @@ -362,9 +362,9 @@ int sysfs_add_file(struct dentry * dir, umode_t mode = (attr->mode & S_IALLUGO) | S_IFREG; int error = 0; - down(&dir->d_inode->i_sem); + mutex_lock(&dir->d_inode->i_sem); error = sysfs_make_dirent(parent_sd, NULL, (void *) attr, mode, type); - up(&dir->d_inode->i_sem); + mutex_unlock(&dir->d_inode->i_sem); return error; } @@ -399,7 +399,7 @@ int sysfs_update_file(struct kobject * k struct dentry * victim; int res = -ENOENT; - down(&dir->d_inode->i_sem); + mutex_lock(&dir->d_inode->i_sem); victim = sysfs_get_dentry(dir, attr->name); if (!IS_ERR(victim)) { /* make sure dentry is really there */ @@ -421,7 +421,7 @@ int sysfs_update_file(struct kobject * k */ dput(victim); } - up(&dir->d_inode->i_sem); + mutex_unlock(&dir->d_inode->i_sem); return res; } diff -purN v2.6.12-rc2-00_mutex/fs/sysfs/inode.c v2.6.12-rc2-01_i_sem/fs/sysfs/inode.c --- v2.6.12-rc2-00_mutex/fs/sysfs/inode.c 2005-04-07 09:53:12.000000000 -0400 +++ v2.6.12-rc2-01_i_sem/fs/sysfs/inode.c 2005-04-07 15:13:03.000000000 -0400 @@ -148,7 +148,7 @@ void sysfs_hash_and_remove(struct dentry struct sysfs_dirent * sd; struct sysfs_dirent * parent_sd = dir->d_fsdata; - down(&dir->d_inode->i_sem); + mutex_lock(&dir->d_inode->i_sem); list_for_each_entry(sd, &parent_sd->s_children, s_sibling) { if (!sd->s_element) continue; @@ -159,7 +159,7 @@ void sysfs_hash_and_remove(struct dentry break; } } - up(&dir->d_inode->i_sem); + mutex_unlock(&dir->d_inode->i_sem); } diff -purN v2.6.12-rc2-00_mutex/fs/sysfs/symlink.c v2.6.12-rc2-01_i_sem/fs/sysfs/symlink.c --- v2.6.12-rc2-00_mutex/fs/sysfs/symlink.c 2004-12-24 16:34:44.000000000 -0500 +++ v2.6.12-rc2-01_i_sem/fs/sysfs/symlink.c 2005-04-07 15:13:03.000000000 -0400 @@ -86,9 +86,9 @@ int sysfs_create_link(struct kobject * k BUG_ON(!kobj || !kobj->dentry || !name); - down(&dentry->d_inode->i_sem); + mutex_lock(&dentry->d_inode->i_sem); error = sysfs_add_link(dentry, name, target); - up(&dentry->d_inode->i_sem); + mutex_unlock(&dentry->d_inode->i_sem); return error; } diff -purN v2.6.12-rc2-00_mutex/fs/ufs/super.c v2.6.12-rc2-01_i_sem/fs/ufs/super.c --- v2.6.12-rc2-00_mutex/fs/ufs/super.c 2005-04-07 09:53:12.000000000 -0400 +++ v2.6.12-rc2-01_i_sem/fs/ufs/super.c 2005-04-07 15:13:03.000000000 -0400 @@ -1273,7 +1273,7 @@ static ssize_t ufs_quota_write(struct su size_t towrite = len; struct buffer_head *bh; - down(&inode->i_sem); + mutex_lock(&inode->i_sem); while (towrite > 0) { tocopy = sb->s_blocksize - offset < towrite ? sb->s_blocksize - offset : towrite; @@ -1301,7 +1301,7 @@ out: inode->i_version++; inode->i_mtime = inode->i_ctime = CURRENT_TIME_SEC; mark_inode_dirty(inode); - up(&inode->i_sem); + mutex_unlock(&inode->i_sem); return len - towrite; } diff -purN v2.6.12-rc2-00_mutex/fs/xattr.c v2.6.12-rc2-01_i_sem/fs/xattr.c --- v2.6.12-rc2-00_mutex/fs/xattr.c 2004-12-24 16:34:32.000000000 -0500 +++ v2.6.12-rc2-01_i_sem/fs/xattr.c 2005-04-07 15:13:03.000000000 -0400 @@ -52,7 +52,7 @@ setxattr(struct dentry *d, char __user * error = -EOPNOTSUPP; if (d->d_inode->i_op && d->d_inode->i_op->setxattr) { - down(&d->d_inode->i_sem); + mutex_lock(&d->d_inode->i_sem); error = security_inode_setxattr(d, kname, kvalue, size, flags); if (error) goto out; @@ -60,7 +60,7 @@ setxattr(struct dentry *d, char __user * if (!error) security_inode_post_setxattr(d, kname, kvalue, size, flags); out: - up(&d->d_inode->i_sem); + mutex_unlock(&d->d_inode->i_sem); } if (kvalue) kfree(kvalue); @@ -301,9 +301,9 @@ removexattr(struct dentry *d, char __use error = security_inode_removexattr(d, kname); if (error) goto out; - down(&d->d_inode->i_sem); + mutex_lock(&d->d_inode->i_sem); error = d->d_inode->i_op->removexattr(d, kname); - up(&d->d_inode->i_sem); + mutex_unlock(&d->d_inode->i_sem); } out: return error; diff -purN v2.6.12-rc2-00_mutex/fs/xfs/linux-2.6/xfs_lrw.c v2.6.12-rc2-01_i_sem/fs/xfs/linux-2.6/xfs_lrw.c --- v2.6.12-rc2-00_mutex/fs/xfs/linux-2.6/xfs_lrw.c 2005-04-07 09:53:12.000000000 -0400 +++ v2.6.12-rc2-01_i_sem/fs/xfs/linux-2.6/xfs_lrw.c 2005-04-07 15:13:03.000000000 -0400 @@ -298,7 +298,7 @@ xfs_read( } if (unlikely(ioflags & IO_ISDIRECT)) - down(&inode->i_sem); + mutex_lock(&inode->i_sem); xfs_ilock(ip, XFS_IOLOCK_SHARED); if (DM_EVENT_ENABLED(vp->v_vfsp, ip, DM_EVENT_READ) && @@ -329,7 +329,7 @@ xfs_read( unlock_isem: if (unlikely(ioflags & IO_ISDIRECT)) - up(&inode->i_sem); + mutex_unlock(&inode->i_sem); return ret; } @@ -698,7 +698,7 @@ relock: iolock = XFS_IOLOCK_EXCL; locktype = VRWLOCK_WRITE; - down(&inode->i_sem); + mutex_lock(&inode->i_sem); } else { iolock = XFS_IOLOCK_SHARED; locktype = VRWLOCK_WRITE_DIRECT; @@ -820,7 +820,7 @@ retry: if (need_isem) { /* demote the lock now the cached pages are gone */ XFS_ILOCK_DEMOTE(mp, io, XFS_IOLOCK_EXCL); - up(&inode->i_sem); + mutex_unlock(&inode->i_sem); iolock = XFS_IOLOCK_SHARED; locktype = VRWLOCK_WRITE_DIRECT; @@ -970,7 +970,7 @@ retry: xfs_rwunlock(bdp, locktype); if (need_isem) - up(&inode->i_sem); + mutex_unlock(&inode->i_sem); error = sync_page_range(inode, mapping, pos, ret); if (!error) @@ -982,7 +982,7 @@ retry: xfs_rwunlock(bdp, locktype); out_unlock_isem: if (need_isem) - up(&inode->i_sem); + mutex_unlock(&inode->i_sem); return -error; } diff -purN v2.6.12-rc2-00_mutex/include/linux/fs.h v2.6.12-rc2-01_i_sem/include/linux/fs.h --- v2.6.12-rc2-00_mutex/include/linux/fs.h 2005-04-07 09:53:12.000000000 -0400 +++ v2.6.12-rc2-01_i_sem/include/linux/fs.h 2005-04-07 15:31:18.000000000 -0400 @@ -213,6 +213,7 @@ extern int dir_notify_enable; #include #include #include +#include #include #include @@ -446,7 +447,7 @@ struct inode { unsigned long i_blocks; unsigned short i_bytes; spinlock_t i_lock; /* i_blocks, i_bytes, maybe i_size */ - struct semaphore i_sem; + struct mutex i_sem; struct rw_semaphore i_alloc_sem; struct inode_operations *i_op; struct file_operations *i_fop; /* former ->i_op->default_file_ops */ @@ -1128,7 +1129,7 @@ int sync_inode(struct inode *inode, stru * @obj or @parent parameters. * * Locking rules: - * get_parent is called with child->d_inode->i_sem down + * get_parent is called with child->d_inode->i_sem held * get_name is not (which is possibly inconsistent) */ diff -purN v2.6.12-rc2-00_mutex/include/linux/nfsd/nfsfh.h v2.6.12-rc2-01_i_sem/include/linux/nfsd/nfsfh.h --- v2.6.12-rc2-00_mutex/include/linux/nfsd/nfsfh.h 2004-12-24 16:35:01.000000000 -0500 +++ v2.6.12-rc2-01_i_sem/include/linux/nfsd/nfsfh.h 2005-04-07 15:13:03.000000000 -0400 @@ -317,7 +317,7 @@ fh_lock(struct svc_fh *fhp) } inode = dentry->d_inode; - down(&inode->i_sem); + mutex_lock(&inode->i_sem); fill_pre_wcc(fhp); fhp->fh_locked = 1; } @@ -333,7 +333,7 @@ fh_unlock(struct svc_fh *fhp) if (fhp->fh_locked) { fill_post_wcc(fhp); - up(&fhp->fh_dentry->d_inode->i_sem); + mutex_unlock(&fhp->fh_dentry->d_inode->i_sem); fhp->fh_locked = 0; } } diff -purN v2.6.12-rc2-00_mutex/ipc/mqueue.c v2.6.12-rc2-01_i_sem/ipc/mqueue.c --- v2.6.12-rc2-00_mutex/ipc/mqueue.c 2004-12-24 16:34:57.000000000 -0500 +++ v2.6.12-rc2-01_i_sem/ipc/mqueue.c 2005-04-07 15:13:03.000000000 -0400 @@ -658,7 +658,7 @@ asmlinkage long sys_mq_open(const char _ if (fd < 0) goto out_putname; - down(&mqueue_mnt->mnt_root->d_inode->i_sem); + mutex_lock(&mqueue_mnt->mnt_root->d_inode->i_sem); dentry = lookup_one_len(name, mqueue_mnt->mnt_root, strlen(name)); if (IS_ERR(dentry)) { error = PTR_ERR(dentry); @@ -695,7 +695,7 @@ out_putfd: out_err: fd = error; out_upsem: - up(&mqueue_mnt->mnt_root->d_inode->i_sem); + mutex_unlock(&mqueue_mnt->mnt_root->d_inode->i_sem); out_putname: putname(name); return fd; @@ -712,7 +712,7 @@ asmlinkage long sys_mq_unlink(const char if (IS_ERR(name)) return PTR_ERR(name); - down(&mqueue_mnt->mnt_root->d_inode->i_sem); + mutex_lock(&mqueue_mnt->mnt_root->d_inode->i_sem); dentry = lookup_one_len(name, mqueue_mnt->mnt_root, strlen(name)); if (IS_ERR(dentry)) { err = PTR_ERR(dentry); @@ -733,7 +733,7 @@ out_err: dput(dentry); out_unlock: - up(&mqueue_mnt->mnt_root->d_inode->i_sem); + mutex_unlock(&mqueue_mnt->mnt_root->d_inode->i_sem); putname(name); if (inode) iput(inode); diff -purN v2.6.12-rc2-00_mutex/kernel/cpuset.c v2.6.12-rc2-01_i_sem/kernel/cpuset.c --- v2.6.12-rc2-00_mutex/kernel/cpuset.c 2005-04-07 09:53:12.000000000 -0400 +++ v2.6.12-rc2-01_i_sem/kernel/cpuset.c 2005-04-07 15:13:03.000000000 -0400 @@ -1026,7 +1026,7 @@ static int cpuset_add_file(struct dentry struct dentry *dentry; int error; - down(&dir->d_inode->i_sem); + mutex_lock(&dir->d_inode->i_sem); dentry = cpuset_get_dentry(dir, cft->name); if (!IS_ERR(dentry)) { error = cpuset_create_file(dentry, 0644 | S_IFREG); @@ -1035,7 +1035,7 @@ static int cpuset_add_file(struct dentry dput(dentry); } else error = PTR_ERR(dentry); - up(&dir->d_inode->i_sem); + mutex_unlock(&dir->d_inode->i_sem); return error; } @@ -1275,7 +1275,7 @@ static long cpuset_create(struct cpuset /* * Release cpuset_sem before cpuset_populate_dir() because it - * will down() this new directory's i_sem and if we race with + * will mutex_lock() this new directory's i_sem and if we race with * another mkdir, we might deadlock. */ up(&cpuset_sem); diff -purN v2.6.12-rc2-00_mutex/Makefile v2.6.12-rc2-01_i_sem/Makefile --- v2.6.12-rc2-00_mutex/Makefile 2005-04-07 09:53:05.000000000 -0400 +++ v2.6.12-rc2-01_i_sem/Makefile 2005-04-07 15:47:32.000000000 -0400 @@ -1,7 +1,7 @@ VERSION = 2 PATCHLEVEL = 6 SUBLEVEL = 12 -EXTRAVERSION =-rc2 +EXTRAVERSION =-rc2-fs-mutex NAME=Woozy Numbat # *DOCUMENTATION* diff -purN v2.6.12-rc2-00_mutex/mm/filemap.c v2.6.12-rc2-01_i_sem/mm/filemap.c --- v2.6.12-rc2-00_mutex/mm/filemap.c 2005-04-07 09:53:12.000000000 -0400 +++ v2.6.12-rc2-01_i_sem/mm/filemap.c 2005-04-07 15:13:03.000000000 -0400 @@ -273,9 +273,9 @@ int sync_page_range(struct inode *inode, return 0; ret = filemap_fdatawrite_range(mapping, pos, pos + count - 1); if (ret == 0) { - down(&inode->i_sem); + mutex_lock(&inode->i_sem); ret = generic_osync_inode(inode, mapping, OSYNC_METADATA); - up(&inode->i_sem); + mutex_unlock(&inode->i_sem); } if (ret == 0) ret = wait_on_page_writeback_range(mapping, start, end); @@ -2188,10 +2188,10 @@ ssize_t generic_file_aio_write(struct ki BUG_ON(iocb->ki_pos != pos); - down(&inode->i_sem); + mutex_lock(&inode->i_sem); ret = __generic_file_aio_write_nolock(iocb, &local_iov, 1, &iocb->ki_pos); - up(&inode->i_sem); + mutex_unlock(&inode->i_sem); if (ret > 0 && ((file->f_flags & O_SYNC) || IS_SYNC(inode))) { ssize_t err; @@ -2213,9 +2213,9 @@ ssize_t generic_file_write(struct file * struct iovec local_iov = { .iov_base = (void __user *)buf, .iov_len = count }; - down(&inode->i_sem); + mutex_lock(&inode->i_sem); ret = __generic_file_write_nolock(file, &local_iov, 1, ppos); - up(&inode->i_sem); + mutex_unlock(&inode->i_sem); if (ret > 0 && ((file->f_flags & O_SYNC) || IS_SYNC(inode))) { ssize_t err; @@ -2249,9 +2249,9 @@ ssize_t generic_file_writev(struct file struct inode *inode = mapping->host; ssize_t ret; - down(&inode->i_sem); + mutex_lock(&inode->i_sem); ret = __generic_file_write_nolock(file, iov, nr_segs, ppos); - up(&inode->i_sem); + mutex_unlock(&inode->i_sem); if (ret > 0 && ((file->f_flags & O_SYNC) || IS_SYNC(inode))) { int err; diff -purN v2.6.12-rc2-00_mutex/mm/shmem.c v2.6.12-rc2-01_i_sem/mm/shmem.c --- v2.6.12-rc2-00_mutex/mm/shmem.c 2005-04-07 09:53:12.000000000 -0400 +++ v2.6.12-rc2-01_i_sem/mm/shmem.c 2005-04-07 15:13:03.000000000 -0400 @@ -1381,7 +1381,7 @@ shmem_file_write(struct file *file, cons if (!access_ok(VERIFY_READ, buf, count)) return -EFAULT; - down(&inode->i_sem); + mutex_lock(&inode->i_sem); pos = *ppos; written = 0; @@ -1466,7 +1466,7 @@ shmem_file_write(struct file *file, cons if (written) err = written; out: - up(&inode->i_sem); + mutex_unlock(&inode->i_sem); return err; } diff -purN v2.6.12-rc2-00_mutex/mm/swapfile.c v2.6.12-rc2-01_i_sem/mm/swapfile.c --- v2.6.12-rc2-00_mutex/mm/swapfile.c 2005-04-07 09:53:12.000000000 -0400 +++ v2.6.12-rc2-01_i_sem/mm/swapfile.c 2005-04-07 15:13:03.000000000 -0400 @@ -1172,9 +1172,9 @@ asmlinkage long sys_swapoff(const char _ set_blocksize(bdev, p->old_block_size); bd_release(bdev); } else { - down(&inode->i_sem); + mutex_lock(&inode->i_sem); inode->i_flags &= ~S_SWAPFILE; - up(&inode->i_sem); + mutex_unlock(&inode->i_sem); } filp_close(swap_file, NULL); err = 0; @@ -1390,7 +1390,7 @@ asmlinkage long sys_swapon(const char __ p->bdev = bdev; } else if (S_ISREG(inode->i_mode)) { p->bdev = inode->i_sb->s_bdev; - down(&inode->i_sem); + mutex_lock(&inode->i_sem); did_down = 1; if (IS_SWAPFILE(inode)) { error = -EBUSY; @@ -1570,7 +1570,7 @@ out: if (did_down) { if (!error) inode->i_flags |= S_SWAPFILE; - up(&inode->i_sem); + mutex_unlock(&inode->i_sem); } return error; } diff -purN v2.6.12-rc2-00_mutex/net/sunrpc/rpc_pipe.c v2.6.12-rc2-01_i_sem/net/sunrpc/rpc_pipe.c --- v2.6.12-rc2-00_mutex/net/sunrpc/rpc_pipe.c 2005-04-06 17:28:13.000000000 -0400 +++ v2.6.12-rc2-01_i_sem/net/sunrpc/rpc_pipe.c 2005-04-07 15:13:03.000000000 -0400 @@ -66,10 +66,10 @@ rpc_timeout_upcall_queue(void *data) struct rpc_inode *rpci = (struct rpc_inode *)data; struct inode *inode = &rpci->vfs_inode; - down(&inode->i_sem); + mutex_lock(&inode->i_sem); if (rpci->nreaders == 0 && !list_empty(&rpci->pipe)) __rpc_purge_upcall(inode, -ETIMEDOUT); - up(&inode->i_sem); + mutex_unlock(&inode->i_sem); } int @@ -78,7 +78,7 @@ rpc_queue_upcall(struct inode *inode, st struct rpc_inode *rpci = RPC_I(inode); int res = 0; - down(&inode->i_sem); + mutex_lock(&inode->i_sem); if (rpci->nreaders) { list_add_tail(&msg->list, &rpci->pipe); rpci->pipelen += msg->len; @@ -90,7 +90,7 @@ rpc_queue_upcall(struct inode *inode, st rpci->pipelen += msg->len; } else res = -EPIPE; - up(&inode->i_sem); + mutex_unlock(&inode->i_sem); wake_up(&rpci->waitq); return res; } @@ -102,7 +102,7 @@ rpc_close_pipes(struct inode *inode) cancel_delayed_work(&rpci->queue_timeout); flush_scheduled_work(); - down(&inode->i_sem); + mutex_lock(&inode->i_sem); if (rpci->ops != NULL) { rpci->nreaders = 0; __rpc_purge_upcall(inode, -EPIPE); @@ -111,7 +111,7 @@ rpc_close_pipes(struct inode *inode) rpci->ops->release_pipe(inode); rpci->ops = NULL; } - up(&inode->i_sem); + mutex_unlock(&inode->i_sem); } static inline void @@ -142,7 +142,7 @@ rpc_pipe_open(struct inode *inode, struc struct rpc_inode *rpci = RPC_I(inode); int res = -ENXIO; - down(&inode->i_sem); + mutex_lock(&inode->i_sem); if (rpci->ops != NULL) { if (filp->f_mode & FMODE_READ) rpci->nreaders ++; @@ -150,7 +150,7 @@ rpc_pipe_open(struct inode *inode, struc rpci->nwriters ++; res = 0; } - up(&inode->i_sem); + mutex_unlock(&inode->i_sem); return res; } @@ -160,7 +160,7 @@ rpc_pipe_release(struct inode *inode, st struct rpc_inode *rpci = RPC_I(filp->f_dentry->d_inode); struct rpc_pipe_msg *msg; - down(&inode->i_sem); + mutex_lock(&inode->i_sem); if (rpci->ops == NULL) goto out; msg = (struct rpc_pipe_msg *)filp->private_data; @@ -178,7 +178,7 @@ rpc_pipe_release(struct inode *inode, st if (rpci->ops->release_pipe) rpci->ops->release_pipe(inode); out: - up(&inode->i_sem); + mutex_unlock(&inode->i_sem); return 0; } @@ -190,7 +190,7 @@ rpc_pipe_read(struct file *filp, char __ struct rpc_pipe_msg *msg; int res = 0; - down(&inode->i_sem); + mutex_lock(&inode->i_sem); if (rpci->ops == NULL) { res = -EPIPE; goto out_unlock; @@ -217,7 +217,7 @@ rpc_pipe_read(struct file *filp, char __ rpci->ops->destroy_msg(msg); } out_unlock: - up(&inode->i_sem); + mutex_unlock(&inode->i_sem); return res; } @@ -228,11 +228,11 @@ rpc_pipe_write(struct file *filp, const struct rpc_inode *rpci = RPC_I(inode); int res; - down(&inode->i_sem); + mutex_lock(&inode->i_sem); res = -EPIPE; if (rpci->ops != NULL) res = rpci->ops->downcall(filp, buf, len); - up(&inode->i_sem); + mutex_unlock(&inode->i_sem); return res; } @@ -310,7 +310,7 @@ rpc_info_open(struct inode *inode, struc if (!ret) { struct seq_file *m = file->private_data; - down(&inode->i_sem); + mutex_lock(&inode->i_sem); clnt = RPC_I(inode)->private; if (clnt) { atomic_inc(&clnt->cl_users); @@ -319,7 +319,7 @@ rpc_info_open(struct inode *inode, struc single_release(inode, file); ret = -EINVAL; } - up(&inode->i_sem); + mutex_unlock(&inode->i_sem); } return ret; } @@ -479,7 +479,7 @@ rpc_depopulate(struct dentry *parent) struct dentry *dentry, *dvec[10]; int n = 0; - down(&dir->i_sem); + mutex_lock(&dir->i_sem); repeat: spin_lock(&dcache_lock); list_for_each_safe(pos, next, &parent->d_subdirs) { @@ -508,7 +508,7 @@ repeat: } while (n); goto repeat; } - up(&dir->i_sem); + mutex_unlock(&dir->i_sem); } static int @@ -521,7 +521,7 @@ rpc_populate(struct dentry *parent, struct dentry *dentry; int mode, i; - down(&dir->i_sem); + mutex_lock(&dir->i_sem); for (i = start; i < eof; i++) { dentry = d_alloc_name(parent, files[i].name); if (!dentry) @@ -541,10 +541,10 @@ rpc_populate(struct dentry *parent, dir->i_nlink++; d_add(dentry, inode); } - up(&dir->i_sem); + mutex_unlock(&dir->i_sem); return 0; out_bad: - up(&dir->i_sem); + mutex_unlock(&dir->i_sem); printk(KERN_WARNING "%s: %s failed to populate directory %s\n", __FILE__, __FUNCTION__, parent->d_name.name); return -ENOMEM; @@ -600,7 +600,7 @@ rpc_lookup_negative(char *path, struct n if ((error = rpc_lookup_parent(path, nd)) != 0) return ERR_PTR(error); dir = nd->dentry->d_inode; - down(&dir->i_sem); + mutex_lock(&dir->i_sem); dentry = lookup_hash(&nd->last, nd->dentry); if (IS_ERR(dentry)) goto out_err; @@ -611,7 +611,7 @@ rpc_lookup_negative(char *path, struct n } return dentry; out_err: - up(&dir->i_sem); + mutex_unlock(&dir->i_sem); rpc_release_path(nd); return dentry; } @@ -637,7 +637,7 @@ rpc_mkdir(char *path, struct rpc_clnt *r if (error) goto err_depopulate; out: - up(&dir->i_sem); + mutex_unlock(&dir->i_sem); rpc_release_path(&nd); return dentry; err_depopulate: @@ -662,7 +662,7 @@ rpc_rmdir(char *path) if ((error = rpc_lookup_parent(path, &nd)) != 0) return error; dir = nd.dentry->d_inode; - down(&dir->i_sem); + mutex_lock(&dir->i_sem); dentry = lookup_hash(&nd.last, nd.dentry); if (IS_ERR(dentry)) { error = PTR_ERR(dentry); @@ -672,7 +672,7 @@ rpc_rmdir(char *path) error = __rpc_rmdir(dir, dentry); dput(dentry); out_release: - up(&dir->i_sem); + mutex_unlock(&dir->i_sem); rpc_release_path(&nd); return error; } @@ -701,7 +701,7 @@ rpc_mkpipe(char *path, void *private, st rpci->ops = ops; inode_dir_notify(dir, DN_CREATE); out: - up(&dir->i_sem); + mutex_unlock(&dir->i_sem); rpc_release_path(&nd); return dentry; err_dput: @@ -723,7 +723,7 @@ rpc_unlink(char *path) if ((error = rpc_lookup_parent(path, &nd)) != 0) return error; dir = nd.dentry->d_inode; - down(&dir->i_sem); + mutex_lock(&dir->i_sem); dentry = lookup_hash(&nd.last, nd.dentry); if (IS_ERR(dentry)) { error = PTR_ERR(dentry); @@ -738,7 +738,7 @@ rpc_unlink(char *path) dput(dentry); inode_dir_notify(dir, DN_DELETE); out_release: - up(&dir->i_sem); + mutex_unlock(&dir->i_sem); rpc_release_path(&nd); return error; } diff -purN v2.6.12-rc2-00_mutex/net/unix/af_unix.c v2.6.12-rc2-01_i_sem/net/unix/af_unix.c --- v2.6.12-rc2-00_mutex/net/unix/af_unix.c 2005-04-07 09:53:13.000000000 -0400 +++ v2.6.12-rc2-01_i_sem/net/unix/af_unix.c 2005-04-07 15:13:03.000000000 -0400 @@ -781,7 +781,7 @@ static int unix_bind(struct socket *sock /* * Lock the directory. */ - down(&nd.dentry->d_inode->i_sem); + mutex_lock(&nd.dentry->d_inode->i_sem); /* * Do the final lookup. */ @@ -806,7 +806,7 @@ static int unix_bind(struct socket *sock err = vfs_mknod(nd.dentry->d_inode, dentry, mode, 0); if (err) goto out_mknod_dput; - up(&nd.dentry->d_inode->i_sem); + mutex_unlock(&nd.dentry->d_inode->i_sem); dput(nd.dentry); nd.dentry = dentry; @@ -845,7 +845,7 @@ out: out_mknod_dput: dput(dentry); out_mknod_unlock: - up(&nd.dentry->d_inode->i_sem); + mutex_unlock(&nd.dentry->d_inode->i_sem); out_mknod: path_release(&nd); out_mknod_parent: diff -purN v2.6.12-rc2-00_mutex/security/selinux/hooks.c v2.6.12-rc2-01_i_sem/security/selinux/hooks.c --- v2.6.12-rc2-00_mutex/security/selinux/hooks.c 2005-04-07 09:53:13.000000000 -0400 +++ v2.6.12-rc2-01_i_sem/security/selinux/hooks.c 2005-04-07 15:13:03.000000000 -0400 @@ -1322,11 +1322,11 @@ static int post_create(struct inode *dir -rc, inode->i_sb->s_id, inode->i_ino); return rc; } - down(&inode->i_sem); + mutex_lock(&inode->i_sem); rc = inode->i_op->setxattr(dentry, XATTR_NAME_SELINUX, context, len, 0); - up(&inode->i_sem); + mutex_unlock(&inode->i_sem); kfree(context); if (rc < 0) { printk(KERN_WARNING "post_create: setxattr failed, " diff -purN v2.6.12-rc2-00_mutex/sound/core/oss/pcm_oss.c v2.6.12-rc2-01_i_sem/sound/core/oss/pcm_oss.c --- v2.6.12-rc2-00_mutex/sound/core/oss/pcm_oss.c 2005-04-07 09:53:13.000000000 -0400 +++ v2.6.12-rc2-01_i_sem/sound/core/oss/pcm_oss.c 2005-04-07 15:13:03.000000000 -0400 @@ -2112,9 +2112,9 @@ static ssize_t snd_pcm_oss_write(struct substream = pcm_oss_file->streams[SNDRV_PCM_STREAM_PLAYBACK]; if (substream == NULL) return -ENXIO; - up(&file->f_dentry->d_inode->i_sem); + mutex_unlock(&file->f_dentry->d_inode->i_sem); result = snd_pcm_oss_write1(substream, buf, count); - down(&file->f_dentry->d_inode->i_sem); + mutex_lock(&file->f_dentry->d_inode->i_sem); #ifdef OSS_DEBUG printk("pcm_oss: write %li bytes (wrote %li bytes)\n", (long)count, (long)result); #endif