Commit 502756b3 authored by Goldwyn Rodrigues's avatar Goldwyn Rodrigues Committed by David Sterba
Browse files

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: default avatarJosef Bacik <josef@toxicpanda.com>
Signed-off-by: default avatarGoldwyn Rodrigues <rgoldwyn@suse.com>
Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent e9adabb9
Loading
Loading
Loading
Loading
+0 −10
Original line number Diff line number Diff line
@@ -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;
};

+0 −13
Original line number Diff line number Diff line
@@ -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;
}
+0 −1
Original line number Diff line number Diff line
@@ -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;
}