aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKonstantin Vyshetsky <vkon@google.com>2024-02-15 16:02:58 -0800
committerJaegeuk Kim <jaegeuk@kernel.org>2024-02-21 09:41:52 -0800
commit575e8e05d32c0b772b0758e4058d2941fdea1fd2 (patch)
treec63a44cc2c28fd452550b8e1498d4c2441eb0815
parentab654fcca26cccafd75b4452111ad96d585abdb9 (diff)
downloadf2fs-tools-575e8e05d32c0b772b0758e4058d2941fdea1fd2.tar.gz
f2fs_io: override setxattr value for system.advise
Adjust behavior to match kernel. Signed-off-by: Konstantin Vyshetsky <vkon@google.com> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
-rw-r--r--tools/f2fs_io/f2fs_io.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/tools/f2fs_io/f2fs_io.c b/tools/f2fs_io/f2fs_io.c
index a5e151d..1df9034 100644
--- a/tools/f2fs_io/f2fs_io.c
+++ b/tools/f2fs_io/f2fs_io.c
@@ -1588,10 +1588,13 @@ static void do_listxattr(int argc, char **argv, const struct cmd_desc *cmd)
#define setxattr_desc "setxattr"
#define setxattr_help "f2fs_io setxattr [name] [value] [file_path]\n\n"
+#define F2FS_SYSTEM_ADVISE_NAME "system.advise"
static void do_setxattr(int argc, char **argv, const struct cmd_desc *cmd)
{
int ret;
+ char *value;
+ unsigned char tmp;
if (argc != 4) {
fputs("Excess arguments\n\n", stderr);
@@ -1599,11 +1602,18 @@ static void do_setxattr(int argc, char **argv, const struct cmd_desc *cmd)
exit(1);
}
- ret = setxattr(argv[3], argv[1], argv[2], strlen(argv[2]), XATTR_CREATE);
+ if (!strcmp(argv[1], F2FS_SYSTEM_ADVISE_NAME)) {
+ tmp = strtoul(argv[2], NULL, 0);
+ value = (char *)&tmp;
+ } else {
+ value = argv[2];
+ }
+
+ ret = setxattr(argv[3], argv[1], value, strlen(argv[2]), XATTR_CREATE);
printf("setxattr %s CREATE: name: %s, value: %s: ret=%d\n",
argv[3], argv[1], argv[2], ret);
if (ret < 0 && errno == EEXIST) {
- ret = setxattr(argv[3], argv[1], argv[2], strlen(argv[2]), XATTR_REPLACE);
+ ret = setxattr(argv[3], argv[1], value, strlen(argv[2]), XATTR_REPLACE);
printf("setxattr %s REPLACE: name: %s, value: %s: ret=%d\n",
argv[3], argv[1], argv[2], ret);
}