Message ID | 20220923100224.537-1-luzhipeng@cestc.cn (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | block: unmap (discard) blocks only if discard_zeros flag is true | expand |
Am 23.09.2022 um 12:02 hat luzhipeng geschrieben: > From: lu zhipeng <luzhipeng@cestc.cn> > > we can unmap(discard) blocks for block devices of supporting discard zeros > or regular file. > > Signed-off-by: lu zhipeng <luzhipeng@cestc.cn> This more or less restores the state before commit 34fa110e. The commit message there explains that s->discard_zeroes is unreliable (in particular, it is false on block devices on recent kernels even though they may support zeroing by discard just fine). We should instead remove s->discard_zeroes because it is currently unused. I'll send a patch. Kevin
在 2022/9/23 22:28, Kevin Wolf 写道: > Am 23.09.2022 um 12:02 hat luzhipeng geschrieben: >> From: lu zhipeng <luzhipeng@cestc.cn> >> >> we can unmap(discard) blocks for block devices of supporting discard zeros >> or regular file. >> >> Signed-off-by: lu zhipeng <luzhipeng@cestc.cn> > > This more or less restores the state before commit 34fa110e. The commit > message there explains that s->discard_zeroes is unreliable (in > particular, it is false on block devices on recent kernels even though > they may support zeroing by discard just fine). > > We should instead remove s->discard_zeroes because it is currently > unused. I'll send a patch. > > Kevin > > > OK
diff --git a/block/file-posix.c b/block/file-posix.c index 48cd096624..c35dbc0d88 100644 --- a/block/file-posix.c +++ b/block/file-posix.c @@ -799,7 +799,8 @@ static int raw_open_common(BlockDriverState *bs, QDict *options, #endif s->needs_alignment = raw_needs_alignment(bs); - bs->supported_zero_flags = BDRV_REQ_MAY_UNMAP | BDRV_REQ_NO_FALLBACK; + bs->supported_zero_flags = s->discard_zeroes ? + BDRV_REQ_MAY_UNMAP | BDRV_REQ_NO_FALLBACK : 0; if (S_ISREG(st.st_mode)) { /* When extending regular files, we get zeros from the OS */ bs->supported_truncate_flags = BDRV_REQ_ZERO_WRITE;