diff options
author | Konstantin Vyshetsky <vkon@google.com> | 2024-02-15 16:02:58 -0800 |
---|---|---|
committer | Jaegeuk Kim <jaegeuk@kernel.org> | 2024-02-21 09:41:52 -0800 |
commit | 575e8e05d32c0b772b0758e4058d2941fdea1fd2 (patch) | |
tree | c63a44cc2c28fd452550b8e1498d4c2441eb0815 | |
parent | ab654fcca26cccafd75b4452111ad96d585abdb9 (diff) | |
download | f2fs-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.c | 14 |
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); } |