2022-07-29 00:42:44

by Eunhee Rho

[permalink] [raw]
Subject: [PATCH v0] f2fs: allow direct read for zoned device

For zoned devices, f2fs forbids direct IO and forces buffered IO
to serialize write IOs. However, the constraint does not apply to
read IOs.

Signed-off-by: Eunhee Rho <[email protected]>
---
fs/f2fs/f2fs.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index d0f428aef34b..f69731f17402 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -4471,7 +4471,7 @@ static inline bool f2fs_force_buffered_io(struct inode *inode,
* for blkzoned device, fallback direct IO to buffered IO, so
* all IOs can be serialized by log-structured write.
*/
- if (f2fs_sb_has_blkzoned(sbi))
+ if (f2fs_sb_has_blkzoned(sbi) && (rw == WRITE))
return true;
if (f2fs_lfs_mode(sbi) && (rw == WRITE)) {
if (block_unaligned_IO(inode, iocb, iter))
--
2.25.1


2022-07-29 13:54:24

by Christoph Hellwig

[permalink] [raw]
Subject: Re: [PATCH v0] f2fs: allow direct read for zoned device

On Fri, Jul 29, 2022 at 09:25:17AM +0900, Eunhee Rho wrote:
> For zoned devices, f2fs forbids direct IO and forces buffered IO
> to serialize write IOs. However, the constraint does not apply to
> read IOs.

Asymetric capabilitis will cause a whole lot of problems for us. Can
we figure out why direct writes to zoned devices are not supported and
just fix that instead?

2022-07-31 01:46:36

by Jaegeuk Kim

[permalink] [raw]
Subject: Re: [PATCH v0] f2fs: allow direct read for zoned device

On 07/29, Eunhee Rho wrote:
> For zoned devices, f2fs forbids direct IO and forces buffered IO
> to serialize write IOs. However, the constraint does not apply to
> read IOs.
>
> Signed-off-by: Eunhee Rho <[email protected]>
> ---
> fs/f2fs/f2fs.h | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
> index d0f428aef34b..f69731f17402 100644
> --- a/fs/f2fs/f2fs.h
> +++ b/fs/f2fs/f2fs.h
> @@ -4471,7 +4471,7 @@ static inline bool f2fs_force_buffered_io(struct inode *inode,
> * for blkzoned device, fallback direct IO to buffered IO, so
> * all IOs can be serialized by log-structured write.
> */
> - if (f2fs_sb_has_blkzoned(sbi))
> + if (f2fs_sb_has_blkzoned(sbi) && (rw == WRITE))
> return true;

Actually we don't need to check the device type, but rely on the
filesystem allocation policy like the below lfs mode. Can we remove this
line simply?

> if (f2fs_lfs_mode(sbi) && (rw == WRITE)) {
> if (block_unaligned_IO(inode, iocb, iter))
> --
> 2.25.1

2022-08-01 04:29:52

by Eunhee Rho

[permalink] [raw]
Subject: RE: RE: [PATCH v0] f2fs: allow direct read for zoned device

>On 07/29, Eunhee Rho wrote:
>> For zoned devices, f2fs forbids direct IO and forces buffered IO
>> to serialize write IOs. However, the constraint does not apply to
>> read IOs.
>>
>> Signed-off-by: Eunhee Rho <[email protected]>
>> ---
>> fs/f2fs/f2fs.h | 2 +-
>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
>> index d0f428aef34b..f69731f17402 100644
>> --- a/fs/f2fs/f2fs.h
>> +++ b/fs/f2fs/f2fs.h
>> @@ -4471,7 +4471,7 @@ static inline bool f2fs_force_buffered_io(struct inode *inode,
>> * for blkzoned device, fallback direct IO to buffered IO, so
>> * all IOs can be serialized by log-structured write.
>> */
>> - if (f2fs_sb_has_blkzoned(sbi))
>> + if (f2fs_sb_has_blkzoned(sbi) && (rw == WRITE))
>> return true;
>
>Actually we don't need to check the device type, but rely on the
>filesystem allocation policy like the below lfs mode. Can we remove this
>line simply?
>
>> if (f2fs_lfs_mode(sbi) && (rw == WRITE)) {
>> if (block_unaligned_IO(inode, iocb, iter))
>> --
>> 2.25.1
>

Yes, I will reflect on the next patch.
Thanks.

2022-08-01 04:48:59

by Eunhee Rho

[permalink] [raw]
Subject: [PATCH v1] f2fs: remove device type check for direct IO

To ensure serialized IOs, f2fs allows only LFS mode for zoned
device. Remove redundant check for direct IO.

Signed-off-by: Eunhee Rho <[email protected]>
---
fs/f2fs/f2fs.h | 7 +------
1 file changed, 1 insertion(+), 6 deletions(-)

diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index ecd870e5d6da..ca9354746eec 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -4496,12 +4496,7 @@ static inline bool f2fs_force_buffered_io(struct inode *inode,
/* disallow direct IO if any of devices has unaligned blksize */
if (f2fs_is_multi_device(sbi) && !sbi->aligned_blksize)
return true;
- /*
- * for blkzoned device, fallback direct IO to buffered IO, so
- * all IOs can be serialized by log-structured write.
- */
- if (f2fs_sb_has_blkzoned(sbi))
- return true;
+
if (f2fs_lfs_mode(sbi) && (rw == WRITE)) {
if (block_unaligned_IO(inode, iocb, iter))
return true;
--
2.25.1