Message ID | 20240607143919.2622319-2-john.g.garry@oracle.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | block atomic writes for xfs | expand |
On Fri, Jun 07, 2024 at 02:38:58PM +0000, John Garry wrote: > Add a generic helper for FSes to validate that an atomic write is > appropriately sized (along with the other checks). > > Signed-off-by: John Garry <john.g.garry@oracle.com> > --- > include/linux/fs.h | 12 ++++++++++++ > 1 file changed, 12 insertions(+) > > diff --git a/include/linux/fs.h b/include/linux/fs.h > index 069cbab62700..e13d34f8c24e 100644 > --- a/include/linux/fs.h > +++ b/include/linux/fs.h > @@ -3645,4 +3645,16 @@ bool generic_atomic_write_valid(loff_t pos, struct iov_iter *iter) > return true; > } > > +static inline > +bool generic_atomic_write_valid_size(loff_t pos, struct iov_iter *iter, > + unsigned int unit_min, unsigned int unit_max) > +{ > + size_t len = iov_iter_count(iter); > + > + if (len < unit_min || len > unit_max) > + return false; > + > + return generic_atomic_write_valid(pos, iter); > +} Now that I look back at "fs: Initial atomic write support" I wonder why not pass the iocb and the iov_iter instead of pos and the iov_iter? And can these be collapsed into a single generic_atomic_write_checks() function? --D > + > #endif /* _LINUX_FS_H */ > -- > 2.31.1 > >
On 12/06/2024 22:10, Darrick J. Wong wrote: > On Fri, Jun 07, 2024 at 02:38:58PM +0000, John Garry wrote: >> Add a generic helper for FSes to validate that an atomic write is >> appropriately sized (along with the other checks). >> >> Signed-off-by: John Garry <john.g.garry@oracle.com> >> --- >> include/linux/fs.h | 12 ++++++++++++ >> 1 file changed, 12 insertions(+) >> >> diff --git a/include/linux/fs.h b/include/linux/fs.h >> index 069cbab62700..e13d34f8c24e 100644 >> --- a/include/linux/fs.h >> +++ b/include/linux/fs.h >> @@ -3645,4 +3645,16 @@ bool generic_atomic_write_valid(loff_t pos, struct iov_iter *iter) >> return true; >> } >> >> +static inline >> +bool generic_atomic_write_valid_size(loff_t pos, struct iov_iter *iter, >> + unsigned int unit_min, unsigned int unit_max) >> +{ >> + size_t len = iov_iter_count(iter); >> + >> + if (len < unit_min || len > unit_max) >> + return false; >> + >> + return generic_atomic_write_valid(pos, iter); >> +} > > Now that I look back at "fs: Initial atomic write support" I wonder why > not pass the iocb and the iov_iter instead of pos and the iov_iter? The original user of generic_atomic_write_valid() [blkdev_dio_unaligned() or blkdev_dio_invalid() with the rename] used these same args, so I just went with that. > And can these be collapsed into a single generic_atomic_write_checks() > function? bdev file operations would then need to use generic_atomic_write_valid_size(), and there is no unit_min and unit_max size there, apart from bdev awu min and max. And if I checked them, we would be duplicating checks (of awu min and max) in the block layer. Cheers, John
diff --git a/include/linux/fs.h b/include/linux/fs.h index 069cbab62700..e13d34f8c24e 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -3645,4 +3645,16 @@ bool generic_atomic_write_valid(loff_t pos, struct iov_iter *iter) return true; } +static inline +bool generic_atomic_write_valid_size(loff_t pos, struct iov_iter *iter, + unsigned int unit_min, unsigned int unit_max) +{ + size_t len = iov_iter_count(iter); + + if (len < unit_min || len > unit_max) + return false; + + return generic_atomic_write_valid(pos, iter); +} + #endif /* _LINUX_FS_H */
Add a generic helper for FSes to validate that an atomic write is appropriately sized (along with the other checks). Signed-off-by: John Garry <john.g.garry@oracle.com> --- include/linux/fs.h | 12 ++++++++++++ 1 file changed, 12 insertions(+)