Btrfs: move O_DIRECT space reservation to btrfs_direct_IO
This moves the delalloc space reservation done for O_DIRECT into btrfs_direct_IO. This way we don't leak reserved space if the generic O_DIRECT write code errors out before it calls into btrfs_direct_IO. Signed-off-by: Chris Mason <chris.mason@oracle.com>
This commit is contained in:
@@ -5602,9 +5602,16 @@ static ssize_t btrfs_direct_IO(int rw, struct kiocb *iocb,
|
||||
ssize_t ret;
|
||||
int writing = rw & WRITE;
|
||||
int write_bits = 0;
|
||||
size_t count = iov_length(iov, nr_segs);
|
||||
|
||||
lockstart = offset;
|
||||
lockend = offset + iov_length(iov, nr_segs) - 1;
|
||||
lockend = offset + count - 1;
|
||||
|
||||
if (writing) {
|
||||
ret = btrfs_delalloc_reserve_space(inode, count);
|
||||
if (ret)
|
||||
goto out;
|
||||
}
|
||||
|
||||
while (1) {
|
||||
lock_extent_bits(&BTRFS_I(inode)->io_tree, lockstart, lockend,
|
||||
|
Reference in New Issue
Block a user