linux-fsdevel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* generic_permission() optimization
@ 2024-10-31  4:16 Linus Torvalds
  2024-10-31  6:05 ` Al Viro
  2024-10-31 13:02 ` Christian Brauner
  0 siblings, 2 replies; 42+ messages in thread
From: Linus Torvalds @ 2024-10-31  4:16 UTC (permalink / raw)
  To: Christian Brauner, Al Viro; +Cc: linux-fsdevel

[-- Attachment #1: Type: text/plain, Size: 2119 bytes --]

So call me crazy, but due to entirely unrelated changes (the x86
barrier_nospec optimization) I was doing some profiles to check that
everything looked fine.

And just looking at kernel profiles, I noticed that
"generic_permission()" wasn't entirely in the noise. It was right
there along with strncpy_from_user() etc. Which is a bit surprising,
because it should be really cheap to check basic Unix permissions?

It's all really just "acl_permission_check()" and that code is
actually fairly optimized, except that the whole

        vfsuid = i_uid_into_vfsuid(idmap, inode);

to check whether we're the owner is *not* cheap. It causes a call to
make_vfsuid(), and it's just messy.

Which made me wonder: we already have code that says "if the Group and
Other permission bits are the same wrt the mask we are checking, don't
bother doing the expensive group checks".

Why not extend that to "if any of the UGO choices are ok with the
permissions, why bother looking up ownership at all?"

Now, there is one reason to look up the owner: POSIX ACL's don't
matter to owners, but do matter to others.

But we could check for the cached case of "no POSIX ACLs" very
cheaply, and only do it for that case.

IOW, a patch something like the attached.

No, I didn't really check whether it makes any difference at all. But
my gut feel is that a *lot* of permission checks succeed for any user,
with things like system directories are commonly drwxr-xr-x, so if you
want to check read or execute permissions, it really doesn't matter
whether you are the User, the Group, or Other.

So thus the code does that

        unsigned int all;
        all = mode & (mode >> 3); // combine g into o
        all &= mode >> 6;         // ... and u into o

so now the low three bits of 'all' are the bits that *every* case has
set. And then

        if (!(mask & ~all & 7))
                return 0;

basically says "if what we are asking for is not zero in any of those
bits, we're good".

And it's entirely possible that I'm missing something silly and am
being just stupid. Somebody hit me with the clue bat if so.

               Linus

[-- Attachment #2: patch.diff --]
[-- Type: text/x-patch, Size: 1558 bytes --]

 fs/namei.c | 32 ++++++++++++++++++++++++++++++++
 1 file changed, 32 insertions(+)

diff --git a/fs/namei.c b/fs/namei.c
index 4a4a22a08ac2..6aeabde0ec9f 100644
--- a/fs/namei.c
+++ b/fs/namei.c
@@ -326,6 +326,25 @@ static int check_acl(struct mnt_idmap *idmap,
 	return -EAGAIN;
 }
 
+/*
+ * Very quick optimistic "we know we have no ACL's" check.
+ *
+ * Note that this is purely for ACL_TYPE_ACCESS, and purely
+ * for the "we have cached that there are no ACLs" case.
+ *
+ * If this returns true, we know there are no ACLs. But if
+ * it returns false, we might still not have ACLs (it could
+ * be the is_uncached_acl() case).
+ */
+static inline bool no_acl_inode(struct inode *inode)
+{
+#ifdef CONFIG_FS_POSIX_ACL
+	return likely(!READ_ONCE(inode->i_acl));
+#else
+	return true;
+#endif
+}
+
 /**
  * acl_permission_check - perform basic UNIX permission checking
  * @idmap:	idmap of the mount the inode was found from
@@ -348,6 +367,19 @@ static int acl_permission_check(struct mnt_idmap *idmap,
 	unsigned int mode = inode->i_mode;
 	vfsuid_t vfsuid;
 
+	/*
+	 * Common cheap case: everybody has the requested
+	 * rights, and there are no ACLs to check. No need
+	 * to do any owner/group checks.
+	 */
+	if (no_acl_inode(inode)) {
+		unsigned int all;
+		all = mode & (mode >> 3); // combine g into o
+		all &= mode >> 6;	  // ... and u into o
+		if (!(mask & ~all & 7))
+			return 0;
+	}
+
 	/* Are we the owner? If so, ACL's don't matter */
 	vfsuid = i_uid_into_vfsuid(idmap, inode);
 	if (likely(vfsuid_eq_kuid(vfsuid, current_fsuid()))) {

^ permalink raw reply related	[flat|nested] 42+ messages in thread

* Re: generic_permission() optimization
  2024-10-31  4:16 generic_permission() optimization Linus Torvalds
@ 2024-10-31  6:05 ` Al Viro
  2024-10-31  6:42   ` Linus Torvalds
  2024-10-31 13:02 ` Christian Brauner
  1 sibling, 1 reply; 42+ messages in thread
From: Al Viro @ 2024-10-31  6:05 UTC (permalink / raw)
  To: Linus Torvalds; +Cc: Christian Brauner, linux-fsdevel

On Wed, Oct 30, 2024 at 06:16:22PM -1000, Linus Torvalds wrote:

> +static inline bool no_acl_inode(struct inode *inode)
> +{
> +#ifdef CONFIG_FS_POSIX_ACL
> +	return likely(!READ_ONCE(inode->i_acl));
> +#else
> +	return true;
> +#endif
> +}

Hmm... Shouldn't there be || !IS_POSIXACL(inode) in there?

^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: generic_permission() optimization
  2024-10-31  6:05 ` Al Viro
@ 2024-10-31  6:42   ` Linus Torvalds
  2024-10-31 18:14     ` Linus Torvalds
  0 siblings, 1 reply; 42+ messages in thread
From: Linus Torvalds @ 2024-10-31  6:42 UTC (permalink / raw)
  To: Al Viro; +Cc: Christian Brauner, linux-fsdevel

On Wed, 30 Oct 2024 at 20:05, Al Viro <viro@zeniv.linux.org.uk> wrote:
>
> On Wed, Oct 30, 2024 at 06:16:22PM -1000, Linus Torvalds wrote:
>
> > +static inline bool no_acl_inode(struct inode *inode)
> > +{
> > +#ifdef CONFIG_FS_POSIX_ACL
> > +     return likely(!READ_ONCE(inode->i_acl));
> > +#else
> > +     return true;
> > +#endif
> > +}
>
> Hmm... Shouldn't there be || !IS_POSIXACL(inode) in there?

I was going for "intentionally minimalistic". IOW, this was meant to
be an optimization for a presumed common case, but fall back to the
generic code quickly and simply.

Put another way: is the !IS_POSIXACL() actually a common situation
worth optimizing for?

Do real people actually use "noacl"? My gut feel is that it was one of
those mistakes that some random odd case is using, but not something
worth really optimizing for.

But maybe some common situation ends up using it even without "noacl"
- like /proc, perhaps?

I was kind of hoping that such cases would use 'cache_no_acl()' which
makes that inode->i_acl be NULL. Wouldn't that be the right model
anyway for !IS_POSIXACL()?

Anyway, this is all obviously a "matter of tuning the optimization".
And I don't actually know if it's even worth doing in the first place.

From just the profiles I looked at, that make_vfsuid() conversion
looked like a surprisingly big deal, but obviously this optimistic
fast case wouldn't remove all such cases anyway.

               Linus

^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: generic_permission() optimization
  2024-10-31  4:16 generic_permission() optimization Linus Torvalds
  2024-10-31  6:05 ` Al Viro
@ 2024-10-31 13:02 ` Christian Brauner
  2024-10-31 19:04   ` Linus Torvalds
  1 sibling, 1 reply; 42+ messages in thread
From: Christian Brauner @ 2024-10-31 13:02 UTC (permalink / raw)
  To: Linus Torvalds; +Cc: Al Viro, linux-fsdevel

On Wed, Oct 30, 2024 at 06:16:22PM -1000, Linus Torvalds wrote:
> So call me crazy, but due to entirely unrelated changes (the x86
> barrier_nospec optimization) I was doing some profiles to check that
> everything looked fine.
> 
> And just looking at kernel profiles, I noticed that
> "generic_permission()" wasn't entirely in the noise. It was right
> there along with strncpy_from_user() etc. Which is a bit surprising,
> because it should be really cheap to check basic Unix permissions?
> 
> It's all really just "acl_permission_check()" and that code is
> actually fairly optimized, except that the whole
> 
>         vfsuid = i_uid_into_vfsuid(idmap, inode);
> 
> to check whether we're the owner is *not* cheap. It causes a call to
> make_vfsuid(), and it's just messy.

I assume you ran your benchmark on baremetal so no containers or
idmappings? I find this somewhat suprising. One thing to optimize here
independent of your proposal would be to try and __always_inline
make_vfsuid().

> 
> Which made me wonder: we already have code that says "if the Group and
> Other permission bits are the same wrt the mask we are checking, don't
> bother doing the expensive group checks".
> 
> Why not extend that to "if any of the UGO choices are ok with the
> permissions, why bother looking up ownership at all?"
> 
> Now, there is one reason to look up the owner: POSIX ACL's don't
> matter to owners, but do matter to others.
> 
> But we could check for the cached case of "no POSIX ACLs" very
> cheaply, and only do it for that case.
> 
> IOW, a patch something like the attached.

I think this should work (though I find the permission checking model in
general to be an unruly mess - that's ignoring the fun hardening bits of
it...).

Can you send give me a proper SoB patch? Liberal comments in the code
would be appreciated. I'd like to put this through LTP and some of the
permission tests I've written over the years.

> 
> No, I didn't really check whether it makes any difference at all. But
> my gut feel is that a *lot* of permission checks succeed for any user,
> with things like system directories are commonly drwxr-xr-x, so if you
> want to check read or execute permissions, it really doesn't matter
> whether you are the User, the Group, or Other.
> 
> So thus the code does that
> 
>         unsigned int all;
>         all = mode & (mode >> 3); // combine g into o
>         all &= mode >> 6;         // ... and u into o
> 
> so now the low three bits of 'all' are the bits that *every* case has
> set. And then
> 
>         if (!(mask & ~all & 7))
>                 return 0;
> 
> basically says "if what we are asking for is not zero in any of those
> bits, we're good".
> 
> And it's entirely possible that I'm missing something silly and am
> being just stupid. Somebody hit me with the clue bat if so.
> 
>                Linus



^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: generic_permission() optimization
  2024-10-31  6:42   ` Linus Torvalds
@ 2024-10-31 18:14     ` Linus Torvalds
  2024-10-31 22:28       ` Al Viro
  0 siblings, 1 reply; 42+ messages in thread
From: Linus Torvalds @ 2024-10-31 18:14 UTC (permalink / raw)
  To: Al Viro; +Cc: Christian Brauner, linux-fsdevel

On Wed, 30 Oct 2024 at 20:42, Linus Torvalds
<torvalds@linux-foundation.org> wrote:
>
> I was kind of hoping that such cases would use 'cache_no_acl()' which
> makes that inode->i_acl be NULL. Wouldn't that be the right model
> anyway for !IS_POSIXACL()?

Alternatively, just initialize it to NULL in inode_init_always_gfp(), eg like

-       inode->i_acl = inode->i_default_acl = ACL_NOT_CACHED;
+       inode->i_acl = inode->i_default_acl =
+               (sb->s_flags & SB_POSIXACL) ? ACL_NOT_CACHED : NULL;

or similar?

            Linus

^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: generic_permission() optimization
  2024-10-31 13:02 ` Christian Brauner
@ 2024-10-31 19:04   ` Linus Torvalds
  2024-10-31 22:02     ` Linus Torvalds
  0 siblings, 1 reply; 42+ messages in thread
From: Linus Torvalds @ 2024-10-31 19:04 UTC (permalink / raw)
  To: Christian Brauner; +Cc: Al Viro, linux-fsdevel

On Thu, 31 Oct 2024 at 03:07, Christian Brauner <brauner@kernel.org> wrote:
>
> > It's all really just "acl_permission_check()" and that code is
> > actually fairly optimized, except that the whole
> >
> >         vfsuid = i_uid_into_vfsuid(idmap, inode);
> >
> > to check whether we're the owner is *not* cheap. It causes a call to
> > make_vfsuid(), and it's just messy.
>
> I assume you ran your benchmark on baremetal so no containers or
> idmappings? I find this somewhat suprising.

Yes, I did too, this is the "simple" case for the whole uid mapping
case, and I didn't expect it to be noticeable.

That said, that function is just called a *LOT*. It's not just for
each file opened, it's called for each path component as part of
filename lookup, for that may_lookup_inode_permission ->
do_inode_permission -> generic_permission -> acl_permission_check
path.

>          One thing to optimize here
> independent of your proposal would be to try and __always_inline
> make_vfsuid().

Maybe. Part of the cost seems to be the call, but a bigger part seems
to be the memory accesses around it with that whole
inode->i_sb->s_user_ns chain to load it, and then current->cred->fsuid
to compare against the result.

Anyway, I'll play around with this a bit more and try to get better profiles.

                Linus

^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: generic_permission() optimization
  2024-10-31 19:04   ` Linus Torvalds
@ 2024-10-31 22:02     ` Linus Torvalds
  2024-10-31 22:31       ` Linus Torvalds
  0 siblings, 1 reply; 42+ messages in thread
From: Linus Torvalds @ 2024-10-31 22:02 UTC (permalink / raw)
  To: Christian Brauner; +Cc: Al Viro, linux-fsdevel

On Thu, 31 Oct 2024 at 09:04, Linus Torvalds
<torvalds@linux-foundation.org> wrote:
>
> Maybe. Part of the cost seems to be the call, but a bigger part seems
> to be the memory accesses around it with that whole
> inode->i_sb->s_user_ns chain to load it, and then current->cred->fsuid
> to compare against the result.
>
> Anyway, I'll play around with this a bit more and try to get better profiles.

Ok, so I've done some more profiles, and yeah, the costs seem to be
almost entirely just cache misses.

make_vfsuid() shows up on the profile a bit too, but that seems to
really be literally just "it's called a lot, and takes some I$
misses".

When the profile looks like this:

 10.71 │      push %rbx
 15.44 │      mov  %edx,%eax
  7.88 │      mov  %rdi,%rbx
       │      cmp  $0xffffffff82532a00,%rdi
  9.65 │    ↓ je   3a
... nothing ...
 15.00 │ffffffff813493fa:   pop  %rbx
 41.33 │ffffffff813493fb: → jmp  ffffffff81bb5460 <__x86_return_thunk>

then it really looks like cache misses and some slow indirect branch
resolution for 'ret' (that __x86_return_thunk branch is misleading -
it is rewritten at runtime, but 'perf report' shows the original
object code).

So some of it is presumably due to IBRS on this CPU, and that's a big
part of make_vfsuid() in this bare-metal non-idmapped case. But the
profile does clearly say that in generic_permission(), the problem is
just the cache misses on the superblock accesses and all the extra
work with the credential check, even when the mapping is the identity
mapping.

I still get a fair number of calls to make_vfsuid() even with my patch
- I guess I'll have to look into why. This is my regular "full build
of an already built kernel", which I *expected* to be mainly just a
lot of fstat() calls by 'make' which I would have thought almost
always hit the fast case.

I might have messed something up.

               Linus

^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: generic_permission() optimization
  2024-10-31 18:14     ` Linus Torvalds
@ 2024-10-31 22:28       ` Al Viro
  2024-10-31 22:34         ` Linus Torvalds
  0 siblings, 1 reply; 42+ messages in thread
From: Al Viro @ 2024-10-31 22:28 UTC (permalink / raw)
  To: Linus Torvalds; +Cc: Christian Brauner, linux-fsdevel

On Thu, Oct 31, 2024 at 08:14:59AM -1000, Linus Torvalds wrote:
> On Wed, 30 Oct 2024 at 20:42, Linus Torvalds
> <torvalds@linux-foundation.org> wrote:
> >
> > I was kind of hoping that such cases would use 'cache_no_acl()' which
> > makes that inode->i_acl be NULL. Wouldn't that be the right model
> > anyway for !IS_POSIXACL()?
> 
> Alternatively, just initialize it to NULL in inode_init_always_gfp(), eg like
> 
> -       inode->i_acl = inode->i_default_acl = ACL_NOT_CACHED;
> +       inode->i_acl = inode->i_default_acl =
> +               (sb->s_flags & SB_POSIXACL) ? ACL_NOT_CACHED : NULL;

IIRC, the reason we do not do that was the possibility of mount -o remount,acl
Not that it makes much sense, but it's currently supported and POSIX ACLs
don't make much sense to start with...

Anyway, patch looks sane; I still think that adding || !IS_POSIXACL(inode)
wouldn't hurt (yes, it's a dereference of ->i_sb in case when ->i_acl
is ACL_NOT_CACHED, but we are going to dereference it shortly after
in case we don't take the fast path.  OTOH, that probably matters only
for fairly specific loads - massive accesses to procfs and sysfs, mostly.

^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: generic_permission() optimization
  2024-10-31 22:02     ` Linus Torvalds
@ 2024-10-31 22:31       ` Linus Torvalds
  2024-11-07 19:54         ` Linus Torvalds
  0 siblings, 1 reply; 42+ messages in thread
From: Linus Torvalds @ 2024-10-31 22:31 UTC (permalink / raw)
  To: Christian Brauner; +Cc: Al Viro, linux-fsdevel

On Thu, 31 Oct 2024 at 12:02, Linus Torvalds
<torvalds@linux-foundation.org> wrote:
>
> I still get a fair number of calls to make_vfsuid() even with my patch
> - I guess I'll have to look into why. This is my regular "full build
> of an already built kernel", which I *expected* to be mainly just a
> lot of fstat() calls by 'make' which I would have thought almost
> always hit the fast case.
>
> I might have messed something up.

Added some stats, and on my load (reading email in the web browser,
some xterms and running an allmodconfig kernel build), I get about a
45% hit-rate for the fast-case: out of 44M calls to
generic_permission(), about 20M hit the fast-case path.

So it's noticeable, but not *quite* as noticeable as I would have
hoped for. I suspect there are a fair number of owner calls for write,
and then because permissions are 0644, the code actually has to check
the owner.

              Linus

^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: generic_permission() optimization
  2024-10-31 22:28       ` Al Viro
@ 2024-10-31 22:34         ` Linus Torvalds
  2024-11-01  1:17           ` Linus Torvalds
  0 siblings, 1 reply; 42+ messages in thread
From: Linus Torvalds @ 2024-10-31 22:34 UTC (permalink / raw)
  To: Al Viro; +Cc: Christian Brauner, linux-fsdevel

On Thu, 31 Oct 2024 at 12:28, Al Viro <viro@zeniv.linux.org.uk> wrote:
>
> Anyway, patch looks sane; I still think that adding || !IS_POSIXACL(inode)
> wouldn't hurt (yes, it's a dereference of ->i_sb in case when ->i_acl
> is ACL_NOT_CACHED, but we are going to dereference it shortly after
> in case we don't take the fast path.  OTOH, that probably matters only
> for fairly specific loads - massive accesses to procfs and sysfs, mostly.

Yeah, so the reason I'd like to avoid it is exactly that the i_sb
accesses are the ones that show up in profiles.

So I'd rather start with just the cheap inode-only "ACL is clearly not
there" check, and later if we find that the ACL_NOT_CACHED case is
problematic do we look at that.

           Linus

^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: generic_permission() optimization
  2024-10-31 22:34         ` Linus Torvalds
@ 2024-11-01  1:17           ` Linus Torvalds
  2024-11-01  1:27             ` Al Viro
  2024-11-01 13:15             ` Christian Brauner
  0 siblings, 2 replies; 42+ messages in thread
From: Linus Torvalds @ 2024-11-01  1:17 UTC (permalink / raw)
  To: Al Viro; +Cc: Christian Brauner, linux-fsdevel

[-- Attachment #1: Type: text/plain, Size: 1271 bytes --]

On Thu, 31 Oct 2024 at 12:34, Linus Torvalds
<torvalds@linux-foundation.org> wrote:
>
> So I'd rather start with just the cheap inode-only "ACL is clearly not
> there" check, and later if we find that the ACL_NOT_CACHED case is
> problematic do we look at that.

Actually, if I switch the tests around so that I do the permission bit
check first, it becomes very natural to just check IS_POSIXACL() at
the end (where we're about to go to the slow case, which will be
touching i_sb anyway).

Plus I can actually improve code generation by not shifting the mode
bits down into the low bits, but instead spreading the requested
permission bits around.

The "spread bits around" becomes a simple constant multiplication with
just three bits set, and the compiler will actually generate much
better code (you can do it with two consecutive 'lea' instructions).

The expression for this ends up looking a bit like line noise, so a
comment explaining each step is a good idea.

IOW, here's a rewritten patch that does it that way around, and thus
deals with IS_POSIXACL() very naturally and seems to generate quite
good code for me.

Of course, while I actually tested the previous version after sending
it out, this new version is entirely untested. Again.

             Linus

[-- Attachment #2: patch.diff --]
[-- Type: text/x-patch, Size: 1965 bytes --]

 fs/namei.c | 41 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 41 insertions(+)

diff --git a/fs/namei.c b/fs/namei.c
index 4a4a22a08ac2..80f9a14ca9a5 100644
--- a/fs/namei.c
+++ b/fs/namei.c
@@ -326,6 +326,25 @@ static int check_acl(struct mnt_idmap *idmap,
 	return -EAGAIN;
 }
 
+/*
+ * Very quick optimistic "we know we have no ACL's" check.
+ *
+ * Note that this is purely for ACL_TYPE_ACCESS, and purely
+ * for the "we have cached that there are no ACLs" case.
+ *
+ * If this returns true, we know there are no ACLs. But if
+ * it returns false, we might still not have ACLs (it could
+ * be the is_uncached_acl() case).
+ */
+static inline bool no_acl_inode(struct inode *inode)
+{
+#ifdef CONFIG_FS_POSIX_ACL
+	return likely(!READ_ONCE(inode->i_acl));
+#else
+	return true;
+#endif
+}
+
 /**
  * acl_permission_check - perform basic UNIX permission checking
  * @idmap:	idmap of the mount the inode was found from
@@ -348,6 +367,28 @@ static int acl_permission_check(struct mnt_idmap *idmap,
 	unsigned int mode = inode->i_mode;
 	vfsuid_t vfsuid;
 
+	/*
+	 * Common cheap case: everybody has the requested
+	 * rights, and there are no ACLs to check. No need
+	 * to do any owner/group checks in that case.
+	 *
+	 *  - 'mask&7' is the requested permission bit set
+	 *  - multiplying by 0111 spreads them out to all of ugo
+	 *  - '& ~mode' looks for missing inode permission bits
+	 *  - the '!' is for "no missing permissions"
+	 *
+	 * After that, we just need to check that there are no
+	 * ACL's on the inode - do the 'IS_POSIXACL()' check last
+	 * because it will dereference the ->i_sb pointer and we
+	 * want to avoid that if at all possible.
+	 */
+	if (!((mask & 7)*0111 & ~mode)) {
+		if (no_acl_inode(inode))
+			return 0;
+		if (!IS_POSIXACL(inode))
+			return 0;
+	}
+
 	/* Are we the owner? If so, ACL's don't matter */
 	vfsuid = i_uid_into_vfsuid(idmap, inode);
 	if (likely(vfsuid_eq_kuid(vfsuid, current_fsuid()))) {

^ permalink raw reply related	[flat|nested] 42+ messages in thread

* Re: generic_permission() optimization
  2024-11-01  1:17           ` Linus Torvalds
@ 2024-11-01  1:27             ` Al Viro
  2024-11-01 13:15             ` Christian Brauner
  1 sibling, 0 replies; 42+ messages in thread
From: Al Viro @ 2024-11-01  1:27 UTC (permalink / raw)
  To: Linus Torvalds; +Cc: Christian Brauner, linux-fsdevel

On Thu, Oct 31, 2024 at 03:17:18PM -1000, Linus Torvalds wrote:
> On Thu, 31 Oct 2024 at 12:34, Linus Torvalds
> <torvalds@linux-foundation.org> wrote:
> >
> > So I'd rather start with just the cheap inode-only "ACL is clearly not
> > there" check, and later if we find that the ACL_NOT_CACHED case is
> > problematic do we look at that.
> 
> Actually, if I switch the tests around so that I do the permission bit
> check first, it becomes very natural to just check IS_POSIXACL() at
> the end (where we're about to go to the slow case, which will be
> touching i_sb anyway).
> 
> Plus I can actually improve code generation by not shifting the mode
> bits down into the low bits, but instead spreading the requested
> permission bits around.
> 
> The "spread bits around" becomes a simple constant multiplication with
> just three bits set, and the compiler will actually generate much
> better code (you can do it with two consecutive 'lea' instructions).
> 
> The expression for this ends up looking a bit like line noise, so a
> comment explaining each step is a good idea.
> 
> IOW, here's a rewritten patch that does it that way around, and thus
> deals with IS_POSIXACL() very naturally and seems to generate quite
> good code for me.

Acked-by: Al Viro <viro@zeniv.linux.org.uk>

^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: generic_permission() optimization
  2024-11-01  1:17           ` Linus Torvalds
  2024-11-01  1:27             ` Al Viro
@ 2024-11-01 13:15             ` Christian Brauner
  1 sibling, 0 replies; 42+ messages in thread
From: Christian Brauner @ 2024-11-01 13:15 UTC (permalink / raw)
  To: Linus Torvalds; +Cc: Al Viro, linux-fsdevel

On Thu, Oct 31, 2024 at 03:17:18PM -1000, Linus Torvalds wrote:
> On Thu, 31 Oct 2024 at 12:34, Linus Torvalds
> <torvalds@linux-foundation.org> wrote:
> >
> > So I'd rather start with just the cheap inode-only "ACL is clearly not
> > there" check, and later if we find that the ACL_NOT_CACHED case is
> > problematic do we look at that.
> 
> Actually, if I switch the tests around so that I do the permission bit
> check first, it becomes very natural to just check IS_POSIXACL() at
> the end (where we're about to go to the slow case, which will be
> touching i_sb anyway).

Applied.

^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: generic_permission() optimization
  2024-10-31 22:31       ` Linus Torvalds
@ 2024-11-07 19:54         ` Linus Torvalds
  2024-11-07 22:22           ` Mateusz Guzik
  0 siblings, 1 reply; 42+ messages in thread
From: Linus Torvalds @ 2024-11-07 19:54 UTC (permalink / raw)
  To: Christian Brauner; +Cc: Al Viro, linux-fsdevel

So I realize that Christian already applied my patch, but I'm coming
back to this because I figured out why it doesn't work as well as I
thought it would..

On Thu, 31 Oct 2024 at 12:31, Linus Torvalds
<torvalds@linux-foundation.org> wrote:
>
> Added some stats, and on my load (reading email in the web browser,
> some xterms and running an allmodconfig kernel build), I get about a
> 45% hit-rate for the fast-case: out of 44M calls to
> generic_permission(), about 20M hit the fast-case path.

So the 45% hit rate really bothered me, because on the load I was
testing I really thought it should be 100%.

And in fact, sometimes it *was* 100% when I did profiles, and I never
saw the slow case at all. So I saw that odd bimodal behavior where
sometimes about half the accesses went through the slow path, and
sometimes none of them did.

It took me way too long to realize why that was the case:  the quick
"do we have ACL's" test works wonderfully well when the ACL
information is cached, but the cached case isn't always filled in.

For some unfathomable reason I just mindlessly thought that "if the
ACL info isn't filled in, and we will go to the slow case, it now
*will* be filled in, so next time around we'll have it in the cache".

But that was just silly of me. We may never call "check_acl()" at all,
because if we do the lookup as the owner, we never even bother to look
up any ACL information:

        /* Are we the owner? If so, ACL's don't matter */

So next time around, the ACL info *still* won't be filled in, and so
we *still* won't take the fastpath.

End result: that patch is not nearly as effective as I would have
liked. Yes, it actually gets reasonable hit-rates, but the
ACL_NOT_CACHED state ends up being a lot stickier than my original
mental model incorrectly throught it would be.

So the "45% hit rate" was actually on all the successful quick cases
for system directory traversal where I was looking at files as a
non-owner, but all my *own* files wouldn't hit the fast case.

So that old optimization where we don't even bother looking up ACL's
if we are the owner is actually hindering the new optimization from
being effective.

Very annoying. The "don't bother with ACL's if we are the owner" is
definitely a good thing, so I don't want to disable one optimization
just to enable another one.

(Side note: the reason I sometimes saw 100% hit rates on my test was
that a "make install" as root on my kernel tree *would* populate the
ACL caches because now that tree was looked at by a non-owner).

I'll think about this some more. And maybe somebody smarter than me
sees a good solution before I do.

                  Linus

^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: generic_permission() optimization
  2024-11-07 19:54         ` Linus Torvalds
@ 2024-11-07 22:22           ` Mateusz Guzik
  2024-11-07 22:49             ` Linus Torvalds
  0 siblings, 1 reply; 42+ messages in thread
From: Mateusz Guzik @ 2024-11-07 22:22 UTC (permalink / raw)
  To: Linus Torvalds; +Cc: Christian Brauner, Al Viro, linux-fsdevel

On Thu, Nov 07, 2024 at 09:54:36AM -1000, Linus Torvalds wrote:
> On Thu, 31 Oct 2024 at 12:31, Linus Torvalds
> <torvalds@linux-foundation.org> wrote:
> >
> > Added some stats, and on my load (reading email in the web browser,
> > some xterms and running an allmodconfig kernel build), I get about a
> > 45% hit-rate for the fast-case: out of 44M calls to
> > generic_permission(), about 20M hit the fast-case path.
> 
> So the 45% hit rate really bothered me, because on the load I was
> testing I really thought it should be 100%.
> 
> And in fact, sometimes it *was* 100% when I did profiles, and I never
> saw the slow case at all. So I saw that odd bimodal behavior where
> sometimes about half the accesses went through the slow path, and
> sometimes none of them did.
> 
> It took me way too long to realize why that was the case:  the quick
> "do we have ACL's" test works wonderfully well when the ACL
> information is cached, but the cached case isn't always filled in.
> 
> For some unfathomable reason I just mindlessly thought that "if the
> ACL info isn't filled in, and we will go to the slow case, it now
> *will* be filled in, so next time around we'll have it in the cache".
> 
> But that was just silly of me. We may never call "check_acl()" at all,
> because if we do the lookup as the owner, we never even bother to look
> up any ACL information:
> 
>         /* Are we the owner? If so, ACL's don't matter */
> 
> So next time around, the ACL info *still* won't be filled in, and so
> we *still* won't take the fastpath.
> 
> End result: that patch is not nearly as effective as I would have
> liked. Yes, it actually gets reasonable hit-rates, but the
> ACL_NOT_CACHED state ends up being a lot stickier than my original
> mental model incorrectly throught it would be.
> 

How about filesystems maintaing a flag: IOP_EVERYONECANTRAREVERSE?
The name is a keybordfull and not the actual proposal.

Rationale:
To my reading generic_permission gets called for all path components,
where almost all of them just want to check if they can traverse.

So happens for vast majority of real path components the x is there for
*everyone*. Even in case of /home/$user/crap, while the middle dir has x
only for the owner and maybe the group, everything *below* tends to also
be all x.

I just did a kernel build while poking at the state with bpftrace:
bpftrace -e 'kprobe:generic_permission { @[(((struct inode *)arg1)->i_mode & 0x49) == 0x49] = count(); }'

result:
@[0]: 5623736
@[1]: 64867147

iow in 92% of calls everyone had x. Also note this collects calls for
non-traversal, so the real hit ratio is higher so to speak. I don't use
acls here so they were of no consequence anyway btw.

So if a filesystem cares to be faster, when instatianating an inode or
getting setattr called on it it can (re)compute if there is anything
blocking x for anyone. If nothing is in the way it can the flag and
allow link_path_walk to skip everything, otherwise *unset* the flag (as
needed).

This is completely transparent to filesystems which don't participate.

So that would be my proposal, no interest in coding it.

^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: generic_permission() optimization
  2024-11-07 22:22           ` Mateusz Guzik
@ 2024-11-07 22:49             ` Linus Torvalds
  2025-04-12 16:26               ` Mateusz Guzik
  0 siblings, 1 reply; 42+ messages in thread
From: Linus Torvalds @ 2024-11-07 22:49 UTC (permalink / raw)
  To: Mateusz Guzik; +Cc: Christian Brauner, Al Viro, linux-fsdevel

On Thu, 7 Nov 2024 at 12:22, Mateusz Guzik <mjguzik@gmail.com> wrote:
>
> How about filesystems maintaing a flag: IOP_EVERYONECANTRAREVERSE?

It's actually just easier if a filesystem just does

        cache_no_acl(inode);

in its read-inode function if it knows it has no ACL's.

Some filesystems already do that, eg btrfs has

        /*
         * try to precache a NULL acl entry for files that don't have
         * any xattrs or acls
         */
        ....
        if (!maybe_acls)
                cache_no_acl(inode);

in btrfs_read_locked_inode(). If that 'maybe' is just reliable enough,
that's all it takes.

I tried to do the same thing for ext4, and failed miserably, but
that's probably because my logic for "maybe_acls" was broken since I'm
not familiar enough with ext4 at that level, and I made it do just

        /* Initialize the "no ACL's" state for the simple cases */
        if (!ext4_test_inode_state(inode, EXT4_STATE_XATTR) && !ei->i_file_acl)
                cache_no_acl(inode);

which doesn't seem to be a strong enough text.

              Linus

^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: generic_permission() optimization
  2024-11-07 22:49             ` Linus Torvalds
@ 2025-04-12 16:26               ` Mateusz Guzik
  2025-04-12 20:22                 ` Linus Torvalds
  2025-04-12 21:52                 ` generic_permission() optimization Theodore Ts'o
  0 siblings, 2 replies; 42+ messages in thread
From: Mateusz Guzik @ 2025-04-12 16:26 UTC (permalink / raw)
  To: Linus Torvalds
  Cc: Christian Brauner, Al Viro, linux-fsdevel, Jan Kara,
	Ext4 Developers List

On Thu, Nov 7, 2024 at 11:49 PM Linus Torvalds
<torvalds@linux-foundation.org> wrote:
>
> On Thu, 7 Nov 2024 at 12:22, Mateusz Guzik <mjguzik@gmail.com> wrote:
> >
> > How about filesystems maintaing a flag: IOP_EVERYONECANTRAREVERSE?
>
> It's actually just easier if a filesystem just does
>
>         cache_no_acl(inode);
>
> in its read-inode function if it knows it has no ACL's.
>
> Some filesystems already do that, eg btrfs has
>
>         /*
>          * try to precache a NULL acl entry for files that don't have
>          * any xattrs or acls
>          */
>         ....
>         if (!maybe_acls)
>                 cache_no_acl(inode);
>
> in btrfs_read_locked_inode(). If that 'maybe' is just reliable enough,
> that's all it takes.
>
> I tried to do the same thing for ext4, and failed miserably, but
> that's probably because my logic for "maybe_acls" was broken since I'm
> not familiar enough with ext4 at that level, and I made it do just
>
>         /* Initialize the "no ACL's" state for the simple cases */
>         if (!ext4_test_inode_state(inode, EXT4_STATE_XATTR) && !ei->i_file_acl)
>                 cache_no_acl(inode);
>
> which doesn't seem to be a strong enough text.
>

[ roping in ext4 people ]

I plopped your snippet towards the end of __ext4_iget:

diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
index 4008551bbb2d..34189d85e363 100644
--- a/fs/ext4/inode.c
+++ b/fs/ext4/inode.c
@@ -5071,7 +5071,12 @@ struct inode *__ext4_iget(struct super_block
*sb, unsigned long ino,
                goto bad_inode;
        }

+       /* Initialize the "no ACL's" state for the simple cases */
+       if (!ext4_test_inode_state(inode, EXT4_STATE_XATTR) && !ei->i_file_acl)
+               cache_no_acl(inode);
+
        brelse(iloc.bh);

bpftrace over a kernel build shows almost everything is sorted out:
 bpftrace -e 'kprobe:security_inode_permission { @[((struct inode
*)arg0)->i_acl] = count(); }'

@[0xffffffffffffffff]: 23810
@[0x0]: 65984202

That's just shy of 66 mln calls where the acls were explicitly set to
empty, compared to less than 24k where it was the default "uncached"
state.

So indeed *something* is missed, but the patch does cover almost everything.

Perhaps the ext4 guys would chime in and see it through? :)

The context is speeding path lookup by avoiding some of the branches
during permission checking.

-- 
Mateusz Guzik <mjguzik gmail.com>

^ permalink raw reply related	[flat|nested] 42+ messages in thread

* Re: generic_permission() optimization
  2025-04-12 16:26               ` Mateusz Guzik
@ 2025-04-12 20:22                 ` Linus Torvalds
  2025-04-14 10:21                   ` Christian Brauner
  2025-04-12 21:52                 ` generic_permission() optimization Theodore Ts'o
  1 sibling, 1 reply; 42+ messages in thread
From: Linus Torvalds @ 2025-04-12 20:22 UTC (permalink / raw)
  To: Mateusz Guzik
  Cc: Christian Brauner, Al Viro, linux-fsdevel, Jan Kara,
	Ext4 Developers List

On Sat, 12 Apr 2025 at 09:26, Mateusz Guzik <mjguzik@gmail.com> wrote:
>
> I plopped your snippet towards the end of __ext4_iget:

That's literally where I did the same thing, except I put it right after the

          brelse(iloc.bh);

line, rather than before as you did.

And it made no difference for me, but I didn't try to figure out why.
Maybe some environment differences? Or maybe I just screwed up my
testing...

As mentioned earlier in the thread, I had this bi-modal distribution
of results, because if I had a load where the *non*-owner of the inode
looked up the pathnames, then the ACL information would get filled in
when the VFS layer would do the lookup, and then once the ACLs were
cached, everything worked beautifully.

But if the only lookups of a path were done by the owner of the inodes
(which is typical for at least my normal kernel build tree - nothing
but my build will look at the files, and they are obviously always
owned by me) then the ACL caches will never be filled because there
will never be any real ACL lookups.

And then rather than doing the nice efficient "no ACLs anywhere, no
need to even look", it ends up having to actually do the vfsuid
comparison for the UID equality check.

