*
* Licensed under GPLv2 or later, see file LICENSE in this source tree.
*/
-
//config:config FSTRIM
//config: bool "fstrim (5.5 kb)"
//config: default y
};
#if ENABLE_LONG_OPTS
- static const char getopt_longopts[] ALIGN1 =
+ static const char fstrim_longopts[] ALIGN1 =
"offset\0" Required_argument "o"
"length\0" Required_argument "l"
"minimum\0" Required_argument "m"
"verbose\0" No_argument "v"
;
- applet_long_options = getopt_longopts;
#endif
- opt_complementary = "=1"; /* exactly one non-option arg: the mountpoint */
- opts = getopt32(argv, "o:l:m:v", &arg_o, &arg_l, &arg_m);
+ opts = getopt32long(argv, "^"
+ "o:l:m:v"
+ "\0" "=1", fstrim_longopts,
+ &arg_o, &arg_l, &arg_m
+ );
memset(&range, 0, sizeof(range));
range.len = ULLONG_MAX;
range.minlen = xatoull_sfx(arg_m, kmg_i_suffixes);
mp = argv[optind];
- if (find_block_device(mp)) {
+//Wwhy bother checking that it's a blockdev?
+// if (find_block_device(mp)) {
fd = xopen_nonblocking(mp);
+
+ /* On ENOTTY error, util-linux 2.31 says:
+ * "fstrim: FILE: the discard operation is not supported"
+ */
xioctl(fd, FITRIM, &range);
+
if (ENABLE_FEATURE_CLEAN_UP)
close(fd);
if (opts & OPT_v)
printf("%s: %llu bytes trimmed\n", mp, (unsigned long long)range.len);
return EXIT_SUCCESS;
- }
+// }
return EXIT_FAILURE;
}