From nobody Mon Jun 8 05:25:28 2026 Received: from mail-dl1-f50.google.com (mail-dl1-f50.google.com [74.125.82.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B7A7236A013 for ; Fri, 5 Jun 2026 16:04:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780675494; cv=none; b=ae/GWLkJZ9GeN9/O8pDa6p4QH/Jpf151zi7AvhboXZmshmexqf1JtivHRCh/659+THNpu6B0wrsVnrzLKm8NXoXoQkZBNbZ4s6qmRC3Mwi2XS4+x6eW2G5FQSd3Xl43VbA2gZ+B0fkhBjeaqonhbvnatJz9PFUP++jdso/bEj+E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780675494; c=relaxed/simple; bh=L0HDyA9DFg0W4XX1n/SWSl0wdKGXFhVyLOjBmEHETJU=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=EKtsQjDn3hgAmEegxIqNu64ewS1EteYZbiH0NYlNEXPZrNFXP4N5gbeC/n+PnWaY9O0/2eyI2RKyQMRnGgUXNeBwlnLpuquV5RngzosX2mZECUdAU9ZZiBv7uuTPo+zZXII5BJHWzUjDScirziKGqgIe5/nnQuyvI/G5IWvNrO0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=dvxMmw2e; arc=none smtp.client-ip=74.125.82.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="dvxMmw2e" Received: by mail-dl1-f50.google.com with SMTP id a92af1059eb24-137f27712fdso3505319c88.0 for ; Fri, 05 Jun 2026 09:04:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1780675493; x=1781280293; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=usYILwUBQbWiiNoZECkULqc3ZaaMcV77JqRP2clLLDk=; b=dvxMmw2eETYacAlSE6q4WSl4c7RnrErnHkPzlXtluAGtel8CRhFD5pqOIU2QSBrF1d Jr4PkqWjDOwZTz9Wogv850r74R38ixe/oMaCMW4JCxB0yzf04r1+uZeph1v0/skzDSv9 YT2/JR8y+LuOIHYz7lNxUPEl6ivKj7jZr4XeiRzFxzPlW7jvm2pUXOVnfNVVO1NqSuaK CCtD+RidAOdbfjkj7skbJ+8E396pd3hJkn5x3e3L9lE4m4K5uDV2AeWSuC0ab5h9StwK 8TZWAH5BN1MAfzphfSorBfiVI3P8BTV/uhnp9ofS0+EBdwzdCXDtkGaMGToHC6k649pP /khw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780675493; x=1781280293; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=usYILwUBQbWiiNoZECkULqc3ZaaMcV77JqRP2clLLDk=; b=YqEuJ+y3kPY7TFDM13D6/L939VDNiPHCD2PPXq3Wj6xsUFYyiQvrCY6p5Prtz+Dm3Y BGaq1iyBuOq9ZGcYAOkwT72Ni+VL0AvyDvjFYMLhrivuQtRRqQQT5u347opWlvhKIHf2 rMPT5b2dodepkvvke+STvE2XKu0TlDAKxrYrtTYO0/zN3VrwCjW1ig3TiZHasDhV1KAV 5p+GKgUEbu2EMUQNvZyiXxfLcjzv2XJl6Nn7SB/dbfgWZGYmREnFdqCCK4jNUp9fUQjp /VrcyuL94Pf1f2AUyaM+QEQB8euZFdc2Cuv4JWJN2wMv5arMlnoPUDKOR72AqJQgGYBh Xqlw== X-Gm-Message-State: AOJu0YypKPP0j+IBGU/ybXaRzXhYDP02G7e2wWUrJbxO/wKwlW8ZuCB0 l51ayWLGSVvCHF6fpq2KUAtOeWoidEmjg1cAtktUAf6FxcKHH+LrOpI5lUyfgw== X-Gm-Gg: Acq92OHJlke5oD6SB0S9XkAgD/8OMdbw///Q/9m0YuB23cUVsxdJNHTbDuMeL7OxLa6 iPu30wW2LK/HkkfGVobyJk8D2bFltHwNMUfqsghT/ICjmFYFXspYGpXaCsXfhnvNST2IhYsUkLS Bn3nZ614CA1P5KY1XXH9Jlum/zobn+Ldlhsn89PFUgzUdA5fH4mg0iLnmnMGlx5urAb88PfjoZG BtechVPi/FiaYtN8xl82FqtKA6YixfECI3L/HEfAc/ic99VeDkh9gxfI/GMKyZwqhzUe3Lp0QeH C6Ny1ejpooOW4KHwlEdgWAUYAgFID5oxv/7opAnnb1KReKu1ADra3Sp7K0XNSxDxAg2hdXUYUBP H6AidrYNoRu2kLRnlw8gtwNcP2oSxqQBh4ElT1NPbhjJYhbF93HwabGAR5pd87p0OQ1No9n0YuH YGe0FeYtOYH0mpK5q9suyCI1IWaEt0kSnmw1mND9HBuCXZPZBn+yhcPbtzFUtodEhQXVC4KrpOk S2FUlRuDmJ9fZTitZqfXQTZ6D6c8kK/DUqkGT+mq1qBckWu+L8mlGe2JPEvqQ== X-Received: by 2002:a05:7022:45a6:b0:136:e42d:2c20 with SMTP id a92af1059eb24-138066ce63cmr1998288c88.16.1780675492579; Fri, 05 Jun 2026 09:04:52 -0700 (PDT) Received: from daehojeong-desktop.mtv.corp.google.com ([2a00:79e0:2e7c:8:16ef:e728:d736:fc92]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-137f5550bcdsm6324267c88.14.2026.06.05.09.04.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 05 Jun 2026 09:04:52 -0700 (PDT) From: Daeho Jeong To: linux-kernel@vger.kernel.org, linux-f2fs-devel@lists.sourceforge.net, kernel-team@android.com Cc: Daeho Jeong Subject: [PATCH] f2fs_io: add dev_alias command for dynamic device aliasing management Date: Fri, 5 Jun 2026 09:04:48 -0700 Message-ID: <20260605160449.888400-1-daeho43@gmail.com> X-Mailer: git-send-email 2.54.0.1032.g2f8565e1d1-goog Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Daeho Jeong This commit adds a new 'dev_alias' command to f2fs_io tool to support dynamic inclusion, exclusion and status querying of device alias ranges. This corresponds to the F2FS_IOC_EXCLUDE_DEV_ALIAS, F2FS_IOC_INCLUDE_DEV_ALIAS and F2FS_IOC_GET_DEV_ALIAS_STATUS ioctls introduced in the kernel. It also updates 'getflags' to support displaying the device aliasing flag. Signed-off-by: Daeho Jeong --- tools/f2fs_io/f2fs_io.c | 55 ++++++++++++++++++++++++++++++++++++++++- tools/f2fs_io/f2fs_io.h | 10 ++++++++ 2 files changed, 64 insertions(+), 1 deletion(-) diff --git a/tools/f2fs_io/f2fs_io.c b/tools/f2fs_io/f2fs_io.c index c977f4d..413a47d 100644 --- a/tools/f2fs_io/f2fs_io.c +++ b/tools/f2fs_io/f2fs_io.c @@ -251,7 +251,8 @@ static void do_set_verity(int argc, char **argv, const = struct cmd_desc *cmd) " casefold\n" \ " compression\n" \ " nocompression\n" \ -" immutable\n" +" immutable\n" \ +" dev_alias\n" =20 static void do_getflags(int argc, char **argv, const struct cmd_desc *cmd) { @@ -317,6 +318,12 @@ static void do_getflags(int argc, char **argv, const s= truct cmd_desc *cmd) printf("immutable"); exist =3D 1; } + if (flag & FS_DEVICE_ALIAS_FL) { + if (exist) + printf(","); + printf("dev_alias"); + exist =3D 1; + } if (!exist) printf("none"); printf("\n"); @@ -2509,6 +2516,51 @@ static void do_test_lookup_perf(int argc, char **arg= v, const struct cmd_desc *cm exit(0); } =20 +#define dev_alias_desc "device alias control" +#define dev_alias_help \ +"f2fs_io dev_alias [include|exclude|status] [file]\n\n" \ +"include, exclude or status a range of device alias given the file\n" + +static void do_dev_alias(int argc, char **argv, const struct cmd_desc *cmd) +{ + int fd, ret; + + if (argc !=3D 3) { + fputs("Excess arguments\n\n", stderr); + fputs(cmd->cmd_help, stderr); + exit(1); + } + + fd =3D xopen(argv[2], O_RDWR, 0); + + if (!strcmp(argv[1], "exclude")) { + ret =3D ioctl(fd, F2FS_IOC_EXCLUDE_DEV_ALIAS); + if (ret < 0) + die_errno("F2FS_IOC_EXCLUDE_DEV_ALIAS failed"); + printf("%s device alias range of %s\n", argv[1], argv[2]); + } else if (!strcmp(argv[1], "include")) { + ret =3D ioctl(fd, F2FS_IOC_INCLUDE_DEV_ALIAS); + if (ret < 0) + die_errno("F2FS_IOC_INCLUDE_DEV_ALIAS failed"); + printf("%s device alias range of %s\n", argv[1], argv[2]); + } else if (!strcmp(argv[1], "status")) { + u32 status =3D 0; + + ret =3D ioctl(fd, F2FS_IOC_GET_DEV_ALIAS_STATUS, &status); + if (ret < 0) + die_errno("F2FS_IOC_GET_DEV_ALIAS_STATUS failed"); + + printf("device alias status of %s: %s\n", argv[2], + status =3D=3D F2FS_DEV_ALIAS_STATUS_EXCLUDED ? "excluded" : "included"); + } else { + fputs("Wrong request type\n\n", stderr); + fputs(cmd->cmd_help, stderr); + exit(1); + } + + exit(0); +} + #define freeze_desc "freeze filesystem" #define freeze_help "f2fs_io freeze [directory_path]\n\n" =20 @@ -2603,6 +2655,7 @@ const struct cmd_desc cmd_list[] =3D { CMD(get_advise), CMD(ioprio), CMD(ftruncate), + CMD(dev_alias), CMD(test_create_perf), CMD(test_lookup_perf), CMD(freeze), diff --git a/tools/f2fs_io/f2fs_io.h b/tools/f2fs_io/f2fs_io.h index b0d4099..9e7e067 100644 --- a/tools/f2fs_io/f2fs_io.h +++ b/tools/f2fs_io/f2fs_io.h @@ -96,6 +96,9 @@ typedef u32 __be32; #define F2FS_IOC_START_ATOMIC_REPLACE _IO(F2FS_IOCTL_MAGIC, 25) #define F2FS_IOC_GET_DEV_ALIAS_FILE _IOR(F2FS_IOCTL_MAGIC, 26, __u32) #define F2FS_IOC_IO_PRIO _IOW(F2FS_IOCTL_MAGIC, 27, __u32) +#define F2FS_IOC_EXCLUDE_DEV_ALIAS _IO(F2FS_IOCTL_MAGIC, 28) +#define F2FS_IOC_INCLUDE_DEV_ALIAS _IO(F2FS_IOCTL_MAGIC, 29) +#define F2FS_IOC_GET_DEV_ALIAS_STATUS _IOR(F2FS_IOCTL_MAGIC, 30, __u32) =20 #ifndef FSCRYPT_POLICY_V1 #define FSCRYPT_POLICY_V1 0 @@ -200,6 +203,10 @@ enum { F2FS_IOPRIO_WRITE =3D 1, /* high write priority */ }; =20 +/* for F2FS_IOC_GET_DEV_ALIAS_STATUS */ +#define F2FS_DEV_ALIAS_STATUS_INCLUDED 0 +#define F2FS_DEV_ALIAS_STATUS_EXCLUDED 1 + #ifndef FS_IMMUTABLE_FL #define FS_IMMUTABLE_FL 0x00000010 /* Immutable file */ #endif @@ -225,6 +232,9 @@ enum { #ifndef FS_CASEFOLD_FL #define FS_CASEFOLD_FL 0x40000000 /* Folder is case insensitive */ #endif +#ifndef FS_DEVICE_ALIAS_FL +#define FS_DEVICE_ALIAS_FL 0x80000000 /* Device aliasing file */ +#endif =20 #ifndef RWF_DONTCACHE #define RWF_DONTCACHE 0x00000080 /* Uncached buffered IO. */ --=20 2.54.0.1032.g2f8565e1d1-goog