diff options
| -rw-r--r-- | fs/btrfs/inode.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index 415a6ad5ba22..bed6cf5f67a4 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c | |||
| @@ -7215,7 +7215,6 @@ static struct extent_map *btrfs_create_dio_extent(struct inode *inode, | |||
| 7215 | struct extent_map *em = NULL; | 7215 | struct extent_map *em = NULL; |
| 7216 | int ret; | 7216 | int ret; |
| 7217 | 7217 | ||
| 7218 | down_read(&BTRFS_I(inode)->dio_sem); | ||
| 7219 | if (type != BTRFS_ORDERED_NOCOW) { | 7218 | if (type != BTRFS_ORDERED_NOCOW) { |
| 7220 | em = create_pinned_em(inode, start, len, orig_start, | 7219 | em = create_pinned_em(inode, start, len, orig_start, |
| 7221 | block_start, block_len, orig_block_len, | 7220 | block_start, block_len, orig_block_len, |
| @@ -7234,7 +7233,6 @@ static struct extent_map *btrfs_create_dio_extent(struct inode *inode, | |||
| 7234 | em = ERR_PTR(ret); | 7233 | em = ERR_PTR(ret); |
| 7235 | } | 7234 | } |
| 7236 | out: | 7235 | out: |
| 7237 | up_read(&BTRFS_I(inode)->dio_sem); | ||
| 7238 | 7236 | ||
| 7239 | return em; | 7237 | return em; |
| 7240 | } | 7238 | } |
| @@ -8695,6 +8693,7 @@ static ssize_t btrfs_direct_IO(struct kiocb *iocb, struct iov_iter *iter) | |||
| 8695 | dio_data.unsubmitted_oe_range_start = (u64)offset; | 8693 | dio_data.unsubmitted_oe_range_start = (u64)offset; |
| 8696 | dio_data.unsubmitted_oe_range_end = (u64)offset; | 8694 | dio_data.unsubmitted_oe_range_end = (u64)offset; |
| 8697 | current->journal_info = &dio_data; | 8695 | current->journal_info = &dio_data; |
| 8696 | down_read(&BTRFS_I(inode)->dio_sem); | ||
| 8698 | } else if (test_bit(BTRFS_INODE_READDIO_NEED_LOCK, | 8697 | } else if (test_bit(BTRFS_INODE_READDIO_NEED_LOCK, |
| 8699 | &BTRFS_I(inode)->runtime_flags)) { | 8698 | &BTRFS_I(inode)->runtime_flags)) { |
| 8700 | inode_dio_end(inode); | 8699 | inode_dio_end(inode); |
| @@ -8707,6 +8706,7 @@ static ssize_t btrfs_direct_IO(struct kiocb *iocb, struct iov_iter *iter) | |||
| 8707 | iter, btrfs_get_blocks_direct, NULL, | 8706 | iter, btrfs_get_blocks_direct, NULL, |
| 8708 | btrfs_submit_direct, flags); | 8707 | btrfs_submit_direct, flags); |
| 8709 | if (iov_iter_rw(iter) == WRITE) { | 8708 | if (iov_iter_rw(iter) == WRITE) { |
| 8709 | up_read(&BTRFS_I(inode)->dio_sem); | ||
| 8710 | current->journal_info = NULL; | 8710 | current->journal_info = NULL; |
| 8711 | if (ret < 0 && ret != -EIOCBQUEUED) { | 8711 | if (ret < 0 && ret != -EIOCBQUEUED) { |
| 8712 | if (dio_data.reserve) | 8712 | if (dio_data.reserve) |
