btrfs: use correct count in btrfs_file_write_iter()
generic_write_checks() may modify iov_iter_count(), so we must get the
count after the call, not before. Using the wrong one has a couple of
consequences:
1. We check a longer range in check_can_nocow() for nowait than we're
actually writing.
2. We create extra hole extent maps in btrfs_cont_expand(). As far as I
can tell, this is harmless, but I might be missing something.
These issues are pretty minor, but let's fix it before something more
important trips on it.
Fixes: edf064e7c6
("btrfs: nowait aio support")
Reviewed-by: Josef Bacik <josef@toxicpanda.com>
Signed-off-by: Omar Sandoval <osandov@fb.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
c82f823c9b
commit
c09767a896
|
@ -1885,7 +1885,7 @@ static ssize_t btrfs_file_write_iter(struct kiocb *iocb,
|
||||||
bool sync = (file->f_flags & O_DSYNC) || IS_SYNC(file->f_mapping->host);
|
bool sync = (file->f_flags & O_DSYNC) || IS_SYNC(file->f_mapping->host);
|
||||||
ssize_t err;
|
ssize_t err;
|
||||||
loff_t pos;
|
loff_t pos;
|
||||||
size_t count = iov_iter_count(from);
|
size_t count;
|
||||||
loff_t oldsize;
|
loff_t oldsize;
|
||||||
int clean_page = 0;
|
int clean_page = 0;
|
||||||
|
|
||||||
|
@ -1906,6 +1906,7 @@ static ssize_t btrfs_file_write_iter(struct kiocb *iocb,
|
||||||
}
|
}
|
||||||
|
|
||||||
pos = iocb->ki_pos;
|
pos = iocb->ki_pos;
|
||||||
|
count = iov_iter_count(from);
|
||||||
if (iocb->ki_flags & IOCB_NOWAIT) {
|
if (iocb->ki_flags & IOCB_NOWAIT) {
|
||||||
/*
|
/*
|
||||||
* We will allocate space in case nodatacow is not set,
|
* We will allocate space in case nodatacow is not set,
|
||||||
|
|
Loading…
Reference in New Issue