mirror of https://gitee.com/openkylin/linux.git
btrfs: remove btrfs_inode::dio_sem
The inode dio_sem can be eliminated because all DIO synchronization is now performed through inode->i_rwsem that provides the same guarantees. This reduces btrfs_inode size by 40 bytes. Reviewed-by: Josef Bacik <josef@toxicpanda.com> Signed-off-by: Goldwyn Rodrigues <rgoldwyn@suse.com> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
e9adabb971
commit
502756b380
|
@ -203,16 +203,6 @@ struct btrfs_inode {
|
|||
/* Hook into fs_info->delayed_iputs */
|
||||
struct list_head delayed_iput;
|
||||
|
||||
/*
|
||||
* To avoid races between lockless (i_mutex not held) direct IO writes
|
||||
* and concurrent fsync requests. Direct IO writes must acquire read
|
||||
* access on this semaphore for creating an extent map and its
|
||||
* corresponding ordered extent. The fast fsync path must acquire write
|
||||
* access on this semaphore before it collects ordered extents and
|
||||
* extent maps.
|
||||
*/
|
||||
struct rw_semaphore dio_sem;
|
||||
|
||||
struct inode vfs_inode;
|
||||
};
|
||||
|
||||
|
|
|
@ -1948,8 +1948,6 @@ static ssize_t btrfs_direct_write(struct kiocb *iocb, struct iov_iter *from)
|
|||
goto buffered;
|
||||
}
|
||||
|
||||
down_read(&BTRFS_I(inode)->dio_sem);
|
||||
|
||||
/*
|
||||
* This is actually a sync iocb, so we need our fancy endio to know if
|
||||
* we need to sync.
|
||||
|
@ -1964,7 +1962,6 @@ static ssize_t btrfs_direct_write(struct kiocb *iocb, struct iov_iter *from)
|
|||
if (written == -ENOTBLK)
|
||||
written = 0;
|
||||
|
||||
up_read(&BTRFS_I(inode)->dio_sem);
|
||||
btrfs_inode_unlock(inode, ilock_flags);
|
||||
|
||||
if (written < 0 || !iov_iter_count(from)) {
|
||||
|
@ -2172,13 +2169,6 @@ int btrfs_sync_file(struct file *file, loff_t start, loff_t end, int datasync)
|
|||
|
||||
inode_lock(inode);
|
||||
|
||||
/*
|
||||
* We take the dio_sem here because the tree log stuff can race with
|
||||
* lockless dio writes and get an extent map logged for an extent we
|
||||
* never waited on. We need it this high up for lockdep reasons.
|
||||
*/
|
||||
down_write(&BTRFS_I(inode)->dio_sem);
|
||||
|
||||
atomic_inc(&root->log_batch);
|
||||
|
||||
/*
|
||||
|
@ -2209,7 +2199,6 @@ int btrfs_sync_file(struct file *file, loff_t start, loff_t end, int datasync)
|
|||
*/
|
||||
ret = start_ordered_ops(inode, start, end);
|
||||
if (ret) {
|
||||
up_write(&BTRFS_I(inode)->dio_sem);
|
||||
inode_unlock(inode);
|
||||
goto out;
|
||||
}
|
||||
|
@ -2306,7 +2295,6 @@ int btrfs_sync_file(struct file *file, loff_t start, loff_t end, int datasync)
|
|||
* file again, but that will end up using the synchronization
|
||||
* inside btrfs_sync_log to keep things safe.
|
||||
*/
|
||||
up_write(&BTRFS_I(inode)->dio_sem);
|
||||
inode_unlock(inode);
|
||||
|
||||
if (ret != BTRFS_NO_LOG_SYNC) {
|
||||
|
@ -2337,7 +2325,6 @@ int btrfs_sync_file(struct file *file, loff_t start, loff_t end, int datasync)
|
|||
|
||||
out_release_extents:
|
||||
btrfs_release_log_ctx_extents(&ctx);
|
||||
up_write(&BTRFS_I(inode)->dio_sem);
|
||||
inode_unlock(inode);
|
||||
goto out;
|
||||
}
|
||||
|
|
|
@ -8650,7 +8650,6 @@ struct inode *btrfs_alloc_inode(struct super_block *sb)
|
|||
INIT_LIST_HEAD(&ei->delalloc_inodes);
|
||||
INIT_LIST_HEAD(&ei->delayed_iput);
|
||||
RB_CLEAR_NODE(&ei->rb_node);
|
||||
init_rwsem(&ei->dio_sem);
|
||||
|
||||
return inode;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue