diff options
author | Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com> | 2008-01-28 23:58:26 -0500 |
---|---|---|
committer | Theodore Ts'o <tytso@mit.edu> | 2008-01-28 23:58:26 -0500 |
commit | 0e855ac8b103ef579052936b59fe7c599ac422a4 (patch) | |
tree | ec29f82e1d7bb1987dcadc00497daf69d6955483 /include/linux/ext4_fs.h | |
parent | c278bfecebfb1ed67c326ef472660878baa745cd (diff) |
ext4: Convert truncate_mutex to read write semaphore.
We are currently taking the truncate_mutex for every read. This would have
performance impact on large CPU configuration. Convert the lock to read write
semaphore and take read lock when we are trying to read the file.
Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
Diffstat (limited to 'include/linux/ext4_fs.h')
-rw-r--r-- | include/linux/ext4_fs.h | 25 |
1 files changed, 4 insertions, 21 deletions
diff --git a/include/linux/ext4_fs.h b/include/linux/ext4_fs.h index 583049c1d366..300cc5a5adb9 100644 --- a/include/linux/ext4_fs.h +++ b/include/linux/ext4_fs.h | |||
@@ -1107,27 +1107,10 @@ extern void ext4_ext_init(struct super_block *); | |||
1107 | extern void ext4_ext_release(struct super_block *); | 1107 | extern void ext4_ext_release(struct super_block *); |
1108 | extern long ext4_fallocate(struct inode *inode, int mode, loff_t offset, | 1108 | extern long ext4_fallocate(struct inode *inode, int mode, loff_t offset, |
1109 | loff_t len); | 1109 | loff_t len); |
1110 | static inline int | 1110 | extern int ext4_get_blocks_wrap(handle_t *handle, struct inode *inode, |
1111 | ext4_get_blocks_wrap(handle_t *handle, struct inode *inode, sector_t block, | 1111 | sector_t block, unsigned long max_blocks, |
1112 | unsigned long max_blocks, struct buffer_head *bh, | 1112 | struct buffer_head *bh, int create, |
1113 | int create, int extend_disksize) | 1113 | int extend_disksize); |
1114 | { | ||
1115 | int retval; | ||
1116 | mutex_lock(&EXT4_I(inode)->truncate_mutex); | ||
1117 | if (EXT4_I(inode)->i_flags & EXT4_EXTENTS_FL) { | ||
1118 | retval = ext4_ext_get_blocks(handle, inode, | ||
1119 | (ext4_lblk_t)block, max_blocks, | ||
1120 | bh, create, extend_disksize); | ||
1121 | } else { | ||
1122 | retval = ext4_get_blocks_handle(handle, inode, | ||
1123 | (ext4_lblk_t)block, max_blocks, | ||
1124 | bh, create, extend_disksize); | ||
1125 | } | ||
1126 | mutex_unlock(&EXT4_I(inode)->truncate_mutex); | ||
1127 | return retval; | ||
1128 | } | ||
1129 | |||
1130 | |||
1131 | #endif /* __KERNEL__ */ | 1114 | #endif /* __KERNEL__ */ |
1132 | 1115 | ||
1133 | #endif /* _LINUX_EXT4_FS_H */ | 1116 | #endif /* _LINUX_EXT4_FS_H */ |