From 3297e3c2764e3f4ff20e2cc461f186f885215982 Mon Sep 17 00:00:00 2001 From: Thomas Gleixner Date: Sun, 26 Jul 2009 17:38:49 +0200 Subject: [PATCH] fs: Convert i_alloc_sem to rw_anon_semaphore commit 087498eea02acae08627e310d58ec837a54752d7 in tip. i_alloc_sem is used as a completion in direct-io which does not follow owner rules. preempt-rt needs to keep it as such. So convert it to rw_anon_semaphore and annotate the semantics hereby. Signed-off-by: Thomas Gleixner Signed-off-by: Paul Gortmaker --- fs/attr.c | 4 ++-- fs/direct-io.c | 4 ++-- fs/ext4/inode.c | 4 ++-- fs/fat/inode.c | 4 ++-- fs/inode.c | 2 +- fs/nilfs2/mdt.c | 2 +- fs/ntfs/file.c | 4 ++-- fs/ocfs2/aops.c | 2 +- fs/ocfs2/file.c | 10 +++++----- fs/reiserfs/xattr.c | 4 ++-- include/linux/fs.h | 2 +- mm/memory.c | 4 ++-- 12 files changed, 23 insertions(+), 23 deletions(-) diff --git a/fs/attr.c b/fs/attr.c index 0815e93..bf18c50 100644 --- a/fs/attr.c +++ b/fs/attr.c @@ -205,7 +205,7 @@ int notify_change(struct dentry * dentry, struct iattr * attr) return error; if (ia_valid & ATTR_SIZE) - down_write(&dentry->d_inode->i_alloc_sem); + anon_down_write(&dentry->d_inode->i_alloc_sem); if (inode->i_op && inode->i_op->setattr) { error = inode->i_op->setattr(dentry, attr); @@ -216,7 +216,7 @@ int notify_change(struct dentry * dentry, struct iattr * attr) } if (ia_valid & ATTR_SIZE) - up_write(&dentry->d_inode->i_alloc_sem); + anon_up_write(&dentry->d_inode->i_alloc_sem); if (!error) fsnotify_change(dentry, ia_valid); diff --git a/fs/direct-io.c b/fs/direct-io.c index e82adc2..45ee3f6 100644 --- a/fs/direct-io.c +++ b/fs/direct-io.c @@ -242,7 +242,7 @@ static int dio_complete(struct dio *dio, loff_t offset, int ret) if (dio->flags & DIO_LOCKING) /* lockdep: non-owner release */ - up_read_non_owner(&dio->inode->i_alloc_sem); + anon_up_read_non_owner(&dio->inode->i_alloc_sem); if (ret == 0) ret = dio->page_errors; @@ -1184,7 +1184,7 @@ __blockdev_direct_IO(int rw, struct kiocb *iocb, struct inode *inode, * Will be released at I/O completion, possibly in a * different thread. */ - down_read_non_owner(&inode->i_alloc_sem); + anon_down_read_non_owner(&inode->i_alloc_sem); } /* diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index 81d6054..50ccb91 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c @@ -5952,7 +5952,7 @@ int ext4_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf) * Get i_alloc_sem to stop truncates messing with the inode. We cannot * get i_mutex because we are already holding mmap_sem. */ - down_read(&inode->i_alloc_sem); + anon_down_read(&inode->i_alloc_sem); size = i_size_read(inode); if (page->mapping != mapping || size <= page_offset(page) || !PageUptodate(page)) { @@ -6002,6 +6002,6 @@ int ext4_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf) out_unlock: if (ret) ret = VM_FAULT_SIGBUS; - up_read(&inode->i_alloc_sem); + anon_up_read(&inode->i_alloc_sem); return ret; } diff --git a/fs/fat/inode.c b/fs/fat/inode.c index 0ce143b..ab39032 100644 --- a/fs/fat/inode.c +++ b/fs/fat/inode.c @@ -202,9 +202,9 @@ static sector_t _fat_bmap(struct address_space *mapping, sector_t block) sector_t blocknr; /* fat_get_cluster() assumes the requested blocknr isn't truncated. */ - down_read(&mapping->host->i_alloc_sem); + anon_down_read(&mapping->host->i_alloc_sem); blocknr = generic_block_bmap(mapping, block, fat_get_block); - up_read(&mapping->host->i_alloc_sem); + anon_up_read(&mapping->host->i_alloc_sem); return blocknr; } diff --git a/fs/inode.c b/fs/inode.c index 407bf39..6314865 100644 --- a/fs/inode.c +++ b/fs/inode.c @@ -161,7 +161,7 @@ int inode_init_always(struct super_block *sb, struct inode *inode) mutex_init(&inode->i_mutex); lockdep_set_class(&inode->i_mutex, &sb->s_type->i_mutex_key); - init_rwsem(&inode->i_alloc_sem); + init_anon_rwsem(&inode->i_alloc_sem); lockdep_set_class(&inode->i_alloc_sem, &sb->s_type->i_alloc_sem_key); mapping->a_ops = &empty_aops; diff --git a/fs/nilfs2/mdt.c b/fs/nilfs2/mdt.c index 024be8c..10b7675 100644 --- a/fs/nilfs2/mdt.c +++ b/fs/nilfs2/mdt.c @@ -510,7 +510,7 @@ nilfs_mdt_new_common(struct the_nilfs *nilfs, struct super_block *sb, spin_lock_init(&inode->i_lock); mutex_init(&inode->i_mutex); - init_rwsem(&inode->i_alloc_sem); + init_anon_rwsem(&inode->i_alloc_sem); mapping->host = NULL; /* instead of inode */ mapping->flags = 0; diff --git a/fs/ntfs/file.c b/fs/ntfs/file.c index 8804f09..c0d6232 100644 --- a/fs/ntfs/file.c +++ b/fs/ntfs/file.c @@ -1846,9 +1846,9 @@ static ssize_t ntfs_file_buffered_write(struct kiocb *iocb, * fails again. */ if (unlikely(NInoTruncateFailed(ni))) { - down_write(&vi->i_alloc_sem); + anon_down_write(&vi->i_alloc_sem); err = ntfs_truncate(vi); - up_write(&vi->i_alloc_sem); + anon_up_write(&vi->i_alloc_sem); if (err || NInoTruncateFailed(ni)) { if (!err) err = -EIO; diff --git a/fs/ocfs2/aops.c b/fs/ocfs2/aops.c index 21441dd..9846b72 100644 --- a/fs/ocfs2/aops.c +++ b/fs/ocfs2/aops.c @@ -621,7 +621,7 @@ static void ocfs2_dio_end_io(struct kiocb *iocb, level = ocfs2_iocb_rw_locked_level(iocb); if (!level) - up_read(&inode->i_alloc_sem); + anon_up_read(&inode->i_alloc_sem); ocfs2_rw_unlock(inode, level); } diff --git a/fs/ocfs2/file.c b/fs/ocfs2/file.c index a5fbd9c..56ecd3a 100644 --- a/fs/ocfs2/file.c +++ b/fs/ocfs2/file.c @@ -1936,7 +1936,7 @@ static ssize_t ocfs2_file_aio_write(struct kiocb *iocb, relock: /* to match setattr's i_mutex -> i_alloc_sem -> rw_lock ordering */ if (direct_io) { - down_read(&inode->i_alloc_sem); + anon_down_read(&inode->i_alloc_sem); have_alloc_sem = 1; } @@ -1963,7 +1963,7 @@ relock: */ if (direct_io && !can_do_direct) { ocfs2_rw_unlock(inode, rw_level); - up_read(&inode->i_alloc_sem); + anon_up_read(&inode->i_alloc_sem); have_alloc_sem = 0; rw_level = -1; @@ -2059,7 +2059,7 @@ out: out_sems: if (have_alloc_sem) - up_read(&inode->i_alloc_sem); + anon_up_read(&inode->i_alloc_sem); mutex_unlock(&inode->i_mutex); @@ -2208,7 +2208,7 @@ static ssize_t ocfs2_file_aio_read(struct kiocb *iocb, * need locks to protect pending reads from racing with truncate. */ if (filp->f_flags & O_DIRECT) { - down_read(&inode->i_alloc_sem); + anon_down_read(&inode->i_alloc_sem); have_alloc_sem = 1; ret = ocfs2_rw_lock(inode, 0); @@ -2252,7 +2252,7 @@ static ssize_t ocfs2_file_aio_read(struct kiocb *iocb, bail: if (have_alloc_sem) - up_read(&inode->i_alloc_sem); + anon_up_read(&inode->i_alloc_sem); if (rw_level != -1) ocfs2_rw_unlock(inode, rw_level); mlog_exit(ret); diff --git a/fs/reiserfs/xattr.c b/fs/reiserfs/xattr.c index e7cc00e..5b91872 100644 --- a/fs/reiserfs/xattr.c +++ b/fs/reiserfs/xattr.c @@ -560,11 +560,11 @@ reiserfs_xattr_set_handle(struct reiserfs_transaction_handle *th, reiserfs_write_unlock(inode->i_sb); mutex_lock_nested(&dentry->d_inode->i_mutex, I_MUTEX_XATTR); - down_write(&dentry->d_inode->i_alloc_sem); + anon_down_write(&dentry->d_inode->i_alloc_sem); reiserfs_write_lock(inode->i_sb); err = reiserfs_setattr(dentry, &newattrs); - up_write(&dentry->d_inode->i_alloc_sem); + anon_up_write(&dentry->d_inode->i_alloc_sem); mutex_unlock(&dentry->d_inode->i_mutex); } else update_ctime(inode); diff --git a/include/linux/fs.h b/include/linux/fs.h index 44f35ae..64c3268 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -746,7 +746,7 @@ struct inode { umode_t i_mode; spinlock_t i_lock; /* i_blocks, i_bytes, maybe i_size */ struct mutex i_mutex; - struct rw_semaphore i_alloc_sem; + struct rw_anon_semaphore i_alloc_sem; const struct inode_operations *i_op; const struct file_operations *i_fop; /* former ->i_op->default_file_ops */ struct super_block *i_sb; diff --git a/mm/memory.c b/mm/memory.c index 6b45a97..7df5899 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -2589,12 +2589,12 @@ int vmtruncate_range(struct inode *inode, loff_t offset, loff_t end) return -ENOSYS; mutex_lock(&inode->i_mutex); - down_write(&inode->i_alloc_sem); + anon_down_write(&inode->i_alloc_sem); unmap_mapping_range(mapping, offset, (end - offset), 1); truncate_inode_pages_range(mapping, offset, end); unmap_mapping_range(mapping, offset, (end - offset), 1); inode->i_op->truncate_range(inode, offset, end); - up_write(&inode->i_alloc_sem); + anon_up_write(&inode->i_alloc_sem); mutex_unlock(&inode->i_mutex); return 0; -- 1.7.0.4