On 12/9/19 5:34 PM, Darrick J. Wong wrote: > On Mon, Dec 09, 2019 at 04:00:17PM -0600, Eric Sandeen wrote: >> On 11/28/19 12:21 AM, Pavel Reichl wrote: >>> Some users are not happy about the BLKDISCARD taking too long and at the same >>> time not being informed about that - so they think that the command actually >>> hung. >>> >>> This commit changes code so that progress reporting is possible and also typing >>> the ^C will cancel the ongoing BLKDISCARD. >> Ok I'm going to nitpick this just a little bit more... >> >>> Signed-off-by: Pavel Reichl <preichl@xxxxxxxxxx> >>> --- >>> mkfs/xfs_mkfs.c | 50 ++++++++++++++++++++++++++++++++++++------------- >>> 1 file changed, 37 insertions(+), 13 deletions(-) >>> >>> diff --git a/mkfs/xfs_mkfs.c b/mkfs/xfs_mkfs.c >>> index 18338a61..0defadb2 100644 >>> --- a/mkfs/xfs_mkfs.c >>> +++ b/mkfs/xfs_mkfs.c >>> @@ -1240,17 +1240,40 @@ done: >>> } >>> >>> static void >>> -discard_blocks(dev_t dev, uint64_t nsectors) >>> +discard_blocks(dev_t dev, uint64_t nsectors, int quiet) >>> { >>> - int fd; >>> + int fd; >>> + uint64_t offset = 0; >>> + /* Discard the device 2G at a time */ >>> + const uint64_t step = 2ULL << 30; >>> + const uint64_t count = BBTOB(nsectors); >>> >>> - /* >>> - * We intentionally ignore errors from the discard ioctl. It is >>> - * not necessary for the mkfs functionality but just an optimization. >>> - */ >>> fd = libxfs_device_to_fd(dev); >>> - if (fd > 0) >>> - platform_discard_blocks(fd, 0, nsectors << 9); >>> + if (fd <= 0) >>> + return; >>> + if (!quiet) { >>> + printf("Discarding blocks...\n"); >>> + printf("...\n"); >>> + } >> Let's change this output so that it prints only a single line, i.e. >> >> + if (!quiet) { >> + printf("Discarding blocks... "); > This needs fflush(stdout); here to force the message out of stdio output > buffering. > > --D I thought of that, then forgot. ;) Maybe we do need a formal v4 on the list.