| From 13d8a8ba383893780239643ff560d27e629fd573 Mon Sep 17 00:00:00 2001 |
| From: Thomas Gleixner <tglx@linutronix.de> |
| 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 <tglx@linutronix.de> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| --- |
| 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 4eced51..f4c4086 100644 |
| --- a/fs/ext4/inode.c |
| +++ b/fs/ext4/inode.c |
| @@ -5968,7 +5968,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)) { |
| @@ -6018,6 +6018,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 e504ab7..ed75e12 100644 |
| --- a/fs/ocfs2/aops.c |
| +++ b/fs/ocfs2/aops.c |
| @@ -591,7 +591,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 5dc66b7..a1be21c 100644 |
| --- a/fs/ocfs2/file.c |
| +++ b/fs/ocfs2/file.c |
| @@ -1986,7 +1986,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; |
| } |
| |
| @@ -2013,7 +2013,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; |
| @@ -2109,7 +2109,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); |
| |
| @@ -2258,7 +2258,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); |
| @@ -2302,7 +2302,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 e93529d..be5837c 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 59a09d4..c19445d 100644 |
| --- a/mm/memory.c |
| +++ b/mm/memory.c |
| @@ -2599,12 +2599,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 |
| |