[{"id":3673210,"web_url":"http://patchwork.ozlabs.org/comment/3673210/","msgid":"<BCD954BB-DF5A-403D-A368-ADE329D48968@dilger.ca>","list_archive_url":null,"date":"2026-04-03T16:22:50","subject":"Re: [PATCH 2/3] ext4: show inode orphan list detail information","submitter":{"id":4514,"url":"http://patchwork.ozlabs.org/api/people/4514/","name":"Andreas Dilger","email":"adilger@dilger.ca"},"content":"On Apr 3, 2026, at 02:25, Ye Bin <yebin@huaweicloud.com> wrote:\n> \n> From: Ye Bin <yebin10@huawei.com>\n> \n> Some inodes added to the orphan list are due to truncation, while others\n> are due to deletion.Therefore, we printed the information of inode as\n> follows: inode number/i_nlink/i_size/i_blocks/projid/file path. By using\n> this information, it is possible to quickly identify files that have been\n> deleted but are still being referenced.\n\nSince the format of this output is still flexible, I would request that\nit be formatted in a way that is more easily understood and parsed instead\nof just an unformatted list of numbers.\n\nUsing YAML combines both human and machine readable properties, without\na lot of overhead, something like:\n\n- ino: INUM, link: NLINK, size: SIZE, blocks: BLOCKS, proj: PROJID, path: \"PATH\"\n- ino: ...\n- ino: ...\n\nThe PATH should derfinitely be quoted to avoid issues with spaces and\nother special characters in the filename.\n\nCheers, Andreas\n\n> \n> Signed-off-by: Ye Bin <yebin10@huawei.com>\n> ---\n> fs/ext4/orphan.c | 88 ++++++++++++++++++++++++++++++++++++++++++++++--\n> 1 file changed, 86 insertions(+), 2 deletions(-)\n> \n> diff --git a/fs/ext4/orphan.c b/fs/ext4/orphan.c\n> index 1d231aeaf282..272de32d1a47 100644\n> --- a/fs/ext4/orphan.c\n> +++ b/fs/ext4/orphan.c\n> @@ -662,25 +662,108 @@ int ext4_orphan_file_empty(struct super_block *sb)\n> \n> struct ext4_proc_orphan {\n> struct ext4_inode_info cursor;\n> + bool print_title;\n> };\n> \n> -static void *ext4_orphan_seq_start(struct seq_file *seq, loff_t *pos)\n> +static inline bool ext4_is_cursor(struct ext4_inode_info *inode)\n> +{\n> + return (inode->vfs_inode.i_ino == 0);\n> +}\n> +\n> +static struct inode *ext4_list_next(struct list_head *head, struct list_head *p)\n> {\n> + struct ext4_inode_info *inode;\n> +\n> + list_for_each_continue(p, head) {\n> + inode = list_entry(p, typeof(*inode), i_orphan);\n> + if (!ext4_is_cursor(inode))\n> + return &inode->vfs_inode;\n> + }\n> +\n> return NULL;\n> }\n> \n> +static void *ext4_orphan_seq_start(struct seq_file *seq, loff_t *pos)\n> +{\n> + struct ext4_proc_orphan *s = seq->private;\n> + struct super_block *sb = pde_data(file_inode(seq->file));\n> + struct ext4_sb_info *sbi = EXT4_SB(sb);\n> + struct list_head *prev;\n> +\n> + mutex_lock(&sbi->s_orphan_lock);\n> +\n> + if (!*pos) {\n> + prev = &sbi->s_orphan;\n> + } else {\n> + prev = &s->cursor.i_orphan;\n> + if (list_empty(prev))\n> + return NULL;\n> + }\n> +\n> + return ext4_list_next(&sbi->s_orphan, prev);\n> +}\n> +\n> static void *ext4_orphan_seq_next(struct seq_file *seq, void *v, loff_t *pos)\n> {\n> - return NULL;\n> + struct super_block *sb = pde_data(file_inode(seq->file));\n> + struct ext4_sb_info *sbi = EXT4_SB(sb);\n> + struct inode *inode = v;\n> +\n> + ++*pos;\n> +\n> + return ext4_list_next(&sbi->s_orphan, &EXT4_I(inode)->i_orphan);\n> +}\n> +\n> +static void ext4_show_filename(struct seq_file *seq, struct inode *inode)\n> +{\n> + struct dentry *dentry;\n> +\n> + dentry = d_find_alias(inode);\n> + if (!dentry)\n> + dentry = d_find_any_alias(inode);\n> +\n> + if (dentry)\n> + seq_dentry(seq, dentry, \"\\t\\n\\\\\");\n> + else\n> + seq_puts(seq, \"unknown\");\n> +\n> + dput(dentry);\n> + seq_putc(seq, '\\n');\n> }\n> \n> static int ext4_orphan_seq_show(struct seq_file *seq, void *v)\n> {\n> + struct inode *inode = v;\n> + struct ext4_proc_orphan *s = seq->private;\n> +\n> + if (s->print_title) {\n> + seq_puts(seq, \"INO\\tNLINK\\tSIZE\\tBLOCKS\\tPROJID\\tPATH\\n\");\n> + s->print_title = false;\n> + }\n> +\n> + seq_printf(seq, \"%llu\\t%u\\t%llu\\t%llu\\t%u\\t\",\n> +   inode->i_ino, inode->i_nlink,\n> +   i_size_read(inode), inode->i_blocks,\n> +   __kprojid_val(EXT4_I(inode)->i_projid));\n> +\n> + ext4_show_filename(seq, inode);\n> +\n> return 0;\n> }\n> \n> static void ext4_orphan_seq_stop(struct seq_file *seq, void *v)\n> {\n> + struct super_block *sb = pde_data(file_inode(seq->file));\n> + struct ext4_sb_info *sbi = EXT4_SB(sb);\n> + struct inode *inode = v;\n> + struct ext4_proc_orphan *s = seq->private;\n> +\n> + if (inode)\n> + list_move_tail(&s->cursor.i_orphan, &EXT4_I(inode)->i_orphan);\n> + else\n> + list_del_init(&s->cursor.i_orphan);\n> +\n> + mutex_unlock(&sbi->s_orphan_lock);\n> }\n> \n> const struct seq_operations ext4_orphan_seq_ops = {\n> @@ -703,6 +786,7 @@ static int ext4_seq_orphan_open(struct inode *inode, struct file *file)\n> private = m->private;\n> INIT_LIST_HEAD(&private->cursor.i_orphan);\n> private->cursor.vfs_inode.i_ino = 0;\n> + private->print_title = true;\n> }\n> \n> return rc;\n> -- \n> 2.34.1\n> \n\n\nCheers, Andreas","headers":{"Return-Path":"\n <SRS0=IMhH=CC=vger.kernel.org=linux-ext4+bounces-15632-patchwork-incoming=ozlabs.org@ozlabs.org>","X-Original-To":["incoming@patchwork.ozlabs.org","linux-ext4@vger.kernel.org"],"Delivered-To":["patchwork-incoming@legolas.ozlabs.org","patchwork-incoming@ozlabs.org"],"Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=dilger-ca.20251104.gappssmtp.com\n header.i=@dilger-ca.20251104.gappssmtp.com header.a=rsa-sha256\n header.s=20251104 header.b=xAuLhYE7;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=ozlabs.org\n (client-ip=2404:9400:2221:ea00::3; helo=mail.ozlabs.org;\n envelope-from=srs0=imhh=cc=vger.kernel.org=linux-ext4+bounces-15632-patchwork-incoming=ozlabs.org@ozlabs.org;\n receiver=patchwork.ozlabs.org)","gandalf.ozlabs.org;\n arc=pass smtp.remote-ip=172.105.105.114 arc.chain=subspace.kernel.org","gandalf.ozlabs.org;\n dmarc=none (p=none dis=none) header.from=dilger.ca","gandalf.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=dilger-ca.20251104.gappssmtp.com\n header.i=@dilger-ca.20251104.gappssmtp.com header.a=rsa-sha256\n header.s=20251104 header.b=xAuLhYE7;\n\tdkim-atps=neutral","gandalf.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=172.105.105.114; helo=tor.lore.kernel.org;\n envelope-from=linux-ext4+bounces-15632-patchwork-incoming=ozlabs.org@vger.kernel.org;\n receiver=ozlabs.org)","smtp.subspace.kernel.org;\n\tdkim=pass (2048-bit key) header.d=dilger-ca.20251104.gappssmtp.com\n header.i=@dilger-ca.20251104.gappssmtp.com header.b=\"xAuLhYE7\"","smtp.subspace.kernel.org;\n arc=none smtp.client-ip=209.85.214.171","smtp.subspace.kernel.org;\n dmarc=none (p=none dis=none) header.from=dilger.ca","smtp.subspace.kernel.org;\n spf=pass smtp.mailfrom=dilger.ca"],"Received":["from mail.ozlabs.org (mail.ozlabs.org [IPv6:2404:9400:2221:ea00::3])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1 raw public key)\n server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fnPLd6Sfbz1xtJ\n\tfor <incoming@patchwork.ozlabs.org>; Sat, 04 Apr 2026 03:29:13 +1100 (AEDT)","from mail.ozlabs.org (mail.ozlabs.org [IPv6:2404:9400:2221:ea00::3])\n\tby gandalf.ozlabs.org (Postfix) with ESMTP id 4fnPLX69hyz4wTL\n\tfor <incoming@patchwork.ozlabs.org>; Sat, 04 Apr 2026 03:29:08 +1100 (AEDT)","by gandalf.ozlabs.org (Postfix)\n\tid 4fnPLX66Qhz4wTS; Sat, 04 Apr 2026 03:29:08 +1100 (AEDT)","from tor.lore.kernel.org (tor.lore.kernel.org [172.105.105.114])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519)\n\t(No client certificate requested)\n\tby gandalf.ozlabs.org (Postfix) with ESMTPS id 4fnPLT1PQZz4wTL\n\tfor <patchwork-incoming@ozlabs.org>; Sat, 04 Apr 2026 03:29:05 +1100 (AEDT)","from smtp.subspace.kernel.org (conduit.subspace.kernel.org\n [100.90.174.1])\n\tby tor.lore.kernel.org (Postfix) with ESMTP id F04873005AEF\n\tfor <patchwork-incoming@ozlabs.org>; Fri,  3 Apr 2026 16:23:05 +0000 (UTC)","from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id D0E7E3CCFB2;\n\tFri,  3 Apr 2026 16:23:04 +0000 (UTC)","from mail-pl1-f171.google.com (mail-pl1-f171.google.com\n [209.85.214.171])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))\n\t(No client certificate requested)\n\tby smtp.subspace.kernel.org (Postfix) with ESMTPS id D261A37F8BC\n\tfor <linux-ext4@vger.kernel.org>; Fri,  3 Apr 2026 16:23:02 +0000 (UTC)","by mail-pl1-f171.google.com with SMTP id\n d9443c01a7336-2aaf59c4f7cso9499335ad.1\n        for <linux-ext4@vger.kernel.org>;\n Fri, 03 Apr 2026 09:23:02 -0700 (PDT)","from smtpclient.apple (S01068c763f81ca4b.cg.shawcable.net.\n [70.77.200.158])\n        by smtp.gmail.com with ESMTPSA id\n d9443c01a7336-2b27475ff56sm60932935ad.22.2026.04.03.09.23.01\n        (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128);\n        Fri, 03 Apr 2026 09:23:01 -0700 (PDT)"],"ARC-Seal":["i=2; a=rsa-sha256; d=ozlabs.org; s=201707; t=1775233748; cv=pass;\n\tb=HXQlyoaSSDsH3EwjO8G6T+tfKPUphrjKzYUjmkYLB0/OWAiJz/0ME+uqj3eeKHC7C6Xi5x5F0Yr2wCXVb8KETsaOoHCDF96d0JcmrOUhMewK6XkZcBneCWf2d2jI5CRvW5/5iRbM1AxjYGvyBvoIR/JYDEws3LK56jJgcjOhWD+Ur/6cCYpDUEVFHbi0A1C+qi0Ue/64x3D5DQeRGl3IFUaEgOKrMirtNGdUj6X/Dvd/tQLlrU+GjgtYEccwJ08QiiLrS1PkLIdRcjFgMPQ2dkmGcfCCiIrcuX8ut2xIIE5Z5fn1ffuIic7pGQJ1P+f2Iq82OOOQLHmT5+OyIcxkiQ==","i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1775233384; cv=none;\n b=afj0HhPyiFwVakZcjpsUTBY1ZJiLVESwmuzNcu2+L8JofWe9m5xX5AKszWC2eq0yZJyNCK308WbH7hL3EZCma4Vp3FNH22nYrjWBoHqO82UuTLraLiPRB6KZdGpg8OJ1L6LEgaKpVt/+yDFqMjCJHfhJt4seduR48q5O0sQl08Y="],"ARC-Message-Signature":["i=2; a=rsa-sha256; d=ozlabs.org; s=201707;\n\tt=1775233748; c=relaxed/relaxed;\n\tbh=sFcJ2HsUo68s+MMS+uT7cj9w4XwVfLi7pmlIUW+5TVY=;\n\th=Content-Type:Mime-Version:Subject:From:In-Reply-To:Date:Cc:\n\t Message-Id:References:To;\n b=TOXGQu28IEdUkialwepzc2C/PwXjgim+V8AyKCrNTO1wHQ2go86+4BCPHsWQkyQkfvj0n9BC1HrnDZKJtcv3lxdOA+vxHIbNAxmZPjuMDay7fRbyrYTGdDICUKOIwY7f2zmVxwwlc3jR8D8O8fIGs31lNLszHf0fn6D+mDbFoQgPOnYcneKdSM8LPdOhhn0cuqRhr/Cb7///Sc9HyA0omuUpmw8KMdAZ5nfXJL4x2GQoUFg/8nQ9pUzMlSpZz4r+0nT1KEG496cOq1wVSyP230zjaIRmcSKjlN5ngT1s0DP28mvPYasTQ8U/IGUvaiVFbI06QtftULNKAvt1JFxbXQ==","i=1; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1775233384; c=relaxed/simple;\n\tbh=IrrAEGc4B9N8JyZque1YH7OSxbR+s3po/KmbGZq/WAQ=;\n\th=Content-Type:Mime-Version:Subject:From:In-Reply-To:Date:Cc:\n\t Message-Id:References:To;\n b=SBJue3AgYRMbyGvtPH9u/l0Myjh5WC/HXYW7m7HSmMGHgWRdjhUnueBqkyBOg2Z4DwTtfj5FASUJfwqjGudBkZSdyB76fLGKcwKUoaiEVIFW7Ai99xhdPIEMlsC7Kw8+YxCDvbIcMyOM06Ov5kLc3HXdMQf2uVHU/CPqroolLCo="],"ARC-Authentication-Results":["i=2; gandalf.ozlabs.org;\n dmarc=none (p=none dis=none) header.from=dilger.ca; dkim=pass (2048-bit key;\n unprotected) header.d=dilger-ca.20251104.gappssmtp.com\n header.i=@dilger-ca.20251104.gappssmtp.com header.a=rsa-sha256\n header.s=20251104 header.b=xAuLhYE7; dkim-atps=neutral;\n spf=pass (client-ip=172.105.105.114; helo=tor.lore.kernel.org;\n envelope-from=linux-ext4+bounces-15632-patchwork-incoming=ozlabs.org@vger.kernel.org;\n receiver=ozlabs.org) smtp.mailfrom=vger.kernel.org","i=1; smtp.subspace.kernel.org;\n dmarc=none (p=none dis=none) header.from=dilger.ca;\n spf=pass smtp.mailfrom=dilger.ca;\n dkim=pass (2048-bit key) header.d=dilger-ca.20251104.gappssmtp.com\n header.i=@dilger-ca.20251104.gappssmtp.com header.b=xAuLhYE7;\n arc=none smtp.client-ip=209.85.214.171"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n        d=dilger-ca.20251104.gappssmtp.com; s=20251104; t=1775233382;\n x=1775838182; darn=vger.kernel.org;\n        h=to:references:message-id:content-transfer-encoding:cc:date\n         :in-reply-to:from:subject:mime-version:from:to:cc:subject:date\n         :message-id:reply-to;\n        bh=sFcJ2HsUo68s+MMS+uT7cj9w4XwVfLi7pmlIUW+5TVY=;\n        b=xAuLhYE7fy0Z5F16L1ZI9VHkAvpEwkY6ZXonSOkoH2nOL7LWhen9Z5KPIbVylZl1di\n         GgHnzVXmUnKrA8txwxcfna57IIOiL1+pBLuQc6frIGnKKBCjefg4MQSmPfWBb7TlNxHj\n         top0iKyGJs8U+we4MBqRZ4jmzqNz9EVxba/TminE7Lia9h6DN9/BaeLZE6BMCkR2V+2u\n         rDe1lDM4cb1VfZTOaai/pp+DjwAuhdNV9FTZyYAB9pJfiSI8ZlmzL4vMg/lE1AD5b2ES\n         UgZhYQGChZ2c4usCAGxm2MaUA6Vea+4cj4BSD7+DdxRH7f00yDOj+O2EFgzoFiD1C7Of\n         o4KQ==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n        d=1e100.net; s=20251104; t=1775233382; x=1775838182;\n        h=to:references:message-id:content-transfer-encoding:cc:date\n         :in-reply-to:from:subject:mime-version:x-gm-gg:x-gm-message-state\n         :from:to:cc:subject:date:message-id:reply-to;\n        bh=sFcJ2HsUo68s+MMS+uT7cj9w4XwVfLi7pmlIUW+5TVY=;\n        b=f0LMVBwpcj1E3LTHKAggWDKCls74J5+HmREBEfElPxsYz85bON45V9EBhjm5tsM850\n         n4PWUIPC1XZHJ78L4Xpud+U5z+dVbDQ8As5HbH0uZxNom/sBEmBSAePwgp+nmW9xPkZy\n         XWAIIfZfsgjKCL1zQipGkdixxcA2Ik4WwiBguZbMLYw2Cr1x1nfaCHXB0ujZtCz1rVIq\n         f8qfZ7OmP2xQdpCZU3s+aNTnci+RK/uTbcw4Aq3to8dr+VbNO+z9RvIWvMn4fClW/k2F\n         EsYThKVNOZuFp83dfRYRoXSQ5Jec5rR5crsz1nanwQ8sjJboMdNlt+uUzbrWXuZDsv1Z\n         hjDw==","X-Forwarded-Encrypted":"i=1;\n AJvYcCVRlxgXRuXnV0O/DHV/xCqfyGBotW3lgSpzJAAC0nDgWeAxIvH1x6N+p4z+FCN9BuW4/4Uvcu50ghLR@vger.kernel.org","X-Gm-Message-State":"AOJu0Yxifg8XpJT650w9pKUXBA+93EQ6rUB1kchDrVHelgRO4yRmeICA\n\tdh9905qkp7e8LvKSlHZnHMvhppzorH/YBEFVh+9LkSM4HUXRJBT834DQM7xnXgMs5Y4=","X-Gm-Gg":"AeBDieu+zL+f3qXB4xewcZkftkKVPMmOrGhCn3Mzyz5rpRSYNmI3NCbvZ8qKRoaThNl\n\tyUtABq07uVAy0kpxF49tXMLVI5b0UhwqaGQUTzb3wHQg132PycvP38cfdcWBycSvxeWZ/No2696\n\tK4YI8RkEp5VOOxYhlAilTgX9np6tpxKdkrTkP/9yGtzdojplP0kSzGAEsnXkE4ZzIYS1Rev/84h\n\trHuHOPjakesVZL+PvK3O4QsrSmlCzXIB3qw6WD0h3B62l5/Z4Ek99eyNl/CkxHYICWqISHbO/ci\n\tqrzyK5q0QwgFLPkW3OGizI9npVqSdyL4lxC4FWUt91Iu7hUXqMdQYNw2X3T4ok8RKmch41har4n\n\ttIGTMkSMV+21tQcqSK6JfnOdCW5ChJrNCizCCCgMdqTyV+Zks3ProDWmcNgvs0vfHhhkulTV4jD\n\tbSo6PYMNH7M37s8HySscdl+X9/m+49+D6O0kdHY09nKMiRV6zijtVYfgXpZ7/oSChDnOrsCWicz\n\tRW/UA==","X-Received":"by 2002:a17:903:3b84:b0:2b0:6e60:9582 with SMTP id\n d9443c01a7336-2b2816dc813mr39454425ad.18.1775233382286;\n        Fri, 03 Apr 2026 09:23:02 -0700 (PDT)","Content-Type":"text/plain;\n\tcharset=us-ascii","Precedence":"bulk","X-Mailing-List":"linux-ext4@vger.kernel.org","List-Id":"<linux-ext4.vger.kernel.org>","List-Subscribe":"<mailto:linux-ext4+subscribe@vger.kernel.org>","List-Unsubscribe":"<mailto:linux-ext4+unsubscribe@vger.kernel.org>","Mime-Version":"1.0 (Mac OS X Mail 16.0 \\(3864.100.1.1.5\\))","Subject":"Re: [PATCH 2/3] ext4: show inode orphan list detail information","From":"Andreas Dilger <adilger@dilger.ca>","In-Reply-To":"<20260403082507.1882703-3-yebin@huaweicloud.com>","Date":"Fri, 3 Apr 2026 10:22:50 -0600","Cc":"tytso@mit.edu,\n linux-ext4@vger.kernel.org,\n jack@suse.cz","Content-Transfer-Encoding":"quoted-printable","Message-Id":"<BCD954BB-DF5A-403D-A368-ADE329D48968@dilger.ca>","References":"<20260403082507.1882703-1-yebin@huaweicloud.com>\n <20260403082507.1882703-3-yebin@huaweicloud.com>","To":"Ye Bin <yebin@huaweicloud.com>","X-Mailer":"Apple Mail (2.3864.100.1.1.5)","X-Spam-Status":"No, score=-1.1 required=5.0 tests=ARC_SIGNED,ARC_VALID,\n\tDKIM_SIGNED,DKIM_VALID,DMARC_MISSING,HEADER_FROM_DIFFERENT_DOMAINS,\n\tMAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=disabled\n\tversion=4.0.1","X-Spam-Checker-Version":"SpamAssassin 4.0.1 (2024-03-25) on gandalf.ozlabs.org"}}]