You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
56 lines
1.5 KiB
56 lines
1.5 KiB
/* blkdiscard - discard device sectors
|
|
*
|
|
* Copyright 2020 Patrick Oppenlander <patrick.oppenlander@gmail.com>
|
|
*
|
|
* See http://man7.org/linux/man-pages/man8/blkdiscard.8.html
|
|
*
|
|
* The -v and -p options are not supported.
|
|
* Size parsing does not match util-linux where MB, GB, TB are multiples of
|
|
* 1000 and MiB, TiB, GiB are multipes of 1024.
|
|
|
|
USE_BLKDISCARD(NEWTOY(blkdiscard, "<1>1f(force)l(length)#<0o(offset)#<0s(secure)z(zeroout)[!sz]", TOYFLAG_BIN))
|
|
|
|
config BLKDISCARD
|
|
bool "blkdiscard"
|
|
default y
|
|
help
|
|
usage: blkdiscard [-olszf] DEVICE
|
|
|
|
Discard device sectors.
|
|
|
|
-o, --offset OFF Byte offset to start discarding at (default 0)
|
|
-l, --length LEN Bytes to discard (default all)
|
|
-s, --secure Perform secure discard
|
|
-z, --zeroout Zero-fill rather than discard
|
|
-f, --force Disable check for mounted filesystem
|
|
|
|
OFF and LEN must be aligned to the device sector size.
|
|
By default entire device is discarded.
|
|
WARNING: All discarded data is permanently lost!
|
|
*/
|
|
|
|
#define FOR_blkdiscard
|
|
#include "toys.h"
|
|
|
|
#include <linux/fs.h>
|
|
|
|
GLOBALS(
|
|
long o, l;
|
|
)
|
|
|
|
void blkdiscard_main(void)
|
|
{
|
|
int fd = xopen(*toys.optargs, O_WRONLY|O_EXCL*!FLAG(f));
|
|
unsigned long long ol[2];
|
|
|
|
// TODO: if numeric arg was long long array could live in TT.
|
|
ol[0] = TT.o;
|
|
if (FLAG(l)) ol[1] = TT.l;
|
|
else {
|
|
xioctl(fd, BLKGETSIZE64, ol+1);
|
|
ol[1] -= ol[0];
|
|
}
|
|
xioctl(fd, FLAG(s) ? BLKSECDISCARD : FLAG(z) ? BLKZEROOUT : BLKDISCARD, ol);
|
|
close(fd);
|
|
}
|