Which then does the extra accesses to look up the idmap etc, and is
visible in the profiles due to that whole dance:

        /* Are we the owner? If so, ACL's don't matter */
        vfsuid = i_uid_into_vfsuid(idmap, inode);
        if (likely(vfsuid_eq_kuid(vfsuid, current_fsuid()))) {

even when idmap is 'nop_mnt_idmap' and it is reasonably cheap. Just
because it ends up calling out to different functions and does extra
D$ accesses to the inode and the suberblock (ie i_user_ns() is this

        return inode->i_sb->s_user_ns;

so just to *see* that it's nop_mnt_idmap takes effort.

One improvement might be to cache that 'nop_mnt_idmap' thing in the
inode as a flag.

But it would be even better if the filesystem just initializes the
inode at inode read time to say "I have no ACL's for this inode" and
none of this code will even trigger.

                  Linus

^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: generic_permission() optimization
  2025-04-12 16:26               ` Mateusz Guzik
  2025-04-12 20:22                 ` Linus Torvalds
@ 2025-04-12 21:52                 ` Theodore Ts'o
  2025-04-12 22:36                   ` Linus Torvalds
  1 sibling, 1 reply; 42+ messages in thread
From: Theodore Ts'o @ 2025-04-12 21:52 UTC (permalink / raw)
  To: Mateusz Guzik
  Cc: Linus Torvalds, Christian Brauner, Al Viro, linux-fsdevel,
	Jan Kara, Ext4 Developers List

On Sat, Apr 12, 2025 at 06:26:09PM +0200, Mateusz Guzik wrote:
> > I tried to do the same thing for ext4, and failed miserably, but
> > that's probably because my logic for "maybe_acls" was broken since I'm
> > not familiar enough with ext4 at that level, and I made it do just

Linus, what problems did you run into?

> >         /* Initialize the "no ACL's" state for the simple cases */
> >         if (!ext4_test_inode_state(inode, EXT4_STATE_XATTR) && !ei->i_file_acl)
> >                 cache_no_acl(inode);
> >
> > which doesn't seem to be a strong enough text.

Linus, were you running into false positives or false negatives?  You
said "failed miserably", which seems to imply that you ran into cases
where cache_no_acl() got called when the inode actually had an ACL ---
e.g., a false positive.

That's different from what Mateuz is reporting which is that most
inodes w/o ACL were getting cache_no_acl(), but some cases
cache_no_acl() was't getting called when it should.  That is, a flase
negative:

> bpftrace over a kernel build shows almost everything is sorted out:
>  bpftrace -e 'kprobe:security_inode_permission { @[((struct inode
> *)arg0)->i_acl] = count(); }'
> 
> @[0xffffffffffffffff]: 23810
> @[0x0]: 65984202
> 
> That's just shy of 66 mln calls where the acls were explicitly set to
> empty, compared to less than 24k where it was the default "uncached"
> state.
> 
> So indeed *something* is missed, but the patch does cover almost everything.

So the test which we're talking about:

> diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
> index 4008551bbb2d..34189d85e363 100644
> --- a/fs/ext4/inode.c
> +++ b/fs/ext4/inode.c
> @@ -5071,7 +5071,12 @@ struct inode *__ext4_iget(struct super_block
> *sb, unsigned long ino,
>                 goto bad_inode;
>         }
> 
> +       /* Initialize the "no ACL's" state for the simple cases */
> +       if (!ext4_test_inode_state(inode, EXT4_STATE_XATTR) && !ei->i_file_acl)
> +               cache_no_acl(inode);
> +
>         brelse(iloc.bh);
> 

tests if the inode does not have an extended attribute.  Posix ACL's
are stored as xattr's --- but if there are any extended attributes (or
in some cases, inline data), in order to authoratatively determine
whether there is an ACL or not will require iterating over all of the
extended attributes.  This can be rather heavyweight, so doing it
unconditionally any time we do an iget() is probably not warranted.

Still, if this works 99.99% of the time, given that most peple don't
enable inline_data, and most folks aren't setting extended attributes,
it should be fine.  Of course, given that SELinux's security ID's are
stored as extended attriutes, at that point this optimization won't
work.  But if you are using SELinux, you probably don't care about
performance anyway.  :-)

					- Ted

^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: generic_permission() optimization
  2025-04-12 21:52                 ` generic_permission() optimization Theodore Ts'o
@ 2025-04-12 22:36                   ` Linus Torvalds
  2025-04-12 23:12                     ` Linus Torvalds
  2025-04-12 23:55                     ` Theodore Ts'o
  0 siblings, 2 replies; 42+ messages in thread
From: Linus Torvalds @ 2025-04-12 22:36 UTC (permalink / raw)
  To: Theodore Ts'o
  Cc: Mateusz Guzik, Christian Brauner, Al Viro, linux-fsdevel,
	Jan Kara, Ext4 Developers List

On Sat, 12 Apr 2025 at 14:53, Theodore Ts'o <tytso@mit.edu> wrote:
>
> Linus, what problems did you run into?

So this is a resurrected thread from November last year, and I have
long since paged out the exact details...

But when I did basically the exact patch that Mateusz posted, it
didn't actually change any behavior for me, and I still had roughly
half the lookups done the slow way (I also had a really hacky patch
that literally just counted "has cached ACL vs has not").

It is also entirely possible that I messed something up. My
*assumption* at the time was that I was hitting something like this:

> tests if the inode does not have an extended attribute.  Posix ACL's
> are stored as xattr's --- but if there are any extended attributes (or
> in some cases, inline data), in order to authoratatively determine
> whether there is an ACL or not will require iterating over all of the
> extended attributes.

Indeed. I sent a query to the ext4 list (and I think you) about
whether my test was even the right one.

