mirror of
https://github.com/torvalds/linux.git
synced 2024-11-01 04:53:36 +01:00
iomap: constrain the file range passed to iomap_file_unshare
File contents can only be shared (i.e. reflinked) below EOF, so it makes
no sense to try to unshare ranges beyond EOF. Constrain the file range
parameters here so that we don't have to do that in the callers.
Fixes: 5f4e5752a8
("fs: add iomap_file_dirty")
Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Link: https://lore.kernel.org/r/20241002150213.GC21853@frogsfrogsfrogs
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Brian Foster <bfoster@redhat.com>
Signed-off-by: Christian Brauner <brauner@kernel.org>
This commit is contained in:
parent
f7a4874d97
commit
a311a08a42
2 changed files with 10 additions and 2 deletions
6
fs/dax.c
6
fs/dax.c
|
@ -1305,11 +1305,15 @@ int dax_file_unshare(struct inode *inode, loff_t pos, loff_t len,
|
|||
struct iomap_iter iter = {
|
||||
.inode = inode,
|
||||
.pos = pos,
|
||||
.len = len,
|
||||
.flags = IOMAP_WRITE | IOMAP_UNSHARE | IOMAP_DAX,
|
||||
};
|
||||
loff_t size = i_size_read(inode);
|
||||
int ret;
|
||||
|
||||
if (pos < 0 || pos >= size)
|
||||
return 0;
|
||||
|
||||
iter.len = min(len, size - pos);
|
||||
while ((ret = iomap_iter(&iter, ops)) > 0)
|
||||
iter.processed = dax_unshare_iter(&iter);
|
||||
return ret;
|
||||
|
|
|
@ -1375,11 +1375,15 @@ iomap_file_unshare(struct inode *inode, loff_t pos, loff_t len,
|
|||
struct iomap_iter iter = {
|
||||
.inode = inode,
|
||||
.pos = pos,
|
||||
.len = len,
|
||||
.flags = IOMAP_WRITE | IOMAP_UNSHARE,
|
||||
};
|
||||
loff_t size = i_size_read(inode);
|
||||
int ret;
|
||||
|
||||
if (pos < 0 || pos >= size)
|
||||
return 0;
|
||||
|
||||
iter.len = min(len, size - pos);
|
||||
while ((ret = iomap_iter(&iter, ops)) > 0)
|
||||
iter.processed = iomap_unshare_iter(&iter);
|
||||
return ret;
|
||||
|
|
Loading…
Reference in a new issue