Also, while I did a "getfattr -dR" to see if there are any *existing*
attributes (and couldn't find any), I also assume that if a file has
ever *had* any attributes, the filesystem may have the attribute block
allocated even if it's now empty.

And I have this memory that some gnome GUI tools used to use extended
attributes for things like file icon caching purposes. I didn't even
know how to sanely check for that.

I assume there's some trivial e2fstools thing to show things like
that, but it needs more ext4 specific knowledge than I have.

                 Linus

^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: generic_permission() optimization
  2025-04-12 22:36                   ` Linus Torvalds
@ 2025-04-12 23:12                     ` Linus Torvalds
  2025-04-12 23:55                     ` Theodore Ts'o
  1 sibling, 0 replies; 42+ messages in thread
From: Linus Torvalds @ 2025-04-12 23:12 UTC (permalink / raw)
  To: Theodore Ts'o
  Cc: Mateusz Guzik, Christian Brauner, Al Viro, linux-fsdevel,
	Jan Kara, Ext4 Developers List

On Sat, 12 Apr 2025 at 15:36, Linus Torvalds
<torvalds@linux-foundation.org> wrote:
>
> Indeed. I sent a query to the ext4 list (and I think you) about
> whether my test was even the right one.

.. I went back to my email archives, and it turns out that I _only_
sent it to you, not to the ext4 lists at all.

Oh well. It was this patch:

  --- a/fs/ext4/inode.c
  +++ b/fs/ext4/inode.c
  @@ -5011,6 +5011,11 @@ struct inode *__ext4_iget(...
        }

        brelse(iloc.bh);
  +
  +     /* Initialize the "no ACL's" state for the simple cases */
  +     if (!ext4_test_inode_state(inode, EXT4_STATE_XATTR) && !ei->i_file_acl)
  +             cache_no_acl(inode);
  +
        unlock_new_inode(inode);
        return inode;

and I think that's pretty much exactly the same patch as the one
Mateusz posted, just one line down (and the line numbers are different
because that patch was from five months ago and there's been some
unrelated changes since.

            Linus

^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: generic_permission() optimization
  2025-04-12 22:36                   ` Linus Torvalds
  2025-04-12 23:12                     ` Linus Torvalds
@ 2025-04-12 23:55                     ` Theodore Ts'o
  2025-04-13  9:41                       ` Mateusz Guzik
  1 sibling, 1 reply; 42+ messages in thread
From: Theodore Ts'o @ 2025-04-12 23:55 UTC (permalink / raw)
  To: Linus Torvalds
  Cc: Mateusz Guzik, Christian Brauner, Al Viro, linux-fsdevel,
	Jan Kara, Ext4 Developers List

On Sat, Apr 12, 2025 at 03:36:00PM -0700, Linus Torvalds wrote:
> Indeed. I sent a query to the ext4 list (and I think you) about
> whether my test was even the right one.

Sorry, I must have not seen that message; at least, I don't have any
memory of it.

> Also, while I did a "getfattr -dR" to see if there are any *existing*
> attributes (and couldn't find any), I also assume that if a file has
> ever *had* any attributes, the filesystem may have the attribute block
> allocated even if it's now empty.

Well, getfattr will only show user xattrs.  It won't show security.*
xattr's that might have been set by SELinux, or a
system.posix_acl_access xattr.

> I assume there's some trivial e2fstools thing to show things like
> that, but it needs more ext4 specific knowledge than I have.

Yes, we can test for this using the debugfs command.  For exaple:

root@kvm-xfstests:~# debugfs /dev/vdc
debugfs 1.47.2-rc1 (28-Nov-2024)
debugfs:  stat <13>
Inode: 13   Type: regular    Mode:  0644   Flags: 0x80000
Generation: 1672288850    Version: 0x00000000:00000003
User:     0   Group:     0   Project:     0   Size: 286
File ACL: 0
Links: 1   Blockcount: 8
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x67faf5d0:30d0b2e4 -- Sat Apr 12 19:22:56 2025
 atime: 0x67faf571:7064bd50 -- Sat Apr 12 19:21:21 2025
 mtime: 0x67faf571:71236aa8 -- Sat Apr 12 19:21:21 2025
crtime: 0x67faf571:7064bd50 -- Sat Apr 12 19:21:21 2025
Size of extra inode fields: 32
Extended attributes:
  system.posix_acl_access (28) = 01 00 00 00 01 00 06 00 02 00 04 00 b7 7a 00 00 04 00 04 00 10 00 04 00 20 00 04 00 
Inode checksum: 0xc8f7f1a7
EXTENTS:
(0):33792

(If you know the pathname instead of the inode number, you can also
give that to debugfs's stat command, e.g., "stat /lost+found")

I tested it with a simple variant of your patch, and seems to do the right
thing.  Mateusz, if you want, try the following patch, and then mount
your test file system with "mount -o debug".  (The test_opt is to
avoid a huge amount of noise on your root file system; you can skip it
if it's more trouble than it's worth.)  The patch has a reversed
seense of the test, so it will print a message for every one where
cache_no_acl *wouldn't* be called.  You casn then use debugfs's "stat
<ino#>" to verify whether it has some kind of extended attribute.

	   	  	     	      - Ted

diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
index f386de8c12f6..3e0ba7c4723a 100644
--- a/fs/ext4/inode.c
+++ b/fs/ext4/inode.c
@@ -5109,6 +5109,11 @@ struct inode *__ext4_iget(struct super_block *sb, unsigned long ino,
 		goto bad_inode;
 	brelse(iloc.bh);
 
+	if (test_opt(sb, DEBUG) &&
+	    (ext4_test_inode_state(inode, EXT4_STATE_XATTR) ||
+	     ei->i_file_acl))
+		ext4_msg(sb, KERN_DEBUG, "has xattr ino %lu", inode->i_ino);
+
 	unlock_new_inode(inode);
 	return inode;
 

^ permalink raw reply related	[flat|nested] 42+ messages in thread

* Re: generic_permission() optimization
  2025-04-12 23:55                     ` Theodore Ts'o
@ 2025-04-13  9:41                       ` Mateusz Guzik
  2025-04-13 12:40                         ` Theodore Ts'o
  0 siblings, 1 reply; 42+ messages in thread
From: Mateusz Guzik @ 2025-04-13  9:41 UTC (permalink / raw)
  To: Theodore Ts'o
  Cc: Linus Torvalds, Christian Brauner, Al Viro, linux-fsdevel,
	Jan Kara, Ext4 Developers List

On Sun, Apr 13, 2025 at 1:55 AM Theodore Ts'o <tytso@mit.edu> wrote:
>
> On Sat, Apr 12, 2025 at 03:36:00PM -0700, Linus Torvalds wrote:
> > Indeed. I sent a query to the ext4 list (and I think you) about
> > whether my test was even the right one.
>
> Sorry, I must have not seen that message; at least, I don't have any
> memory of it.
>
> > Also, while I did a "getfattr -dR" to see if there are any *existing*
> > attributes (and couldn't find any), I also assume that if a file has
> > ever *had* any attributes, the filesystem may have the attribute block
> > allocated even if it's now empty.
>
> Well, getfattr will only show user xattrs.  It won't show security.*
> xattr's that might have been set by SELinux, or a
> system.posix_acl_access xattr.
>
> > I assume there's some trivial e2fstools thing to show things like
> > that, but it needs more ext4 specific knowledge than I have.
>
> Yes, we can test for this using the debugfs command.  For exaple:
>
> root@kvm-xfstests:~# debugfs /dev/vdc
> debugfs 1.47.2-rc1 (28-Nov-2024)
> debugfs:  stat <13>
> Inode: 13   Type: regular    Mode:  0644   Flags: 0x80000
> Generation: 1672288850    Version: 0x00000000:00000003
> User:     0   Group:     0   Project:     0   Size: 286
> File ACL: 0
> Links: 1   Blockcount: 8
> Fragment:  Address: 0    Number: 0    Size: 0
>  ctime: 0x67faf5d0:30d0b2e4 -- Sat Apr 12 19:22:56 2025
>  atime: 0x67faf571:7064bd50 -- Sat Apr 12 19:21:21 2025
>  mtime: 0x67faf571:71236aa8 -- Sat Apr 12 19:21:21 2025
> crtime: 0x67faf571:7064bd50 -- Sat Apr 12 19:21:21 2025
> Size of extra inode fields: 32
> Extended attributes:
>   system.posix_acl_access (28) = 01 00 00 00 01 00 06 00 02 00 04 00 b7 7a 00 00 04 00 04 00 10 00 04 00 20 00 04 00
> Inode checksum: 0xc8f7f1a7
> EXTENTS:
> (0):33792
>
> (If you know the pathname instead of the inode number, you can also
> give that to debugfs's stat command, e.g., "stat /lost+found")
>
> I tested it with a simple variant of your patch, and seems to do the right
> thing.  Mateusz, if you want, try the following patch, and then mount
> your test file system with "mount -o debug".  (The test_opt is to
> avoid a huge amount of noise on your root file system; you can skip it
> if it's more trouble than it's worth.)  The patch has a reversed
> seense of the test, so it will print a message for every one where
> cache_no_acl *wouldn't* be called.  You casn then use debugfs's "stat
> <ino#>" to verify whether it has some kind of extended attribute.
>
>                                       - Ted
>
> diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
> index f386de8c12f6..3e0ba7c4723a 100644
> --- a/fs/ext4/inode.c
> +++ b/fs/ext4/inode.c
> @@ -5109,6 +5109,11 @@ struct inode *__ext4_iget(struct super_block *sb, unsigned long ino,
>                 goto bad_inode;
>         brelse(iloc.bh);
>
> +       if (test_opt(sb, DEBUG) &&
> +           (ext4_test_inode_state(inode, EXT4_STATE_XATTR) ||
> +            ei->i_file_acl))
> +               ext4_msg(sb, KERN_DEBUG, "has xattr ino %lu", inode->i_ino);
> +
>         unlock_new_inode(inode);
>         return inode;
>

This is the rootfs of the thing, so I tried it out with merely
printing it. I got 70 entries at boot time. I don't think figuring out
what this is specifically is warranted (it is on debian though).

With a little bit of cumbersome bpf tracing I verified newly created
dirs (as in mkdir) also have i_acl == NULL, which is the bit important
here (apart from dirs instantiated from storage which now also have
it).

So... I think this is good enough to commit? I had no part in writing
the patch and I'm not an ext4 person, so I'm not submitting it myself.

Ted, you seem fine with the patch, so perhaps you could do the needful(tm)?

The patch is valuable in its own right and is a soft blocker for my
own patch which adds IOP_FAST_MAY_EXEC to skip a bunch of crap work in
inode_permission() which for MAY_EXEC wont be needed [I have not
posted it yet].
-- 
Mateusz Guzik <mjguzik gmail.com>

^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: generic_permission() optimization
  2025-04-13  9:41                       ` Mateusz Guzik
@ 2025-04-13 12:40                         ` Theodore Ts'o
  2025-04-13 12:52                           ` Mateusz Guzik
  2025-11-05 11:50                           ` Mateusz Guzik
  0 siblings, 2 replies; 42+ messages in thread
From: Theodore Ts'o @ 2025-04-13 12:40 UTC (permalink / raw)
  To: Mateusz Guzik
  Cc: Linus Torvalds, Christian Brauner, Al Viro, linux-fsdevel,
	Jan Kara, Ext4 Developers List

On Sun, Apr 13, 2025 at 11:41:47AM +0200, Mateusz Guzik wrote:
> This is the rootfs of the thing, so I tried it out with merely
> printing it. I got 70 entries at boot time. I don't think figuring out
> what this is specifically is warranted (it is on debian though).

Well, can you run:

debugfs -R "stat <INO>" /dev/ROOT_DEV

on say, two or three of the inodes (replace INO with a number, and
ROOT_DEV with the root file system device) and send me the result?
That would be really helpful in understanding what might be going on.

> So... I think this is good enough to commit? I had no part in writing
> the patch and I'm not an ext4 person, so I'm not submitting it myself.
> 
> Ted, you seem fine with the patch, so perhaps you could do the needful(tm)?

Sure, I'll put together a more formal patch and do full QA run and
checking of the code paths, as a supposed a fairly superficial review
and hack.

					- Ted

^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: generic_permission() optimization
  2025-04-13 12:40                         ` Theodore Ts'o
@ 2025-04-13 12:52                           ` Mateusz Guzik
  2025-04-13 17:29                             ` Theodore Ts'o
  2025-11-05 11:50                           ` Mateusz Guzik
  1 sibling, 1 reply; 42+ messages in thread
From: Mateusz Guzik @ 2025-04-13 12:52 UTC (permalink / raw)
  To: Theodore Ts'o
  Cc: Linus Torvalds, Christian Brauner, Al Viro, linux-fsdevel,
	Jan Kara, Ext4 Developers List

[-- Attachment #1: Type: text/plain, Size: 502 bytes --]

On Sun, Apr 13, 2025 at 2:40 PM Theodore Ts'o <tytso@mit.edu> wrote:
>
> On Sun, Apr 13, 2025 at 11:41:47AM +0200, Mateusz Guzik wrote:
> > This is the rootfs of the thing, so I tried it out with merely
> > printing it. I got 70 entries at boot time. I don't think figuring out
> > what this is specifically is warranted (it is on debian though).
>
> Well, can you run:
>
> debugfs -R "stat <INO>" /dev/ROOT_DEV
>

attached full list after boot

-- 
Mateusz Guzik <mjguzik gmail.com>

[-- Attachment #2: ino-dump --]
[-- Type: application/octet-stream, Size: 131481 bytes --]

Inode: 3015355   Type: directory    Mode:  02755   Flags: 0x80000
Generation: 2289563451    Version: 0x00000000:00000006
User:     0   Group:   999   Project:     0   Size: 4096
File ACL: 0
Links: 3   Blockcount: 8
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x64c24208:998aa400 -- Thu Jul 27 06:08:08 2023
 atime: 0x67fb7fb0:616f1038 -- Sun Apr 13 05:11:12 2025
 mtime: 0x64c24208:998aa400 -- Thu Jul 27 06:08:08 2023
crtime: 0x64c2412c:cd1b4360 -- Thu Jul 27 06:04:28 2023
Size of extra inode fields: 32
Extended attributes:
  system.posix_acl_access (28) = 01 00 00 00 01 00 07 00 04 00 05 00 08 00 05 00 04 00 00 00 10 00 05 00 20 00 05 00 
  system.posix_acl_default (28) = 01 00 00 00 01 00 07 00 04 00 05 00 08 00 05 00 04 00 00 00 10 00 05 00 20 00 05 00 
Inode checksum: 0x9eec79a6
EXTENTS:
(0):12066889

Inode: 3014799   Type: directory    Mode:  02755   Flags: 0x81000
Generation: 1258580606    Version: 0x00000000:00000405
User:     0   Group:   999   Project:     0   Size: 16384
File ACL: 0
Links: 2   Blockcount: 32
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x67fb7f3c:53349abc -- Sun Apr 13 05:09:16 2025
 atime: 0x67fb7f3c:55d4a800 -- Sun Apr 13 05:09:16 2025
 mtime: 0x67fb7f3c:53349abc -- Sun Apr 13 05:09:16 2025
crtime: 0x64c24208:998aa400 -- Thu Jul 27 06:08:08 2023
Size of extra inode fields: 32
Extended attributes:
  system.posix_acl_default (28) = 01 00 00 00 01 00 07 00 04 00 05 00 08 00 05 00 04 00 00 00 10 00 05 00 20 00 05 00 
  system.posix_acl_access (28) = 01 00 00 00 01 00 07 00 04 00 05 00 08 00 05 00 04 00 00 00 10 00 05 00 20 00 05 00 
Inode checksum: 0x7779b8f0
EXTENTS:
(0-2):12067054-12067056, (3):12068928

Inode: 3014680   Type: regular    Mode:  0600   Flags: 0x80000
Generation: 1631317178    Version: 0x00000000:000006c4
User:     0   Group:     0   Project:     0   Size: 32
File ACL: 0
Links: 1   Blockcount: 8
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x67fbb14a:e9e60b60 -- Sun Apr 13 08:42:50 2025
 atime: 0x67fbb14a:e7be2c00 -- Sun Apr 13 08:42:50 2025
 mtime: 0x67fbb14a:e95d682c -- Sun Apr 13 08:42:50 2025
crtime: 0x64c24208:8c30ac00 -- Thu Jul 27 06:08:08 2023
Size of extra inode fields: 32
Extended attributes:
  user.random-seed-creditable (1) = "1"
Inode checksum: 0x90e9f981
EXTENTS:
(0):12156928

Inode: 3015058   Type: regular    Mode:  0640   Flags: 0x80000
Generation: 2169160624    Version: 0x00000000:00000004
User:     0   Group:   999   Project:     0   Size: 8388608
File ACL: 0
Links: 1   Blockcount: 16392
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x67fbb237:78fcaf48 -- Sun Apr 13 08:46:47 2025
 atime: 0x67fbb14a:e95d682c -- Sun Apr 13 08:42:50 2025
 mtime: 0x67fbb237:78fcaf48 -- Sun Apr 13 08:46:47 2025
crtime: 0x67fb7f3c:53349abc -- Sun Apr 13 05:09:16 2025
Size of extra inode fields: 32
Extended attributes:
  system.posix_acl_access (28) = 01 00 00 00 01 00 06 00 04 00 05 00 08 00 04 00 04 00 00 00 10 00 04 00 20 00 00 00 
  user.crtime_usec (8) = 21 b1 36 4a a5 32 06 00 
Inode checksum: 0xbc9710a7
EXTENTS:
(ETB0):12092177, (0):12091559, (1-144):310902-311045, (145-285):516352-516492, (286-431):520704-520849, (432-577):521728-521873, (578-715):515072-515209, (716-843):514048-514175, (844-964):520320-520440, (965-1035):519280-519350, (1036[u]):519351, (1037-1068):519352-519383, (1069-1161):520864-520956, (1162-1217):519936-519991, (1218[u]):519992, (1219-1244):519993-520018, (1245-1281):560678-560714, (1282-1285[u]):560715-560718, (1286-1287):560719-560720, (1288-1291[u]):560721-560724, (1292-1294):560725-560727, (1295-1298[u]):560728-560731, (1299-1300):560732-560733, (1301-1304[u]):560734-560737, (1305-1326):560738-560759, (1327-1331[u]):562304-562308, (1332-1351):562309-562328, (1352[u]):562329, (1353-1367):562330-562344, (1368):564060, (1369[u]):564061, (1370-1374):564062-564066, (1375[u]):564067, (1376-1381):564068-564073, (1382[u]):564074, (1383-1387):564075-564079, (1388[u]):564080, (1389-1390):564081-564082, (1391[u]):564083, (1392-1404):564084-564096, (1405-1436[u]):559584-559615, (1437-1467[u]):559348-559378, (1468-1488[u]):561568-561588, (1489-1506[u]):568986-569003, (1507-1523[u]):558534-558550, (1524-1534[u]):564272-564282, (1535-1545[u]):564372-564382, (1546-1556[u]):586058-586068, (1557-1567[u]):586075-586085, (1568-1578[u]):586663-586673, (1579-1589[u]):586731-586741, (1590-1599[u]):564125-564134, (1600-1623[u]):587264-587287, (1624-1804[u]):587303-587483, (1805-1819[u]):587489-587503, (1820-2047[u]):587507-587734

Inode: 3016314   Type: regular    Mode:  0640   Flags: 0x80000
Generation: 3168712975    Version: 0x00000000:00000004
User:     0   Group:   999   Project:     0   Size: 50331648
File ACL: 0
Links: 1   Blockcount: 98312
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x67efe9b8:55183974 -- Fri Apr  4 10:16:24 2025
 atime: 0x67fb7fb0:616f1038 -- Sun Apr 13 05:11:12 2025
 mtime: 0x67efe9b8:44e1d910 -- Fri Apr  4 10:16:24 2025
crtime: 0x67eda506:0c65d400 -- Wed Apr  2 16:58:46 2025
Size of extra inode fields: 32
Extended attributes:
  system.posix_acl_access (28) = 01 00 00 00 01 00 06 00 04 00 05 00 08 00 04 00 04 00 00 00 10 00 04 00 20 00 00 00 
  user.crtime_usec (8) = 09 a9 4f eb d1 31 06 00 
Inode checksum: 0x5c1c968e
EXTENTS:
(ETB0):12091572, (0):12091571, (1-184):391168-391351, (185-324):376320-376459, (325-446):391504-391625, (447-540):391361-391454, (541-618):366513-366590, (619-682):361472-361535, (683-745):393400-393462, (746-804):395258-395316, (805-859):396167-396221, (860-911):406442-406493, (912-962):396422-396472, (963-1001):397568-397606, (1002-1039):395098-395135, (1040-1041):406682-406683, (1042[u]):406684, (1043-1077):406685-406719, (1078-1113):401670-401705, (1114-1149):401820-401855, (1150-1183):396507-396540, (1184-1217):402100-402133, (1218-1251):402321-402354, (1252-1284):406208-406240, (1285-1316):406848-406879, (1317-1348):406976-407007, (1349-1379):400538-400568, (1380-1385):401126-401131, (1386-1387[u]):401132-401133, (1388-1410):401134-401156, (1411-1441):402715-402745, (1442-1471):400685-400714, (1472-1482):393594-393604, (1483[u]):393605, (1484-1500):393606-393622, (1501-1529):399619-399647, (1530-1542):400778-400790, (1543[u]):400791, (1544):400792, (1545[u]):400793, (1546):400794, (1547[u]):400795, (1548):400796, (1549[u]):400797, (1550-1558):400798-400806, (1559-1562):402272-402275, (1563[u]):402276, (1564-1571):402277-402284, (1572[u]):402285, (1573-1587):402286-402300, (1588-1597):393906-393915, (1598[u]):393916, (1599-1609):393917-393927, (1610[u]):393928, (1611-1615):393929-393933, (1616-1635):398353-398372, (1636[u]):398373, (1637-1643):398374-398380, (1644-1670):393988-394014, (1671-1697):394707-394733, (1698-1724):402528-402554, (1725-1751):406347-406373, (1752-1777):396284-396309, (1778-1803):400936-400961, (1804-1828):400587-400611, (1829-1853):402043-402067, (1854-1876):394130-394152, (1877-1899):399358-399380, (1900-1922):400512-400534, (1923-1937):425696-425710, (1938-1950):403337-403349, (1951-1963):408646-408658, (1964-2005):425984-426025, (2006-2047):432447-432488, (2048-4095):7452672-7454719, (4096-6143):7456768-7458815, (6144-6687):7311360-7311903, (6688-6789[u]):7311904-7312005, (6790-6854):7312006-7312070, (6855-6956[u]):7312071-7312172, (6957-7021):7312173-7312237, (7022-7122[u]):7312238-7312338, (7123-7187):7312339-7312403, (7188-7289[u]):7312404-7312505, (7290-7516):7312506-7312732, (7517-7621[u]):7312733-7312837, (7622-7696):7312838-7312912, (7697-7800[u]):7312913-7313016, (7801-7862):7313017-7313078, (7863-7967[u]):7313079-7313183, (7968-8166):7313184-7313382, (8167-8191[u]):7313383-7313407, (8192-8273[u]):11057152-11057233, (8274-8378):11057234-11057338, (8379-8487[u]):11057339-11057447, (8488-8546):11057448-11057506, (8547-8654[u]):11057507-11057614, (8655-10239):11057615-11059199, (10240-11740):9154560-9156060, (11741-12287[u]):9156061-9156607

Inode: 3014865   Type: regular    Mode:  0640   Flags: 0x80000
Generation: 937231974    Version: 0x00000000:00000004
User:     0   Group:   999   Project:     0   Size: 8388608
File ACL: 0
Links: 1   Blockcount: 16392
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x67e76fb4:208d673c -- Fri Mar 28 23:57:40 2025
 atime: 0x67fb7fb0:616f1038 -- Sun Apr 13 05:11:12 2025
 mtime: 0x67e76f16:356a05cc -- Fri Mar 28 23:55:02 2025
crtime: 0x67e58aa2:dd5e15e4 -- Thu Mar 27 13:28:02 2025
Size of extra inode fields: 32
Extended attributes:
  system.posix_acl_access (28) = 01 00 00 00 01 00 06 00 04 00 05 00 08 00 04 00 04 00 00 00 10 00 04 00 20 00 00 00 
  user.crtime_usec (8) = bc a0 ac 46 56 31 06 00 
Inode checksum: 0xbe3243ad
EXTENTS:
(ETB0):12091581, (0):12091530, (1-126):201088-201213, (127-248):207488-207609, (249-366):197994-198111, (367-472):219407-219512, (473-568):200064-200159, (569-653):219936-220020, (654-730):205824-205900, (731-809):233649-233727, (810-919):252759-252868, (920-1013):252162-252255, (1014-1105):251652-251743, (1106-1191):246954-247039, (1192-1196):247854-247858, (1197[u]):247859, (1198):247860, (1199[u]):247861, (1200-1228):247862-247890, (1229[u]):247891, (1230-1271):247892-247933, (1272[u]):247934, (1273):247935, (1274-1278):252657-252661, (1279-1352[u]):252662-252735, (1353-1430[u]):251570-251647, (1431-1507[u]):236723-236799, (1508-1583[u]):252532-252607, (1584-1658[u]):338070-338144, (1659-1738[u]):357054-357133, (1739-1814[u]):350539-350614, (1815-1886[u]):351226-351297, (1887-1948[u]):340416-340477, (1949-2000[u]):340896-340947, (2001-2047[u]):362741-362787

Inode: 3016482   Type: regular    Mode:  0640   Flags: 0x80000
Generation: 4150179141    Version: 0x00000000:00000004
User:     0   Group:   999   Project:     0   Size: 16777216
File ACL: 0
Links: 1   Blockcount: 32776
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x67fa886b:14c0fd44 -- Sat Apr 12 11:36:11 2025
 atime: 0x67fb7fb0:616f1038 -- Sun Apr 13 05:11:12 2025
 mtime: 0x67fa8825:8d342200 -- Sat Apr 12 11:35:01 2025
crtime: 0x67f0c9bc:280de800 -- Sat Apr  5 02:12:12 2025
Size of extra inode fields: 32
Extended attributes:
  system.posix_acl_access (28) = 01 00 00 00 01 00 06 00 04 00 05 00 08 00 04 00 04 00 00 00 10 00 04 00 20 00 00 00 
  user.crtime_usec (8) = 3d 7b 3b e2 01 32 06 00 
Inode checksum: 0x377001c3
EXTENTS:
(ETB0):12092029, (0):12092028, (1-499):438960-439458, (500-1008):556544-557052, (1009-1249):548096-548336, (1250-1281):538593-538624, (1282[u]):538625, (1283-1296):538626-538639, (1297[u]):538640, (1298-1466):538641-538809, (1467[u]):538810, (1468-1484):538811-538827, (1485[u]):538828, (1486):538829, (1487):538187, (1488[u]):538188, (1489):538189, (1490[u]):538190, (1491-1608):538191-538308, (1609[u]):538309, (1610-1667):538310-538367, (1668-1732):550144-550208, (1733[u]):550209, (1734-1739):550210-550215, (1740-1742[u]):550216-550218, (1743-1746):550219-550222, (1747-1748[u]):550223-550224, (1749-1761):550225-550237, (1762-1763[u]):550238-550239, (1764-1794):550240-550270, (1795-1797[u]):550271-550273, (1798-1837):550274-550313, (1838-1902):543345-543409, (1903[u]):543410, (1904-1980):543411-543487, (1981-2000):12225451-12225470, (2001-2012[u]):12225471-12225482, (2013-2019):12225483-12225489, (2020-2030[u]):12225490-12225500, (2031-2037):12225501-12225507, (2038-2047[u]):12225508-12225517, (2048-2049[u]):197380-197381, (2050-2056):197382-197388, (2057-2067[u]):197389-197399, (2068-2087):197400-197419, (2088-2090[u]):197420-197422, (2091-2115):197423-197447, (2116[u]):205666, (2117-2129):205667-205679, (2130[u]):205680, (2131-2137):205681-205687, (2138-2149[u]):205688-205699, (2150-2181):201728-201759, (2182-2212):205569-205599, (2213-2232):203149-203168, (2233-2236[u]):203169-203172, (2237-2242):203173-203178, (2243-2254):205621-205632, (2255[u]):205633, (2256-2270):205634-205648, (2271[u]):205649, (2272-2290):196785-196803, (2291-2294[u]):196804-196807, (2295-2297):196808-196810, (2298-2351):221504-221557, (2352-2356[u]):221558-221562, (2357-2362):221563-221568, (2363-2374):202190-202201, (2375[u]):202202, (2376-2388):202203-202215, (2389-2390):218434-218435, (2391-2394[u]):218436-218439, (2395-2414):218440-218459, (2415):218578, (2416[u]):218579, (2417-2440):218580-218603, (2441-2465):218082-218106, (2466-2474):205738-205746, (2475-2478[u]):205747-205750, (2479-2480):205751-205752, (2481-2485[u]):205753-205757, (2486):205758, (2487-2489[u]):205759-205761, (2490-2491[u]):220814-220815, (2492):220816, (2493-2497[u]):220817-220821, (2498):220822, (2499-2503[u]):220823-220827, (2504-2505):220828-220829, (2506-2509[u]):220830-220833, (2510-2512):220834-220836, (2513-2529):197557-197573, (2530[u]):197574, (2531-2534):197575-197578, (2535-2556):201769-201790, (2557-2578):209158-209179, (2579-2600):218278-218299, (2601-2623):223920-223942, (2624-2631):223841-223848, (2632[u]):223849, (2633-2644):223850-223861, (2645[u]):223862, (2646-2647):202693-202694, (2648-2666[u]):202695-202713, (2667-2687[u]):202730-202750, (2688-2708[u]):209093-209113, (2709-2729[u]):218352-218372, (2730-2749[u]):197352-197371, (2750-2769[u]):199115-199134, (2770-2789[u]):205466-205485, (2790-2809[u]):218060-218079, (2810-2829[u]):223819-223838, (2830-2848[u]):196844-196862, (2849-2867[u]):196997-197015, (2868-2886[u]):198656-198674, (2887-2905[u]):198989-199007, (2906-2924[u]):202816-202834, (2925-2943[u]):209367-209385, (2944-2962[u]):220745-220763, (2963-2980[u]):201948-201965, (2981-2998[u]):202166-202183, (2999-3016[u]):202342-202359, (3017-3034[u]):205330-205347, (3035-3051[u]):218189-218205, (3052-3068[u]):220619-220635, (3069-3084[u]):198711-198726, (3085-3100[u]):202008-202023, (3101-3116[u]):203123-203138, (3117-3132[u]):205361-205376, (3133-3148[u]):205488-205503, (3149-3164[u]):217698-217713, (3165-3180[u]):218124-218139, (3181-3196[u]):218211-218226, (3197-3212[u]):218333-218348, (3213-3228[u]):220298-220313, (3229-3244[u]):220445-220460, (3245-3260[u]):221003-221018, (3261-3276[u]):223900-223915, (3277-3291[u]):196945-196959, (3292-3309[u]):228764-228781, (3310-3324[u]):197460-197474, (3325-3339[u]):198748-198762, (3340-3354[u]):202050-202064, (3355-3369[u]):205448-205462, (3370-3512[u]):273649-273791, (3513-3662[u]):281584-281733, (3663-3806[u]):291172-291315, (3807-4095[u]):3509248-3509536

Inode: 3015946   Type: regular    Mode:  0640   Flags: 0x80000
Generation: 1642631380    Version: 0x00000000:00000004
User:     0   Group:   999   Project:     0   Size: 16777216
File ACL: 0
Links: 1   Blockcount: 32776
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x67e58aa2:dd5e15e4 -- Thu Mar 27 13:28:02 2025
 atime: 0x67fb7fb0:616f1038 -- Sun Apr 13 05:11:12 2025
 mtime: 0x67e589ee:238f9580 -- Thu Mar 27 13:25:02 2025
crtime: 0x67e4d69b:70889800 -- Thu Mar 27 00:39:55 2025
Size of extra inode fields: 32
Extended attributes:
  system.posix_acl_access (28) = 01 00 00 00 01 00 06 00 04 00 05 00 08 00 04 00 04 00 00 00 10 00 04 00 20 00 00 00 
  user.crtime_usec (8) = a3 e0 a5 8b 4b 31 06 00 
Inode checksum: 0x482dc948
EXTENTS:
(ETB0):12092086, (0):12275200, (1-277):84203-84479, (278-545):72692-72959, (546-616):67712-67782, (617-686):79290-79359, (687-752):71380-71445, (753-798):90379-90424, (799-843):86966-87010, (844-886):71226-71268, (887-924):92953-92990, (925-953):66210-66238, (954-982):70816-70844, (983-1011):92721-92749, (1012-1039):69552-69579, (1040-1067):91136-91163, (1068-1093):92521-92546, (1094-1118):90819-90843, (1119-1141):75145-75167, (1142-1163):78728-78749, (1164-1185):90112-90133, (1186-1205):92672-92691, (1206-1224):75883-75901, (1225-1243):90961-90979, (1244-1262):93004-93022, (1263-1279):78600-78616, (1280-1296):79388-79404, (1297-1313):86554-86570, (1314-1329):71182-71197, (1330-1345):79503-79518, (1346-1361):90482-90497, (1362-1377):91100-91115, (1378-1393):91944-91959, (1394-1409):92300-92315, (1410-1425):92923-92938, (1426-1440):78643-78657, (1441-1455):83730-83744, (1456-1470):83922-83936, (1471-1485):86025-86039, (1486-1500):86096-86110, (1501-1515):86588-86602, (1516-1554):117721-117759, (1555-2047):124097-124589, (2048-2573):144434-144959, (2574-2766):134290-134482, (2767-2814[u]):134483-134530, (2815-2817):134531-134533, (2818-2869[u]):134534-134585, (2870-2877):134586-134593, (2878-2910[u]):134594-134626, (2911-2925[u]):154068-154082, (2926-2932):154083-154089, (2933-2980[u]):154090-154137, (2981-2988):154138-154145, (2989-3036[u]):154146-154193, (3037-3067):154194-154224, (3068-3117[u]):154225-154274, (3118-3124):154275-154281, (3125-3175[u]):154282-154332, (3176-3180):154333-154337, (3181-3210[u]):154338-154367, (3211-3230[u]):133376-133395, (3231-3235):133396-133400, (3236-3288[u]):133401-133453, (3289-3290):133454-133455, (3291-3343[u]):133456-133508, (3344-3466):133509-133631, (3467-3547):132210-132290, (3548[u]):132291, (3549-3610):132292-132353, (3611-3722):133136-133247, (3723-3730):141979-141986, (3731-3733[u]):141987-141989, (3734-3742):141990-141998, (3743[u]):141999, (3744-3754):142000-142010, (3755[u]):142011, (3756-3768):142012-142024, (3769[u]):142025, (3770):142026, (3771-3786):159606-159621, (3787[u]):159622, (3788):159623, (3789[u]):159624, (3790):159625, (3791[u]):159626, (3792):159627, (3793[u]):159628, (3794-3805):159629-159640, (3806-3838):146813-146845, (3839-3864):132591-132616, (3865[u]):132617, (3866-3870):132618-132622, (3871-3873):139423-139425, (3874[u]):139426, (3875-3897):139427-139449, (3898-3902):139729-139733, (3903-3923[u]):139734-139754, (3924-3948[u]):139661-139685, (3949-4095[u]):11707984-11708130

Inode: 3016635   Type: regular    Mode:  0640   Flags: 0x80000
Generation: 1184159966    Version: 0x00000000:00000004
User:     0   Group:   999   Project:     0   Size: 8388608
File ACL: 0
Links: 1   Blockcount: 16392
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x67c6445e:bb611dc0 -- Mon Mar  3 19:07:58 2025
 atime: 0x67fb7fb0:616f1038 -- Sun Apr 13 05:11:12 2025
 mtime: 0x67c6436b:4cf43cb0 -- Mon Mar  3 19:03:55 2025
crtime: 0x67c63ab9:7a120000 -- Mon Mar  3 18:26:49 2025
Size of extra inode fields: 32
Extended attributes:
  system.posix_acl_access (28) = 01 00 00 00 01 00 06 00 04 00 05 00 08 00 04 00 04 00 00 00 10 00 04 00 20 00 00 00 
  user.crtime_usec (8) = 70 43 91 7d 78 2f 06 00 
Inode checksum: 0x0cff8fd6
EXTENTS:
(ETB0):12091618, (0):12091617, (1-192):78848-79039, (193-668):91172-91647, (669-1102):125545-125978, (1103-1203):153522-153622, (1204[u]):153623, (1205-1273):153624-153692, (1274-1275[u]):153693-153694, (1276-1279):153695-153698, (1280-1281[u]):153699-153700, (1282-1285):153701-153704, (1286-1287[u]):153705-153706, (1288-1291):153707-153710, (1292-1293[u]):153711-153712, (1294-1308):153713-153727, (1309-1312):177910-177913, (1313-1315[u]):177914-177916, (1316-1395):177917-177996, (1396[u]):177997, (1397-1429):177998-178030, (1430-1433[u]):178031-178034, (1434-1448):178035-178049, (1449-1452[u]):178050-178053, (1453-1454):178054-178055, (1455-1458[u]):178056-178059, (1459-1475):178060-178076, (1476[u]):178077, (1477-1491):178078-178092, (1492[u]):178093, (1493):178094, (1494[u]):178095, (1495):178096, (1496[u]):178097, (1497-1527):178098-178128, (1528[u]):178129, (1529-1559):178130-178160, (1560[u]):178161, (1561-1574):178162-178175, (1575-1596):207093-207114, (1597-1969[u]):207115-207487, (1970-2047[u]):14494-14571

Inode: 3016319   Type: regular    Mode:  0640   Flags: 0x80000
Generation: 779963599    Version: 0x00000000:00000004
User:     0   Group:   999   Project:     0   Size: 8388608
File ACL: 0
Links: 1   Blockcount: 16392
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x67c984c2:aab52c00 -- Thu Mar  6 06:19:30 2025
 atime: 0x67fb7fb0:616f1038 -- Sun Apr 13 05:11:12 2025
 mtime: 0x67c9842e:15dceba4 -- Thu Mar  6 06:17:02 2025
crtime: 0x67c9827a:9c671000 -- Thu Mar  6 06:09:46 2025
Size of extra inode fields: 32
Extended attributes:
  system.posix_acl_access (28) = 01 00 00 00 01 00 06 00 04 00 05 00 08 00 04 00 04 00 00 00 10 00 04 00 20 00 00 00 
  user.crtime_usec (8) = 3a 27 34 8b aa 2f 06 00 
Inode checksum: 0xed21c8a6
EXTENTS:
(ETB0):12091826, (0):12091825, (1-197):201242-201438, (198-375):217092-217269, (376-579):316212-316415, (580-756):301960-302136, (757-930):306907-307080, (931-1034):312161-312264, (1035[u]):312265, (1036):312266, (1037[u]):312267, (1038):312268, (1039[u]):312269, (1040):312270, (1041[u]):312271, (1042):312272, (1043[u]):312273, (1044-1068):312274-312298, (1069[u]):312299, (1070-1075):312300-312305, (1076-1077[u]):312306-312307, (1078-1220[u]):311921-312063, (1221-1290[u]):356205-356274, (1291-1360[u]):356295-356364, (1361-1429[u]):333821-333889, (1430-1498[u]):356654-356722, (1499-1528[u]):346070-346099, (1529-1545[u]):360896-360912, (1546-1609[u]):368554-368617, (1610-1643[u]):363826-363859, (1644-1676[u]):366000-366032, (1677-1706[u]):362424-362453, (1707-1735[u]):378083-378111, (1736-1762[u]):365873-365899, (1763-1788[u]):375974-375999, (1789-1811[u]):377001-377023, (1812-1832[u]):362847-362867, (1833-1853[u]):363357-363377, (1854-1874[u]):363488-363508, (1875-1894[u]):369809-369828, (1895-1913[u]):362686-362704, (1914-1932[u]):371423-371441, (1933-1951[u]):371450-371468, (1952-1969[u]):394015-394032, (1970-1998[u]):431233-431261, (1999-2047[u]):12551103-12551151

Inode: 3015166   Type: regular    Mode:  0640   Flags: 0x80000
Generation: 4181066080    Version: 0x00000000:00000004
User:     0   Group:   999   Project:     0   Size: 16777216
File ACL: 0
Links: 1   Blockcount: 32776
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x67e4155b:2cea1f30 -- Wed Mar 26 10:55:23 2025
 atime: 0x67fb7fb0:616f1038 -- Sun Apr 13 05:11:12 2025
 mtime: 0x67e412ee:0e68ff54 -- Wed Mar 26 10:45:02 2025
crtime: 0x67dc5e48:2160ec00 -- Thu Mar 20 14:28:24 2025
Size of extra inode fields: 32
Extended attributes:
  system.posix_acl_access (28) = 01 00 00 00 01 00 06 00 04 00 05 00 08 00 04 00 04 00 00 00 10 00 04 00 20 00 00 00 
  user.crtime_usec (8) = f5 58 a0 4d ca 30 06 00 
Inode checksum: 0xa5230ebe
EXTENTS:
(ETB0):12091534, (0):12091492, (1-1203):114689-115891, (1204-1369):144979-145144, (1370[u]):145145, (1371-1642):145146-145417, (1643[u]):145418, (1644-1764):145419-145539, (1765[u]):145540, (1766-1844):145541-145619, (1845[u]):145620, (1846-1877):145621-145652, (1878[u]):145653, (1879-1891):145654-145666, (1892-1893[u]):145667-145668, (1894-1908):145669-145683, (1909[u]):145684, (1910-1919):145685-145694, (1920-1946):133248-133274, (1947-1952[u]):133275-133280, (1953-1965):133281-133293, (1966-1970[u]):133294-133298, (1971-1983):133299-133311, (1984-1989[u]):133312-133317, (1990-2002):133318-133330, (2003-2007[u]):133331-133335, (2008-2047):133336-133375, (2048-2070):88822-88844, (2071-2076[u]):88845-88850, (2077-2168):88851-88942, (2169-2172[u]):88943-88946, (2173-2263):88947-89037, (2264[u]):89038, (2265-2318):89039-89092, (2319-2321[u]):89093-89095, (2322-2405):89096-89179, (2406-2407[u]):89180-89181, (2408-2482):89182-89256, (2483-2496[u]):89257-89270, (2497-2530):89271-89304, (2531-2544[u]):89305-89318, (2545-2548):89319-89322, (2549-2562[u]):89323-89336, (2563-2601):89337-89375, (2602-2702):111621-111721, (2703-2706[u]):111722-111725, (2707-2729):111726-111748, (2730-2733[u]):111749-111752, (2734-2821):111753-111840, (2822-2826[u]):111841-111845, (2827):111846, (2828-2832[u]):111847-111851, (2833):111852, (2834-2838[u]):111853-111857, (2839-2840):111858-111859, (2841-2844[u]):111860-111863, (2845-2846):111864-111865, (2847-2850[u]):111866-111869, (2851-2879):111870-111898, (2880[u]):111899, (2881-3003):111900-112022, (3004-3008[u]):112023-112027, (3009-3065):112028-112084, (3066-3070[u]):112085-112089, (3071-3113):112090-112132, (3114-3130):142337-142353, (3131-3135[u]):142354-142358, (3136-3179):142359-142402, (3180[u]):142403, (3181-3188):142404-142411, (3189-3193[u]):142412-142416, (3194-3206):142417-142429, (3207-3624[u]):142430-142847, (3625-4095[u]):134627-135097

Inode: 3015827   Type: regular    Mode:  0640   Flags: 0x80000
Generation: 727091176    Version: 0x00000000:00000004
User:     0   Group:   999   Project:     0   Size: 8388608
File ACL: 0
Links: 1   Blockcount: 16392
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x67c21092:17d78400 -- Fri Feb 28 14:37:54 2025
 atime: 0x67fb7fb0:616f1038 -- Sun Apr 13 05:11:12 2025
 mtime: 0x67c20fe6:30cfa9d8 -- Fri Feb 28 14:35:02 2025
crtime: 0x67c11357:e30a75dc -- Thu Feb 27 20:37:27 2025
Size of extra inode fields: 32
Extended attributes:
  system.posix_acl_access (28) = 01 00 00 00 01 00 06 00 04 00 05 00 08 00 04 00 04 00 00 00 10 00 04 00 20 00 00 00 
  user.crtime_usec (8) = 7c dd 68 d9 29 2f 06 00 
Inode checksum: 0x12f9bc66
EXTENTS:
(ETB0):12091606, (0):12091605, (1-246):59114-59359, (247-487):76288-76528, (488-734):131784-132030, (735-958):145696-145919, (959-1039):176937-177017, (1040[u]):177018, (1041):177019, (1042[u]):177020, (1043):177021, (1044[u]):177022, (1045-1069):177023-177047, (1070[u]):177048, (1071-1173):177049-177151, (1174-1178):260725-260729, (1179-1440[u]):260730-260991, (1441-1682[u]):256876-257117, (1683-1806[u]):261458-261581, (1807-1910[u]):315032-315135, (1911-2010[u]):319296-319395, (2011-2047[u]):361088-361124

Inode: 3016154   Type: regular    Mode:  0640   Flags: 0x80000
Generation: 1864735567    Version: 0x00000000:00000004
User:     0   Group:   999   Project:     0   Size: 8388608
File ACL: 0
Links: 1   Blockcount: 16392
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x67d338c9:06acfc00 -- Thu Mar 13 15:58:01 2025
 atime: 0x67fb7fb0:616f1038 -- Sun Apr 13 05:11:12 2025
 mtime: 0x67d336f0:8d3ec5f0 -- Thu Mar 13 15:50:08 2025
crtime: 0x67d336e3:e27ceda4 -- Thu Mar 13 15:49:55 2025
Size of extra inode fields: 32
Extended attributes:
  system.posix_acl_access (28) = 01 00 00 00 01 00 06 00 04 00 05 00 08 00 04 00 04 00 00 00 10 00 04 00 20 00 00 00 
  user.crtime_usec (8) = d5 c3 4f a0 3e 30 06 00 
Inode checksum: 0x999dc6b6
EXTENTS:
(ETB0):12091608, (0):12092007, (1-471):140627-141097, (472-996):169085-169609, (997-1036):253056-253095, (1037[u]):253096, (1038):253097, (1039[u]):253098, (1040):253099, (1041[u]):253100, (1042):253101, (1043[u]):253102, (1044-1066):253103-253125, (1067[u]):253126, (1068-1089):253127-253148, (1090[u]):253149, (1091):253150, (1092[u]):253151, (1093-1113):253152-253172, (1114-1585[u]):253173-253644, (1586-2047[u]):254336-254797

Inode: 3017814   Type: regular    Mode:  0640   Flags: 0x80000
Generation: 1043443558    Version: 0x00000000:00000004
User:     0   Group:   999   Project:     0   Size: 8388608
File ACL: 0
Links: 1   Blockcount: 16392
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x67c98df7:9f437c00 -- Thu Mar  6 06:58:47 2025
 atime: 0x67fb7fb0:616f1038 -- Sun Apr 13 05:11:12 2025
 mtime: 0x67c98d2a:cf11bbec -- Thu Mar  6 06:55:22 2025
crtime: 0x67c98d07:9c671000 -- Thu Mar  6 06:54:47 2025
Size of extra inode fields: 32
Extended attributes:
  system.posix_acl_access (28) = 01 00 00 00 01 00 06 00 04 00 05 00 08 00 04 00 04 00 00 00 10 00 04 00 20 00 00 00 
  user.crtime_usec (8) = 3c 20 32 2c ab 2f 06 00 
Inode checksum: 0xbeac512a
EXTENTS:
(ETB0):12091522, (0):12091521, (1-167):1522432-1522598, (168-386):1530149-1530367, (387-603):1542144-1542360, (604-864):1566971-1567231, (865-1033):1705598-1705766, (1034[u]):1705767, (1035):1705768, (1036[u]):1705769, (1037):1705770, (1038[u]):1705771, (1039):1705772, (1040[u]):1705773, (1041-1064):1705774-1705797, (1065[u]):1705798, (1066-1070):1705799-1705803, (1071-1122[u]):1705804-1705855, (1123-1393[u]):1775345-1775615, (1394-1651[u]):1837822-1838079, (1652-1909[u]):1843454-1843711, (1910-2047[u]):1838437-1838574

Inode: 3015615   Type: regular    Mode:  0640   Flags: 0x80000
Generation: 1698073953    Version: 0x00000000:00000004
User:     0   Group:   999   Project:     0   Size: 8388608
File ACL: 0
Links: 1   Blockcount: 16392
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x67d7e646:b9034800 -- Mon Mar 17 05:07:18 2025
 atime: 0x67fb7fb0:616f1038 -- Sun Apr 13 05:11:12 2025
 mtime: 0x67d780f5:76dca588 -- Sun Mar 16 21:55:01 2025
crtime: 0x67d7662a:6bc3e400 -- Sun Mar 16 20:00:42 2025
Size of extra inode fields: 32
Extended attributes:
  system.posix_acl_access (28) = 01 00 00 00 01 00 06 00 04 00 05 00 08 00 04 00 04 00 00 00 10 00 04 00 20 00 00 00 
  user.crtime_usec (8) = 80 4f ad 7a 7e 30 06 00 
Inode checksum: 0xfe16e191
EXTENTS:
(ETB0):12091624, (0):12091615, (1-339):200177-200515, (340-667):549374-549701, (668-984):555102-555418, (985-1128):549888-550031, (1129[u]):550032, (1130):550033, (1131[u]):550034, (1132-1201):550035-550104, (1202[u]):550105, (1203-1225):550106-550128, (1226-1240[u]):550129-550143, (1241-1496[u]):597248-597503, (1497-1700[u]):669939-670142, (1701-1893[u]):673022-673214, (1894-2047[u]):663552-663705

Inode: 3016338   Type: regular    Mode:  0640   Flags: 0x80000
Generation: 4173545633    Version: 0x00000000:00000004
User:     0   Group:   999   Project:     0   Size: 8388608
File ACL: 0
Links: 1   Blockcount: 16392
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x67dc5e48:2160ec00 -- Thu Mar 20 14:28:24 2025
 atime: 0x67fb7fb0:616f1038 -- Sun Apr 13 05:11:12 2025
 mtime: 0x67dc5dfd:505fb010 -- Thu Mar 20 14:27:09 2025
crtime: 0x67db3fe5:491ef568 -- Wed Mar 19 18:06:29 2025
Size of extra inode fields: 32
Extended attributes:
  system.posix_acl_access (28) = 01 00 00 00 01 00 06 00 04 00 05 00 08 00 04 00 04 00 00 00 10 00 04 00 20 00 00 00 
  user.crtime_usec (8) = f2 c0 b8 3b b9 30 06 00 
Inode checksum: 0x4a59163c
EXTENTS:
(ETB0):12091535, (0):114688, (1-1115):116215-117329, (1116[u]):117330, (1117-1317):117331-117531, (1318[u]):117532, (1319-1323):117533-117537, (1324[u]):117538, (1325-1329):117539-117543, (1330[u]):117544, (1331-1336):117545-117550, (1337[u]):117551, (1338-1370):117552-117584, (1371[u]):117585, (1372-1441):117586-117655, (1442-1454):113664-113676, (1455[u]):113677, (1456):113678, (1457[u]):113679, (1458-1480):113680-113702, (1481[u]):113703, (1482-1504):113704-113726, (1505[u]):113727, (1506-1548):113728-113770, (1549-1552[u]):113771-113774, (1553-1564):113775-113786, (1565-1568[u]):113787-113790, (1569-1570):113791-113792, (1571-1574[u]):113793-113796, (1575-1607):113797-113829, (1608[u]):113830, (1609-1663):113831-113885, (1664[u]):113886, (1665-1698):113887-113920, (1699[u]):113921, (1700):113922, (1701[u]):113923, (1702-1722):113924-113944, (1723[u]):113945, (1724-1726):113946-113948, (1727[u]):113949, (1728-1733):113950-113955, (1734-2047[u]):113956-114269

Inode: 3017801   Type: regular    Mode:  0640   Flags: 0x80000
Generation: 3164817301    Version: 0x00000000:00000004
User:     0   Group:   999   Project:     0   Size: 8388608
File ACL: 0
Links: 1   Blockcount: 16392
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x67c98c31:a3140c00 -- Thu Mar  6 06:51:13 2025
 atime: 0x67fb7fb0:616f1038 -- Sun Apr 13 05:11:12 2025
 mtime: 0x67c98b38:19e5c39c -- Thu Mar  6 06:47:04 2025
crtime: 0x67c98b14:df6b46a4 -- Thu Mar  6 06:46:28 2025
Size of extra inode fields: 32
Extended attributes:
  system.posix_acl_access (28) = 01 00 00 00 01 00 06 00 04 00 05 00 08 00 04 00 04 00 00 00 10 00 04 00 20 00 00 00 
  user.crtime_usec (8) = d6 40 78 0e ab 2f 06 00 
Inode checksum: 0xa3888db0
EXTENTS:
(ETB0):12091902, (0):12091901, (1-60):775136-775195, (61-118):754661-754718, (119-176):755904-755961, (177-234):756736-756793, (235-292):758400-758457, (293-362):804671-804740, (363-419):793920-793976, (420-476):796224-796280, (477-532):802016-802071, (533-587):804414-804468, (588-641):815360-815413, (642-694):1020960-1021012, (695-745):1018016-1018066, (746-789):1041463-1041506, (790-832):1041293-1041335, (833-873):1041935-1041975, (874-909):1016625-1016660, (910-945):1044084-1044119, (946-981):1044407-1044442, (982-1034):1227008-1227060, (1035[u]):1227061, (1036):1227062, (1037[u]):1227063, (1038):1227064, (1039[u]):1227065, (1040):1227066, (1041[u]):1227067, (1042):1227068, (1043[u]):1227069, (1044-1065):1227070-1227091, (1066[u]):1227092, (1067-1070):1227093-1227096, (1071-1098[u]):1227097-1227124, (1099-1219[u]):1365504-1365624, (1220-1335[u]):1359968-1360083, (1336-1420[u]):1373355-1373439, (1421-1492[u]):1368504-1368575, (1493-1559[u]):1359872-1359938, (1560-1609[u]):1345728-1345777, (1610-1658[u]):1372001-1372049, (1659-1694[u]):1380821-1380856, (1695-1730[u]):1386204-1386239, (1731-1764[u]):1389719-1389752, (1765-1795[u]):1398209-1398239, (1796-1826[u]):1402092-1402122, (1827-1856[u]):1380706-1380735, (1857-1886[u]):1420628-1420657, (1887-1917[u]):1443353-1443383, (1918-2047[u]):1466974-1467103

Inode: 3015033   Type: regular    Mode:  0640   Flags: 0x80000
Generation: 1961626995    Version: 0x00000000:00000004
User:     0   Group:   999   Project:     0   Size: 8388608
File ACL: 0
Links: 1   Blockcount: 16392
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x67d7662a:6bc3e400 -- Sun Mar 16 20:00:42 2025
 atime: 0x67fb7fb0:616f1038 -- Sun Apr 13 05:11:12 2025
 mtime: 0x67d7627d:a90da30c -- Sun Mar 16 19:45:01 2025
crtime: 0x67d755e5:660fb29c -- Sun Mar 16 18:51:17 2025
Size of extra inode fields: 32
Extended attributes:
  system.posix_acl_access (28) = 01 00 00 00 01 00 06 00 04 00 05 00 08 00 04 00 04 00 00 00 10 00 04 00 20 00 00 00 
  user.crtime_usec (8) = 5b 15 6c 82 7d 30 06 00 
Inode checksum: 0xf196f893
EXTENTS:
(ETB0):12091614, (0):12091613, (1-396):69620-70015, (397-763):80370-80736, (764-1040):75425-75701, (1041[u]):75702, (1042-1114):75703-75775, (1115-1274):74240-74399, (1275-1279[u]):74400-74404, (1280):74405, (1281-1285[u]):74406-74410, (1286-1287):74411-74412, (1288-1291[u]):74413-74416, (1292-1293):74417-74418, (1294-1297[u]):74419-74422, (1298-1314):74423-74439, (1315-1318[u]):74440-74443, (1319-1335):74444-74460, (1336[u]):74461, (1337-1347):74462-74472, (1348[u]):74473, (1349):74474, (1350[u]):74475, (1351-1358):74476-74483, (1359[u]):74484, (1360-1362):74485-74487, (1363[u]):74488, (1364-1368):74489-74493, (1369[u]):74494, (1370-1371):74495-74496, (1372):123846, (1373[u]):123847, (1374-1382):123848-123856, (1383-1622[u]):123857-124096, (1623-2047[u]):12255288-12255712

Inode: 3017583   Type: regular    Mode:  0640   Flags: 0x80000
Generation: 905054076    Version: 0x00000000:00000004
User:     0   Group:   999   Project:     0   Size: 8388608
File ACL: 0
Links: 1   Blockcount: 16392
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x67c986b6:c1988c00 -- Thu Mar  6 06:27:50 2025
 atime: 0x67fb7fb0:616f1038 -- Sun Apr 13 05:11:12 2025
 mtime: 0x67c9860d:62f6054c -- Thu Mar  6 06:25:01 2025
crtime: 0x67c985c5:a6e49c00 -- Thu Mar  6 06:23:49 2025
Size of extra inode fields: 32
Extended attributes:
  system.posix_acl_access (28) = 01 00 00 00 01 00 06 00 04 00 05 00 08 00 04 00 04 00 00 00 10 00 04 00 20 00 00 00 
  user.crtime_usec (8) = 4d fe 73 bd aa 2f 06 00 
Inode checksum: 0x122c9bc2
EXTENTS:
(ETB0):12091870, (0):12091869, (1-76):859392-859467, (77-160):1021216-1021299, (161-300):1380976-1381115, (301-424):1381120-1381243, (425-577):1420658-1420810, (578-850):1438703-1438975, (851-1036):1421082-1421267, (1037[u]):1421268, (1038):1421269, (1039[u]):1421270, (1040):1421271, (1041[u]):1421272, (1042):1421273, (1043[u]):1421274, (1044-1064):1421275-1421295, (1065[u]):1421296, (1066-1071):1421297-1421302, (1072-1080[u]):1421303-1421311, (1081-1132[u]):1429044-1429095, (1133-1181[u]):1429453-1429501, (1182-1229[u]):1424848-1424895, (1230-1277[u]):1437230-1437277, (1278-1320[u]):1419111-1419153, (1321-1355[u]):1436918-1436952, (1356-1389[u]):1436404-1436437, (1390-1421[u]):1438434-1438465, (1422-1452[u]):1409929-1409959, (1453-1483[u]):1436444-1436474, (1484-1514[u]):1440735-1440765, (1515-1544[u]):1436347-1436376, (1545-1573[u]):1437142-1437170, (1574-1602[u]):1440573-1440601, (1603-1630[u]):1425115-1425142, (1631-1657[u]):1410277-1410303, (1658-1684[u]):1410998-1411024, (1685-1711[u]):1429135-1429161, (1712-1738[u]):1436746-1436772, (1739-1765[u]):1440011-1440037, (1766-1792[u]):1440328-1440354, (1793-1819[u]):1440603-1440629, (1820-1845[u]):1439551-1439576, (1846-1976[u]):1442685-1442815, (1977-2047[u]):1452925-1452995

Inode: 3016352   Type: regular    Mode:  0640   Flags: 0x80000
Generation: 3186014340    Version: 0x00000000:00000003
User:     0   Group:   999   Project:     0   Size: 41943040
File ACL: 0
Links: 1   Blockcount: 81928
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x67f0c9bc:280de800 -- Sat Apr  5 02:12:12 2025
 atime: 0x67fb7fb0:616f1038 -- Sun Apr 13 05:11:12 2025
 mtime: 0x67efeb69:def4cea4 -- Fri Apr  4 10:23:37 2025
crtime: 0x67efead1:1a4e0038 -- Fri Apr  4 10:21:05 2025
Size of extra inode fields: 32
Extended attributes:
  system.posix_acl_access (28) = 01 00 00 00 01 00 06 00 04 00 05 00 08 00 05 00 04 00 00 00 10 00 04 00 20 00 00 00 
  user.crtime_usec (8) = 64 58 c5 98 f4 31 06 00 
Inode checksum: 0xffb018af
EXTENTS:
(ETB0):12091575, (0):15086080, (1-2047):8278016-8280062, (2048-4095):8280064-8282111, (4096-6288):3555328-3557520, (6289-6411[u]):3557521-3557643, (6412-6455):3557644-3557687, (6456-6578[u]):3557688-3557810, (6579-6621):3557811-3557853, (6622-6744[u]):3557854-3557976, (6745-6788):3557977-3558020, (6789-6911[u]):3558021-3558143, (6912-6955):3558144-3558187, (6956-7077[u]):3558188-3558309, (7078-7121):3558310-3558353, (7122-7244[u]):3558354-3558476, (7245-7289):3558477-3558521, (7290-7412[u]):3558522-3558644, (7413-7456):3558645-3558688, (7457-7578[u]):3558689-3558810, (7579-7622):3558811-3558854, (7623-7745[u]):3558855-3558977, (7746-7789):3558978-3559021, (7790-7912[u]):3559022-3559144, (7913-8191):3559145-3559423, (8192-10221):3610624-3612653, (10222-10239[u]):3612654-3612671

Inode: 3017840   Type: regular    Mode:  0640   Flags: 0x80000
Generation: 2774618042    Version: 0x00000000:00000004
User:     0   Group:   999   Project:     0   Size: 16777216
File ACL: 0
Links: 1   Blockcount: 32776
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x67d060f4:08954400 -- Tue Mar 11 12:12:36 2025
 atime: 0x67fb7fb0:616f1038 -- Sun Apr 13 05:11:12 2025
 mtime: 0x67d0536b:5bb38ca8 -- Tue Mar 11 11:14:51 2025
crtime: 0x67c98e5c:d6f80e64 -- Thu Mar  6 07:00:28 2025
Size of extra inode fields: 32
Extended attributes:
  system.posix_acl_access (28) = 01 00 00 00 01 00 06 00 04 00 05 00 08 00 04 00 04 00 00 00 10 00 04 00 20 00 00 00 
  user.crtime_usec (8) = e7 1f 89 40 ab 2f 06 00 
Inode checksum: 0xec189d14
EXTENTS:
(ETB0):12091526, (0):12091525, (1-158):1835746-1835903, (159-670):2443264-2443775, (671-880):2544961-2545170, (881-1254):2569743-2570116, (1255[u]):2570117, (1256-1377):2570118-2570239, (1378-1525):2640816-2640963, (1526-1653):2641408-2641535, (1654-1678):2664768-2664792, (1679-1681[u]):2664793-2664795, (1682-1696):2664796-2664810, (1697-1700[u]):2664811-2664814, (1701-1702):2664815-2664816, (1703-1706[u]):2664817-2664820, (1707-1743):2664821-2664857, (1744[u]):2664858, (1745-1781):2664859-2664895, (1782-1799):2682484-2682501, (1800[u]):2682502, (1801-1841):2682503-2682543, (1842[u]):2682544, (1843-1856):2682545-2682558, (1857-1858[u]):2682559-2682560, (1859-1886):2682561-2682588, (1887[u]):2682589, (1888-1902):2682590-2682604, (1903-1904[u]):2682605-2682606, (1905-1907):2682607-2682609, (1908-1923):2680064-2680079, (1924[u]):2680080, (1925-1933):2680081-2680089, (1934-1936[u]):2680090-2680092, (1937-1957):2680093-2680113, (1958[u]):2680114, (1959-2023):2680115-2680179, (2024-2041):2734688-2734705, (2042-2047[u]):2734706-2734711, (2048-2055[u]):2596864-2596871, (2056-2059):2596872-2596875, (2060-2073[u]):2596876-2596889, (2074-2078):2596890-2596894, (2079-2092[u]):2596895-2596908, (2093-2096):2596909-2596912, (2097-2110[u]):2596913-2596926, (2111-2201):2596927-2597017, (2202-2206[u]):2597018-2597022, (2207-2245):2597023-2597061, (2246-2249[u]):2597062-2597065, (2250-2274):2597066-2597090, (2275-2289[u]):2597091-2597105, (2290-2346):2597106-2597162, (2347-2350[u]):2597163-2597166, (2351-2363):2597167-2597179, (2364-2368[u]):2597180-2597184, (2369-2422):2597185-2597238, (2423-2427[u]):2597239-2597243, (2428-2438):2597244-2597254, (2439[u]):2597255, (2440-2449):2597256-2597265, (2450-2454[u]):2597266-2597270, (2455):2597271, (2456[u]):2597272, (2457):2597273, (2458[u]):2597274, (2459-2539):2597275-2597355, (2540-4095[u]):2597356-2598911

Inode: 3017490   Type: regular    Mode:  0640   Flags: 0x80000
Generation: 2316130196    Version: 0x00000000:00000004
User:     0   Group:   999   Project:     0   Size: 8388608
File ACL: 0
Links: 1   Blockcount: 16392
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x67c64659:c697c800 -- Mon Mar  3 19:16:25 2025
 atime: 0x67fb7fb0:616f1038 -- Sun Apr 13 05:11:12 2025
 mtime: 0x67c64538:02dc6c00 -- Mon Mar  3 19:11:36 2025
crtime: 0x67c6452f:9fe1caf8 -- Mon Mar  3 19:11:27 2025
Size of extra inode fields: 32
Extended attributes:
  system.posix_acl_access (28) = 01 00 00 00 01 00 06 00 04 00 05 00 08 00 04 00 04 00 00 00 10 00 04 00 20 00 00 00 
  user.crtime_usec (8) = 91 b9 32 1d 79 2f 06 00 
Inode checksum: 0x395dfc09
EXTENTS:
(ETB0):12091603, (0):12091602, (1-175):73553-73727, (176-475):224768-225067, (476-767):214254-214545, (768-1004):205025-205261, (1005-1054[u]):205262-205311, (1055-1296[u]):225389-225630, (1297-1486[u]):240450-240639, (1487-1649[u]):255779-255941, (1650-1810[u]):250079-250239, (1811-1969[u]):272541-272699, (1970-2047[u]):30718-30795

Inode: 3017775   Type: regular    Mode:  0640   Flags: 0x80000
Generation: 2560624844    Version: 0x00000000:00000004
User:     0   Group:   999   Project:     0   Size: 8388608
File ACL: 0
Links: 1   Blockcount: 16392
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x67c98d07:9c671000 -- Thu Mar  6 06:54:47 2025
 atime: 0x67fb7fb0:616f1038 -- Sun Apr 13 05:11:12 2025
 mtime: 0x67c98c53:ab6a3588 -- Thu Mar  6 06:51:47 2025
crtime: 0x67c98c31:a3140c00 -- Thu Mar  6 06:51:13 2025
Size of extra inode fields: 32
Extended attributes:
  system.posix_acl_access (28) = 01 00 00 00 01 00 06 00 04 00 05 00 08 00 04 00 04 00 00 00 10 00 04 00 20 00 00 00 
  user.crtime_usec (8) = 9e 30 71 1f ab 2f 06 00 
Inode checksum: 0x16a5e0ba
EXTENTS:
(ETB0):12091520, (0):12091903, (1-160):1518820-1518979, (161-407):1540425-1540671, (408-714):1568461-1568767, (715-1034):1652720-1653039, (1035[u]):1653040, (1036):1653041, (1037[u]):1653042, (1038):1653043, (1039[u]):1653044, (1040):1653045, (1041[u]):1653046, (1042):1653047, (1043[u]):1653048, (1044-1049):1653049-1653054, (1050-1064):1765421-1765435, (1065[u]):1765436, (1066-1069):1765437-1765440, (1070-1522[u]):1765441-1765893, (1523-1816[u]):1745911-1746204, (1817-2047[u]):1767677-1767907

Inode: 3017523   Type: regular    Mode:  0640   Flags: 0x80000
Generation: 223211438    Version: 0x00000000:00000004
User:     0   Group:   999   Project:     0   Size: 8388608
File ACL: 0
Links: 1   Blockcount: 16392
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x67c97cd0:06fed3a0 -- Thu Mar  6 05:45:36 2025
 atime: 0x67fb7fb0:616f1038 -- Sun Apr 13 05:11:12 2025
 mtime: 0x67c97bb1:85ff84e4 -- Thu Mar  6 05:40:49 2025
crtime: 0x67c843d8:cd0a3c00 -- Wed Mar  5 07:30:16 2025
Size of extra inode fields: 32
Extended attributes:
  system.posix_acl_access (28) = 01 00 00 00 01 00 06 00 04 00 05 00 08 00 04 00 04 00 00 00 10 00 04 00 20 00 00 00 
  user.crtime_usec (8) = e5 d7 43 8d 97 2f 06 00 
Inode checksum: 0x6f1a869f
EXTENTS:
(ETB0):12091794, (0):12091578, (1-233):54807-55039, (234-464):204289-204519, (465-676):248880-249091, (677-970):371474-371767, (971-1122):364264-364415, (1123-1202):361984-362063, (1203[u]):362064, (1204):362065, (1205[u]):362066, (1206-1211):362067-362072, (1212[u]):362073, (1213-1222):362074-362083, (1223[u]):362084, (1224-1233):362085-362094, (1234-1252[u]):362095-362113, (1253-1339[u]):368037-368123, (1340-1425[u]):364637-364722, (1426-1505[u]):370555-370634, (1506-1582[u]):361727-361803, (1583-1656[u]):369500-369573, (1657-1730[u]):374335-374408, (1731-1802[u]):364728-364799, (1803-1868[u]):372704-372769, (1869-1934[u]):372798-372863, (1935-1999[u]):372961-373025, (2000-2047[u]):12555448-12555495

Inode: 3017794   Type: regular    Mode:  0640   Flags: 0x80000
Generation: 805679041    Version: 0x00000000:00000004
User:     0   Group:   999   Project:     0   Size: 8388608
File ACL: 0
Links: 1   Blockcount: 16392
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x67c98b14:df6b46a4 -- Thu Mar  6 06:46:28 2025
 atime: 0x67fb7fb0:616f1038 -- Sun Apr 13 05:11:12 2025
 mtime: 0x67c989e0:6ac36d44 -- Thu Mar  6 06:41:20 2025
crtime: 0x67c989d5:e7be2c00 -- Thu Mar  6 06:41:09 2025
Size of extra inode fields: 32
Extended attributes:
  system.posix_acl_access (28) = 01 00 00 00 01 00 06 00 04 00 05 00 08 00 04 00 04 00 00 00 10 00 04 00 20 00 00 00 
  user.crtime_usec (8) = 95 45 75 fb aa 2f 06 00 
Inode checksum: 0x59423f20
EXTENTS:
(ETB0):12091900, (0):12091875, (1-62):768631-768692, (63-122):757440-757499, (123-191):856960-857028, (192-257):868224-868289, (258-322):865792-865856, (323-386):872320-872383, (387-516):972032-972161, (517-628):971904-972015, (629-716):971776-971863, (717-803):963734-963820, (804-1006):991232-991434, (1007-1089[u]):991435-991517, (1090-1257[u]):1000984-1001151, (1258-1417[u]):1000672-1000831, (1418-1503[u]):999498-999583, (1504-1580[u]):994176-994252, (1581-1648[u]):991676-991743, (1649-1712[u]):1041344-1041407, (1713-1770[u]):1021056-1021113, (1771-1827[u]):1036672-1036728, (1828-1992[u]):1088224-1088388, (1993-2047[u]):12559049-12559103

Inode: 3015242   Type: regular    Mode:  0640   Flags: 0x80000
Generation: 887252949    Version: 0x00000000:00000003
User:     0   Group:   999   Project:     0   Size: 58720256
File ACL: 0
Links: 1   Blockcount: 114696
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x67efea70:2956a538 -- Fri Apr  4 10:19:28 2025
 atime: 0x67fb7fb0:616f1038 -- Sun Apr 13 05:11:12 2025
 mtime: 0x67efea70:2956a538 -- Fri Apr  4 10:19:28 2025
crtime: 0x67efe9b8:55183974 -- Fri Apr  4 10:16:24 2025
Size of extra inode fields: 32
Extended attributes:
  system.posix_acl_access (28) = 01 00 00 00 01 00 06 00 04 00 05 00 08 00 05 00 04 00 00 00 10 00 04 00 20 00 00 00 
  user.crtime_usec (8) = f6 59 09 88 f4 31 06 00 
Inode checksum: 0x4d1e4ca5
EXTENTS:
(ETB0):12091573, (0):4706305, (1-2047):9176979-9179025, (2048-6332):9187328-9191612, (6333-6410[u]):9191613-9191690, (6411-6499):9191691-9191779, (6500-6577[u]):9191780-9191857, (6578-6665):9191858-9191945, (6666-6744[u]):9191946-9192024, (6745-6832):9192025-9192112, (6833-6910[u]):9192113-9192190, (6911-6999):9192191-9192279, (7000-7077[u]):9192280-9192357, (7078-7165):9192358-9192445, (7166-7244[u]):9192446-9192524, (7245-7332):9192525-9192612, (7333-7411[u]):9192613-9192691, (7412-7499):9192692-9192779, (7500-7577[u]):9192780-9192857, (7578-7666):9192858-9192946, (7667-7744[u]):9192947-9193024, (7745-7832):9193025-9193112, (7833-7910[u]):9193113-9193190, (7911-10239):9193191-9195519, (10240-12626):9203712-9206098, (12627-14335[u]):9206099-9207807

Inode: 3017441   Type: regular    Mode:  0640   Flags: 0x80000
Generation: 143287301    Version: 0x00000000:00000004
User:     0   Group:   999   Project:     0   Size: 8388608
File ACL: 0
Links: 1   Blockcount: 16392
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x67c6452f:9fe1caf8 -- Mon Mar  3 19:11:27 2025
 atime: 0x67fb7fb0:616f1038 -- Sun Apr 13 05:11:12 2025
 mtime: 0x67c64463:2dc6c000 -- Mon Mar  3 19:08:03 2025
crtime: 0x67c6445e:bb611dc0 -- Mon Mar  3 19:07:58 2025
Size of extra inode fields: 32
Extended attributes:
  system.posix_acl_access (28) = 01 00 00 00 01 00 06 00 04 00 05 00 08 00 04 00 04 00 00 00 10 00 04 00 20 00 00 00 
  user.crtime_usec (8) = 01 58 bf 10 79 2f 06 00 
Inode checksum: 0xb502532e
EXTENTS:
(ETB0):12091601, (0):12091600, (1-186):41158-41343, (187-372):52038-52223, (373-557):78151-78335, (558-757):131584-131783, (758-1003):200704-200949, (1004-1141[u]):200950-201087, (1142-1471[u]):217270-217599, (1472-1800[u]):209408-209736, (1801-2047[u]):201439-201685

Inode: 3015593   Type: regular    Mode:  0640   Flags: 0x80000
Generation: 66604337    Version: 0x00000000:00000004
User:     0   Group:   999   Project:     0   Size: 8388608
File ACL: 0
Links: 1   Blockcount: 16392
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x67d2f83d:38444c00 -- Thu Mar 13 11:22:37 2025
 atime: 0x67fb7fb0:616f1038 -- Sun Apr 13 05:11:12 2025
 mtime: 0x67d2ef4a:48822938 -- Thu Mar 13 10:44:26 2025
crtime: 0x67d2be33:58b11400 -- Thu Mar 13 07:14:59 2025
Size of extra inode fields: 32
Extended attributes:
  system.posix_acl_access (28) = 01 00 00 00 01 00 06 00 04 00 05 00 08 00 04 00 04 00 00 00 10 00 04 00 20 00 00 00 
  user.crtime_usec (8) = 87 6e bb 6e 37 30 06 00 
Inode checksum: 0x5ea89d46
EXTENTS:
(ETB0):12091931, (0):4032512, (1-516):52988-53503, (517-1043):8941568-8942094, (1044[u]):8942095, (1045-1209):8942096-8942260, (1210[u]):8942261, (1211-1275):8942262-8942326, (1276-1279[u]):8942327-8942330, (1280-1281):8942331-8942332, (1282-1286[u]):8942333-8942337, (1287-1288):8942338-8942339, (1289-1292[u]):8942340-8942343, (1293-1294):8942344-8942345, (1295-1298[u]):8942346-8942349, (1299-1311):8942350-8942362, (1312-1316[u]):8942363-8942367, (1317-1338):8942368-8942389, (1339[u]):8942390, (1340-1343):8942391-8942394, (1344[u]):8942395, (1345):8942396, (1346[u]):8942397, (1347-1354):8942398-8942405, (1355[u]):8942406, (1356-1368):8942407-8942419, (1369[u]):8942420, (1370):8942421, (1371[u]):8942422, (1372-1373):8942423-8942424, (1374[u]):8942425, (1375-1382):8942426-8942433, (1383-2047[u]):8942434-8943098

Inode: 3017534   Type: regular    Mode:  0640   Flags: 0x80000
Generation: 608786307    Version: 0x00000000:00000004
User:     0   Group:   999   Project:     0   Size: 8388608
File ACL: 0
Links: 1   Blockcount: 16392
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x67c65469:d38f872c -- Mon Mar  3 20:16:25 2025
 atime: 0x67fb7fb0:616f1038 -- Sun Apr 13 05:11:12 2025
 mtime: 0x67c653a3:60e05724 -- Mon Mar  3 20:13:07 2025
crtime: 0x67c65174:af79e000 -- Mon Mar  3 20:03:48 2025
Size of extra inode fields: 32
Extended attributes:
  system.posix_acl_access (28) = 01 00 00 00 01 00 06 00 04 00 05 00 08 00 04 00 04 00 00 00 10 00 04 00 20 00 00 00 
  user.crtime_usec (8) = 26 9a 6b d8 79 2f 06 00 
Inode checksum: 0x76632451
EXTENTS:
(ETB0):12091501, (0):12091500, (1-89):37504-37592, (90-168):35889-35967, (169-240):34488-34559, (241-308):39356-39423, (309-373):39807-39871, (374-437):34048-34111, (438-501):34240-34303, (502-565):34752-34815, (566-629):35328-35391, (630-691):58786-58847, (692-748):35264-35320, (749-872):74497-74620, (873-964):74659-74750, (965-1039):155566-155640, (1040[u]):155641, (1041-1046):155642-155647, (1047-1174):225664-225791, (1175-1198):228864-228887, (1199[u]):228888, (1200-1263):228889-228952, (1264-1267[u]):228953-228956, (1268-1269):228957-228958, (1270-1274[u]):228959-228963, (1275):228964, (1276-1280[u]):228965-228969, (1281-1282):228970-228971, (1283-1286[u]):228972-228975, (1287-1301):228976-228990, (1302-1305[u]):228991-228994, (1306-1310):228995-228999, (1311-1322):248466-248477, (1323[u]):248478, (1324-1343):248479-248498, (1344[u]):248499, (1345-1349):248500-248504, (1350[u]):248505, (1351-1352):248506-248507, (1353[u]):248508, (1354):248509, (1355[u]):248510, (1356-1364):248511-248519, (1365[u]):248520, (1366-1368):248521-248523, (1369-1420[u]):248524-248575, (1421-1527[u]):254017-254123, (1528-1624[u]):257951-258047, (1625-1704[u]):260372-260451, (1705-1776[u]):287357-287428, (1777-1840[u]):287071-287134, (1841-1894[u]):320828-320881, (1895-1947[u]):320658-320710, (1948-1998[u]):315789-315839, (1999-2047[u]):370635-370683

Inode: 3015257   Type: regular    Mode:  0640   Flags: 0x80000
Generation: 4019827117    Version: 0x00000000:00000004
User:     0   Group:   999   Project:     0   Size: 8388608
File ACL: 0
Links: 1   Blockcount: 16392
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x67fb7f3c:53349abc -- Sun Apr 13 05:09:16 2025
 atime: 0x67fb7fb0:616f1038 -- Sun Apr 13 05:11:12 2025
 mtime: 0x67fb7e3e:0748c440 -- Sun Apr 13 05:05:02 2025
crtime: 0x67fa886b:14c0fd44 -- Sat Apr 12 11:36:11 2025
Size of extra inode fields: 32
Extended attributes:
  system.posix_acl_access (28) = 01 00 00 00 01 00 06 00 04 00 05 00 08 00 04 00 04 00 00 00 10 00 04 00 20 00 00 00 
  user.crtime_usec (8) = 67 0d 14 94 96 32 06 00 
Inode checksum: 0x15283c86
EXTENTS:
(ETB0):12091604, (0):12091495, (1-61):146893-146953, (62-91):147405-147434, (92-358):153237-153503, (359-386):131352-131379, (387-414):152908-152935, (415-440):146854-146879, (441-464):141824-141847, (465-487):146649-146671, (488-508):133759-133779, (509-529):145999-146019, (530-548):131382-131400, (549-567):146087-146105, (568-610):159453-159495, (611-628):144217-144234, (629-646):146525-146542, (647-663):131542-131558, (664-680):146452-146468, (681-696):145980-145995, (697-712):146055-146070, (713-728):146374-146389, (729-744):146967-146982, (745-759):131444-131458, (760-781):159869-159890, (782-796):133738-133752, (797-811):133916-133930, (812-826):146509-146523, (827-841):146612-146626, (842-856):146989-147003, (857-871):152244-152258, (872-886):159267-159281, (887-900):132696-132709, (901-914):133792-133805, (915-928):133856-133869, (929-942):133871-133884, (943-956):143165-143178, (957-970):160070-160083, (971-983):133723-133735, (984-996):143307-143319, (997-1009):146209-146221, (1010-1022):152755-152767, (1023-1035):152860-152872, (1036-1044):153075-153083, (1045[u]):153084, (1046-1048):153085-153087, (1049-1061):159307-159319, (1062-1073):141858-141869, (1074-1085):144192-144203, (1086-1097):144241-144252, (1098-1109):152987-152998, (1110-1121):159928-159939, (1122-1132):131409-131419, (1133-1160):160437-160464, (1161-1171):133809-133819, (1172-1182):134087-134097, (1183-1193):139370-139380, (1194-1204):139536-139546, (1205[u]):139686, (1206-1215):139687-139696, (1216-1226):140078-140088, (1227-1237):141560-141570, (1238-1248):141875-141885, (1249-1259):141927-141937, (1260-1269):141939-141948, (1270[u]):141949, (1271-1273[u]):142321-142323, (1274-1275):142324-142325, (1276-1279[u]):142326-142329, (1280-1281):142330-142331, (1282-1285[u]):146476-146479, (1286-1288):146480-146482, (1289-1291[u]):146483-146485, (1292):146486, (1293-1303):147343-147353, (1304-1307):152333-152336, (1308-1311[u]):152337-152340, (1312-1314):152341-152343, (1315-1325):159983-159993, (1326-1336):160143-160153, (1337-1355):161004-161022, (1356-1358):161076-161078, (1359[u]):161079, (1360-1367):161080-161087, (1368-1378):160664-160674, (1379-1388):132808-132817, (1389-1398):132825-132834, (1399-1408):132922-132931, (1409-1418):133712-133721, (1419-1424):161305-161310, (1425[u]):161311, (1426-1432):161312-161318, (1433-1442):133966-133975, (1443-1445):139609-139611, (1446[u]):139612, (1447-1452):139613-139618, (1453-1462):139989-139998, (1463-1472):142296-142305, (1473-1477):143962-143966, (1478-1482[u]):143967-143971, (1483-1492[u]):144020-144029, (1493-1502[u]):144313-144322, (1503-1512[u]):146407-146416, (1513-1526[u]):161582-161595, (1527-1536[u]):146564-146573, (1537-1546[u]):147120-147129, (1547-1556[u]):147206-147215, (1557-1566[u]):152804-152813, (1567-1576[u]):159232-159241, (1577-1586[u]):159837-159846, (1587-1596[u]):159898-159907, (1597-1606[u]):160180-160189, (1607-1616[u]):160261-160270, (1617-1626[u]):161103-161112, (1627-1636[u]):161151-161160, (1637-1645[u]):133781-133789, (1646-1654[u]):133826-133834, (1655-1663[u]):133905-133913, (1664-1672[u]):139562-139570, (1673-1685[u]):162413-162425, (1686-1694[u]):139584-139592, (1695-1703[u]):141336-141344, (1704-1712[u]):141573-141581, (1713-1721[u]):141772-141780, (1722-1732[u]):162595-162605, (1733-1741[u]):143942-143950, (1742-1750[u]):143978-143986, (1751-1760[u]):162736-162745, (1761-1769[u]):144052-144060, (1770-1778[u]):152224-152232, (1779-1787[u]):152310-152318, (1788-1796[u]):159398-159406, (1797-1809[u]):162838-162850, (1810-1820[u]):162889-162899, (1821-1855[u]):162901-162935, (1856-1864[u]):160117-160125, (1865-1877[u]):162960-162972, (1878-1888[u]):162990-163000, (1889-1897[u]):160904-160912, (1898-1906[u]):162580-162588, (1907-1914[u]):131508-131515, (1915-1929[u]):163072-163086, (1930-2047[u]):12322816-12322933

Inode: 3015711   Type: regular    Mode:  0640   Flags: 0x80000
Generation: 77819081    Version: 0x00000000:00000004
User:     0   Group:   999   Project:     0   Size: 8388608
File ACL: 0
Links: 1   Blockcount: 16392
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x67c9827a:9c671000 -- Thu Mar  6 06:09:46 2025
 atime: 0x67fb7fb0:616f1038 -- Sun Apr 13 05:11:12 2025
 mtime: 0x67c97f4a:4bc43558 -- Thu Mar  6 05:56:10 2025
crtime: 0x67c97cd0:06fed3a0 -- Thu Mar  6 05:45:36 2025
Size of extra inode fields: 32
Extended attributes:
  system.posix_acl_access (28) = 01 00 00 00 01 00 06 00 04 00 05 00 08 00 04 00 04 00 00 00 10 00 04 00 20 00 00 00 
  user.crtime_usec (8) = a5 49 bd 34 aa 2f 06 00 
Inode checksum: 0x4cbbdc93
EXTENTS:
(ETB0):12091824, (0):12091793, (1-258):673534-673791, (259-534):686327-686602, (535-677):670577-670719, (678-813):664184-664319, (814-894):660911-660991, (895-959):663743-663807, (960-1024):670143-670207, (1025-1036):673215-673226, (1037[u]):673227, (1038-1089):673228-673279, (1090-1133):679945-679988, (1134-1196):754369-754431, (1197-1265):785105-785173, (1266-1269[u]):785174-785177, (1270-1271):785178-785179, (1272-1275[u]):785180-785183, (1276-1277):785184-785185, (1278-1282[u]):785186-785190, (1283):785191, (1284-1288[u]):785192-785196, (1289-1304):785197-785212, (1305-1309[u]):785213-785217, (1310-1349):785218-785257, (1350[u]):785258, (1351-1353):785259-785261, (1354[u]):785262, (1355-1357):785263-785265, (1358[u]):785266, (1359):785267, (1360[u]):785268, (1361-1366):785269-785274, (1367-1499[u]):785275-785407, (1500-1570[u]):815232-815302, (1571-1826[u]):852992-853247, (1827-1969[u]):856576-856718, (1970-2047[u]):854912-854989

Inode: 3015301   Type: regular    Mode:  0640   Flags: 0x80000
Generation: 1035420913    Version: 0x00000000:00000004
User:     0   Group:   999   Project:     0   Size: 8388608
File ACL: 0
Links: 1   Blockcount: 16392
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x67d2be33:58b11400 -- Thu Mar 13 07:14:59 2025
 atime: 0x67fb7fb0:616f1038 -- Sun Apr 13 05:11:12 2025
 mtime: 0x67d1ed9e:50ba989c -- Wed Mar 12 16:25:02 2025
crtime: 0x67d1b328:69db9c00 -- Wed Mar 12 12:15:36 2025
Size of extra inode fields: 32
Extended attributes:
  system.posix_acl_access (28) = 01 00 00 00 01 00 06 00 04 00 05 00 08 00 04 00 04 00 00 00 10 00 04 00 20 00 00 00 
  user.crtime_usec (8) = d2 ee fb 83 27 30 06 00 
Inode checksum: 0x629a7e49
EXTENTS:
(ETB0):12091930, (0):12091929, (1-998):30868-31865, (999-1039):17454-17494, (1040[u]):17495, (1041):17496, (1042[u]):17497, (1043):17498, (1044[u]):17499, (1045):17500, (1046[u]):17501, (1047):17502, (1048[u]):17503, (1049-1067):17504-17522, (1068[u]):17523, (1069-1094):17524-17549, (1095-1872[u]):17550-18327, (1873-2047[u]):183224-183398

Inode: 3017503   Type: regular    Mode:  0640   Flags: 0x80000
Generation: 1228810752    Version: 0x00000000:00000004
User:     0   Group:   999   Project:     0   Size: 8388608
File ACL: 0
Links: 1   Blockcount: 16392
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x67c7256f:d59f8000 -- Tue Mar  4 11:08:15 2025
 atime: 0x67fb7fb0:616f1038 -- Sun Apr 13 05:11:12 2025
 mtime: 0x67c7252a:3ee29f38 -- Tue Mar  4 11:07:06 2025
crtime: 0x67c724ac:07645628 -- Tue Mar  4 11:05:00 2025
Size of extra inode fields: 32
Extended attributes:
  system.posix_acl_access (28) = 01 00 00 00 01 00 06 00 04 00 05 00 08 00 04 00 04 00 00 00 10 00 04 00 20 00 00 00 
  user.crtime_usec (8) = d4 09 52 6f 86 2f 06 00 
Inode checksum: 0xb32381ec
EXTENTS:
(ETB0):12091703, (0):12091702, (1-15):394033-394047, (16-30):402162-402176, (31-225):412733-412927, (226-353):413184-413311, (354-380):413605-413631, (381-409):413667-413695, (410-433):413864-413887, (434-448):402929-402943, (449-467):414061-414079, (468-492):414183-414207, (493-507):404913-404927, (508-522):406494-406508, (523-548):414374-414399, (549-564):414448-414463, (565-582):414606-414623, (583-597):407763-407777, (598-625):414692-414719, (626-650):414823-414847, (651-681):414881-414911, (682-708):414949-414975, (709-723):408726-408740, (724-750):415077-415103, (751-773):415177-415199, (774-788):411633-411647, (789-805):415279-415295, (806-829):415336-415359, (830-844):411708-411722, (845-869):415559-415583, (870-884):411724-411738, (885-899):411757-411771, (900-926):415973-415999, (927-951):416071-416095, (952-966):411775-411789, (967-981):412684-412698, (982-1012):416289-416319, (1013-1031):416365-416383, (1032-1057):416422-416447, (1058-1072):414289-414303, (1073-1086):416586-416599, (1087[u]):416600, (1088-1094):416601-416607, (1095[u]):416713, (1096-1117):416714-416735, (1118-1121):396867-396870, (1122-1131[u]):396871-396880, (1132-1194[u]):416897-416959, (1195-1223[u]):416995-417023, (1224-1253[u]):417122-417151, (1254-1277[u]):417192-417215, (1278-1291[u]):398706-398719, (1292-1305[u]):399574-399587, (1306-1319[u]):399740-399753, (1320-1356[u]):417755-417791, (1357-1370[u]):400274-400287, (1371-1384[u]):400571-400584, (1385-1398[u]):402493-402506, (1399-1458[u]):418628-418687, (1459-1482[u]):418728-418751, (1483-1502[u]):418796-418815, (1503-1532[u]):419426-419455, (1533-1595[u]):419521-419583, (1596-1626[u]):419809-419839, (1627-1646[u]):420300-420319, (1647-1660[u]):403039-403052, (1661-1707[u]):420497-420543, (1708-1733[u]):420582-420607, (1734-1760[u]):420645-420671, (1761-1785[u]):420711-420735, (1786-1822[u]):420827-420863, (1823-1879[u]):421191-421247, (1880-1939[u]):421316-421375, (1940-1953[u]):404658-404671, (1954-1978[u]):422375-422399, (1979-2047[u]):11834-11902

Inode: 3016274   Type: regular    Mode:  0640   Flags: 0x80000
Generation: 709967617    Version: 0x00000000:00000004
User:     0   Group:   999   Project:     0   Size: 16777216
File ACL: 0
Links: 1   Blockcount: 32776
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x67daf0c6:96267104 -- Wed Mar 19 12:28:54 2025
 atime: 0x67fb7fb0:616f1038 -- Sun Apr 13 05:11:12 2025
 mtime: 0x67daefde:455f48bc -- Wed Mar 19 12:25:02 2025
crtime: 0x67d86aca:53ec6000 -- Mon Mar 17 14:32:42 2025
Size of extra inode fields: 32
Extended attributes:
  system.posix_acl_access (28) = 01 00 00 00 01 00 06 00 04 00 05 00 08 00 04 00 04 00 00 00 10 00 04 00 20 00 00 00 
  user.crtime_usec (8) = 68 35 7e 03 8e 30 06 00 
Inode checksum: 0x3e10c5fd
EXTENTS:
(ETB0):12091629, (0):12091628, (1-69):1018812-1018880, (70-132):1016321-1016383, (133-473):1480875-1481215, (474-843):1495192-1495561, (844-1102):1477885-1478143, (1103-1268):1480704-1480869, (1269-1419):1542496-1542646, (1420-1470):1582457-1582507, (1471[u]):1582508, (1472-1867):1582509-1582904, (1868[u]):1582905, (1869-1873):1582906-1582910, (1874[u]):1582911, (1875-1894):1582912-1582931, (1895[u]):1582932, (1896-1905):1582933-1582942, (1906-1907[u]):1582943-1582944, (1908-1934):1582945-1582971, (1935-1936[u]):1582972-1582973, (1937-1961):1582974-1582998, (1962-1967[u]):1582999-1583004, (1968-1979):1583005-1583016, (1980-1986[u]):1583017-1583023, (1987-1998):1583024-1583035, (1999-2004[u]):1583036-1583041, (2005-2016):1583042-1583053, (2017-2023[u]):1583054-1583060, (2024-2047):1583061-1583084, (2048-2079):440015-440046, (2080-2081[u]):440047-440048, (2082-2093):440049-440060, (2094-2101[u]):440061-440068, (2102-2126):440069-440093, (2127[u]):440094, (2128-2220):440095-440187, (2221-2223[u]):440188-440190, (2224-2243):440191-440210, (2244[u]):440211, (2245-2277):440212-440244, (2278-2280[u]):440245-440247, (2281-2346):440248-440313, (2347-2349[u]):440314-440316, (2350-2382):440317-440349, (2383-2386[u]):440350-440353, (2387-2453):440354-440420, (2454-2457[u]):440421-440424, (2458-2459):440425-440426, (2460-2463[u]):440427-440430, (2464-2465):440431-440432, (2466-2469[u]):440433-440436, (2470-2471):440437-440438, (2472-2475[u]):440439-440442, (2476-2478):440443-440445, (2479-2481[u]):440446-440448, (2482-2484):440449-440451, (2485-2487[u]):440452-440454, (2488-2523):440455-440490, (2524[u]):440491, (2525-2529):440492-440496, (2530[u]):440497, (2531-2563):440498-440530, (2564-2577[u]):440531-440544, (2578-2608):440545-440575, (2609-2614):462332-462337, (2615-2629[u]):462338-462352, (2630-2633):462353-462356, (2634-2648[u]):462357-462371, (2649-2673):462372-462396, (2674[u]):462397, (2675-2683):462398-462406, (2684-2688[u]):462407-462411, (2689-2762):462412-462485, (2763[u]):462486, (2764-2820):462487-462543, (2821-2825[u]):462544-462548, (2826-2897):462549-462620, (2898[u]):462621, (2899):462622, (2900[u]):462623, (2901-2904):462624-462627, (2905[u]):462628, (2906-3069):462629-462792, (3070[u]):462793, (3071-3089):462794-462812, (3090[u]):462813, (3091-3092):462814-462815, (3093[u]):500200, (3094-3112):500201-500219, (3113-3532[u]):500220-500639, (3533-3815[u]):503269-503551, (3816-4081[u]):514550-514815, (4082-4095[u]):514226-514239

Inode: 3016232   Type: regular    Mode:  0640   Flags: 0x80000
Generation: 2049113136    Version: 0x00000000:00000005
User:     0   Group:   999   Project:     0   Size: 8388584
File ACL: 0
Links: 1   Blockcount: 16392
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x67db3fe5:806f1d68 -- Wed Mar 19 18:06:29 2025
 atime: 0x67fb7fb0:616f1038 -- Sun Apr 13 05:11:12 2025
 mtime: 0x67db3fe5:806f1d68 -- Wed Mar 19 18:06:29 2025
crtime: 0x67daf0c6:96267104 -- Wed Mar 19 12:28:54 2025
Size of extra inode fields: 32
Extended attributes:
  system.posix_acl_access (28) = 01 00 00 00 01 00 06 00 04 00 05 00 08 00 04 00 04 00 00 00 10 00 04 00 20 00 00 00 
  user.crtime_usec (8) = ad e5 72 84 b4 30 06 00 
Inode checksum: 0xefb9b543
EXTENTS:
(ETB0):12091630, (0):12091580, (1-256):197632-197887, (257-428):218624-218795, (429-749):253696-254016, (750-1016):277237-277503, (1017-1276):287998-288257, (1277-1462):263168-263353, (1463[u]):263354, (1464-1478):263355-263369, (1479-1480[u]):263370-263371, (1481-1484):263372-263375, (1485-1486[u]):263376-263377, (1487-1519):263378-263410, (1520[u]):263411, (1521-1532):263412-263423, (1533-1730):285952-286149, (1731[u]):286150, (1732-1788):286151-286207, (1789-1805):318131-318147, (1806[u]):318148, (1807-1819):318149-318161, (1820[u]):318162, (1821-1822):318163-318164, (1823[u]):318165, (1824-1863):318166-318205, (1864-1880[u]):318206-318222, (1881-1882):318223-318224, (1883-1898[u]):318225-318240, (1899-1900):318241-318242, (1901-1917[u]):318243-318259, (1918-1919):318260-318261, (1920-1935[u]):318262-318277, (1936-1974):318278-318316, (1975-1991[u]):318317-318333, (1992-2000):318334-318342, (2001-2005[u]):318343-318347, (2006-2024):318348-318366, (2025[u]):318367, (2026-2028):318368-318370, (2029-2034):366124-366129, (2035-2039[u]):366130-366134, (2040):366135, (2041-2045[u]):366136-366140, (2046-2047):366141-366142

Inode: 3016049   Type: regular    Mode:  0640   Flags: 0x80000
Generation: 1519005373    Version: 0x00000000:00000004
User:     0   Group:   999   Project:     0   Size: 8388608
File ACL: 0
Links: 1   Blockcount: 16392
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x67d336e3:e27ceda4 -- Thu Mar 13 15:49:55 2025
 atime: 0x67fb7fb0:616f1038 -- Sun Apr 13 05:11:12 2025
 mtime: 0x67d3344d:59439d34 -- Thu Mar 13 15:38:53 2025
crtime: 0x67d33440:3dfd2400 -- Thu Mar 13 15:38:40 2025
Size of extra inode fields: 32
Extended attributes:
  system.posix_acl_access (28) = 01 00 00 00 01 00 06 00 04 00 05 00 08 00 04 00 04 00 00 00 10 00 04 00 20 00 00 00 
  user.crtime_usec (8) = 0b a3 09 78 3e 30 06 00 
Inode checksum: 0x88c7472a
EXTENTS:
(ETB0):12091938, (0):12091937, (1-498):82958-83455, (499-983):125979-126463, (984-1067):171180-171263, (1068[u]):171264, (1069-1145):171265-171341, (1146-1549[u]):171342-171745, (1550-2047[u]):12281857-12282354

Inode: 3015837   Type: regular    Mode:  0640   Flags: 0x80000
Generation: 3701882836    Version: 0x00000000:00000004
User:     0   Group:   999   Project:     0   Size: 8388608
File ACL: 0
Links: 1   Blockcount: 16392
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x67eda506:0c65d400 -- Wed Apr  2 16:58:46 2025
 atime: 0x67fb7fb0:616f1038 -- Sun Apr 13 05:11:12 2025
 mtime: 0x67eda48d:5bebc524 -- Wed Apr  2 16:56:45 2025
crtime: 0x67eda46a:29020c00 -- Wed Apr  2 16:56:10 2025
Size of extra inode fields: 32
Extended attributes:
  system.posix_acl_access (28) = 01 00 00 00 01 00 06 00 04 00 05 00 08 00 04 00 04 00 00 00 10 00 04 00 20 00 00 00 
  user.crtime_usec (8) = 19 2a 05 e2 d1 31 06 00 
Inode checksum: 0x8c854355
EXTENTS:
(ETB0):12091570, (0):12092211, (1-306):363520-363825, (307-603):373463-373759, (604-899):367358-367653, (900-1041):364800-364941, (1042[u]):364942, (1043):364943, (1044[u]):364944, (1045):364945, (1046[u]):364946, (1047):364947, (1048[u]):364948, (1049):364949, (1050[u]):364950, (1051-1074):364951-364974, (1075[u]):364975, (1076):364976, (1077-1155[u]):364977-365055, (1156-1402[u]):377836-378082, (1403-1644[u]):384416-384657, (1645-1882[u]):383762-383999, (1883-2047[u]):374013-374177

Inode: 3014807   Type: regular    Mode:  0640   Flags: 0x80000
Generation: 3785920825    Version: 0x00000000:00000003
User:     0   Group:   999   Project:     0   Size: 8388608
File ACL: 0
Links: 1   Blockcount: 16384
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x67d332cc:10366400 -- Thu Mar 13 15:32:28 2025
 atime: 0x67fb7fb0:616f1038 -- Sun Apr 13 05:11:12 2025
 mtime: 0x67d32fb0:55d6cd4c -- Thu Mar 13 15:19:12 2025
crtime: 0x67d32fa0:112cad4c -- Thu Mar 13 15:18:56 2025
Size of extra inode fields: 32
Extended attributes:
  system.posix_acl_access (28) = 01 00 00 00 01 00 06 00 04 00 05 00 08 00 05 00 04 00 00 00 10 00 04 00 20 00 00 00 
  user.crtime_usec (8) = a7 48 74 31 3e 30 06 00 
Inode checksum: 0x7cfb19f9
EXTENTS:
(0):12034048, (1-715):272902-273616, (716-965):14184448-14184697, (966-2047[u]):14184698-14185779

Inode: 3016451   Type: regular    Mode:  0640   Flags: 0x80000
Generation: 4118006318    Version: 0x00000000:00000004
User:     0   Group:   999   Project:     0   Size: 8388608
File ACL: 0
Links: 1   Blockcount: 16392
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x67c985c5:a6e49c00 -- Thu Mar  6 06:23:49 2025
 atime: 0x67fb7fb0:616f1038 -- Sun Apr 13 05:11:12 2025
 mtime: 0x67c984e6:0d9ba500 -- Thu Mar  6 06:20:06 2025
crtime: 0x67c984c2:aab52c00 -- Thu Mar  6 06:19:30 2025
Size of extra inode fields: 32
Extended attributes:
  system.posix_acl_access (28) = 01 00 00 00 01 00 06 00 04 00 05 00 08 00 04 00 04 00 00 00 10 00 04 00 20 00 00 00 
  user.crtime_usec (8) = 31 3b 04 ae aa 2f 06 00 
Inode checksum: 0x2961b484
EXTENTS:
(ETB0):12091868, (0):12091827, (1-92):884128-884219, (93-182):865146-865235, (183-269):1022976-1023062, (270-366):1378304-1378400, (367-810):1382485-1382928, (811-954):1399664-1399807, (955-1033):1419500-1419578, (1034[u]):1419579, (1035):1419580, (1036[u]):1419581, (1037):1419582, (1038[u]):1419583, (1039):1419584, (1040[u]):1419585, (1041):1419586, (1042[u]):1419587, (1043-1064):1419588-1419609, (1065[u]):1419610, (1066-1069):1419611-1419614, (1070-1233[u]):1419615-1419778, (1234-1745[u]):1437696-1438207, (1746-2047[u]):1420326-1420627

Inode: 3014894   Type: regular    Mode:  0640   Flags: 0x80000
Generation: 2260752342    Version: 0x00000000:00000004
User:     0   Group:   999   Project:     0   Size: 8388608
File ACL: 0
Links: 1   Blockcount: 16392
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x67d0d98d:5cf5b5e4 -- Tue Mar 11 20:47:09 2025
 atime: 0x67fb7fb0:616f1038 -- Sun Apr 13 05:11:12 2025
 mtime: 0x67d0cf22:db826cf4 -- Tue Mar 11 20:02:42 2025
crtime: 0x67d060f4:08954400 -- Tue Mar 11 12:12:36 2025
Size of extra inode fields: 32
Extended attributes:
  system.posix_acl_access (28) = 01 00 00 00 01 00 06 00 04 00 05 00 08 00 04 00 04 00 00 00 10 00 04 00 20 00 00 00 
  user.crtime_usec (8) = 3c be 63 5b 13 30 06 00 
Inode checksum: 0xb30a5e79
EXTENTS:
(ETB0):12091527, (0):12091392, (1-1014):87049-88062, (1015-1040):76903-76928, (1041[u]):76929, (1042-1178):76930-77066, (1179[u]):77067, (1180-1260):77068-77148, (1261-1265[u]):77149-77153, (1266):77154, (1267-1271[u]):77155-77159, (1272-1273):77160-77161, (1274-1277[u]):77162-77165, (1278-1279):77166-77167, (1280-1283[u]):77168-77171, (1284-1298):77172-77186, (1299-1303[u]):77187-77191, (1304-1334):77192-77222, (1335[u]):77223, (1336-1349):77224-77237, (1350[u]):77238, (1351):77239, (1352[u]):77240, (1353-1354):77241-77242, (1355-1871[u]):77243-77759, (1872-2047[u]):173128-173303

Inode: 3015437   Type: regular    Mode:  0640   Flags: 0x80000
Generation: 1801472646    Version: 0x00000000:00000004
User:     0   Group:   999   Project:     0   Size: 8388608
File ACL: 0
Links: 1   Blockcount: 16392
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x67e801ad:e4e1c000 -- Sat Mar 29 10:20:29 2025
 atime: 0x67fb7fb0:616f1038 -- Sun Apr 13 05:11:12 2025
 mtime: 0x67e80158:2ea7272c -- Sat Mar 29 10:19:04 2025
crtime: 0x67e7fc36:05b8d800 -- Sat Mar 29 09:57:10 2025
Size of extra inode fields: 32
Extended attributes:
  system.posix_acl_access (28) = 01 00 00 00 01 00 06 00 04 00 05 00 08 00 04 00 04 00 00 00 10 00 04 00 20 00 00 00 
  user.crtime_usec (8) = 33 5c 2f 90 7b 31 06 00 
Inode checksum: 0xaa38c780
EXTENTS:
(ETB0):12091706, (0):12091705, (1-96):75168-75263, (97-161):75997-76061, (162-215):75091-75144, (216-268):86652-86704, (269-308):90779-90818, (309-338):86311-86340, (339-367):86385-86413, (368-394):86620-86646, (395-418):79821-79844, (419-441):83658-83680, (442-463):78413-78434, (464-484):86187-86207, (485-504):76099-76118, (505-524):89580-89599, (525-542):75951-75968, (543-560):78471-78488, (561-578):83752-83769, (579-595):71662-71678, (596-612):78395-78411, (613-629):78706-78722, (630-646):79530-79546, (647-661):75902-75916, (662-676):76177-76191, (677-691):78622-78636, (692-706):78687-78701, (707-721):90339-90353, (722-736):90694-90708, (737-751):90735-90749, (752-766):91664-91678, (767-781):92027-92041, (782-795):76126-76139, (796-809):76156-76169, (810-823):86265-86278, (824-837):90568-90581, (838-851):90856-90869, (852-866):92755-92769, (867-880):91884-91897, (881-894):92281-92294, (895-907):79576-79588, (908-969):92861-92922, (970-982):79722-79734, (983-997):93059-93073, (998-1010):83456-83468, (1011-1031):93118-93138, (1032-1044):83686-83698, (1045-1057):83825-83837, (1058-1070):83844-83856, (1071-1083):83887-83899, (1084-1096):90228-90240, (1097-1109):90523-90535, (1110-1122):90884-90896, (1123-1135):91056-91068, (1136-1148):92794-92806, (1149-1160):75871-75882, (1161-1172):79630-79641, (1173-1184):87036-87047, (1185-1196):90711-90722, (1197-1208):92174-92185, (1209-1211):92432-92434, (1212[u]):92435, (1213-1220):92436-92443, (1221-1240):93362-93381, (1241-1252):92558-92569, (1253-1264):92592-92603, (1265-1271):92842-92848, (1272-1275[u]):92849-92852, (1276):92853, (1277-1278):79432-79433, (1279-1282[u]):79434-79437, (1283-1284):79438-79439, (1285-1287[u]):79440-79442, (1288[u]):79856, (1289-1290):79857-79858, (1291-1294[u]):79859-79862, (1295-1298):79863-79866, (1299-1312):93437-93450, (1313-1323):83809-83819, (1324-1325):83955-83956, (1326-1329[u]):83957-83960, (1330-1334):83961-83965, (1335-1345):87020-87030, (1346-1356):90604-90614, (1357-1365):93526-93534, (1366[u]):93535, (1367-1369):93536-93538, (1370[u]):93539, (1371):93540, (1372[u]):93541, (1373-1380):93542-93549, (1381[u]):93550, (1382):93551, (1383):90644, (1384[u]):90645, (1385-1393):90646-90654, (1394-1404[u]):90674-90684, (1405-1415[u]):91761-91771, (1416-1426[u]):91773-91783, (1427-1446[u]):93665-93684, (1447-1457[u]):92338-92348, (1458-1493[u]):99382-99417, (1494-1653[u]):113408-113567, (1654-1788[u]):122873-123007, (1789-1870[u]):124590-124671, (1871-1926[u]):112702-112757, (1927-2047[u]):12324445-12324565

Inode: 3016133   Type: regular    Mode:  0640   Flags: 0x80000
Generation: 1654370464    Version: 0x00000000:00000004
User:     0   Group:   999   Project:     0   Size: 8388608
File ACL: 0
Links: 1   Blockcount: 16392
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x67d755e5:660fb29c -- Sun Mar 16 18:51:17 2025
 atime: 0x67fb7fb0:616f1038 -- Sun Apr 13 05:11:12 2025
 mtime: 0x67d4ec05:8dcd0748 -- Fri Mar 14 22:55:01 2025
crtime: 0x67d33a07:dc85a60c -- Thu Mar 13 16:03:19 2025
Size of extra inode fields: 32
Extended attributes:
  system.posix_acl_access (28) = 01 00 00 00 01 00 06 00 04 00 05 00 08 00 04 00 04 00 00 00 10 00 04 00 20 00 00 00 
  user.crtime_usec (8) = 86 70 3b d0 3e 30 06 00 
Inode checksum: 0x58e1f10b
EXTENTS:
(ETB0):12091612, (0):12091611, (1-407):247113-247519, (408-687):248186-248465, (688-939):285700-285951, (940-1207):345460-345727, (1208-1297):345849-345938, (1298-1301[u]):345939-345942, (1302-1303):345943-345944, (1304-1307[u]):345945-345948, (1308-1309):345949-345950, (1310-1313[u]):345951-345954, (1314-1316):345955-345957, (1317-1319[u]):345958-345960, (1320-1338):345961-345979, (1339[u]):345980, (1340-1378):345981-346019, (1379-1382[u]):346020-346023, (1383-1428):346024-346069, (1429-1463):351679-351713, (1464[u]):351714, (1465-1466):351715-351716, (1467[u]):351717, (1468-1482):351718-351732, (1483-1623[u]):351733-351873, (1624-1816[u]):346303-346495, (1817-2047[u]):12260608-12260838

Inode: 3015348   Type: regular    Mode:  0640   Flags: 0x80000
Generation: 3323353459    Version: 0x00000000:00000005
User:     0   Group:   999   Project:     0   Size: 4364848
File ACL: 0
Links: 1   Blockcount: 8536
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x67d32fa0:7de4b54c -- Thu Mar 13 15:18:56 2025
 atime: 0x67fb7fb0:616f1038 -- Sun Apr 13 05:11:12 2025
 mtime: 0x67d32fa0:7de4b54c -- Thu Mar 13 15:18:56 2025
crtime: 0x67d32f9b:60523400 -- Thu Mar 13 15:18:51 2025
Size of extra inode fields: 32
Extended attributes:
  system.posix_acl_access (28) = 01 00 00 00 01 00 06 00 04 00 05 00 08 00 04 00 04 00 00 00 10 00 04 00 20 00 00 00 
  user.crtime_usec (8) = 5f 1a 2d 31 3e 30 06 00 
Inode checksum: 0xae8c7e6a
EXTENTS:
(ETB0):12091935, (0):12091489, (1-510):85506-86015, (511-1020):143362-143871, (1021-1036):191491-191506, (1037[u]):191507, (1038):191508, (1039[u]):191509, (1040):191510, (1041[u]):191511, (1042):191512, (1043[u]):191513, (1044):191514, (1045[u]):191515, (1046-1065):191516-191535

Inode: 3017749   Type: regular    Mode:  0640   Flags: 0x80000
Generation: 2778677666    Version: 0x00000000:00000004
User:     0   Group:   999   Project:     0   Size: 8388608
File ACL: 0
Links: 1   Blockcount: 16392
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x67c989d5:e7be2c00 -- Thu Mar  6 06:41:09 2025
 atime: 0x67fb7fb0:616f1038 -- Sun Apr 13 05:11:12 2025
 mtime: 0x67c988b1:2da33820 -- Thu Mar  6 06:36:17 2025
crtime: 0x67c988ab:ca2dd000 -- Thu Mar  6 06:36:11 2025
Size of extra inode fields: 32
Extended attributes:
  system.posix_acl_access (28) = 01 00 00 00 01 00 06 00 04 00 05 00 08 00 04 00 04 00 00 00 10 00 04 00 20 00 00 00 
  user.crtime_usec (8) = e8 44 b0 e9 aa 2f 06 00 
Inode checksum: 0x6520e447
EXTENTS:
(ETB0):12091874, (0):12091873, (1-76):1024273-1024348, (77-370):1509376-1509669, (371-888):1544200-1544717, (889-1004):1556481-1556596, (1005-1411[u]):1556597-1557003, (1412-1910[u]):1546155-1546653, (1911-2047[u]):1540288-1540424

Inode: 3014671   Type: regular    Mode:  0640   Flags: 0x80000
Generation: 4274289244    Version: 0x00000000:00000004
User:     0   Group:   999   Project:     0   Size: 16777216
File ACL: 0
Links: 1   Blockcount: 32776
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x67ecc694:4e338800 -- Wed Apr  2 01:09:40 2025
 atime: 0x67fb7fb0:616f1038 -- Sun Apr 13 05:11:12 2025
 mtime: 0x67ecc64b:3a4cdd9c -- Wed Apr  2 01:08:27 2025
crtime: 0x67ead0d2:04c4b400 -- Mon Mar 31 13:28:50 2025
Size of extra inode fields: 32
Extended attributes:
  system.posix_acl_access (28) = 01 00 00 00 01 00 06 00 04 00 05 00 08 00 04 00 04 00 00 00 10 00 04 00 20 00 00 00 
  user.crtime_usec (8) = b8 bd d8 c0 a6 31 06 00 
Inode checksum: 0x9b3a0a03
EXTENTS:
(ETB0):12091927, (0):12091711, (1-42):201686-201727, (43-84):205397-205438, (85-126):219186-219227, (127-167):199010-199050, (168-207):203249-203288, (208-244):223976-224012, (245-277):221184-221216, (278-309):198881-198912, (310-341):217600-217631, (342-373):223943-223974, (374-523):237546-237695, (524-796):260452-260724, (797-1007):246538-246748, (1008-1185):244736-244913, (1186-1360):257280-257454, (1361-1477):259805-259921, (1478[u]):259922, (1479-1523):259923-259967, (1524-1635):238336-238447, (1636[u]):238448, (1637-1683):238449-238495, (1684-1746):264798-264860, (1747[u]):264861, (1748-1787):264862-264901, (1788-1789[u]):264902-264903, (1790-1794):264904-264908, (1795[u]):264909, (1796-1821):264910-264935, (1822[u]):264936, (1823-1841):264937-264955, (1842-1909):287845-287912, (1910-1911[u]):287913-287914, (1912-1924):287915-287927, (1925[u]):287928, (1926-1931):287929-287934, (1932[u]):287935, (1933-1941):287936-287944, (1942[u]):287945, (1943-1981):287946-287984, (1982-1989[u]):287985-287992, (1990-1994):287993-287997, (1995-1999):369445-369449, (2000-2007[u]):369450-369457, (2008-2018):369458-369468, (2019-2026[u]):369469-369476, (2027-2036):369477-369486, (2037-2044[u]):369487-369494, (2045-2047):369495-369497, (2048-2091):8327168-8327211, (2092-2100[u]):8327212-8327220, (2101-2143):8327221-8327263, (2144[u]):8327264, (2145-2159):8327265-8327279, (2160-2161[u]):8327280-8327281, (2162-2247):8327282-8327367, (2248[u]):8327368, (2249-2255):8327369-8327375, (2256-2258[u]):8327376-8327378, (2259-2261):8327379-8327381, (2262[u]):8327382, (2263-2277):8327383-8327397, (2278-2280[u]):8327398-8327400, (2281-2356):8327401-8327476, (2357-2360[u]):8327477-8327480, (2361-2401):8327481-8327521, (2402-2405[u]):8327522-8327525, (2406-2407):8327526-8327527, (2408-2411[u]):8327528-8327531, (2412-2414):8327532-8327534, (2415-2417[u]):8327535-8327537, (2418-2420):8327538-8327540, (2421-2423[u]):8327541-8327543, (2424-2426):8327544-8327546, (2427-2430[u]):8327547-8327550, (2431-2432):8327551-8327552, (2433-2436[u]):8327553-8327556, (2437-2525):8327557-8327645, (2526[u]):8327646, (2527-2557):8327647-8327677, (2558-2561[u]):8327678-8327681, (2562-2591):8327682-8327711, (2592-2606[u]):8327712-8327726, (2607-2649):8327727-8327769, (2650[u]):8327770, (2651-2683):8327771-8327803, (2684[u]):8327804, (2685-2708):8327805-8327828, (2709-2724[u]):8327829-8327844, (2725-2727):8327845-8327847, (2728-2743[u]):8327848-8327863, (2744-2796):8327864-8327916, (2797[u]):8327917, (2798-2872):8327918-8327992, (2873-2877[u]):8327993-8327997, (2878-2900):8327998-8328020, (2901[u]):8328021, (2902):8328022, (2903[u]):8328023, (2904-2922):8328024-8328042, (2923[u]):8328043, (2924-2941):8328044-8328061, (2942-4095[u]):8328062-8329215

Inode: 3016189   Type: regular    Mode:  0640   Flags: 0x80000
Generation: 1299172500    Version: 0x00000000:00000004
User:     0   Group:   999   Project:     0   Size: 8388608
File ACL: 0
Links: 1   Blockcount: 16392
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x67d33a07:dc85a60c -- Thu Mar 13 16:03:19 2025
 atime: 0x67fb7fb0:616f1038 -- Sun Apr 13 05:11:12 2025
 mtime: 0x67d338ea:b626dc00 -- Thu Mar 13 15:58:34 2025
crtime: 0x67d338c9:07a12000 -- Thu Mar 13 15:58:01 2025
Size of extra inode fields: 32
Extended attributes:
  system.posix_acl_access (28) = 01 00 00 00 01 00 06 00 04 00 05 00 08 00 04 00 04 00 00 00 10 00 04 00 20 00 00 00 
  user.crtime_usec (8) = b4 8a 39 bd 3e 30 06 00 
Inode checksum: 0x01af6ad0
EXTENTS:
(ETB0):12091610, (0):12091609, (1-511):173569-174079, (512-1018):189440-189946, (1019-1030):222802-222813, (1031[u]):222814, (1032):222815, (1033[u]):222816, (1034-1039):222817-222822, (1040[u]):222823, (1041-1077):222824-222860, (1078-1448[u]):222861-223231, (1449-1876[u]):198228-198655, (1877-2047[u]):12259328-12259498

Inode: 3017527   Type: regular    Mode:  0640   Flags: 0x80000
Generation: 3383673892    Version: 0x00000000:00000004
User:     0   Group:   999   Project:     0   Size: 8388608
File ACL: 0
Links: 1   Blockcount: 16392
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x67c64fc1:d4ab5c00 -- Mon Mar  3 19:56:33 2025
 atime: 0x67fb7fb0:616f1038 -- Sun Apr 13 05:11:12 2025
 mtime: 0x67c64ed9:e2407874 -- Mon Mar  3 19:52:41 2025
crtime: 0x67c64cab:bfb04400 -- Mon Mar  3 19:43:23 2025
Size of extra inode fields: 32
Extended attributes:
  system.posix_acl_access (28) = 01 00 00 00 01 00 06 00 04 00 05 00 08 00 04 00 04 00 00 00 10 00 04 00 20 00 00 00 
  user.crtime_usec (8) = 5a 94 68 8f 79 2f 06 00 
Inode checksum: 0xfc1aac11
EXTENTS:
(ETB0):12091497, (0):12091496, (1-128):58624-58751, (129-242):36430-36543, (243-390):69137-69284, (391-531):70259-70399, (532-659):67808-67935, (660-787):82816-82943, (788-985):120326-120523, (986-1115):130046-130175, (1116-1118):105216-105218, (1119[u]):105219, (1120-1124):105220-105224, (1125[u]):105225, (1126):105226, (1127[u]):105227, (1128-1175):105228-105275, (1176-1243[u]):105276-105343, (1244-1371[u]):109568-109695, (1372-1499[u]):124672-124799, (1500-1627[u]):134144-134271, (1628-1727[u]):208796-208895, (1728-1866[u]):220021-220159, (1867-2002[u]):213880-214015, (2003-2047[u]):12489901-12489945

Inode: 3017539   Type: regular    Mode:  0640   Flags: 0x80000
Generation: 448423060    Version: 0x00000000:00000004
User:     0   Group:   999   Project:     0   Size: 8388608
File ACL: 0
Links: 1   Blockcount: 16392
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x67c843d8:cd0a3c00 -- Wed Mar  5 07:30:16 2025
 atime: 0x67fb7fb0:616f1038 -- Sun Apr 13 05:11:12 2025
 mtime: 0x67c8429e:20cf633c -- Wed Mar  5 07:25:02 2025
crtime: 0x67c73c0d:b1622800 -- Tue Mar  4 12:44:45 2025
Size of extra inode fields: 32
Extended attributes:
  system.posix_acl_access (28) = 01 00 00 00 01 00 06 00 04 00 05 00 08 00 04 00 04 00 00 00 10 00 04 00 20 00 00 00 
  user.crtime_usec (8) = 8e cd 18 d4 87 2f 06 00 
Inode checksum: 0x3a74f6cd
EXTENTS:
(ETB0):12091792, (0):12091821, (1-16):567719-567734, (17-32):568794-568809, (33-48):569382-569397, (49-63):558865-558879, (64-101):569469-569506, (102-132):569508-569538, (133-147):558993-559007, (148-201):569590-569643, (202-216):565600-565614, (217-231):566272-566286, (232-248):569769-569785, (249-263):566384-566398, (264-278):566457-566471, (279-293):566752-566766, (294-308):568774-568788, (309-323):569011-569025, (324-433):569924-570033, (434-470):570077-570113, (471-485):569072-569086, (486-502):570132-570148, (503-517):569364-569378, (518-531):558962-558975, (532-588):570235-570291, (589-615):570293-570319, (616-650):570330-570364, (651-664):559616-559629, (665-678):564436-564449, (679-692):565132-565145, (693-706):565206-565219, (707-720):565874-565887, (721-785):570494-570558, (786-820):570561-570595, (821-847):570613-570639, (848-873):570732-570757, (874-887):567538-567551, (888-935):570777-570824, (936-949):567864-567877, (950-967):570848-570865, (968-986):570872-570890, (987-1000):568523-568536, (1001-1014):569040-569053, (1015-1039):571108-571132, (1040[u]):571133, (1041-1103):571134-571196, (1104-1117):569449-569462, (1118-1131):570162-570175, (1132-1148):571229-571245, (1149-1161):559571-559583, (1162-1174):561875-561887, (1175-1205):571260-571290, (1206-1219):571315-571328, (1220-1232):564359-564371, (1233-1253):571883-571903, (1254-1296):571988-572030, (1297[u]):572031, (1298-1307):572032-572041, (1308-1311[u]):572042-572045, (1312-1314):572046-572048, (1315-1317[u]):572049-572051, (1318-1320):572052-572054, (1321-1323[u]):572055-572057, (1324-1326):572058-572060, (1327-1330[u]):572061-572064, (1331-1342):572065-572076, (1343-1345[u]):572077-572079, (1346[u]):564679, (1347-1358):564680-564691, (1359-1377):573869-573887, (1378-1385):565357-565364, (1386[u]):565365, (1387-1390):565366-565369, (1391-1403):565373-565385, (1404-1430):579685-579711, (1431-1437):579820-579826, (1438[u]):579827, (1439-1450):579828-579839, (1451-1462):580031-580042, (1463[u]):580043, (1464-1491):580044-580071, (1492[u]):580072, (1493):580073, (1494[u]):580074, (1495):580075, (1496[u]):580076, (1497):580077, (1498[u]):580078, (1499):580079, (1500[u]):580080, (1501):580081, (1502[u]):580082, (1503-1508):580083-580088, (1509-1515[u]):580089-580095, (1516-1528[u]):566194-566206, (1529-1543[u]):582385-582399, (1544-1556[u]):566324-566336, (1557-1618[u]):582569-582630, (1619-1631[u]):566519-566531, (1632-1692[u]):583846-583906, (1693-1705[u]):567468-567480, (1706-1738[u]):584000-584032, (1739-1823[u]):585702-585786, (1824-1836[u]):568543-568555, (1837-1849[u]):568589-568601, (1850-1876[u]):585805-585831, (1877-1981[u]):585836-585940, (1982-1994[u]):569094-569106, (1995-2047[u]):12553131-12553183

Inode: 3015543   Type: regular    Mode:  0640   Flags: 0x80000
Generation: 1709572147    Version: 0x00000000:00000004
User:     0   Group:   999   Project:     0   Size: 16777216
File ACL: 0
Links: 1   Blockcount: 32776
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x67ead0d2:04c4b400 -- Mon Mar 31 13:28:50 2025
 atime: 0x67fb7fb0:616f1038 -- Sun Apr 13 05:11:12 2025
 mtime: 0x67ead0c7:5a995c00 -- Mon Mar 31 13:28:39 2025
crtime: 0x67e8099a:4f27ac00 -- Sat Mar 29 10:54:18 2025
Size of extra inode fields: 32
Extended attributes:
  system.posix_acl_access (28) = 01 00 00 00 01 00 06 00 04 00 05 00 08 00 04 00 04 00 00 00 10 00 04 00 20 00 00 00 
  user.crtime_usec (8) = 5e 3d 87 5c 7c 31 06 00 
Inode checksum: 0xae059da3
EXTENTS:
(ETB0):12091710, (0):12091709, (1-62):296431-296492, (63-350):371135-371422, (351-630):362144-362423, (631-868):365266-365503, (869-1061):366143-366335, (1062-1217):369289-369444, (1218-1373):370369-370524, (1374-1382):365056-365064, (1383[u]):365065, (1384-1497):365066-365179, (1498-1619):361856-361977, (1620-1719):364416-364515, (1720-1726):378342-378348, (1727-1728[u]):378349-378350, (1729-1732):378351-378354, (1733-1734[u]):378355-378356, (1735-1737):378357-378359, (1738[u]):378360, (1739-1806):378361-378428, (1807-1815):378112-378120, (1816-1817[u]):378121-378122, (1818-1840):378123-378145, (1841[u]):378146, (1842-1867):378147-378172, (1868-1870[u]):378173-378175, (1871-1884):378176-378189, (1885-1950):370750-370815, (1951-1977):12321819-12321845, (1978-1987[u]):12321846-12321855, (1988-1995):12321856-12321863, (1996-2006[u]):12321864-12321874, (2007-2014):12321875-12321882, (2015-2024[u]):12321883-12321892, (2025-2033):12321893-12321901, (2034-2043[u]):12321902-12321911, (2044-2047):12321912-12321915, (2048-2052):200576-200580, (2053-2055[u]):200581-200583, (2056-2065):200584-200593, (2066[u]):200594, (2067-2096):200595-200624, (2097-2118):295946-295967, (2119-2130[u]):295968-295979, (2131-2139):295980-295988, (2140-2193):340480-340533, (2194[u]):340534, (2195-2198):340535-340538, (2199-2202[u]):340539-340542, (2203-2237):340543-340577, (2238[u]):340578, (2239-2258):340579-340598, (2259[u]):340599, (2260):340600, (2261[u]):340601, (2262-2288):340602-340628, (2289-2292[u]):340629-340632, (2293-2355):340633-340695, (2356-2359[u]):340696-340699, (2360-2365):340700-340705, (2366[u]):340706, (2367):340707, (2368[u]):340708, (2369-2391):340709-340731, (2392-2395[u]):340732-340735, (2396-2405):340736-340745, (2406[u]):340746, (2407-2475):340747-340815, (2476-2480[u]):340816-340820, (2481):340821, (2482-2486[u]):340822-340826, (2487-2488):340827-340828, (2489-2492[u]):340829-340832, (2493-2494):340833-340834, (2495-2498[u]):340835-340838, (2499-2500):340839-340840, (2501-2504[u]):340841-340844, (2505-2506):340845-340846, (2507-2511[u]):340847-340851, (2512-2521):340852-340861, (2522[u]):340862, (2523-2535):340863-340875, (2536[u]):340876, (2537-2555):340877-340895, (2556-2624):340948-341016, (2625[u]):341017, (2626-2653):341018-341045, (2654-2658[u]):341046-341050, (2659-2697):341051-341089, (2698-2714[u]):341090-341106, (2715-2741):341107-341133, (2742-2791[u]):341134-341183, (2792-2965[u]):339794-339967, (2966-3025[u]):340356-340415, (3026-3078[u]):351062-351114, (3079-3129[u]):350406-350456, (3130-3180[u]):351116-351166, (3181-3227[u]):347344-347390, (3228-3273[u]):358147-358192, (3274-3307[u]):350961-350994, (3308-3340[u]):358113-358145, (3341-3357[u]):350782-350798, (3358-3374[u]):350877-350893, (3375-3407[u]):358258-358290, (3408-3427[u]):358298-358317, (3428-3471[u]):358320-358363, (3472-3488[u]):358061-358077, (3489-3504[u]):331264-331279, (3505-3519[u]):329169-329183, (3520-3545[u]):358400-358425, (3546-3568[u]):358427-358449, (3569-3583[u]):339089-339103, (3584-3598[u]):339729-339743, (3599-3613[u]):340209-340223, (3614-3628[u]):342129-342143, (3629-3648[u]):358481-358500, (3649-3676[u]):358502-358529, (3677-3691[u]):350523-350537, (3692-3716[u]):358536-358560, (3717-3731[u]):356104-356118, (3732-3771[u]):358585-358624, (3772-3786[u]):356156-356170, (3787-3801[u]):357777-357791, (3802-3816[u]):358024-358038, (3817-3830[u]):332274-332287, (3831-3844[u]):337234-337247, (3845-3858[u]):341618-341631, (3859-3876[u]):358674-358691, (3877-3896[u]):358693-358712, (3897-3910[u]):356407-356420, (3911-3924[u]):356724-356737, (3925-3938[u]):357702-357715, (3939-3952[u]):357934-357947, (3953-3965[u]):332243-332255, (3966-3978[u]):334034-334046, (3979-3991[u]):337715-337727, (3992-4004[u]):338931-338943, (4005-4095[u]):373922-374012

Inode: 3015127   Type: regular    Mode:  0640   Flags: 0x80000
Generation: 2395591611    Version: 0x00000000:00000004
User:     0   Group:   999   Project:     0   Size: 8388608
File ACL: 0
Links: 1   Blockcount: 16392
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x67d32f9b:60523400 -- Thu Mar 13 15:18:51 2025
 atime: 0x67fb7fb0:616f1038 -- Sun Apr 13 05:11:12 2025
 mtime: 0x67d32f10:4dd2576c -- Thu Mar 13 15:16:32 2025
crtime: 0x67d2f83d:38444c00 -- Thu Mar 13 11:22:37 2025
Size of extra inode fields: 32
Extended attributes:
  system.posix_acl_access (28) = 01 00 00 00 01 00 06 00 04 00 05 00 08 00 04 00 04 00 00 00 10 00 04 00 20 00 00 00 
  user.crtime_usec (8) = 7a 70 54 e4 3a 30 06 00 
Inode checksum: 0xf65a5bf5
EXTENTS:
(ETB0):12091933, (0):12091932, (1-820):119372-120191, (821-1041):124940-125160, (1042[u]):125161, (1043):125162, (1044[u]):125163, (1045):125164, (1046[u]):125165, (1047):125166, (1048[u]):125167, (1049):125168, (1050[u]):125169, (1051-1069):125170-125188, (1070[u]):125189, (1071-1106):125190-125225, (1107-1424[u]):125226-125543, (1425-2047[u]):12280833-12281455

Inode: 3014921   Type: regular    Mode:  0640   Flags: 0x80000
Generation: 3513189876    Version: 0x00000000:00000004
User:     0   Group:   999   Project:     0   Size: 8388608
File ACL: 0
Links: 1   Blockcount: 16392
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x67eda46a:29020c00 -- Wed Apr  2 16:56:10 2025
 atime: 0x67fb7fb0:616f1038 -- Sun Apr 13 05:11:12 2025
 mtime: 0x67ed9e32:175172b4 -- Wed Apr  2 16:29:38 2025
crtime: 0x67ecc694:4e338800 -- Wed Apr  2 01:09:40 2025
Size of extra inode fields: 32
Extended attributes:
  system.posix_acl_access (28) = 01 00 00 00 01 00 06 00 04 00 05 00 08 00 04 00 04 00 00 00 10 00 04 00 20 00 00 00 
  user.crtime_usec (8) = 95 e1 14 a9 c4 31 06 00 
Inode checksum: 0x060313b7
EXTENTS:
(ETB0):12092027, (0):12091928, (1-518):391668-392185, (519-957):374409-374847, (958-1046):371840-371928, (1047[u]):371929, (1048):371930, (1049[u]):371931, (1050-1069):371932-371951, (1070[u]):371952, (1071-1176):371953-372058, (1177-1181[u]):372059-372063, (1182-1363[u]):372064-372245, (1364-1724[u]):388247-388607, (1725-2047[u]):368124-368446

Inode: 3016146   Type: regular    Mode:  0640   Flags: 0x80000
Generation: 1186996424    Version: 0x00000000:00000003
User:     0   Group:   999   Project:     0   Size: 41943040
File ACL: 0
Links: 1   Blockcount: 81928
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x67efead1:1a4e0038 -- Fri Apr  4 10:21:05 2025
 atime: 0x67fb7fb0:616f1038 -- Sun Apr 13 05:11:12 2025
 mtime: 0x67efead1:0923a03c -- Fri Apr  4 10:21:05 2025
crtime: 0x67efea70:26e0793c -- Fri Apr  4 10:19:28 2025
Size of extra inode fields: 32
Extended attributes:
  system.posix_acl_access (28) = 01 00 00 00 01 00 06 00 04 00 05 00 08 00 05 00 04 00 00 00 10 00 04 00 20 00 00 00 
  user.crtime_usec (8) = 23 14 fe 92 f4 31 06 00 
Inode checksum: 0xf9a0ea9d
EXTENTS:
(ETB0):12091574, (0):8651776, (1-2047):9220096-9222142, (2048-4095):9222144-9224191, (4096-6254):8318976-8321134, (6255-6409[u]):8321135-8321289, (6410-6421):8321290-8321301, (6422-6575[u]):8321302-8321455, (6576-6587):8321456-8321467, (6588-6742[u]):8321468-8321622, (6743-6754):8321623-8321634, (6755-6908[u]):8321635-8321788, (6909-6921):8321789-8321801, (6922-7075[u]):8321802-8321955, (7076-7087):8321956-8321967, (7088-7242[u]):8321968-8322122, (7243-7254):8322123-8322134, (7255-7408[u]):8322135-8322288, (7409-7420):8322289-8322300, (7421-7575[u]):8322301-8322455, (7576-7587):8322456-8322467, (7588-7741[u]):8322468-8322621, (7742-7754):8322622-8322634, (7755-7908[u]):8322635-8322788, (7909-8191):8322789-8323071, (8192-8514):8275968-8276290, (8515-10239[u]):8276291-8278015

Inode: 3017532   Type: regular    Mode:  0640   Flags: 0x80000
Generation: 809296807    Version: 0x00000000:00000004
User:     0   Group:   999   Project:     0   Size: 8388608
File ACL: 0
Links: 1   Blockcount: 16392
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x67c65174:af79e000 -- Mon Mar  3 20:03:48 2025
 atime: 0x67fb7fb0:616f1038 -- Sun Apr 13 05:11:12 2025
 mtime: 0x67c64fc6:496ed400 -- Mon Mar  3 19:56:38 2025
crtime: 0x67c64fc1:d4ab5c00 -- Mon Mar  3 19:56:33 2025
Size of extra inode fields: 32
Extended attributes:
  system.posix_acl_access (28) = 01 00 00 00 01 00 06 00 04 00 05 00 08 00 04 00 04 00 00 00 10 00 04 00 20 00 00 00 
  user.crtime_usec (8) = 48 5a 80 be 79 2f 06 00 
Inode checksum: 0x1e4458ca
EXTENTS:
(ETB0):12091499, (0):12091498, (1-111):65265-65375, (112-217):57494-57599, (218-315):60542-60639, (316-412):43967-44063, (413-509):57343-57439, (510-605):35488-35583, (606-700):41377-41471, (701-823):275211-275333, (824-926):274873-274975, (927-1005):287744-287822, (1006-1027[u]):287823-287844, (1028-1123[u]):281307-281402, (1124-1212[u]):287639-287727, (1213-1290[u]):286679-286756, (1291-1365[u]):295989-296063, (1366-1440[u]):303349-303423, (1441-1504[u]):339648-339711, (1505-1563[u]):355961-356019, (1564-1621[u]):352060-352117, (1622-1678[u]):356596-356652, (1679-1732[u]):356049-356102, (1733-1785[u]):333172-333224, (1786-1837[u]):331318-331369, (1838-1887[u]):355280-355329, (1888-1932[u]):357330-357374, (1933-1975[u]):333081-333123, (1976-2047[u]):30796-30867

Inode: 3015589   Type: regular    Mode:  0640   Flags: 0x80000
Generation: 2567044870    Version: 0x00000000:00000004
User:     0   Group:   999   Project:     0   Size: 8388608
File ACL: 0
Links: 1   Blockcount: 16392
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x67e8099a:4f27ac00 -- Sat Mar 29 10:54:18 2025
 atime: 0x67fb7fb0:616f1038 -- Sun Apr 13 05:11:12 2025
 mtime: 0x67e8096a:84517ff0 -- Sat Mar 29 10:53:30 2025
crtime: 0x67e801ad:e4e1c000 -- Sat Mar 29 10:20:29 2025
Size of extra inode fields: 32
Extended attributes:
  system.posix_acl_access (28) = 01 00 00 00 01 00 06 00 04 00 05 00 08 00 04 00 04 00 00 00 10 00 04 00 20 00 00 00 
  user.crtime_usec (8) = 8d bd a0 e3 7b 31 06 00 
Inode checksum: 0x9fad6878
EXTENTS:
(ETB0):12091708, (0):12091707, (1-154):221636-221789, (155-291):218885-219021, (292-397):197888-197993, (398-496):198129-198227, (497-560):199808-199871, (561-624):218469-218532, (625-678):219270-219323, (679-731):217803-217855, (732-804):234231-234303, (805-1039):306431-306665, (1040[u]):306666, (1041-1042):306667-306668, (1043[u]):306669, (1044):306670, (1045[u]):306671, (1046):306672, (1047[u]):306673, (1048):306674, (1049[u]):306675, (1050-1069):306676-306695, (1070[u]):306696, (1071-1074):306697-306700, (1075-1146[u]):306701-306772, (1147-1355[u]):313332-313540, (1356-1516[u]):297566-297726, (1517-1672[u]):300742-300897, (1673-1827[u]):305758-305912, (1828-1971[u]):310277-310420, (1972-2047[u]):12404659-12404734

Inode: 3017537   Type: regular    Mode:  0640   Flags: 0x80000
Generation: 426107682    Version: 0x00000000:00000004
User:     0   Group:   999   Project:     0   Size: 8388608
File ACL: 0
Links: 1   Blockcount: 16392
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x67c724ac:07645628 -- Tue Mar  4 11:05:00 2025
 atime: 0x67fb7fb0:616f1038 -- Sun Apr 13 05:11:12 2025
 mtime: 0x67c72424:288f73b8 -- Tue Mar  4 11:02:44 2025
crtime: 0x67c72033:06acfc00 -- Tue Mar  4 10:45:55 2025
Size of extra inode fields: 32
Extended attributes:
  system.posix_acl_access (28) = 01 00 00 00 01 00 06 00 04 00 05 00 08 00 04 00 04 00 00 00 10 00 04 00 20 00 00 00 
  user.crtime_usec (8) = 61 a6 12 2b 86 2f 06 00 
Inode checksum: 0x08465c25
EXTENTS:
(ETB0):12091714, (0):12091701, (1-122):407398-407519, (123-219):408063-408159, (220-255):406524-406559, (256-291):406777-406812, (292-323):407296-407327, (324-352):393565-393593, (353-380):407576-407603, (381-406):395072-395097, (407-432):399429-399454, (433-458):407618-407643, (459-483):397335-397359, (484-720):411379-411615, (721-743):402227-402249, (744-775):411653-411684, (776-798):402888-402910, (799-821):403885-403907, (822-843):393318-393339, (844-865):399527-399548, (866-886):396222-396242, (887-907):403496-403516, (908-928):406037-406057, (929-948):402004-402023, (949-1037):411870-411958, (1038[u]):411959, (1039-1082):411960-412003, (1083[u]):412004, (1084-1091):412005-412012, (1092-1111):403943-403962, (1112-1114):412059-412061, (1115-1257[u]):412062-412204, (1258-1277[u]):411687-411706, (1278-1296[u]):394496-394514, (1297-1364[u]):412245-412312, (1365-1383[u]):400646-400664, (1384-1402[u]):401859-401877, (1403-1421[u]):406189-406207, (1422-1440[u]):407733-407751, (1441-1458[u]):394734-394751, (1459-1476[u]):402179-402196, (1477-1494[u]):402650-402667, (1495-1519[u]):412400-412424, (1520-1541[u]):412431-412452, (1542-1559[u]):411800-411817, (1560-1577[u]):412318-412335, (1578-1594[u]):400667-400683, (1595-1611[u]):401596-401612, (1612-1658[u]):412501-412547, (1659-1675[u]):403724-403740, (1676-1692[u]):406295-406311, (1693-1710[u]):412580-412597, (1711-1727[u]):407715-407731, (1728-1743[u]):412214-412229, (1744-1765[u]):412620-412641, (1766-1791[u]):412646-412671, (1792-2047[u]):412928-413183

Inode: 3015309   Type: regular    Mode:  0640   Flags: 0x80000
Generation: 3694773008    Version: 0x00000000:00000004
User:     0   Group:   999   Project:     0   Size: 8388608
File ACL: 0
Links: 1   Blockcount: 16392
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x67e7fc36:05b8d800 -- Sat Mar 29 09:57:10 2025
 atime: 0x67fb7fb0:616f1038 -- Sun Apr 13 05:11:12 2025
 mtime: 0x67e7fb4b:a0bd626c -- Sat Mar 29 09:53:15 2025
crtime: 0x67e7fb2a:b71b0000 -- Sat Mar 29 09:52:42 2025
Size of extra inode fields: 32
Extended attributes:
  system.posix_acl_access (28) = 01 00 00 00 01 00 06 00 04 00 05 00 08 00 04 00 04 00 00 00 10 00 04 00 20 00 00 00 
  user.crtime_usec (8) = 43 65 41 80 7b 31 06 00 
Inode checksum: 0xa1fee811
EXTENTS:
(ETB0):12091704, (0):12092087, (1-384):14080-14463, (385-758):13568-13941, (759-982):27392-27615, (983-1034):11175-11226, (1035[u]):11227, (1036):11228, (1037[u]):11229, (1038):11230, (1039[u]):11231, (1040):11232, (1041[u]):11233, (1042):11234, (1043[u]):11235, (1044-1062):11236-11254, (1063-1181[u]):11255-11373, (1182-1338[u]):14592-14748, (1339-1479[u]):12147-12287, (1480-1615[u]):15270-15405, (1616-1743[u]):9344-9471, (1744-1846[u]):10944-11046, (1847-1949[u]):14942-15044, (1950-2047[u]):12328448-12328545

Inode: 3014668   Type: regular    Mode:  0640   Flags: 0x80000
Generation: 1302887663    Version: 0x00000000:00000005
User:     0   Group:   999   Project:     0   Size: 3773968
File ACL: 0
Links: 1   Blockcount: 7376
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x67db3fe5:928dc968 -- Wed Mar 19 18:06:29 2025
 atime: 0x67fb7fb0:616f1038 -- Sun Apr 13 05:11:12 2025
 mtime: 0x67db3fe5:928dc968 -- Wed Mar 19 18:06:29 2025
crtime: 0x67d9d424:6a998d9c -- Tue Mar 18 16:14:28 2025
Size of extra inode fields: 32
Extended attributes:
  system.posix_acl_access (36) = 01 00 00 00 01 00 06 00 02 00 04 00 e8 03 00 00 04 00 05 00 08 00 05 00 04 00 00 00 10 00 04 00 20 00 00 00 
  user.crtime_usec (8) = 7d 38 49 8d a3 30 06 00 
Inode checksum: 0x10cd2e76
EXTENTS:
(0):17906944, (1-921):2314736-2315656

Inode: 3015260   Type: regular    Mode:  0640   Flags: 0x80000
Generation: 4165214641    Version: 0x00000000:00000004
User:     0   Group:   999   Project:     0   Size: 8388608
File ACL: 0
Links: 1   Blockcount: 16392
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x67c72033:05b8d800 -- Tue Mar  4 10:45:55 2025
 atime: 0x67fb7fb0:616f1038 -- Sun Apr 13 05:11:12 2025
 mtime: 0x67c71dc0:5b8d8000 -- Tue Mar  4 10:35:28 2025
crtime: 0x67c65469:d38f872c -- Mon Mar  3 20:16:25 2025
Size of extra inode fields: 32
Extended attributes:
  system.posix_acl_access (28) = 01 00 00 00 01 00 06 00 04 00 05 00 08 00 04 00 04 00 00 00 10 00 04 00 20 00 00 00 
  user.crtime_usec (8) = 8f c2 8c 05 7a 2f 06 00 
Inode checksum: 0xe8eb1f64
EXTENTS:
(ETB0):12091503, (0):12091502, (1-48):50896-50943, (49-95):51793-51839, (96-139):36756-36799, (140-181):40918-40959, (182-221):34133-34172, (222-258):46363-46399, (259-295):51547-51583, (296-330):34578-34612, (331-362):51424-51455, (363-393):34688-34718, (394-424):45345-45375, (425-455):45537-45567, (456-486):46241-46271, (487-517):49505-49535, (518-548):49825-49855, (549-579):52641-52671, (580-610):56737-56767, (611-640):36226-36255, (641-670):45602-45631, (671-700):48226-48255, (701-729):35456-35484, (730-758):38211-38239, (759-787):44995-45023, (788-816):47523-47551, (817-845):47779-47807, (846-874):51139-51167, (875-929):160841-160895, (930-979):140352-140401, (980-1028):132354-132402, (1029-1057):331569-331597, (1058-1098):356767-356807, (1099-1138):356366-356405, (1139-1176):350663-350700, (1177-1198):357291-357312, (1199[u]):357313, (1200-1214):357314-357328, (1215-1251):348875-348911, (1252-1264):354474-354486, (1265-1266[u]):354487-354488, (1267-1270):354489-354492, (1271-1272[u]):354493-354494, (1273-1277):354495-354499, (1278[u]):354500, (1279-1283):354501-354505, (1284[u]):354506, (1285-1288):354507-354510, (1289-1302):350619-350632, (1303-1304[u]):350633-350634, (1305-1323):350635-350653, (1324-1342):351995-352013, (1343[u]):352014, (1344-1355):352015-352026, (1356-1384):357138-357166, (1385-1387):349898-349900, (1388[u]):349901, (1389-1412):349902-349925, (1413-1421):350208-350216, (1422-1424[u]):350217-350219, (1425-1439):350220-350234, (1440-1443[u]):350054-350057, (1444-1445):350058-350059, (1446-1449[u]):350060-350063, (1450-1464):350064-350078, (1465-1467):356739-356741, (1468[u]):356742, (1469-1476):356743-356750, (1477[u]):356751, (1478):356752, (1479[u]):356753, (1480):356754, (1481[u]):356755, (1482):356756, (1483[u]):356757, (1484):356758, (1485[u]):356759, (1486):356760, (1487[u]):356761, (1488-1489):356762-356763, (1490-1514):357492-357516, (1515-1524):350482-350491, (1525[u]):350492, (1526-1537):350493-350504, (1538-1559):356131-356152, (1560[u]):356153, (1561-1585):357676-357700, (1586-1608):357531-357553, (1609-1615):333009-333015, (1616[u]):333016, (1617-1630):333017-333030, (1631):337130, (1632-1652[u]):337131-337151, (1653-1674[u]):356021-356042, (1675-1694[u]):356440-356459, (1695-1713[u]):354959-354977, (1714-1731[u]):356276-356293, (1732-1748[u]):331618-331634, (1749-1775[u]):357812-357838, (1776-1792[u]):354874-354890, (1793-1809[u]):355164-355180, (1810-1826[u]):357658-357674, (1827-1843[u]):357793-357809, (1844-1859[u]):331396-331411, (1860-1875[u]):332656-332671, (1876-1891[u]):346580-346595, (1892-1907[u]):356423-356438, (1908-1923[u]):357717-357732, (1924-1938[u]):334013-334027, (1939-1953[u]):334193-334207, (1954-1968[u]):337489-337503, (1969-1983[u]):338705-338719, (1984-2047[u]):371776-371839

Inode: 3017540   Type: regular    Mode:  0640   Flags: 0x80000
Generation: 3412665845    Version: 0x00000000:00000004
User:     0   Group:   999   Project:     0   Size: 8388608
File ACL: 0
Links: 1   Blockcount: 16392
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x67c73c0d:b1622800 -- Tue Mar  4 12:44:45 2025
 atime: 0x67fb7fb0:616f1038 -- Sun Apr 13 05:11:12 2025
 mtime: 0x67c73515:d3423a94 -- Tue Mar  4 12:15:01 2025
crtime: 0x67c7256f:d59f8000 -- Tue Mar  4 11:08:15 2025
Size of extra inode fields: 32
Extended attributes:
  system.posix_acl_access (28) = 01 00 00 00 01 00 06 00 04 00 05 00 08 00 04 00 04 00 00 00 10 00 04 00 20 00 00 00 
  user.crtime_usec (8) = 8e b4 fe 7a 86 2f 06 00 
Inode checksum: 0xc99cfcef
EXTENTS:
(ETB0):12091823, (0):12091822, (1-121):422535-422655, (122-494):422731-423103, (495-508):406401-406414, (509-570):423234-423295, (571-609):423394-423432, (610-997):423434-423821, (998-1011):407672-407685, (1012-1025):408896-408909, (1026-1039):409921-409934, (1040):409995, (1041[u]):409996, (1042-1053):409997-410008, (1054-1067):410068-410081, (1068-1090):424227-424249, (1091-1105):424326-424340, (1106-1133):424369-424396, (1134-1147):410098-410111, (1148-1161):410828-410841, (1162-1175):412485-412498, (1176-1189):412599-412612, (1190-1203):415922-415935, (1204-1217):418162-418175, (1218-1219):393369-393370, (1220-1230[u]):393371-393381, (1231-1243[u]):393497-393509, (1244-1257[u]):424550-424563, (1258-1270[u]):393715-393727, (1271-1283[u]):399475-399487, (1284-1296[u]):401582-401594, (1297-1309[u]):401974-401986, (1310-1349[u]):424634-424673, (1350-1362[u]):402068-402080, (1363-1375[u]):403100-403112, (1376-1388[u]):403262-403274, (1389-1401[u]):405971-405983, (1402-1414[u]):406087-406099, (1415-1427[u]):406148-406160, (1428-1440[u]):406374-406386, (1441-1453[u]):406427-406439, (1454-1469[u]):424910-424925, (1470-1483[u]):424943-424956, (1484-1505[u]):426026-426047, (1506-1807[u]):542930-543231, (1808-2047[u]):539876-540115

Inode: 3016190   Type: regular    Mode:  0640   Flags: 0x80000
Generation: 229362627    Version: 0x00000000:00000004
User:     0   Group:   999   Project:     0   Size: 8388608
File ACL: 0
Links: 1   Blockcount: 16392
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x67d86aca:53ec6000 -- Mon Mar 17 14:32:42 2025
 atime: 0x67fb7fb0:616f1038 -- Sun Apr 13 05:11:12 2025
 mtime: 0x67d84aaf:85329a28 -- Mon Mar 17 12:15:43 2025
crtime: 0x67d8487f:67f35400 -- Mon Mar 17 12:06:23 2025
Size of extra inode fields: 32
Extended attributes:
  system.posix_acl_access (28) = 01 00 00 00 01 00 06 00 04 00 05 00 08 00 04 00 04 00 00 00 10 00 04 00 20 00 00 00 
  user.crtime_usec (8) = 73 93 3a f8 8b 30 06 00 
Inode checksum: 0xa419f928
EXTENTS:
(ETB0):12091627, (0):12091625, (1-146):1019493-1019638, (147-354):1038128-1038335, (355-491):1043712-1043848, (492-622):1017784-1017914, (623-750):1016192-1016319, (751-866):1033600-1033715, (867-982):1043584-1043699, (983-1040):1037568-1037625, (1041[u]):1037626, (1042-1097):1037627-1037682, (1098-1179):1039616-1039697, (1180-1212[u]):1039698-1039730, (1213-1321[u]):1039461-1039569, (1322-1417[u]):1033376-1033471, (1418-1509[u]):1031936-1032027, (1510-1601[u]):1032064-1032155, (1602-1688[u]):1033216-1033302, (1689-1760[u]):1039744-1039815, (1761-1887[u]):1073025-1073151, (1888-2040[u]):1141504-1141656, (2041-2047[u]):1141728-1141734

Inode: 3015573   Type: regular    Mode:  0640   Flags: 0x80000
Generation: 1174815483    Version: 0x00000000:00000004
User:     0   Group:   999   Project:     0   Size: 8388608
File ACL: 0
Links: 1   Blockcount: 16392
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x67c63ab9:7a120000 -- Mon Mar  3 18:26:49 2025
 atime: 0x67fb7fb0:616f1038 -- Sun Apr 13 05:11:12 2025
 mtime: 0x67c6397b:7104c57c -- Mon Mar  3 18:21:31 2025
crtime: 0x67c5e0f8:c65d4000 -- Mon Mar  3 12:03:52 2025
Size of extra inode fields: 32
Extended attributes:
  system.posix_acl_access (28) = 01 00 00 00 01 00 06 00 04 00 05 00 08 00 04 00 04 00 00 00 10 00 04 00 20 00 00 00 
  user.crtime_usec (8) = 28 ee 0c 24 73 2f 06 00 
Inode checksum: 0x01616a0c
EXTENTS:
(ETB0):12091616, (0):12091579, (1-217):35004-35220, (218-423):56818-57023, (424-629):66802-67007, (630-835):140402-140607, (836-1039):191118-191321, (1040[u]):191322, (1041-1162):191323-191444, (1163[u]):191445, (1164-1205):191446-191487, (1206-1227):176128-176149, (1228-1232[u]):176150-176154, (1233-1234):176155-176156, (1235-1238[u]):176157-176160, (1239-1240):176161-176162, (1241-1245[u]):176163-176167, (1246):176168, (1247-1251[u]):176169-176173, (1252-1280):176174-176202, (1281[u]):176203, (1282-1289):176204-176211, (1290-1294[u]):176212-176216, (1295-1332):176217-176254, (1333-1498[u]):176255-176420, (1499-1778[u]):204520-204799, (1779-2047[u]):250865-251133

Inode: 3015214   Type: regular    Mode:  0640   Flags: 0x80000
Generation: 3367057683    Version: 0x00000000:00000004
User:     0   Group:   999   Project:     0   Size: 8388608
File ACL: 0
Links: 1   Blockcount: 16392
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x67e4d69b:70889800 -- Thu Mar 27 00:39:55 2025
 atime: 0x67fb7fb0:616f1038 -- Sun Apr 13 05:11:12 2025
 mtime: 0x67e4d665:999d9e90 -- Thu Mar 27 00:39:01 2025
crtime: 0x67e4155b:2cea1f30 -- Wed Mar 26 10:55:23 2025
Size of extra inode fields: 32
Extended attributes:
  system.posix_acl_access (28) = 01 00 00 00 01 00 06 00 04 00 05 00 08 00 04 00 04 00 00 00 10 00 04 00 20 00 00 00 
  user.crtime_usec (8) = e9 bc de 06 40 31 06 00 
Inode checksum: 0x166e87ff
EXTENTS:
(ETB0):12092085, (0):12092084, (1-434):112206-112639, (435-852):114270-114687, (853-1037):117994-118178, (1038[u]):118179, (1039-1122):118180-118263, (1123[u]):118264, (1124-1270):118265-118411, (1271-1291):126464-126484, (1292[u]):126485, (1293-1300):126486-126493, (1301[u]):126494, (1302-1321):126495-126514, (1322-1326[u]):126515-126519, (1327):126520, (1328-1332[u]):126521-126525, (1333):126526, (1334-1338[u]):126527-126531, (1339-1340):126532-126533, (1341-1345[u]):126534-126538, (1346-1372):126539-126565, (1373-1654[u]):126566-126847, (1655-1962[u]):120524-120831, (1963-2047[u]):117824-117908

Inode: 3015258   Type: regular    Mode:  0640   Flags: 0x80000
Generation: 2861285810    Version: 0x00000000:00000004
User:     0   Group:   999   Project:     0   Size: 16777216
File ACL: 0
Links: 1   Blockcount: 32776
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x67c5e0f8:c5f2e188 -- Mon Mar  3 12:03:52 2025
 atime: 0x67fb7fb0:616f1038 -- Sun Apr 13 05:11:12 2025
 mtime: 0x67c5de72:31631dc8 -- Mon Mar  3 11:53:06 2025
crtime: 0x67c21092:17d78400 -- Fri Feb 28 14:37:54 2025
Size of extra inode fields: 32
Extended attributes:
  system.posix_acl_access (28) = 01 00 00 00 01 00 06 00 04 00 05 00 08 00 04 00 04 00 00 00 10 00 04 00 20 00 00 00 
  user.crtime_usec (8) = c1 5d 59 f1 38 2f 06 00 
Inode checksum: 0x932a44a2
EXTENTS:
(ETB0):12091577, (0):12091576, (1-239):39537-39775, (240-477):57618-57855, (478-714):39955-40191, (715-948):83968-84201, (949-1039):141100-141190, (1040[u]):141191, (1041-1157):141192-141308, (1158[u]):141309, (1159-1160):141310-141311, (1161-1507):189024-189370, (1508[u]):189371, (1509-1518):189372-189381, (1519[u]):189382, (1520-1528):189383-189391, (1529[u]):189392, (1530-1556):189393-189419, (1557[u]):189420, (1558-1576):189421-189439, (1577-1591):169610-169624, (1592[u]):169625, (1593):169626, (1594[u]):169627, (1595-1621):169628-169654, (1622[u]):169655, (1623-1624):169656-169657, (1625[u]):169658, (1626-1627):169659-169660, (1628[u]):169661, (1629-1634):169662-169667, (1635-1639[u]):169668-169672, (1640-1673):169673-169706, (1674-1676[u]):169707-169709, (1677-1691):169710-169724, (1692-1694[u]):169725-169727, (1695-1697):169728-169730, (1698-1700[u]):169731-169733, (1701-1719):169734-169752, (1720[u]):169753, (1721):169754, (1722[u]):169755, (1723):169756, (1724[u]):169757, (1725):169758, (1726[u]):169759, (1727-1742):169760-169775, (1743[u]):169776, (1744-1757):169777-169790, (1758-1762[u]):169791-169795, (1763):169796, (1764-1768[u]):169797-169801, (1769-1793):169802-169826, (1794-1798[u]):169827-169831, (1799-1818):169832-169851, (1819[u]):169852, (1820-1873):169853-169906, (1874[u]):169907, (1875-1884):169908-169917, (1885-1889[u]):169918-169922, (1890-1894):169923-169927, (1895[u]):169928, (1896-1950):169929-169983, (1951-1991):12393434-12393474, (1992[u]):12393475, (1993-2000):12393476-12393483, (2001-2017[u]):12393484-12393500, (2018):12393501, (2019-2036[u]):12393502-12393519, (2037):12393520, (2038-2047[u]):12393521-12393530, (2048-2054[u]):4033040-4033046, (2055):4033047, (2056-2073[u]):4033048-4033065, (2074-2077):4033066-4033069, (2078[u]):4033070, (2079):4033071, (2080-2554[u]):4033072-4033546, (2555-2998[u]):4070967-4071410, (2999-3301[u]):4072099-4072401, (3302-3567[u]):4261366-4261631, (3568-4022[u]):4314777-4315231, (4023-4095[u]):4317366-4317438

Inode: 3017816   Type: regular    Mode:  0640   Flags: 0x80000
Generation: 3402060312    Version: 0x00000000:00000004
User:     0   Group:   999   Project:     0   Size: 8388608
File ACL: 0
Links: 1   Blockcount: 16392
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x67c98e5c:d6f80e64 -- Thu Mar  6 07:00:28 2025
 atime: 0x67fb7fb0:616f1038 -- Sun Apr 13 05:11:12 2025
 mtime: 0x67c98e06:0b5095f0 -- Thu Mar  6 06:59:02 2025
crtime: 0x67c98df7:9f437c00 -- Thu Mar  6 06:58:47 2025
Size of extra inode fields: 32
Extended attributes:
  system.posix_acl_access (28) = 01 00 00 00 01 00 06 00 04 00 05 00 08 00 04 00 04 00 00 00 10 00 04 00 20 00 00 00 
  user.crtime_usec (8) = c1 65 80 3a ab 2f 06 00 
Inode checksum: 0xd575d2cb
EXTENTS:
(ETB0):12091524, (0):12091523, (1-138):1519485-1519622, (139-350):1529862-1530073, (351-525):1536351-1536525, (526-692):1538388-1538554, (693-852):1523559-1523718, (853-1004):1531232-1531383, (1005-1012[u]):1531384-1531391, (1013-1171[u]):1534297-1534455, (1172-1308[u]):1545191-1545327, (1309-1558[u]):1566720-1566969, (1559-1883[u]):1583857-1584181, (1884-2047[u]):1615872-1616035

Inode: 3017703   Type: regular    Mode:  0640   Flags: 0x80000
Generation: 1300108202    Version: 0x00000000:00000004
User:     0   Group:   999   Project:     0   Size: 8388608
File ACL: 0
Links: 1   Blockcount: 16392
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x67c988ab:ca2dd000 -- Thu Mar  6 06:36:11 2025
 atime: 0x67fb7fb0:616f1038 -- Sun Apr 13 05:11:12 2025
 mtime: 0x67c986c8:ea730428 -- Thu Mar  6 06:28:08 2025
crtime: 0x67c986b6:c1988c00 -- Thu Mar  6 06:27:50 2025
Size of extra inode fields: 32
Extended attributes:
  system.posix_acl_access (28) = 01 00 00 00 01 00 06 00 04 00 05 00 08 00 04 00 04 00 00 00 10 00 04 00 20 00 00 00 
  user.crtime_usec (8) = cb 05 d3 cb aa 2f 06 00 
Inode checksum: 0x591d7517
EXTENTS:
(ETB0):12091872, (0):12091871, (1-73):868087-868159, (74-156):1021312-1021394, (157-242):1381886-1381971, (243-354):1390389-1390500, (355-455):1382383-1382483, (456-549):1395928-1396021, (550-640):1396077-1396167, (641-731):1405328-1405418, (732-820):1389312-1389400, (821-909):1389811-1389899, (910-992):1379169-1379251, (993-1004):1380544-1380555, (1005-1067[u]):1380556-1380618, (1068-1138[u]):1379776-1379846, (1139-1203[u]):1398784-1398848, (1204-1267[u]):1381248-1381311, (1268-1331[u]):1381806-1381869, (1332-1394[u]):1385301-1385363, (1395-1452[u]):1384959-1385016, (1453-1510[u]):1406775-1406832, (1511-1567[u]):1386333-1386389, (1568-1615[u]):1394688-1394735, (1616-1662[u]):1401875-1401921, (1663-1707[u]):1406111-1406155, (1708-1751[u]):1406727-1406770, (1752-1793[u]):1389650-1389691, (1794-1834[u]):1406069-1406109, (1835-1875[u]):1406917-1406957, (1876-1914[u]):1406488-1406526, (1915-1952[u]):1406633-1406670, (1953-1989[u]):1385947-1385983, (1990-2047[u]):1001152-1001209

Inode: 3014675   Type: regular    Mode:  0640   Flags: 0x80000
Generation: 3826755184    Version: 0x00000000:00000004
User:     0   Group:   999   Project:     0   Size: 8388608
File ACL: 0
Links: 1   Blockcount: 16384
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x67d1b328:69db9c00 -- Wed Mar 12 12:15:36 2025
 atime: 0x67fb7fb0:616f1038 -- Sun Apr 13 05:11:12 2025
 mtime: 0x67d1b306:2bb911a8 -- Wed Mar 12 12:15:02 2025
crtime: 0x67d0d98d:5cf5b5e4 -- Tue Mar 11 20:47:09 2025
Size of extra inode fields: 32
Extended attributes:
  system.posix_acl_access (28) = 01 00 00 00 01 00 06 00 04 00 05 00 08 00 04 00 04 00 00 00 10 00 04 00 20 00 00 00 
  user.crtime_usec (8) = f1 b6 95 8b 1a 30 06 00 
Inode checksum: 0xc91c5f47
EXTENTS:
(0):12091836, (1-1175):21270-22444, (1176-2047[u]):22445-23316

Inode: 3016152   Type: regular    Mode:  0640   Flags: 0x80000
Generation: 651243428    Version: 0x00000000:00000004
User:     0   Group:   999   Project:     0   Size: 8388608
File ACL: 0
Links: 1   Blockcount: 16392
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x67d8487f:66ff3000 -- Mon Mar 17 12:06:23 2025
 atime: 0x67fb7fb0:616f1038 -- Sun Apr 13 05:11:12 2025
 mtime: 0x67d8482e:1e75b700 -- Mon Mar 17 12:05:02 2025
crtime: 0x67d7e646:b9034800 -- Mon Mar 17 05:07:18 2025
Size of extra inode fields: 32
Extended attributes:
  system.posix_acl_access (28) = 01 00 00 00 01 00 06 00 04 00 05 00 08 00 04 00 04 00 00 00 10 00 04 00 20 00 00 00 
  user.crtime_usec (8) = 0e 84 7d 1d 86 30 06 00 
Inode checksum: 0x1a8f74a4
EXTENTS:
(ETB0):12091626, (0):3702638, (1-419):1782365-1782783, (420-835):1787488-1787903, (836-1039):1781900-1782103, (1040[u]):1782104, (1041-1206):1782105-1782270, (1207[u]):1782271, (1208-1236):1782272-1782300, (1237-1270):1784964-1784997, (1271-1273[u]):1784998-1785000, (1274-1276):1785001-1785003, (1277-1279[u]):1785004-1785006, (1280-1282):1785007-1785009, (1283-1285[u]):1785010-1785012, (1286-1289):1785013-1785016, (1290-1291[u]):1785017-1785018, (1292-1308):1785019-1785035, (1309-1312[u]):1785036-1785039, (1313-1354):1785040-1785081, (1355[u]):1785082, (1356-1359):1785083-1785086, (1360[u]):1785087, (1361-1373):1785088-1785100, (1374[u]):1785101, (1375-1393):1785102-1785120, (1394[u]):1785121, (1395-1409):1785122-1785136, (1410[u]):1785137, (1411-1439):1785138-1785166, (1440-1444[u]):1785167-1785171, (1445-1456):1785172-1785183, (1457-1461[u]):1785184-1785188, (1462-1463):1785189-1785190, (1464-1468[u]):1785191-1785195, (1469-1483):1785196-1785210, (1484[u]):1785211, (1485):1785212, (1486[u]):1785213, (1487):1785214, (1488[u]):1785215, (1489):1785216, (1490[u]):1785217, (1491):1785218, (1492[u]):1785219, (1493):1785220, (1494[u]):1785221, (1495-1511):1785222-1785238, (1512[u]):1785239, (1513-1540):1785240-1785267, (1541[u]):1785268, (1542-1560):1785269-1785287, (1561-1616[u]):1785288-1785343, (1617-1986[u]):1783438-1783807, (1987-2047[u]):7310272-7310332

Inode: 3015182   Type: regular    Mode:  0640   Flags: 0x80000
Generation: 2461738065    Version: 0x00000000:00000004
User:     0   Group:   999   Project:     0   Size: 8388608
File ACL: 0
Links: 1   Blockcount: 16392
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x67e7fb2a:b71b0000 -- Sat Mar 29 09:52:42 2025
 atime: 0x67fb7fb0:616f1038 -- Sun Apr 13 05:11:12 2025
 mtime: 0x67e7f9f2:55e0c048 -- Sat Mar 29 09:47:30 2025
crtime: 0x67e76fb4:208d673c -- Fri Mar 28 23:57:40 2025
Size of extra inode fields: 32
Extended attributes:
  system.posix_acl_access (28) = 01 00 00 00 01 00 06 00 04 00 05 00 08 00 04 00 04 00 00 00 10 00 04 00 20 00 00 00 
  user.crtime_usec (8) = 8b 7a 36 30 73 31 06 00 
Inode checksum: 0x1bccdb42
EXTENTS:
(ETB0):12091607, (0):12091582, (1-69):139453-139521, (70-134):152140-152204, (135-192):141373-141430, (193-246):139263-139316, (247-288):139906-139947, (289-329):141607-141647, (330-366):139381-139417, (367-402):139623-139658, (403-431):141491-141519, (432-459):139850-139877, (460-487):141700-141727, (488-512):139792-139816, (513-536):131461-131484, (537-560):142106-142129, (561-584):146585-146608, (585-608):147131-147154, (609-631):133642-133664, (632-654):140143-140165, (655-677):141781-141803, (678-699):142042-142063, (700-720):141673-141693, (721-741):152502-152522, (742-761):139349-139368, (762-781):141582-141601, (782-801):141895-141914, (802-821):147228-147247, (822-841):152114-152133, (842-860):160492-160510, (861-878):139697-139714, (879-898):162523-162542, (899-916):139822-139839, (917-933):139325-139341, (934-950):141433-141449, (951-967):142250-142266, (968-984):160716-160732, (985-1000):139880-139895, (1001-1016):140093-140108, (1017-1040):162671-162694, (1041[u]):162695, (1042-1062):162697-162717, (1063-1078):140288-140303, (1079-1093):140115-140129, (1094-1119):162757-162782, (1120-1139):162790-162809, (1140-1154):141656-141670, (1155-1169):141806-141820, (1170-1184):142151-142165, (1185-1199):147183-147197, (1200-1214):152961-152975, (1215-1226):160294-160305, (1227[u]):160306, (1228-1229):160307-160308, (1230-1240):161792-161802, (1241-1244[u]):161803-161806, (1245-1259[u]):162816-162830, (1260-1274[u]):162973-162987, (1275-1291[u]):163024-163040, (1292-1307[u]):163055-163070, (1308-1321[u]):132728-132741, (1322-1335[u]):139955-139968, (1336-1349[u]):141739-141752, (1350-1363[u]):152084-152097, (1364-1378[u]):163156-163170, (1379-1392[u]):152406-152419, (1393-1406[u]):160529-160542, (1407-1420[u]):160592-160605, (1421-1433[u]):131431-131443, (1434-1446[u]):139549-139561, (1447-1459[u]):140190-140202, (1460-1472[u]):140260-140272, (1473-1485[u]):141458-141470, (1486-1498[u]):141476-141488, (1499-1511[u]):142306-142318, (1512-1526[u]):163480-163494, (1527-1539[u]):144300-144312, (1540-1552[u]):146311-146323, (1553-1565[u]):147392-147404, (1566-1587[u]):163568-163589, (1588-1600[u]):147435-147447, (1601-1613[u]):160321-160333, (1614-1626[u]):160738-160750, (1627-1639[u]):162560-162572, (1640-1658[u]):163732-163750, (1659-1670[u]):131114-131125, (1671-1682[u]):132982-132993, (1683-1694[u]):141537-141548, (1695-1706[u]):142132-142143, (1707-1718[u]):147299-147310, (1719-1746[u]):166627-166654, (1747-2047[u]):168065-168365

Inode: 3017508   Type: regular    Mode:  0640   Flags: 0x80000
Generation: 2170099929    Version: 0x00000000:00000004
User:     0   Group:   999   Project:     0   Size: 8388608
File ACL: 0
Links: 1   Blockcount: 16392
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x67c64ad0:a8cce400 -- Mon Mar  3 19:35:28 2025
 atime: 0x67fb7fb0:616f1038 -- Sun Apr 13 05:11:12 2025
 mtime: 0x67c64a09:4d057398 -- Mon Mar  3 19:32:09 2025
crtime: 0x67c64659:c697c800 -- Mon Mar  3 19:16:25 2025
Size of extra inode fields: 32
Extended attributes:
  system.posix_acl_access (28) = 01 00 00 00 01 00 06 00 04 00 05 00 08 00 04 00 04 00 00 00 10 00 04 00 20 00 00 00 
  user.crtime_usec (8) = 52 49 f8 2e 79 2f 06 00 
Inode checksum: 0x4c63275e
EXTENTS:
(ETB0):12091621, (0):12091620, (1-173):73043-73215, (174-439):188406-188671, (440-698):177405-177663, (699-954):189952-190207, (955-1036):188748-188829, (1037[u]):188830, (1038-1192):188831-188985, (1193-1264):171746-171817, (1265-1266[u]):171818-171819, (1267-1270):171820-171823, (1271-1272[u]):171824-171825, (1273-1277):171826-171830, (1278[u]):171831, (1279-1283):171832-171836, (1284-1285[u]):171837-171838, (1286-1302):171839-171855, (1303-1304[u]):171856-171857, (1305-1343):171858-171896, (1344[u]):171897, (1345-1350):171898-171903, (1351-1385):210792-210826, (1386[u]):210827, (1387-1390):210828-210831, (1391[u]):210832, (1392-1417):210833-210858, (1418-1421[u]):210859-210862, (1422-1435):210863-210876, (1436-1439[u]):210877-210880, (1440-1441):210881-210882, (1442-1445[u]):210883-210886, (1446-1464):210887-210905, (1465[u]):210906, (1466-1473):210907-210914, (1474[u]):210915, (1475):210916, (1476[u]):210917, (1477):210918, (1478[u]):210919, (1479):210920, (1480[u]):210921, (1481):210922, (1482[u]):210923, (1483-1494):210924-210935, (1495[u]):210936, (1496-1502):210937-210943, (1503-1548):286758-286803, (1549[u]):286804, (1550-1584):286805-286839, (1585-1652[u]):286840-286907, (1653-1791[u]):286909-287047, (1792-2047[u]):361216-361471

Inode: 3017511   Type: regular    Mode:  0640   Flags: 0x80000
Generation: 1994360079    Version: 0x00000000:00000004
User:     0   Group:   999   Project:     0   Size: 8388608
File ACL: 0
Links: 1   Blockcount: 16392
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x67c64cab:bfb04400 -- Mon Mar  3 19:43:23 2025
 atime: 0x67fb7fb0:616f1038 -- Sun Apr 13 05:11:12 2025
 mtime: 0x67c64be8:5e53fdf8 -- Mon Mar  3 19:40:08 2025
crtime: 0x67c64ad0:a8cce400 -- Mon Mar  3 19:35:28 2025
Size of extra inode fields: 32
Extended attributes:
  system.posix_acl_access (28) = 01 00 00 00 01 00 06 00 04 00 05 00 08 00 04 00 04 00 00 00 10 00 04 00 20 00 00 00 
  user.crtime_usec (8) = fc 31 17 73 79 2f 06 00 
Inode checksum: 0x2b90f6e7
EXTENTS:
(ETB0):12091623, (0):12091622, (1-171):58869-59039, (172-327):70656-70811, (328-491):154368-154531, (492-646):159077-159231, (647-795):153088-153236, (796-938):199921-200063, (939-1079):199667-199807, (1080-1198):254195-254313, (1199[u]):254314, (1200-1220):254315-254335, (1221-1261):233791-233831, (1262-1266[u]):233832-233836, (1267):233837, (1268-1272[u]):233838-233842, (1273-1274):233843-233844, (1275-1278[u]):233845-233848, (1279-1280):233849-233850, (1281-1285[u]):233851-233855, (1286-1299):233856-233869, (1300-1304[u]):233870-233874, (1305-1320):233875-233890, (1321[u]):233891, (1322-1324):233892-233894, (1325-1349[u]):233895-233919, (1350-1475[u]):252930-253055, (1476-1601[u]):300404-300529, (1602-1726[u]):296832-296956, (1727-1822[u]):301440-301535, (1823-1914[u]):320164-320255, (1915-1996[u]):313250-313331, (1997-2047[u]):363431-363481

Inode: 3014698   Type: regular    Mode:  0640   Flags: 0x80000
Generation: 2350922755    Version: 0x00000000:00000004
User:     0   Group:   999   Project:     0   Size: 16777216
File ACL: 0
Links: 1   Blockcount: 32776
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x67d33440:3dfd2400 -- Thu Mar 13 15:38:40 2025
 atime: 0x67fb7fb0:616f1038 -- Sun Apr 13 05:11:12 2025
 mtime: 0x67d33365:d2af4094 -- Thu Mar 13 15:35:01 2025
crtime: 0x67d332cc:112a8800 -- Thu Mar 13 15:32:28 2025
Size of extra inode fields: 32
Extended attributes:
  system.posix_acl_access (28) = 01 00 00 00 01 00 06 00 04 00 05 00 08 00 04 00 04 00 00 00 10 00 04 00 20 00 00 00 
  user.crtime_usec (8) = 7a 6f da 61 3e 30 06 00 
Inode checksum: 0x72328df4
EXTENTS:
(ETB0):12091936, (0):12091531, (1-502):151562-152063, (503-1345):191536-192378, (1346-1451):235681-235786, (1452-1455[u]):235787-235790, (1456-1480):235791-235815, (1481[u]):235816, (1482-1494):235817-235829, (1495[u]):235830, (1496-1500):235831-235835, (1501[u]):235836, (1502-1581):235837-235916, (1582-1585[u]):235917-235920, (1586-1593):235921-235928, (1594-1597[u]):235929-235932, (1598-1599):235933-235934, (1600-1603[u]):235935-235938, (1604-1607):235939-235942, (1608-1612[u]):235943-235947, (1613-1633):235948-235968, (1634-1638[u]):235969-235973, (1639-1648):235974-235983, (1649-1650[u]):235984-235985, (1651-1652):235986-235987, (1653-1656[u]):235988-235991, (1657-1658):235992-235993, (1659-1663[u]):235994-235998, (1664):235999, (1665-1669[u]):236000-236004, (1670):236005, (1671-1675[u]):236006-236010, (1676-1677):236011-236012, (1678-1681[u]):236013-236016, (1682-1683):236017-236018, (1684-1687[u]):236019-236022, (1688-1689):236023-236024, (1690-1693[u]):236025-236028, (1694-1695):236029-236030, (1696-1700[u]):236031-236035, (1701):236036, (1702-1706[u]):236037-236041, (1707-1708):236042-236043, (1709-1713[u]):236044-236048, (1714-1715):236049-236050, (1716-1719[u]):236051-236054, (1720-1866):236055-236201, (1867-1881[u]):236202-236216, (1882-1885):236217-236220, (1886-1900[u]):236221-236235, (1901-1903):236236-236238, (1904-1919[u]):236239-236254, (1920-1922):236255-236257, (1923-1937[u]):236258-236272, (1938-1940):236273-236275, (1941-1956[u]):236276-236291, (1957-2043):236292-236378, (2044-2047):231292-231295, (2048-2151):2588672-2588775, (2152-4095[u]):2588776-2590719


^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: generic_permission() optimization
  2025-04-13 12:52                           ` Mateusz Guzik
@ 2025-04-13 17:29                             ` Theodore Ts'o
  0 siblings, 0 replies; 42+ messages in thread
From: Theodore Ts'o @ 2025-04-13 17:29 UTC (permalink / raw)
  To: Mateusz Guzik
  Cc: Linus Torvalds, Christian Brauner, Al Viro, linux-fsdevel,
	Jan Kara, Ext4 Developers List

On Sun, Apr 13, 2025 at 02:52:32PM +0200, Mateusz Guzik wrote:
> On Sun, Apr 13, 2025 at 2:40 PM Theodore Ts'o <tytso@mit.edu> wrote:
> >
> > On Sun, Apr 13, 2025 at 11:41:47AM +0200, Mateusz Guzik wrote:
> > > This is the rootfs of the thing, so I tried it out with merely
> > > printing it. I got 70 entries at boot time. I don't think figuring out
> > > what this is specifically is warranted (it is on debian though).
> >
> > Well, can you run:
> >
> > debugfs -R "stat <INO>" /dev/ROOT_DEV
> >
> 
> attached full list after boot

So it looks like the test is working corretly.  Most of the inodes
either (a) have a Posix ACL defined, so we were definitely doing the
right thing, or (b) had a user.crtime_usec xattr.  My personal opinion
is that crtime is fairly pointless, and having microsecond accuracy on
the creation time is *completely* pointless, but we can't stop
programs from doing that.  (Therre was also a single xattr field that
contained the xattr user.random-seed-creditable.)

So it will ultimately come down to how much user think performance
compares to microsecond-level accuracy on crtime, which as far as I
know, no Linux programs other than samba / CIFS servers who want
Microsoft feature-for-feature compatibility care about.

(Or SELinux when it sets security ID's, but if you are using SELinux a
few extra branch instructions are the *least* of your performace
headaches....)

						- Ted

^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: generic_permission() optimization
  2025-04-12 20:22                 ` Linus Torvalds
@ 2025-04-14 10:21                   ` Christian Brauner
  2025-04-16 13:17                     ` [PATCH RFC 0/3] mnt_idmapping: avoid pointer chase & inline low-level helpers Christian Brauner
  0 siblings, 1 reply; 42+ messages in thread
From: Christian Brauner @ 2025-04-14 10:21 UTC (permalink / raw)
  To: Linus Torvalds
  Cc: Mateusz Guzik, Al Viro, linux-fsdevel, Jan Kara,
	Ext4 Developers List

On Sat, Apr 12, 2025 at 01:22:38PM -0700, Linus Torvalds wrote:
> On Sat, 12 Apr 2025 at 09:26, Mateusz Guzik <mjguzik@gmail.com> wrote:
> >
> > I plopped your snippet towards the end of __ext4_iget:
> 
> That's literally where I did the same thing, except I put it right after the
> 
>           brelse(iloc.bh);
> 
> line, rather than before as you did.
> 
> And it made no difference for me, but I didn't try to figure out why.
> Maybe some environment differences? Or maybe I just screwed up my
> testing...
> 
> As mentioned earlier in the thread, I had this bi-modal distribution
> of results, because if I had a load where the *non*-owner of the inode
> looked up the pathnames, then the ACL information would get filled in
> when the VFS layer would do the lookup, and then once the ACLs were
> cached, everything worked beautifully.
> 
> But if the only lookups of a path were done by the owner of the inodes
> (which is typical for at least my normal kernel build tree - nothing
> but my build will look at the files, and they are obviously always
> owned by me) then the ACL caches will never be filled because there
> will never be any real ACL lookups.
> 
> And then rather than doing the nice efficient "no ACLs anywhere, no
> need to even look", it ends up having to actually do the vfsuid
> comparison for the UID equality check.
> 
> Which then does the extra accesses to look up the idmap etc, and is
> visible in the profiles due to that whole dance:
> 
>         /* Are we the owner? If so, ACL's don't matter */
>         vfsuid = i_uid_into_vfsuid(idmap, inode);
>         if (likely(vfsuid_eq_kuid(vfsuid, current_fsuid()))) {
> 
> even when idmap is 'nop_mnt_idmap' and it is reasonably cheap. Just
> because it ends up calling out to different functions and does extra
> D$ accesses to the inode and the suberblock (ie i_user_ns() is this
> 
>         return inode->i_sb->s_user_ns;

I think we can improve this. Right now multiple mounts from different
superblocks can share the same struct mnt_idmap. But I can change the
code so that struct mnt_idmap can only be shared between mounts from the
same superblock. With that we could do:

diff --git a/fs/mnt_idmapping.c b/fs/mnt_idmapping.c
index a37991fdb194..a5ec15c8c754 100644
--- a/fs/mnt_idmapping.c
+++ b/fs/mnt_idmapping.c
@@ -20,6 +20,7 @@
 struct mnt_idmap {
        struct uid_gid_map uid_map;
        struct uid_gid_map gid_map;
+       struct user_namespace *s_user_ns;
        refcount_t count;
 };

And then stuff like:

static inline vfsuid_t i_uid_into_vfsuid(struct mnt_idmap *idmap,
                                         const struct inode *inode)
{
        return make_vfsuid(idmap, i_user_ns(inode), inode->i_uid);
}

just becomes:

static inline vfsuid_t i_uid_into_vfsuid(struct mnt_idmap *idmap,
                                         const struct inode *inode)
{
        return make_vfsuid(idmap, inode->i_uid);
}

which means:

vfsuid_t make_vfsuid(struct mnt_idmap *idmap,
                     kuid_t kuid)
{
        uid_t uid;

        if (idmap == &nop_mnt_idmap)
                return VFSUIDT_INIT(kuid);

<snip>
}

will only have to verify nop_mnt_idmap and we never have to access the
inode->i_sb->s_user_ns at all.

I'll wip up a patch for this.

> 
> so just to *see* that it's nop_mnt_idmap takes effort.
> 
> One improvement might be to cache that 'nop_mnt_idmap' thing in the
> inode as a flag.
> 
> But it would be even better if the filesystem just initializes the
> inode at inode read time to say "I have no ACL's for this inode" and
> none of this code will even trigger.

Yes, let's please do this.

^ permalink raw reply related	[flat|nested] 42+ messages in thread

* [PATCH RFC 0/3] mnt_idmapping: avoid pointer chase & inline low-level helpers
  2025-04-14 10:21                   ` Christian Brauner
@ 2025-04-16 13:17                     ` Christian Brauner
  2025-04-16 13:17                       ` [PATCH RFC 1/3] inode: add fastpath for filesystem user namespace retrieval Christian Brauner
                                         ` (2 more replies)
  0 siblings, 3 replies; 42+ messages in thread
From: Christian Brauner @ 2025-04-16 13:17 UTC (permalink / raw)
  To: Linus Torvalds, linux-fsdevel
  Cc: Christian Brauner, Mateusz Guzik, Al Viro, Jan Kara, Jeff Layton,
	Josef Bacik

We currently always chase a pointer inode->i_sb->s_user_ns whenever we
need to map a uid/gid. Linus reported in [1] that this is noticable
during path lookup.

In the majority of cases we don't need to bother with that pointer chase
because the inode won't be located on a filesystem that's mounted in a
user namespace. The user namespace of the superblock cannot ever change
once it's mounted. So introduce and raise IOP_USERNS on all inodes and
check for that flag in i_user_ns() when we retrieve the user namespace.

Additionally, we now inline all low-level idmapping helpers.

[1]: https://lore.kernel.org/CAHk-=whJgRDtxTudTQ9HV8BFw5-bBsu+c8Ouwd_PrPqPB6_KEQ@mail.gmail.com

Signed-off-by: Christian Brauner <brauner@kernel.org>
---
Christian Brauner (3):
      inode: add fastpath for filesystem user namespace retrieval
      mnt_idmapping: add struct mnt_idmap to header
      mnt_idmapping: inline all low-level helpers

 fs/inode.c                     |   6 ++
 fs/mnt_idmapping.c             | 165 ----------------------------------------
 include/linux/fs.h             |   5 +-
 include/linux/mnt_idmapping.h  | 168 +++++++++++++++++++++++++++++++++++++++--
 include/linux/uidgid.h         |  23 +++++-
 include/linux/user_namespace.h |  23 +-----
 kernel/user_namespace.c        |   2 +
 7 files changed, 195 insertions(+), 197 deletions(-)
---
base-commit: 0af2f6be1b4281385b618cb86ad946eded089ac8
change-id: 20250416-work-mnt_idmap-s_user_ns-eb57ee83e1d6


^ permalink raw reply	[flat|nested] 42+ messages in thread

* [PATCH RFC 1/3] inode: add fastpath for filesystem user namespace retrieval
  2025-04-16 13:17                     ` [PATCH RFC 0/3] mnt_idmapping: avoid pointer chase & inline low-level helpers Christian Brauner
@ 2025-04-16 13:17                       ` Christian Brauner
  2025-04-16 13:49                         ` Mateusz Guzik
  2025-04-22 10:37                         ` Jan Kara
  2025-04-16 13:17                       ` [PATCH RFC 2/3] mnt_idmapping: add struct mnt_idmap to header Christian Brauner
  2025-04-16 13:17                       ` [PATCH RFC 3/3] mnt_idmapping: inline all low-level helpers Christian Brauner
  2 siblings, 2 replies; 42+ messages in thread
From: Christian Brauner @ 2025-04-16 13:17 UTC (permalink / raw)
  To: Linus Torvalds, linux-fsdevel
  Cc: Christian Brauner, Mateusz Guzik, Al Viro, Jan Kara, Jeff Layton,
	Josef Bacik

We currently always chase a pointer inode->i_sb->s_user_ns whenever we
need to map a uid/gid which is noticeable during path lookup as noticed
by Linus in [1]. In the majority of cases we don't need to bother with
that pointer chase because the inode won't be located on a filesystem
that's mounted in a user namespace. The user namespace of the superblock
cannot ever change once it's mounted. So introduce and raise IOP_USERNS
on all inodes and check for that flag in i_user_ns() when we retrieve
the user namespace.

Link: https://lore.kernel.org/CAHk-=whJgRDtxTudTQ9HV8BFw5-bBsu+c8Ouwd_PrPqPB6_KEQ@mail.gmail.com [1]
Signed-off-by: Christian Brauner <brauner@kernel.org>
---
 fs/inode.c                    |  6 ++++++
 fs/mnt_idmapping.c            | 14 --------------
 include/linux/fs.h            |  5 ++++-
 include/linux/mnt_idmapping.h | 14 ++++++++++++++
 4 files changed, 24 insertions(+), 15 deletions(-)

diff --git a/fs/inode.c b/fs/inode.c
index 99318b157a9a..7335d05dd7d5 100644
--- a/fs/inode.c
+++ b/fs/inode.c
@@ -245,6 +245,8 @@ int inode_init_always_gfp(struct super_block *sb, struct inode *inode, gfp_t gfp
 		inode->i_opflags |= IOP_XATTR;
 	if (sb->s_type->fs_flags & FS_MGTIME)
 		inode->i_opflags |= IOP_MGTIME;
+	if (unlikely(!initial_idmapping(i_user_ns(inode))))
+		inode->i_opflags |= IOP_USERNS;
 	i_uid_write(inode, 0);
 	i_gid_write(inode, 0);
 	atomic_set(&inode->i_writecount, 0);
@@ -1864,6 +1866,10 @@ static void iput_final(struct inode *inode)
 
 	WARN_ON(inode->i_state & I_NEW);
 
+	/* This is security sensitive so catch missing IOP_USERNS. */
+	VFS_WARN_ON_ONCE(!initial_idmapping(i_user_ns(inode)) &&
+			 !(inode->i_opflags & IOP_USERNS));
+
 	if (op->drop_inode)
 		drop = op->drop_inode(inode);
 	else
diff --git a/fs/mnt_idmapping.c b/fs/mnt_idmapping.c
index a37991fdb194..8f7ae908ea16 100644
--- a/fs/mnt_idmapping.c
+++ b/fs/mnt_idmapping.c
@@ -42,20 +42,6 @@ struct mnt_idmap invalid_mnt_idmap = {
 };
 EXPORT_SYMBOL_GPL(invalid_mnt_idmap);
 
-/**
- * initial_idmapping - check whether this is the initial mapping
- * @ns: idmapping to check
- *
- * Check whether this is the initial mapping, mapping 0 to 0, 1 to 1,
- * [...], 1000 to 1000 [...].
- *
- * Return: true if this is the initial mapping, false if not.
- */
-static inline bool initial_idmapping(const struct user_namespace *ns)
-{
-	return ns == &init_user_ns;
-}
-
 /**
  * make_vfsuid - map a filesystem kuid according to an idmapping
  * @idmap: the mount's idmapping
diff --git a/include/linux/fs.h b/include/linux/fs.h
index 016b0fe1536e..d28384d5b752 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -663,6 +663,7 @@ is_uncached_acl(struct posix_acl *acl)
 #define IOP_DEFAULT_READLINK	0x0010
 #define IOP_MGTIME	0x0020
 #define IOP_CACHED_LINK	0x0040
+#define IOP_USERNS	0x0080
 
 /*
  * Keep mostly read-only and often accessed (especially for
@@ -1454,7 +1455,9 @@ struct super_block {
 
 static inline struct user_namespace *i_user_ns(const struct inode *inode)
 {
-	return inode->i_sb->s_user_ns;
+	if (unlikely(inode->i_opflags & IOP_USERNS))
+		return inode->i_sb->s_user_ns;
+	return &init_user_ns;
 }
 
 /* Helper functions so that in most cases filesystems will
diff --git a/include/linux/mnt_idmapping.h b/include/linux/mnt_idmapping.h
index e71a6070a8f8..85553b3a7904 100644
--- a/include/linux/mnt_idmapping.h
+++ b/include/linux/mnt_idmapping.h
@@ -25,6 +25,20 @@ static_assert(sizeof(vfsgid_t) == sizeof(kgid_t));
 static_assert(offsetof(vfsuid_t, val) == offsetof(kuid_t, val));
 static_assert(offsetof(vfsgid_t, val) == offsetof(kgid_t, val));
 
+/**
+ * initial_idmapping - check whether this is the initial mapping
+ * @ns: idmapping to check
+ *
+ * Check whether this is the initial mapping, mapping 0 to 0, 1 to 1,
+ * [...], 1000 to 1000 [...].
+ *
+ * Return: true if this is the initial mapping, false if not.
+ */
+static inline bool initial_idmapping(const struct user_namespace *ns)
+{
+	return ns == &init_user_ns;
+}
+
 static inline bool is_valid_mnt_idmap(const struct mnt_idmap *idmap)
 {
 	return idmap != &nop_mnt_idmap && idmap != &invalid_mnt_idmap;

-- 
2.47.2


^ permalink raw reply related	[flat|nested] 42+ messages in thread

* [PATCH RFC 2/3] mnt_idmapping: add struct mnt_idmap to header
  2025-04-16 13:17                     ` [PATCH RFC 0/3] mnt_idmapping: avoid pointer chase & inline low-level helpers Christian Brauner
  2025-04-16 13:17                       ` [PATCH RFC 1/3] inode: add fastpath for filesystem user namespace retrieval Christian Brauner
@ 2025-04-16 13:17                       ` Christian Brauner
  2025-04-16 13:17                       ` [PATCH RFC 3/3] mnt_idmapping: inline all low-level helpers Christian Brauner
  2 siblings, 0 replies; 42+ messages in thread
From: Christian Brauner @ 2025-04-16 13:17 UTC (permalink / raw)
  To: Linus Torvalds, linux-fsdevel
  Cc: Christian Brauner, Mateusz Guzik, Al Viro, Jan Kara, Jeff Layton,
	Josef Bacik

The next patch will inline all current helpers for that we need access
to struct mnt_idmap internals from the header. Not my favorite but
whatever.

Signed-off-by: Christian Brauner <brauner@kernel.org>
---
 fs/mnt_idmapping.c             |  6 ------
 include/linux/mnt_idmapping.h  |  7 +++++++
 include/linux/uidgid.h         | 23 ++++++++++++++++++++++-
 include/linux/user_namespace.h | 23 +----------------------
 4 files changed, 30 insertions(+), 29 deletions(-)

diff --git a/fs/mnt_idmapping.c b/fs/mnt_idmapping.c
index 8f7ae908ea16..5c7e1db8fef8 100644
--- a/fs/mnt_idmapping.c
+++ b/fs/mnt_idmapping.c
@@ -17,12 +17,6 @@
 #define VFSUIDT_INIT_RAW(val) (vfsuid_t){ val }
 #define VFSGIDT_INIT_RAW(val) (vfsgid_t){ val }
 
-struct mnt_idmap {
-	struct uid_gid_map uid_map;
-	struct uid_gid_map gid_map;
-	refcount_t count;
-};
-
 /*
  * Carries the initial idmapping of 0:0:4294967295 which is an identity
  * mapping. This means that {g,u}id 0 is mapped to {g,u}id 0, {g,u}id 1 is
diff --git a/include/linux/mnt_idmapping.h b/include/linux/mnt_idmapping.h
index 85553b3a7904..4410672c2828 100644
--- a/include/linux/mnt_idmapping.h
+++ b/include/linux/mnt_idmapping.h
@@ -8,6 +8,13 @@
 struct mnt_idmap;
 struct user_namespace;
 
+/* Don't touch directly! All fields private. */
+struct mnt_idmap {
+	struct uid_gid_map uid_map;
+	struct uid_gid_map gid_map;
+	refcount_t count;
+};
+
 extern struct mnt_idmap nop_mnt_idmap;
 extern struct mnt_idmap invalid_mnt_idmap;
 extern struct user_namespace init_user_ns;
diff --git a/include/linux/uidgid.h b/include/linux/uidgid.h
index 2dc767e08f54..5696c870fd0b 100644
--- a/include/linux/uidgid.h
+++ b/include/linux/uidgid.h
@@ -17,7 +17,28 @@
 
 struct user_namespace;
 extern struct user_namespace init_user_ns;
-struct uid_gid_map;
+
+#define UID_GID_MAP_MAX_BASE_EXTENTS 5
+#define UID_GID_MAP_MAX_EXTENTS 340
+
+struct uid_gid_extent {
+	u32 first;
+	u32 lower_first;
+	u32 count;
+};
+
+struct uid_gid_map { /* 64 bytes -- 1 cache line */
+	union {
+		struct {
+			struct uid_gid_extent extent[UID_GID_MAP_MAX_BASE_EXTENTS];
+			u32 nr_extents;
+		};
+		struct {
+			struct uid_gid_extent *forward;
+			struct uid_gid_extent *reverse;
+		};
+	};
+};
 
 #define KUIDT_INIT(value) (kuid_t){ value }
 #define KGIDT_INIT(value) (kgid_t){ value }
diff --git a/include/linux/user_namespace.h b/include/linux/user_namespace.h
index a0bb6d012137..6feae94c3661 100644
--- a/include/linux/user_namespace.h
+++ b/include/linux/user_namespace.h
@@ -12,28 +12,7 @@
 #include <linux/rwsem.h>
 #include <linux/sysctl.h>
 #include <linux/err.h>
-
-#define UID_GID_MAP_MAX_BASE_EXTENTS 5
-#define UID_GID_MAP_MAX_EXTENTS 340
-
-struct uid_gid_extent {
-	u32 first;
-	u32 lower_first;
-	u32 count;
-};
-
-struct uid_gid_map { /* 64 bytes -- 1 cache line */
-	union {
-		struct {
-			struct uid_gid_extent extent[UID_GID_MAP_MAX_BASE_EXTENTS];
-			u32 nr_extents;
-		};
-		struct {
-			struct uid_gid_extent *forward;
-			struct uid_gid_extent *reverse;
-		};
-	};
-};
+#include <linux/uidgid.h>
 
 #define USERNS_SETGROUPS_ALLOWED 1UL
 

-- 
2.47.2


^ permalink raw reply related	[flat|nested] 42+ messages in thread

* [PATCH RFC 3/3] mnt_idmapping: inline all low-level helpers
  2025-04-16 13:17                     ` [PATCH RFC 0/3] mnt_idmapping: avoid pointer chase & inline low-level helpers Christian Brauner
  2025-04-16 13:17                       ` [PATCH RFC 1/3] inode: add fastpath for filesystem user namespace retrieval Christian Brauner
  2025-04-16 13:17                       ` [PATCH RFC 2/3] mnt_idmapping: add struct mnt_idmap to header Christian Brauner
@ 2025-04-16 13:17                       ` Christian Brauner
  2025-04-16 15:04                         ` Linus Torvalds
  2 siblings, 1 reply; 42+ messages in thread
From: Christian Brauner @ 2025-04-16 13:17 UTC (permalink / raw)
  To: Linus Torvalds, linux-fsdevel
  Cc: Christian Brauner, Mateusz Guzik, Al Viro, Jan Kara, Jeff Layton,
	Josef Bacik

Let's inline all low-level helpers and use likely()/unlikely() to help
the compiler along.

Signed-off-by: Christian Brauner <brauner@kernel.org>
---
 fs/mnt_idmapping.c            | 145 -----------------------------------------
 include/linux/mnt_idmapping.h | 147 +++++++++++++++++++++++++++++++++++++++---
 kernel/user_namespace.c       |   2 +
 3 files changed, 141 insertions(+), 153 deletions(-)

diff --git a/fs/mnt_idmapping.c b/fs/mnt_idmapping.c
index 5c7e1db8fef8..ba1f752b6fa7 100644
--- a/fs/mnt_idmapping.c
+++ b/fs/mnt_idmapping.c
@@ -10,13 +10,6 @@
 
 #include "internal.h"
 
-/*
- * Outside of this file vfs{g,u}id_t are always created from k{g,u}id_t,
- * never from raw values. These are just internal helpers.
- */
-#define VFSUIDT_INIT_RAW(val) (vfsuid_t){ val }
-#define VFSGIDT_INIT_RAW(val) (vfsgid_t){ val }
-
 /*
  * Carries the initial idmapping of 0:0:4294967295 which is an identity
  * mapping. This means that {g,u}id 0 is mapped to {g,u}id 0, {g,u}id 1 is
@@ -36,144 +29,6 @@ struct mnt_idmap invalid_mnt_idmap = {
 };
 EXPORT_SYMBOL_GPL(invalid_mnt_idmap);
 
-/**
- * make_vfsuid - map a filesystem kuid according to an idmapping
- * @idmap: the mount's idmapping
- * @fs_userns: the filesystem's idmapping
- * @kuid : kuid to be mapped
- *
- * Take a @kuid and remap it from @fs_userns into @idmap. Use this
- * function when preparing a @kuid to be reported to userspace.
- *
- * If initial_idmapping() determines that this is not an idmapped mount
- * we can simply return @kuid unchanged.
- * If initial_idmapping() tells us that the filesystem is not mounted with an
- * idmapping we know the value of @kuid won't change when calling
- * from_kuid() so we can simply retrieve the value via __kuid_val()
- * directly.
- *
- * Return: @kuid mapped according to @idmap.
- * If @kuid has no mapping in either @idmap or @fs_userns INVALID_UID is
- * returned.
- */
-
-vfsuid_t make_vfsuid(struct mnt_idmap *idmap,
-		     struct user_namespace *fs_userns,
-		     kuid_t kuid)
-{
-	uid_t uid;
-
-	if (idmap == &nop_mnt_idmap)
-		return VFSUIDT_INIT(kuid);
-	if (idmap == &invalid_mnt_idmap)
-		return INVALID_VFSUID;
-	if (initial_idmapping(fs_userns))
-		uid = __kuid_val(kuid);
-	else
-		uid = from_kuid(fs_userns, kuid);
-	if (uid == (uid_t)-1)
-		return INVALID_VFSUID;
-	return VFSUIDT_INIT_RAW(map_id_down(&idmap->uid_map, uid));
-}
-EXPORT_SYMBOL_GPL(make_vfsuid);
-
-/**
- * make_vfsgid - map a filesystem kgid according to an idmapping
- * @idmap: the mount's idmapping
- * @fs_userns: the filesystem's idmapping
- * @kgid : kgid to be mapped
- *
- * Take a @kgid and remap it from @fs_userns into @idmap. Use this
- * function when preparing a @kgid to be reported to userspace.
- *
- * If initial_idmapping() determines that this is not an idmapped mount
- * we can simply return @kgid unchanged.
- * If initial_idmapping() tells us that the filesystem is not mounted with an
- * idmapping we know the value of @kgid won't change when calling
- * from_kgid() so we can simply retrieve the value via __kgid_val()
- * directly.
- *
- * Return: @kgid mapped according to @idmap.
- * If @kgid has no mapping in either @idmap or @fs_userns INVALID_GID is
- * returned.
- */
-vfsgid_t make_vfsgid(struct mnt_idmap *idmap,
-		     struct user_namespace *fs_userns, kgid_t kgid)
-{
-	gid_t gid;
-
-	if (idmap == &nop_mnt_idmap)
-		return VFSGIDT_INIT(kgid);
-	if (idmap == &invalid_mnt_idmap)
-		return INVALID_VFSGID;
-	if (initial_idmapping(fs_userns))
-		gid = __kgid_val(kgid);
-	else
-		gid = from_kgid(fs_userns, kgid);
-	if (gid == (gid_t)-1)
-		return INVALID_VFSGID;
-	return VFSGIDT_INIT_RAW(map_id_down(&idmap->gid_map, gid));
-}
-EXPORT_SYMBOL_GPL(make_vfsgid);
-
-/**
- * from_vfsuid - map a vfsuid into the filesystem idmapping
- * @idmap: the mount's idmapping
- * @fs_userns: the filesystem's idmapping
- * @vfsuid : vfsuid to be mapped
- *
- * Map @vfsuid into the filesystem idmapping. This function has to be used in
- * order to e.g. write @vfsuid to inode->i_uid.
- *
- * Return: @vfsuid mapped into the filesystem idmapping
- */
-kuid_t from_vfsuid(struct mnt_idmap *idmap,
-		   struct user_namespace *fs_userns, vfsuid_t vfsuid)
-{
-	uid_t uid;
-
-	if (idmap == &nop_mnt_idmap)
-		return AS_KUIDT(vfsuid);
-	if (idmap == &invalid_mnt_idmap)
-		return INVALID_UID;
-	uid = map_id_up(&idmap->uid_map, __vfsuid_val(vfsuid));
-	if (uid == (uid_t)-1)
-		return INVALID_UID;
-	if (initial_idmapping(fs_userns))
-		return KUIDT_INIT(uid);
-	return make_kuid(fs_userns, uid);
-}
-EXPORT_SYMBOL_GPL(from_vfsuid);
-
-/**
- * from_vfsgid - map a vfsgid into the filesystem idmapping
- * @idmap: the mount's idmapping
- * @fs_userns: the filesystem's idmapping
- * @vfsgid : vfsgid to be mapped
- *
- * Map @vfsgid into the filesystem idmapping. This function has to be used in
- * order to e.g. write @vfsgid to inode->i_gid.
- *
- * Return: @vfsgid mapped into the filesystem idmapping
- */
-kgid_t from_vfsgid(struct mnt_idmap *idmap,
-		   struct user_namespace *fs_userns, vfsgid_t vfsgid)
-{
-	gid_t gid;
-
-	if (idmap == &nop_mnt_idmap)
-		return AS_KGIDT(vfsgid);
-	if (idmap == &invalid_mnt_idmap)
-		return INVALID_GID;
-	gid = map_id_up(&idmap->gid_map, __vfsgid_val(vfsgid));
-	if (gid == (gid_t)-1)
-		return INVALID_GID;
-	if (initial_idmapping(fs_userns))
-		return KGIDT_INIT(gid);
-	return make_kgid(fs_userns, gid);
-}
-EXPORT_SYMBOL_GPL(from_vfsgid);
-
 #ifdef CONFIG_MULTIUSER
 /**
  * vfsgid_in_group_p() - check whether a vfsuid matches the caller's groups
diff --git a/include/linux/mnt_idmapping.h b/include/linux/mnt_idmapping.h
index 4410672c2828..e6fb905c39bd 100644
--- a/include/linux/mnt_idmapping.h
+++ b/include/linux/mnt_idmapping.h
@@ -140,22 +140,153 @@ static inline bool vfsgid_eq_kgid(vfsgid_t vfsgid, kgid_t kgid)
 #define AS_KUIDT(val) (kuid_t){ __vfsuid_val(val) }
 #define AS_KGIDT(val) (kgid_t){ __vfsgid_val(val) }
 
+/*
+ * Outside of this file vfs{g,u}id_t are always created from k{g,u}id_t,
+ * never from raw values. These are just internal helpers.
+ */
+#define VFSUIDT_INIT_RAW(val) (vfsuid_t){ val }
+#define VFSGIDT_INIT_RAW(val) (vfsgid_t){ val }
+
 int vfsgid_in_group_p(vfsgid_t vfsgid);
 
 struct mnt_idmap *mnt_idmap_get(struct mnt_idmap *idmap);
 void mnt_idmap_put(struct mnt_idmap *idmap);
 
-vfsuid_t make_vfsuid(struct mnt_idmap *idmap,
-		     struct user_namespace *fs_userns, kuid_t kuid);
+/**
+ * make_vfsuid - map a filesystem kuid according to an idmapping
+ * @idmap: the mount's idmapping
+ * @fs_userns: the filesystem's idmapping
+ * @kuid : kuid to be mapped
+ *
+ * Take a @kuid and remap it from @fs_userns into @idmap. Use this
+ * function when preparing a @kuid to be reported to userspace.
+ *
+ * If initial_idmapping() determines that this is not an idmapped mount
+ * we can simply return @kuid unchanged.
+ * If initial_idmapping() tells us that the filesystem is not mounted with an
+ * idmapping we know the value of @kuid won't change when calling
+ * from_kuid() so we can simply retrieve the value via __kuid_val()
+ * directly.
+ *
+ * Return: @kuid mapped according to @idmap.
+ * If @kuid has no mapping in either @idmap or @fs_userns INVALID_UID is
+ * returned.
+ */
+static inline vfsuid_t make_vfsuid(struct mnt_idmap *idmap,
+				   struct user_namespace *fs_userns,
+				   kuid_t kuid)
+{
+	uid_t uid;
+
+	if (likely(idmap == &nop_mnt_idmap))
+		return VFSUIDT_INIT(kuid);
+	if (unlikely(idmap == &invalid_mnt_idmap))
+		return INVALID_VFSUID;
+	if (likely(initial_idmapping(fs_userns)))
+		uid = __kuid_val(kuid);
+	else
+		uid = from_kuid(fs_userns, kuid);
+	if (unlikely(uid == (uid_t)-1))
+		return INVALID_VFSUID;
+	return VFSUIDT_INIT_RAW(map_id_down(&idmap->uid_map, uid));
+}
 
-vfsgid_t make_vfsgid(struct mnt_idmap *idmap,
-		     struct user_namespace *fs_userns, kgid_t kgid);
+/**
+ * make_vfsgid - map a filesystem kgid according to an idmapping
+ * @idmap: the mount's idmapping
+ * @fs_userns: the filesystem's idmapping
+ * @kgid : kgid to be mapped
+ *
+ * Take a @kgid and remap it from @fs_userns into @idmap. Use this
+ * function when preparing a @kgid to be reported to userspace.
+ *
+ * If initial_idmapping() determines that this is not an idmapped mount
+ * we can simply return @kgid unchanged.
+ * If initial_idmapping() tells us that the filesystem is not mounted with an
+ * idmapping we know the value of @kgid won't change when calling
+ * from_kgid() so we can simply retrieve the value via __kgid_val()
+ * directly.
+ *
+ * Return: @kgid mapped according to @idmap.
+ * If @kgid has no mapping in either @idmap or @fs_userns INVALID_GID is
+ * returned.
+ */
+static inline vfsgid_t make_vfsgid(struct mnt_idmap *idmap,
+				   struct user_namespace *fs_userns,
+				   kgid_t kgid)
+{
+	gid_t gid;
+
+	if (likely(idmap == &nop_mnt_idmap))
+		return VFSGIDT_INIT(kgid);
+	if (unlikely(idmap == &invalid_mnt_idmap))
+		return INVALID_VFSGID;
+	if (likely(initial_idmapping(fs_userns)))
+		gid = __kgid_val(kgid);
+	else
+		gid = from_kgid(fs_userns, kgid);
+	if (unlikely(gid == (gid_t)-1))
+		return INVALID_VFSGID;
+	return VFSGIDT_INIT_RAW(map_id_down(&idmap->gid_map, gid));
+}
 
-kuid_t from_vfsuid(struct mnt_idmap *idmap,
-		   struct user_namespace *fs_userns, vfsuid_t vfsuid);
+/**
+ * from_vfsuid - map a vfsuid into the filesystem idmapping
+ * @idmap: the mount's idmapping
+ * @fs_userns: the filesystem's idmapping
+ * @vfsuid : vfsuid to be mapped
+ *
+ * Map @vfsuid into the filesystem idmapping. This function has to be used in
+ * order to e.g. write @vfsuid to inode->i_uid.
+ *
+ * Return: @vfsuid mapped into the filesystem idmapping
+ */
+static inline kuid_t from_vfsuid(struct mnt_idmap *idmap,
+				 struct user_namespace *fs_userns,
+				 vfsuid_t vfsuid)
+{
+	uid_t uid;
+
+	if (likely(idmap == &nop_mnt_idmap))
+		return AS_KUIDT(vfsuid);
+	if (unlikely(idmap == &invalid_mnt_idmap))
+		return INVALID_UID;
+	uid = map_id_up(&idmap->uid_map, __vfsuid_val(vfsuid));
+	if (unlikely(uid == (uid_t)-1))
+		return INVALID_UID;
+	if (likely(initial_idmapping(fs_userns)))
+		return KUIDT_INIT(uid);
+	return make_kuid(fs_userns, uid);
+}
 
-kgid_t from_vfsgid(struct mnt_idmap *idmap,
-		   struct user_namespace *fs_userns, vfsgid_t vfsgid);
+/**
+ * from_vfsgid - map a vfsgid into the filesystem idmapping
+ * @idmap: the mount's idmapping
+ * @fs_userns: the filesystem's idmapping
+ * @vfsgid : vfsgid to be mapped
+ *
+ * Map @vfsgid into the filesystem idmapping. This function has to be used in
+ * order to e.g. write @vfsgid to inode->i_gid.
+ *
+ * Return: @vfsgid mapped into the filesystem idmapping
+ */
+static inline kgid_t from_vfsgid(struct mnt_idmap *idmap,
+				 struct user_namespace *fs_userns,
+				 vfsgid_t vfsgid)
+{
+	gid_t gid;
+
+	if (likely(idmap == &nop_mnt_idmap))
+		return AS_KGIDT(vfsgid);
+	if (unlikely(idmap == &invalid_mnt_idmap))
+		return INVALID_GID;
+	gid = map_id_up(&idmap->gid_map, __vfsgid_val(vfsgid));
+	if (unlikely(gid == (gid_t)-1))
+		return INVALID_GID;
+	if (likely(initial_idmapping(fs_userns)))
+		return KGIDT_INIT(gid);
+	return make_kgid(fs_userns, gid);
+}
 
 /**
  * vfsuid_has_fsmapping - check whether a vfsuid maps into the filesystem
diff --git a/kernel/user_namespace.c b/kernel/user_namespace.c
index 682f40d5632d..693c62587571 100644
--- a/kernel/user_namespace.c
+++ b/kernel/user_namespace.c
@@ -336,6 +336,7 @@ u32 map_id_down(struct uid_gid_map *map, u32 id)
 {
 	return map_id_range_down(map, id, 1);
 }
+EXPORT_SYMBOL_GPL(map_id_down);
 
 /*
  * map_id_up_base - Find idmap via binary search in static extent array.
@@ -402,6 +403,7 @@ u32 map_id_up(struct uid_gid_map *map, u32 id)
 {
 	return map_id_range_up(map, id, 1);
 }
+EXPORT_SYMBOL_GPL(map_id_up);
 
 /**
  *	make_kuid - Map a user-namespace uid pair into a kuid.

-- 
2.47.2


^ permalink raw reply related	[flat|nested] 42+ messages in thread

* Re: [PATCH RFC 1/3] inode: add fastpath for filesystem user namespace retrieval
  2025-04-16 13:17                       ` [PATCH RFC 1/3] inode: add fastpath for filesystem user namespace retrieval Christian Brauner
@ 2025-04-16 13:49                         ` Mateusz Guzik
  2025-04-16 14:14                           ` Christian Brauner
  2025-04-22 10:37                         ` Jan Kara
  1 sibling, 1 reply; 42+ messages in thread
From: Mateusz Guzik @ 2025-04-16 13:49 UTC (permalink / raw)
  To: Christian Brauner
  Cc: Linus Torvalds, linux-fsdevel, Al Viro, Jan Kara, Jeff Layton,
	Josef Bacik

On Wed, Apr 16, 2025 at 3:17 PM Christian Brauner <brauner@kernel.org> wrote:
>
> We currently always chase a pointer inode->i_sb->s_user_ns whenever we
> need to map a uid/gid which is noticeable during path lookup as noticed
> by Linus in [1]. In the majority of cases we don't need to bother with
> that pointer chase because the inode won't be located on a filesystem
> that's mounted in a user namespace. The user namespace of the superblock
> cannot ever change once it's mounted. So introduce and raise IOP_USERNS
> on all inodes and check for that flag in i_user_ns() when we retrieve
> the user namespace.
>
> Link: https://lore.kernel.org/CAHk-=whJgRDtxTudTQ9HV8BFw5-bBsu+c8Ouwd_PrPqPB6_KEQ@mail.gmail.com [1]
> Signed-off-by: Christian Brauner <brauner@kernel.org>
> ---
>  fs/inode.c                    |  6 ++++++
>  fs/mnt_idmapping.c            | 14 --------------
>  include/linux/fs.h            |  5 ++++-
>  include/linux/mnt_idmapping.h | 14 ++++++++++++++
>  4 files changed, 24 insertions(+), 15 deletions(-)
>
> diff --git a/fs/inode.c b/fs/inode.c
> index 99318b157a9a..7335d05dd7d5 100644
> --- a/fs/inode.c
> +++ b/fs/inode.c
> @@ -245,6 +245,8 @@ int inode_init_always_gfp(struct super_block *sb, struct inode *inode, gfp_t gfp
>                 inode->i_opflags |= IOP_XATTR;
>         if (sb->s_type->fs_flags & FS_MGTIME)
>                 inode->i_opflags |= IOP_MGTIME;
> +       if (unlikely(!initial_idmapping(i_user_ns(inode))))
> +               inode->i_opflags |= IOP_USERNS;
>         i_uid_write(inode, 0);
>         i_gid_write(inode, 0);
>         atomic_set(&inode->i_writecount, 0);
> @@ -1864,6 +1866,10 @@ static void iput_final(struct inode *inode)
>
>         WARN_ON(inode->i_state & I_NEW);
>
> +       /* This is security sensitive so catch missing IOP_USERNS. */
> +       VFS_WARN_ON_ONCE(!initial_idmapping(i_user_ns(inode)) &&
> +                        !(inode->i_opflags & IOP_USERNS));
> +
>         if (op->drop_inode)
>                 drop = op->drop_inode(inode);
>         else
> diff --git a/fs/mnt_idmapping.c b/fs/mnt_idmapping.c
> index a37991fdb194..8f7ae908ea16 100644
> --- a/fs/mnt_idmapping.c
> +++ b/fs/mnt_idmapping.c
> @@ -42,20 +42,6 @@ struct mnt_idmap invalid_mnt_idmap = {
>  };
>  EXPORT_SYMBOL_GPL(invalid_mnt_idmap);
>
> -/**
> - * initial_idmapping - check whether this is the initial mapping
> - * @ns: idmapping to check
> - *
> - * Check whether this is the initial mapping, mapping 0 to 0, 1 to 1,
> - * [...], 1000 to 1000 [...].
> - *
> - * Return: true if this is the initial mapping, false if not.
> - */
> -static inline bool initial_idmapping(const struct user_namespace *ns)
> -{
> -       return ns == &init_user_ns;
> -}
> -
>  /**
>   * make_vfsuid - map a filesystem kuid according to an idmapping
>   * @idmap: the mount's idmapping
> diff --git a/include/linux/fs.h b/include/linux/fs.h
> index 016b0fe1536e..d28384d5b752 100644
> --- a/include/linux/fs.h
> +++ b/include/linux/fs.h
> @@ -663,6 +663,7 @@ is_uncached_acl(struct posix_acl *acl)
>  #define IOP_DEFAULT_READLINK   0x0010
>  #define IOP_MGTIME     0x0020
>  #define IOP_CACHED_LINK        0x0040
> +#define IOP_USERNS     0x0080
>
>  /*
>   * Keep mostly read-only and often accessed (especially for
> @@ -1454,7 +1455,9 @@ struct super_block {
>
>  static inline struct user_namespace *i_user_ns(const struct inode *inode)
>  {
> -       return inode->i_sb->s_user_ns;
> +       if (unlikely(inode->i_opflags & IOP_USERNS))
> +               return inode->i_sb->s_user_ns;
> +       return &init_user_ns;
>  }
>
>  /* Helper functions so that in most cases filesystems will
> diff --git a/include/linux/mnt_idmapping.h b/include/linux/mnt_idmapping.h
> index e71a6070a8f8..85553b3a7904 100644
> --- a/include/linux/mnt_idmapping.h
> +++ b/include/linux/mnt_idmapping.h
> @@ -25,6 +25,20 @@ static_assert(sizeof(vfsgid_t) == sizeof(kgid_t));
>  static_assert(offsetof(vfsuid_t, val) == offsetof(kuid_t, val));
>  static_assert(offsetof(vfsgid_t, val) == offsetof(kgid_t, val));
>
> +/**
> + * initial_idmapping - check whether this is the initial mapping
> + * @ns: idmapping to check
> + *
> + * Check whether this is the initial mapping, mapping 0 to 0, 1 to 1,
> + * [...], 1000 to 1000 [...].
> + *
> + * Return: true if this is the initial mapping, false if not.
> + */
> +static inline bool initial_idmapping(const struct user_namespace *ns)
> +{
> +       return ns == &init_user_ns;
> +}
> +
>  static inline bool is_valid_mnt_idmap(const struct mnt_idmap *idmap)
>  {
>         return idmap != &nop_mnt_idmap && idmap != &invalid_mnt_idmap;
>
> --
> 2.47.2
>

I don't have an opinion.

But if going this way, i think you want the assert for correctly
applied flag when fetching the ns, not just iput_final.

-- 
Mateusz Guzik <mjguzik gmail.com>

^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: [PATCH RFC 1/3] inode: add fastpath for filesystem user namespace retrieval
  2025-04-16 13:49                         ` Mateusz Guzik
@ 2025-04-16 14:14                           ` Christian Brauner
  0 siblings, 0 replies; 42+ messages in thread
From: Christian Brauner @ 2025-04-16 14:14 UTC (permalink / raw)
  To: Mateusz Guzik
  Cc: Linus Torvalds, linux-fsdevel, Al Viro, Jan Kara, Jeff Layton,
	Josef Bacik

On Wed, Apr 16, 2025 at 03:49:43PM +0200, Mateusz Guzik wrote:
> On Wed, Apr 16, 2025 at 3:17 PM Christian Brauner <brauner@kernel.org> wrote:
> >
> > We currently always chase a pointer inode->i_sb->s_user_ns whenever we
> > need to map a uid/gid which is noticeable during path lookup as noticed
> > by Linus in [1]. In the majority of cases we don't need to bother with
> > that pointer chase because the inode won't be located on a filesystem
> > that's mounted in a user namespace. The user namespace of the superblock
> > cannot ever change once it's mounted. So introduce and raise IOP_USERNS
> > on all inodes and check for that flag in i_user_ns() when we retrieve
> > the user namespace.
> >
> > Link: https://lore.kernel.org/CAHk-=whJgRDtxTudTQ9HV8BFw5-bBsu+c8Ouwd_PrPqPB6_KEQ@mail.gmail.com [1]
> > Signed-off-by: Christian Brauner <brauner@kernel.org>
> > ---
> >  fs/inode.c                    |  6 ++++++
> >  fs/mnt_idmapping.c            | 14 --------------
> >  include/linux/fs.h            |  5 ++++-
> >  include/linux/mnt_idmapping.h | 14 ++++++++++++++
> >  4 files changed, 24 insertions(+), 15 deletions(-)
> >
> > diff --git a/fs/inode.c b/fs/inode.c
> > index 99318b157a9a..7335d05dd7d5 100644
> > --- a/fs/inode.c
> > +++ b/fs/inode.c
> > @@ -245,6 +245,8 @@ int inode_init_always_gfp(struct super_block *sb, struct inode *inode, gfp_t gfp
> >                 inode->i_opflags |= IOP_XATTR;
> >         if (sb->s_type->fs_flags & FS_MGTIME)
> >                 inode->i_opflags |= IOP_MGTIME;
> > +       if (unlikely(!initial_idmapping(i_user_ns(inode))))
> > +               inode->i_opflags |= IOP_USERNS;
> >         i_uid_write(inode, 0);
> >         i_gid_write(inode, 0);
> >         atomic_set(&inode->i_writecount, 0);
> > @@ -1864,6 +1866,10 @@ static void iput_final(struct inode *inode)
> >
> >         WARN_ON(inode->i_state & I_NEW);
> >
> > +       /* This is security sensitive so catch missing IOP_USERNS. */
> > +       VFS_WARN_ON_ONCE(!initial_idmapping(i_user_ns(inode)) &&
> > +                        !(inode->i_opflags & IOP_USERNS));
> > +
> >         if (op->drop_inode)
> >                 drop = op->drop_inode(inode);
> >         else
> > diff --git a/fs/mnt_idmapping.c b/fs/mnt_idmapping.c
> > index a37991fdb194..8f7ae908ea16 100644
> > --- a/fs/mnt_idmapping.c
> > +++ b/fs/mnt_idmapping.c
> > @@ -42,20 +42,6 @@ struct mnt_idmap invalid_mnt_idmap = {
> >  };
> >  EXPORT_SYMBOL_GPL(invalid_mnt_idmap);
> >
> > -/**
> > - * initial_idmapping - check whether this is the initial mapping
> > - * @ns: idmapping to check
> > - *
> > - * Check whether this is the initial mapping, mapping 0 to 0, 1 to 1,
> > - * [...], 1000 to 1000 [...].
> > - *
> > - * Return: true if this is the initial mapping, false if not.
> > - */
> > -static inline bool initial_idmapping(const struct user_namespace *ns)
> > -{
> > -       return ns == &init_user_ns;
> > -}
> > -
> >  /**
> >   * make_vfsuid - map a filesystem kuid according to an idmapping
> >   * @idmap: the mount's idmapping
> > diff --git a/include/linux/fs.h b/include/linux/fs.h
> > index 016b0fe1536e..d28384d5b752 100644
> > --- a/include/linux/fs.h
> > +++ b/include/linux/fs.h
> > @@ -663,6 +663,7 @@ is_uncached_acl(struct posix_acl *acl)
> >  #define IOP_DEFAULT_READLINK   0x0010
> >  #define IOP_MGTIME     0x0020
> >  #define IOP_CACHED_LINK        0x0040
> > +#define IOP_USERNS     0x0080
> >
> >  /*
> >   * Keep mostly read-only and often accessed (especially for
> > @@ -1454,7 +1455,9 @@ struct super_block {
> >
> >  static inline struct user_namespace *i_user_ns(const struct inode *inode)
> >  {
> > -       return inode->i_sb->s_user_ns;
> > +       if (unlikely(inode->i_opflags & IOP_USERNS))
> > +               return inode->i_sb->s_user_ns;
> > +       return &init_user_ns;
> >  }
> >
> >  /* Helper functions so that in most cases filesystems will
> > diff --git a/include/linux/mnt_idmapping.h b/include/linux/mnt_idmapping.h
> > index e71a6070a8f8..85553b3a7904 100644
> > --- a/include/linux/mnt_idmapping.h
> > +++ b/include/linux/mnt_idmapping.h
> > @@ -25,6 +25,20 @@ static_assert(sizeof(vfsgid_t) == sizeof(kgid_t));
> >  static_assert(offsetof(vfsuid_t, val) == offsetof(kuid_t, val));
> >  static_assert(offsetof(vfsgid_t, val) == offsetof(kgid_t, val));
> >
> > +/**
> > + * initial_idmapping - check whether this is the initial mapping
> > + * @ns: idmapping to check
> > + *
> > + * Check whether this is the initial mapping, mapping 0 to 0, 1 to 1,
> > + * [...], 1000 to 1000 [...].
> > + *
> > + * Return: true if this is the initial mapping, false if not.
> > + */
> > +static inline bool initial_idmapping(const struct user_namespace *ns)
> > +{
> > +       return ns == &init_user_ns;
> > +}
> > +
> >  static inline bool is_valid_mnt_idmap(const struct mnt_idmap *idmap)
> >  {
> >         return idmap != &nop_mnt_idmap && idmap != &invalid_mnt_idmap;
> >
> > --
> > 2.47.2
> >
> 
> I don't have an opinion.
> 
> But if going this way, i think you want the assert for correctly
> applied flag when fetching the ns, not just iput_final.

Sure.

^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: [PATCH RFC 3/3] mnt_idmapping: inline all low-level helpers
  2025-04-16 13:17                       ` [PATCH RFC 3/3] mnt_idmapping: inline all low-level helpers Christian Brauner
@ 2025-04-16 15:04                         ` Linus Torvalds
  2025-04-22  9:28                           ` Christian Brauner
  0 siblings, 1 reply; 42+ messages in thread
From: Linus Torvalds @ 2025-04-16 15:04 UTC (permalink / raw)
  To: Christian Brauner
  Cc: linux-fsdevel, Mateusz Guzik, Al Viro, Jan Kara, Jeff Layton,
	Josef Bacik

On Wed, 16 Apr 2025 at 06:17, Christian Brauner <brauner@kernel.org> wrote:
>
> Let's inline all low-level helpers and use likely()/unlikely() to help
> the compiler along.

Hmm. This looks like it might be a mistake - code generation will
probably not be great, because you still end up calling a real
function for some of the cases (ie from_kuid() in the actual real
translation case), so all the register allocation etc issues with
having a function call largely do remain.

Yes, it inlines things into generic_permission(), and that will avoid
the function call overhead for the common case (good), but it also
does make for bigger code generation. And it doesn't actually *change*
the code - it ends up doing all the same accesses, just the
instruction flow is slightly different.

So I think you'd actually be better off with *just* the IOP_USERNS
patch, and only inlining *that* fast-path case, and keep the other
cases out-of-line.

IOW - instead of only checking IOP_USERNS only in i_user_ns() and
making it return 'init_user_ns' without doing the pointer following, I
think you should make just our *existing* inlined i_uid_into_vfsuid()
helper be the minimal inlined wrapper around just the IOP_USERNS
logic.

Because right now the problem with i_uid_into_vfsuid() is two-fold

 - it does that pointer chasing by calling i_user_ns(inode)

 - it then calls make_vfsuid() which does lots of pointless extra work
in the common case

and I think both should be fixed.

Btw, make_vfsuid() itself is kind of odd. It does:

        if (idmap == &nop_mnt_idmap)
                return VFSUIDT_INIT(kuid);
        if (idmap == &invalid_mnt_idmap)
                return INVALID_VFSUID;
        if (initial_idmapping(fs_userns))
                uid = __kuid_val(kuid);
        else
                uid = from_kuid(fs_userns, kuid);
        if (uid == (uid_t)-1)
                return INVALID_VFSUID;
        return VFSUIDT_INIT_RAW(map_id_down(&idmap->uid_map, uid));

and honestly, that looks just horrendous for the actual simple cases.
I think it's a historical accident, but the

                return VFSUIDT_INIT(kuid);

and the

                uid = __kuid_val(kuid);
        ....
        return VFSUIDT_INIT_RAW(map_id_down(&idmap->uid_map, uid));

things are actually the same exact "no mapping" code for the case we
care about most. We shouldn't even do that

        if (uid == (uid_t)-1)
                return INVALID_VFSUID;

case at all for that case, because the no-mapping situation is that
INVALID_VFSUID *is* (uid_t)-1, so all of this is entirely pointless.

So I think the inlined fast-case should be that

        if (idmap == &nop_mnt_idmap || initial_idmapping(fs_userns))
                return VFSUIDT_INIT(kuid);

code, and then the 'initial_idmapping()' thing should check the
IOP_USERNS bit explicitly, and never use the i_user_ns() helper at all
etc.

That case should then be "likely()", and the rest can remain out-of-line.

IOW: instead of inlining all the helpers, just make the *one* helper
that we already have (and is already a trivial inline function) be
much more targeted, and make that fast-case much more explicit.

Hmm?

                   Linus

^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: [PATCH RFC 3/3] mnt_idmapping: inline all low-level helpers
  2025-04-16 15:04                         ` Linus Torvalds
@ 2025-04-22  9:28                           ` Christian Brauner
  0 siblings, 0 replies; 42+ messages in thread
From: Christian Brauner @ 2025-04-22  9:28 UTC (permalink / raw)
  To: Linus Torvalds
  Cc: linux-fsdevel, Mateusz Guzik, Al Viro, Jan Kara, Jeff Layton,
	Josef Bacik

On Wed, Apr 16, 2025 at 08:04:26AM -0700, Linus Torvalds wrote:
> On Wed, 16 Apr 2025 at 06:17, Christian Brauner <brauner@kernel.org> wrote:
> >
> > Let's inline all low-level helpers and use likely()/unlikely() to help
> > the compiler along.

Sorry, I just had time to get back to this now.

> 
> Hmm. This looks like it might be a mistake - code generation will
> probably not be great, because you still end up calling a real
> function for some of the cases (ie from_kuid() in the actual real
> translation case), so all the register allocation etc issues with
> having a function call largely do remain.

Good point.

> 
> Yes, it inlines things into generic_permission(), and that will avoid
> the function call overhead for the common case (good), but it also
> does make for bigger code generation. And it doesn't actually *change*
> the code - it ends up doing all the same accesses, just the
> instruction flow is slightly different.
> 
> So I think you'd actually be better off with *just* the IOP_USERNS
> patch, and only inlining *that* fast-path case, and keep the other
> cases out-of-line.

Right.

> 
> IOW - instead of only checking IOP_USERNS only in i_user_ns() and
> making it return 'init_user_ns' without doing the pointer following, I
> think you should make just our *existing* inlined i_uid_into_vfsuid()
> helper be the minimal inlined wrapper around just the IOP_USERNS
> logic.
> 
> Because right now the problem with i_uid_into_vfsuid() is two-fold
> 
>  - it does that pointer chasing by calling i_user_ns(inode)
> 
>  - it then calls make_vfsuid() which does lots of pointless extra work
> in the common case
> 
> and I think both should be fixed.

Yes, agreed. I've mentioned that various times on other patch series. It
was just a matter of time and I had prioritized other stuff.

> 
> Btw, make_vfsuid() itself is kind of odd. It does:
> 
>         if (idmap == &nop_mnt_idmap)
>                 return VFSUIDT_INIT(kuid);
>         if (idmap == &invalid_mnt_idmap)
>                 return INVALID_VFSUID;
>         if (initial_idmapping(fs_userns))
>                 uid = __kuid_val(kuid);
>         else
>                 uid = from_kuid(fs_userns, kuid);
>         if (uid == (uid_t)-1)
>                 return INVALID_VFSUID;
>         return VFSUIDT_INIT_RAW(map_id_down(&idmap->uid_map, uid));
> 
> and honestly, that looks just horrendous for the actual simple cases.
> I think it's a historical accident, but the
> 
>                 return VFSUIDT_INIT(kuid);
> 
> and the
> 
>                 uid = __kuid_val(kuid);
>         ....
>         return VFSUIDT_INIT_RAW(map_id_down(&idmap->uid_map, uid));
> 
> things are actually the same exact "no mapping" code for the case we
> care about most. We shouldn't even do that
> 
>         if (uid == (uid_t)-1)
>                 return INVALID_VFSUID;
> 
> case at all for that case, because the no-mapping situation is that
> INVALID_VFSUID *is* (uid_t)-1, so all of this is entirely pointless.
> 
> So I think the inlined fast-case should be that
> 
>         if (idmap == &nop_mnt_idmap || initial_idmapping(fs_userns))
>                 return VFSUIDT_INIT(kuid);
> 
> code, and then the 'initial_idmapping()' thing should check the
> IOP_USERNS bit explicitly, and never use the i_user_ns() helper at all
> etc.
> 
> That case should then be "likely()", and the rest can remain out-of-line.
> 
> IOW: instead of inlining all the helpers, just make the *one* helper
> that we already have (and is already a trivial inline function) be
> much more targeted, and make that fast-case much more explicit.
> 
> Hmm?

Yes, but I'd also like to add the shortcut to i_user_ns() because it's
called in quite a few places that it might actually matter. So both
initial_imdapping() and i_user_ns() should short-circuit ad
initial_idmapping() should take an inode as the argument just as
i_user_ns(). I'll send a new version out today hopefully.

Thanks for taking the time to review this!

^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: [PATCH RFC 1/3] inode: add fastpath for filesystem user namespace retrieval
  2025-04-16 13:17                       ` [PATCH RFC 1/3] inode: add fastpath for filesystem user namespace retrieval Christian Brauner
  2025-04-16 13:49                         ` Mateusz Guzik
@ 2025-04-22 10:37                         ` Jan Kara
  2025-04-22 13:33                           ` Mateusz Guzik
  1 sibling, 1 reply; 42+ messages in thread
From: Jan Kara @ 2025-04-22 10:37 UTC (permalink / raw)
  To: Christian Brauner
  Cc: Linus Torvalds, linux-fsdevel, Mateusz Guzik, Al Viro, Jan Kara,
	Jeff Layton, Josef Bacik

On Wed 16-04-25 15:17:22, Christian Brauner wrote:
> We currently always chase a pointer inode->i_sb->s_user_ns whenever we
> need to map a uid/gid which is noticeable during path lookup as noticed
> by Linus in [1]. In the majority of cases we don't need to bother with
> that pointer chase because the inode won't be located on a filesystem
> that's mounted in a user namespace. The user namespace of the superblock
> cannot ever change once it's mounted. So introduce and raise IOP_USERNS
> on all inodes and check for that flag in i_user_ns() when we retrieve
> the user namespace.
> 
> Link: https://lore.kernel.org/CAHk-=whJgRDtxTudTQ9HV8BFw5-bBsu+c8Ouwd_PrPqPB6_KEQ@mail.gmail.com [1]
> Signed-off-by: Christian Brauner <brauner@kernel.org>

Some performance numbers would be in place here I guess - in particular
whether this change indeed improved the speed of path lookup or whether the
cost just moved elsewhere. Otherwise the patch looks good so feel free to
add:

Reviewed-by: Jan Kara <jack@suse.cz>

								Honza


> ---
>  fs/inode.c                    |  6 ++++++
>  fs/mnt_idmapping.c            | 14 --------------
>  include/linux/fs.h            |  5 ++++-
>  include/linux/mnt_idmapping.h | 14 ++++++++++++++
>  4 files changed, 24 insertions(+), 15 deletions(-)
> 
> diff --git a/fs/inode.c b/fs/inode.c
> index 99318b157a9a..7335d05dd7d5 100644
> --- a/fs/inode.c
> +++ b/fs/inode.c
> @@ -245,6 +245,8 @@ int inode_init_always_gfp(struct super_block *sb, struct inode *inode, gfp_t gfp
>  		inode->i_opflags |= IOP_XATTR;
>  	if (sb->s_type->fs_flags & FS_MGTIME)
>  		inode->i_opflags |= IOP_MGTIME;
> +	if (unlikely(!initial_idmapping(i_user_ns(inode))))
> +		inode->i_opflags |= IOP_USERNS;
>  	i_uid_write(inode, 0);
>  	i_gid_write(inode, 0);
>  	atomic_set(&inode->i_writecount, 0);
> @@ -1864,6 +1866,10 @@ static void iput_final(struct inode *inode)
>  
>  	WARN_ON(inode->i_state & I_NEW);
>  
> +	/* This is security sensitive so catch missing IOP_USERNS. */
> +	VFS_WARN_ON_ONCE(!initial_idmapping(i_user_ns(inode)) &&
> +			 !(inode->i_opflags & IOP_USERNS));
> +
>  	if (op->drop_inode)
>  		drop = op->drop_inode(inode);
>  	else
> diff --git a/fs/mnt_idmapping.c b/fs/mnt_idmapping.c
> index a37991fdb194..8f7ae908ea16 100644
> --- a/fs/mnt_idmapping.c
> +++ b/fs/mnt_idmapping.c
> @@ -42,20 +42,6 @@ struct mnt_idmap invalid_mnt_idmap = {
>  };
>  EXPORT_SYMBOL_GPL(invalid_mnt_idmap);
>  
> -/**
> - * initial_idmapping - check whether this is the initial mapping
> - * @ns: idmapping to check
> - *
> - * Check whether this is the initial mapping, mapping 0 to 0, 1 to 1,
> - * [...], 1000 to 1000 [...].
> - *
> - * Return: true if this is the initial mapping, false if not.
> - */
> -static inline bool initial_idmapping(const struct user_namespace *ns)
> -{
> -	return ns == &init_user_ns;
> -}
> -
>  /**
>   * make_vfsuid - map a filesystem kuid according to an idmapping
>   * @idmap: the mount's idmapping
> diff --git a/include/linux/fs.h b/include/linux/fs.h
> index 016b0fe1536e..d28384d5b752 100644
> --- a/include/linux/fs.h
> +++ b/include/linux/fs.h
> @@ -663,6 +663,7 @@ is_uncached_acl(struct posix_acl *acl)
>  #define IOP_DEFAULT_READLINK	0x0010
>  #define IOP_MGTIME	0x0020
>  #define IOP_CACHED_LINK	0x0040
> +#define IOP_USERNS	0x0080
>  
>  /*
>   * Keep mostly read-only and often accessed (especially for
> @@ -1454,7 +1455,9 @@ struct super_block {
>  
>  static inline struct user_namespace *i_user_ns(const struct inode *inode)
>  {
> -	return inode->i_sb->s_user_ns;
> +	if (unlikely(inode->i_opflags & IOP_USERNS))
> +		return inode->i_sb->s_user_ns;
> +	return &init_user_ns;
>  }
>  
>  /* Helper functions so that in most cases filesystems will
> diff --git a/include/linux/mnt_idmapping.h b/include/linux/mnt_idmapping.h
> index e71a6070a8f8..85553b3a7904 100644
> --- a/include/linux/mnt_idmapping.h
> +++ b/include/linux/mnt_idmapping.h
> @@ -25,6 +25,20 @@ static_assert(sizeof(vfsgid_t) == sizeof(kgid_t));
>  static_assert(offsetof(vfsuid_t, val) == offsetof(kuid_t, val));
>  static_assert(offsetof(vfsgid_t, val) == offsetof(kgid_t, val));
>  
> +/**
> + * initial_idmapping - check whether this is the initial mapping
> + * @ns: idmapping to check
> + *
> + * Check whether this is the initial mapping, mapping 0 to 0, 1 to 1,
> + * [...], 1000 to 1000 [...].
> + *
> + * Return: true if this is the initial mapping, false if not.
> + */
> +static inline bool initial_idmapping(const struct user_namespace *ns)
> +{
> +	return ns == &init_user_ns;
> +}
> +
>  static inline bool is_valid_mnt_idmap(const struct mnt_idmap *idmap)
>  {
>  	return idmap != &nop_mnt_idmap && idmap != &invalid_mnt_idmap;
> 
> -- 
> 2.47.2
> 
-- 
Jan Kara <jack@suse.com>
SUSE Labs, CR

^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: [PATCH RFC 1/3] inode: add fastpath for filesystem user namespace retrieval
  2025-04-22 10:37                         ` Jan Kara
@ 2025-04-22 13:33                           ` Mateusz Guzik
  2025-04-22 14:05                             ` Christian Brauner
  0 siblings, 1 reply; 42+ messages in thread
From: Mateusz Guzik @ 2025-04-22 13:33 UTC (permalink / raw)
  To: Jan Kara
  Cc: Christian Brauner, Linus Torvalds, linux-fsdevel, Al Viro,
	Jeff Layton, Josef Bacik

On Tue, Apr 22, 2025 at 12:37 PM Jan Kara <jack@suse.cz> wrote:
>
> On Wed 16-04-25 15:17:22, Christian Brauner wrote:
> > We currently always chase a pointer inode->i_sb->s_user_ns whenever we
> > need to map a uid/gid which is noticeable during path lookup as noticed
> > by Linus in [1]. In the majority of cases we don't need to bother with
> > that pointer chase because the inode won't be located on a filesystem
> > that's mounted in a user namespace. The user namespace of the superblock
> > cannot ever change once it's mounted. So introduce and raise IOP_USERNS
> > on all inodes and check for that flag in i_user_ns() when we retrieve
> > the user namespace.
> >
> > Link: https://lore.kernel.org/CAHk-=whJgRDtxTudTQ9HV8BFw5-bBsu+c8Ouwd_PrPqPB6_KEQ@mail.gmail.com [1]
> > Signed-off-by: Christian Brauner <brauner@kernel.org>
>
> Some performance numbers would be in place here I guess - in particular
> whether this change indeed improved the speed of path lookup or whether the
> cost just moved elsewhere.

Note that right now path lookup is a raging branchfest, with some
avoidable memory references to boot.

I have a WIP patch to bypass inode permission checks with an
->i_opflag and get over 5% speed up when stating stuff in
/usr/include/linux/. This might be slightly more now.

Anyhow, this bit here probably does not help that much in isolation
and I would not worry about that fact given the overall state.
Demonstrating that this indeed avoids some work in the common case
would be sufficient for me.

To give you a taste: stat(2) specifically around 4.28 mln ops/s on my
box. Based on perf top I estimate sorting out the avoidable
single-threaded slowdowns will bring it above 5 mln.

The slowdowns notably include the dog slow memory allocation (likely
to be sorted out with sheaves), the smp_mb fence in legitimize_mnt and
more.

Part of the problem is LOOKUP_RCU checks all over the place. I presume
the intent was to keep this and refwalk closely tied to reduce code
duplication and make sure all parties get updated as needed. I know
the code would be faster (and I *suspect* cleaner) if this got
refactored into dedicated routines instead. Something to ponder after
the bigger fish is fried.
-- 
Mateusz Guzik <mjguzik gmail.com>

^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: [PATCH RFC 1/3] inode: add fastpath for filesystem user namespace retrieval
  2025-04-22 13:33                           ` Mateusz Guzik
@ 2025-04-22 14:05                             ` Christian Brauner
  0 siblings, 0 replies; 42+ messages in thread
From: Christian Brauner @ 2025-04-22 14:05 UTC (permalink / raw)
  To: Mateusz Guzik
  Cc: Jan Kara, Linus Torvalds, linux-fsdevel, Al Viro, Jeff Layton,
	Josef Bacik

On Tue, Apr 22, 2025 at 03:33:03PM +0200, Mateusz Guzik wrote:
> On Tue, Apr 22, 2025 at 12:37 PM Jan Kara <jack@suse.cz> wrote:
> >
> > On Wed 16-04-25 15:17:22, Christian Brauner wrote:
> > > We currently always chase a pointer inode->i_sb->s_user_ns whenever we
> > > need to map a uid/gid which is noticeable during path lookup as noticed
> > > by Linus in [1]. In the majority of cases we don't need to bother with
> > > that pointer chase because the inode won't be located on a filesystem
> > > that's mounted in a user namespace. The user namespace of the superblock
> > > cannot ever change once it's mounted. So introduce and raise IOP_USERNS
> > > on all inodes and check for that flag in i_user_ns() when we retrieve
> > > the user namespace.
> > >
> > > Link: https://lore.kernel.org/CAHk-=whJgRDtxTudTQ9HV8BFw5-bBsu+c8Ouwd_PrPqPB6_KEQ@mail.gmail.com [1]
> > > Signed-off-by: Christian Brauner <brauner@kernel.org>
> >
> > Some performance numbers would be in place here I guess - in particular
> > whether this change indeed improved the speed of path lookup or whether the
> > cost just moved elsewhere.
> 
> Note that right now path lookup is a raging branchfest, with some
> avoidable memory references to boot.
> 
> I have a WIP patch to bypass inode permission checks with an
> ->i_opflag and get over 5% speed up when stating stuff in
> /usr/include/linux/. This might be slightly more now.
> 
> Anyhow, this bit here probably does not help that much in isolation
> and I would not worry about that fact given the overall state.
> Demonstrating that this indeed avoids some work in the common case
> would be sufficient for me.
> 
> To give you a taste: stat(2) specifically around 4.28 mln ops/s on my
> box. Based on perf top I estimate sorting out the avoidable
> single-threaded slowdowns will bring it above 5 mln.
> 
> The slowdowns notably include the dog slow memory allocation (likely
> to be sorted out with sheaves), the smp_mb fence in legitimize_mnt and
> more.
> 
> Part of the problem is LOOKUP_RCU checks all over the place. I presume
> the intent was to keep this and refwalk closely tied to reduce code
> duplication and make sure all parties get updated as needed. I know
> the code would be faster (and I *suspect* cleaner) if this got
> refactored into dedicated routines instead. Something to ponder after
> the bigger fish is fried.

I think the cleanup itself the right thing to do because it makes it
obvious that we're not doing any work when no idmapped mounts are
involved. v2 is a lot cleaner and simpler as well.

^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: generic_permission() optimization
  2025-04-13 12:40                         ` Theodore Ts'o
  2025-04-13 12:52                           ` Mateusz Guzik
@ 2025-11-05 11:50                           ` Mateusz Guzik
  2025-11-05 11:51                             ` Mateusz Guzik
  1 sibling, 1 reply; 42+ messages in thread
From: Mateusz Guzik @ 2025-11-05 11:50 UTC (permalink / raw)
  To: Theodore Ts'o
  Cc: Linus Torvalds, Christian Brauner, Al Viro, linux-fsdevel,
	Jan Kara, Ext4 Developers List

On Sun, Apr 13, 2025 at 2:40 PM Theodore Ts'o <tytso@mit.edu> wrote:
>
> On Sun, Apr 13, 2025 at 11:41:47AM +0200, Mateusz Guzik wrote:
> > This is the rootfs of the thing, so I tried it out with merely
> > printing it. I got 70 entries at boot time. I don't think figuring out
> > what this is specifically is warranted (it is on debian though).
>
> Well, can you run:
>
> debugfs -R "stat <INO>" /dev/ROOT_DEV
>
> on say, two or three of the inodes (replace INO with a number, and
> ROOT_DEV with the root file system device) and send me the result?
> That would be really helpful in understanding what might be going on.
>
> > So... I think this is good enough to commit? I had no part in writing
> > the patch and I'm not an ext4 person, so I'm not submitting it myself.
> >
> > Ted, you seem fine with the patch, so perhaps you could do the needful(tm)?
>
> Sure, I'll put together a more formal patch and do full QA run and
> checking of the code paths, as a supposed a fairly superficial review
> and hack.
>

It looks like this well through the cracks.

To recount, here is the patch (by Linus, not me):
> diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
> index f386de8c12f6..3e0ba7c4723a 100644
> --- a/fs/ext4/inode.c
> +++ b/fs/ext4/inode.c
> @@ -5109,6 +5109,11 @@ struct inode *__ext4_iget(struct super_block *sb, unsigned long ino,
>                 goto bad_inode;
>         brelse(iloc.bh);
>
> +       if (test_opt(sb, DEBUG) &&
> +           (ext4_test_inode_state(inode, EXT4_STATE_XATTR) ||
> +            ei->i_file_acl))
> +               ext4_msg(sb, KERN_DEBUG, "has xattr ino %lu", inode->i_ino);
> +
>         unlock_new_inode(inode);
>         return inode;

In my tests it covered most real-world lookups on my debian box.

Sorting this out acts as blocker for a lookup optimization I'm working
on which bypasses all perm checking if an inode has a flag indicating
everyone can traverse through it.

^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: generic_permission() optimization
  2025-11-05 11:50                           ` Mateusz Guzik
@ 2025-11-05 11:51                             ` Mateusz Guzik
  2025-11-05 13:37                               ` Jan Kara
  0 siblings, 1 reply; 42+ messages in thread
From: Mateusz Guzik @ 2025-11-05 11:51 UTC (permalink / raw)
  To: Theodore Ts'o
  Cc: Linus Torvalds, Christian Brauner, Al Viro, linux-fsdevel,
	Jan Kara, Ext4 Developers List

On Wed, Nov 5, 2025 at 12:50 PM Mateusz Guzik <mjguzik@gmail.com> wrote:
>
> On Sun, Apr 13, 2025 at 2:40 PM Theodore Ts'o <tytso@mit.edu> wrote:
> >
> > On Sun, Apr 13, 2025 at 11:41:47AM +0200, Mateusz Guzik wrote:
> > > This is the rootfs of the thing, so I tried it out with merely
> > > printing it. I got 70 entries at boot time. I don't think figuring out
> > > what this is specifically is warranted (it is on debian though).
> >
> > Well, can you run:
> >
> > debugfs -R "stat <INO>" /dev/ROOT_DEV
> >
> > on say, two or three of the inodes (replace INO with a number, and
> > ROOT_DEV with the root file system device) and send me the result?
> > That would be really helpful in understanding what might be going on.
> >
> > > So... I think this is good enough to commit? I had no part in writing
> > > the patch and I'm not an ext4 person, so I'm not submitting it myself.
> > >
> > > Ted, you seem fine with the patch, so perhaps you could do the needful(tm)?
> >
> > Sure, I'll put together a more formal patch and do full QA run and
> > checking of the code paths, as a supposed a fairly superficial review
> > and hack.
> >
>
> It looks like this well through the cracks.
>
> To recount, here is the patch (by Linus, not me):
> > diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
> > index f386de8c12f6..3e0ba7c4723a 100644
> > --- a/fs/ext4/inode.c
> > +++ b/fs/ext4/inode.c
> > @@ -5109,6 +5109,11 @@ struct inode *__ext4_iget(struct super_block *sb, unsigned long ino,
> >                 goto bad_inode;
> >         brelse(iloc.bh);
> >
> > +       if (test_opt(sb, DEBUG) &&
> > +           (ext4_test_inode_state(inode, EXT4_STATE_XATTR) ||
> > +            ei->i_file_acl))
> > +               ext4_msg(sb, KERN_DEBUG, "has xattr ino %lu", inode->i_ino);
> > +
> >         unlock_new_inode(inode);
> >         return inode;
>

sigh, copy-pasto, the patch is:
  --- a/fs/ext4/inode.c
  +++ b/fs/ext4/inode.c
  @@ -5011,6 +5011,11 @@ struct inode *__ext4_iget(...
        }

        brelse(iloc.bh);
  +
  +     /* Initialize the "no ACL's" state for the simple cases */
  +     if (!ext4_test_inode_state(inode, EXT4_STATE_XATTR) && !ei->i_file_acl)
  +             cache_no_acl(inode);
  +
        unlock_new_inode(inode);
        return inode;

> In my tests it covered most real-world lookups on my debian box.
>
> Sorting this out acts as blocker for a lookup optimization I'm working
> on which bypasses all perm checking if an inode has a flag indicating
> everyone can traverse through it.

^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: generic_permission() optimization
  2025-11-05 11:51                             ` Mateusz Guzik
@ 2025-11-05 13:37                               ` Jan Kara
  2025-11-17 11:42                                 ` Mateusz Guzik
  0 siblings, 1 reply; 42+ messages in thread
From: Jan Kara @ 2025-11-05 13:37 UTC (permalink / raw)
  To: Mateusz Guzik
  Cc: Theodore Ts'o, Linus Torvalds, Christian Brauner, Al Viro,
	linux-fsdevel, Jan Kara, Ext4 Developers List

On Wed 05-11-25 12:51:16, Mateusz Guzik wrote:
> On Wed, Nov 5, 2025 at 12:50 PM Mateusz Guzik <mjguzik@gmail.com> wrote:
> >
> > On Sun, Apr 13, 2025 at 2:40 PM Theodore Ts'o <tytso@mit.edu> wrote:
> > >
> > > On Sun, Apr 13, 2025 at 11:41:47AM +0200, Mateusz Guzik wrote:
> > > > This is the rootfs of the thing, so I tried it out with merely
> > > > printing it. I got 70 entries at boot time. I don't think figuring out
> > > > what this is specifically is warranted (it is on debian though).
> > >
> > > Well, can you run:
> > >
> > > debugfs -R "stat <INO>" /dev/ROOT_DEV
> > >
> > > on say, two or three of the inodes (replace INO with a number, and
> > > ROOT_DEV with the root file system device) and send me the result?
> > > That would be really helpful in understanding what might be going on.
> > >
> > > > So... I think this is good enough to commit? I had no part in writing
> > > > the patch and I'm not an ext4 person, so I'm not submitting it myself.
> > > >
> > > > Ted, you seem fine with the patch, so perhaps you could do the needful(tm)?
> > >
> > > Sure, I'll put together a more formal patch and do full QA run and
> > > checking of the code paths, as a supposed a fairly superficial review
> > > and hack.
> > >
> >
> > It looks like this well through the cracks.
> >
> > To recount, here is the patch (by Linus, not me):
> > > diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
> > > index f386de8c12f6..3e0ba7c4723a 100644
> > > --- a/fs/ext4/inode.c
> > > +++ b/fs/ext4/inode.c
> > > @@ -5109,6 +5109,11 @@ struct inode *__ext4_iget(struct super_block *sb, unsigned long ino,
> > >                 goto bad_inode;
> > >         brelse(iloc.bh);
> > >
> > > +       if (test_opt(sb, DEBUG) &&
> > > +           (ext4_test_inode_state(inode, EXT4_STATE_XATTR) ||
> > > +            ei->i_file_acl))
> > > +               ext4_msg(sb, KERN_DEBUG, "has xattr ino %lu", inode->i_ino);
> > > +
> > >         unlock_new_inode(inode);
> > >         return inode;
> >
> 
> sigh, copy-pasto, the patch is:
>   --- a/fs/ext4/inode.c
>   +++ b/fs/ext4/inode.c
>   @@ -5011,6 +5011,11 @@ struct inode *__ext4_iget(...
>         }
> 
>         brelse(iloc.bh);
>   +
>   +     /* Initialize the "no ACL's" state for the simple cases */
>   +     if (!ext4_test_inode_state(inode, EXT4_STATE_XATTR) && !ei->i_file_acl)
>   +             cache_no_acl(inode);
>   +
>         unlock_new_inode(inode);
>         return inode;

This looks fine. Feel free to add:

Reviewed-by: Jan Kara <jack@suse.cz>

								Honza
-- 
Jan Kara <jack@suse.com>
SUSE Labs, CR

^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: generic_permission() optimization
  2025-11-05 13:37                               ` Jan Kara
@ 2025-11-17 11:42                                 ` Mateusz Guzik
  0 siblings, 0 replies; 42+ messages in thread
From: Mateusz Guzik @ 2025-11-17 11:42 UTC (permalink / raw)
  To: Jan Kara
  Cc: Theodore Ts'o, Linus Torvalds, Christian Brauner, Al Viro,
	linux-fsdevel, Ext4 Developers List

On Wed, Nov 5, 2025 at 2:37 PM Jan Kara <jack@suse.cz> wrote:
>
> On Wed 05-11-25 12:51:16, Mateusz Guzik wrote:
> > On Wed, Nov 5, 2025 at 12:50 PM Mateusz Guzik <mjguzik@gmail.com> wrote:
> > >
> > > On Sun, Apr 13, 2025 at 2:40 PM Theodore Ts'o <tytso@mit.edu> wrote:
> > > >
> > > > On Sun, Apr 13, 2025 at 11:41:47AM +0200, Mateusz Guzik wrote:
> > > > > This is the rootfs of the thing, so I tried it out with merely
> > > > > printing it. I got 70 entries at boot time. I don't think figuring out
> > > > > what this is specifically is warranted (it is on debian though).
> > > >
> > > > Well, can you run:
> > > >
> > > > debugfs -R "stat <INO>" /dev/ROOT_DEV
> > > >
> > > > on say, two or three of the inodes (replace INO with a number, and
> > > > ROOT_DEV with the root file system device) and send me the result?
> > > > That would be really helpful in understanding what might be going on.
> > > >
> > > > > So... I think this is good enough to commit? I had no part in writing
> > > > > the patch and I'm not an ext4 person, so I'm not submitting it myself.
> > > > >
> > > > > Ted, you seem fine with the patch, so perhaps you could do the needful(tm)?
> > > >
> > > > Sure, I'll put together a more formal patch and do full QA run and
> > > > checking of the code paths, as a supposed a fairly superficial review
> > > > and hack.
> > > >
> > >
> > > It looks like this well through the cracks.
> > >
> > > To recount, here is the patch (by Linus, not me):
> > > > diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
> > > > index f386de8c12f6..3e0ba7c4723a 100644
> > > > --- a/fs/ext4/inode.c
> > > > +++ b/fs/ext4/inode.c
> > > > @@ -5109,6 +5109,11 @@ struct inode *__ext4_iget(struct super_block *sb, unsigned long ino,
> > > >                 goto bad_inode;
> > > >         brelse(iloc.bh);
> > > >
> > > > +       if (test_opt(sb, DEBUG) &&
> > > > +           (ext4_test_inode_state(inode, EXT4_STATE_XATTR) ||
> > > > +            ei->i_file_acl))
> > > > +               ext4_msg(sb, KERN_DEBUG, "has xattr ino %lu", inode->i_ino);
> > > > +
> > > >         unlock_new_inode(inode);
> > > >         return inode;
> > >
> >
> > sigh, copy-pasto, the patch is:
> >   --- a/fs/ext4/inode.c
> >   +++ b/fs/ext4/inode.c
> >   @@ -5011,6 +5011,11 @@ struct inode *__ext4_iget(...
> >         }
> >
> >         brelse(iloc.bh);
> >   +
> >   +     /* Initialize the "no ACL's" state for the simple cases */
> >   +     if (!ext4_test_inode_state(inode, EXT4_STATE_XATTR) && !ei->i_file_acl)
> >   +             cache_no_acl(inode);
> >   +
> >         unlock_new_inode(inode);
> >         return inode;
>
> This looks fine. Feel free to add:
>
> Reviewed-by: Jan Kara <jack@suse.cz>
>

ping?

the window to get this in 6.19 is closing (if not too late already),
would be a bummer if it did not make it

^ permalink raw reply	[flat|nested] 42+ messages in thread

end of thread, other threads:[~2025-11-17 11:42 UTC | newest]

Thread overview: 42+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-10-31  4:16 generic_permission() optimization Linus Torvalds
2024-10-31  6:05 ` Al Viro
2024-10-31  6:42   ` Linus Torvalds
2024-10-31 18:14     ` Linus Torvalds
2024-10-31 22:28       ` Al Viro
2024-10-31 22:34         ` Linus Torvalds
2024-11-01  1:17           ` Linus Torvalds
2024-11-01  1:27             ` Al Viro
2024-11-01 13:15             ` Christian Brauner
2024-10-31 13:02 ` Christian Brauner
2024-10-31 19:04   ` Linus Torvalds
2024-10-31 22:02     ` Linus Torvalds
2024-10-31 22:31       ` Linus Torvalds
2024-11-07 19:54         ` Linus Torvalds
2024-11-07 22:22           ` Mateusz Guzik
2024-11-07 22:49             ` Linus Torvalds
2025-04-12 16:26               ` Mateusz Guzik
2025-04-12 20:22                 ` Linus Torvalds
2025-04-14 10:21                   ` Christian Brauner
2025-04-16 13:17                     ` [PATCH RFC 0/3] mnt_idmapping: avoid pointer chase & inline low-level helpers Christian Brauner
2025-04-16 13:17                       ` [PATCH RFC 1/3] inode: add fastpath for filesystem user namespace retrieval Christian Brauner
2025-04-16 13:49                         ` Mateusz Guzik
2025-04-16 14:14                           ` Christian Brauner
2025-04-22 10:37                         ` Jan Kara
2025-04-22 13:33                           ` Mateusz Guzik
2025-04-22 14:05                             ` Christian Brauner
2025-04-16 13:17                       ` [PATCH RFC 2/3] mnt_idmapping: add struct mnt_idmap to header Christian Brauner
2025-04-16 13:17                       ` [PATCH RFC 3/3] mnt_idmapping: inline all low-level helpers Christian Brauner
2025-04-16 15:04                         ` Linus Torvalds
2025-04-22  9:28                           ` Christian Brauner
2025-04-12 21:52                 ` generic_permission() optimization Theodore Ts'o
2025-04-12 22:36                   ` Linus Torvalds
2025-04-12 23:12                     ` Linus Torvalds
2025-04-12 23:55                     ` Theodore Ts'o
2025-04-13  9:41                       ` Mateusz Guzik
2025-04-13 12:40                         ` Theodore Ts'o
2025-04-13 12:52                           ` Mateusz Guzik
2025-04-13 17:29                             ` Theodore Ts'o
2025-11-05 11:50                           ` Mateusz Guzik
2025-11-05 11:51                             ` Mateusz Guzik
2025-11-05 13:37                               ` Jan Kara
2025-11-17 11:42                                 ` Mateusz Guzik

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).