[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v2 04/11] 9p: darwin: Handle struct dirent differences
From: |
Christian Schoenebeck |
Subject: |
Re: [PATCH v2 04/11] 9p: darwin: Handle struct dirent differences |
Date: |
Wed, 24 Nov 2021 20:09:01 +0100 |
On Mittwoch, 24. November 2021 16:45:30 CET Michael Roitzsch wrote:
> Hi,
>
> > Are you sure d_seekoff doesn't work on macOS?
>
> I just tried on an APFS volume on macOS Monterey and d_seekoff is always 0,
> while telldir() outputs useful values.
> > Because using telldir() instead
> > is not the same thing. Accessing d_*off is just POD access, whereas
> > telldir() is a syscall.
>
> I am not sure this is the case. I have tried a quick test program:
>
> #include <dirent.h>
>
> int main(void)
> {
> int result = 0;
> DIR *dir = opendir(".");
> while (readdir(dir)) {
> result += telldir(dir);
> }
> closedir(dir);
> return result;
> }
>
> I ran it with 'sudo dtruss ./test', which should give me a trace of the
> system calls. The relevant portion is:
>
> open_nocancel(".\0", 0x1100004, 0x0) = 3 0
> sysctlbyname(kern.secure_kernel, 0x12, 0x7FF7BE49810C, 0x7FF7BE498110,
> 0x0) = 0 0 fstatfs64(0x3, 0x7FF7BE498110, 0x0) = 0 0
> getdirentries64(0x3, 0x7FF4A5808A00, 0x2000) = 1472 0
> close_nocancel(0x3) = 0 0
>
> The directory has more than 30 entries, but the loop does not appear to
> cause individual system calls. Instead, readdir() and telldir() appear to
> be library functions powered by this getdirentries64 syscall.
Right, telldir() is part of Apple's libc, no (fs) syscall involved:
https://opensource.apple.com/source/Libc/Libc-167/gen.subproj/telldir.c.auto.html
However instead of changing the (fs driver independent) 9p server [9p.c] code
and using fidp there, I would probably rather address this issue for macOS in
the individual fs drivers [9p-local.c, 9p-synth.c, 9p-proxy.c] directly on
dirent instead, and not rely on fidp not having mutated on server.
And please make sure the 9p test cases pass.
Best regards,
Christian Schoenebeck
- [PATCH v2 00/11] 9p: Add support for darwin, Will Cohen, 2021/11/21
- [PATCH v2 06/11] 9p: darwin: Compatibility defn for XATTR_SIZE_MAX, Will Cohen, 2021/11/21
- [PATCH v2 07/11] 9p: darwin: *xattr_nofollow implementations, Will Cohen, 2021/11/21
- [PATCH v2 08/11] 9p: darwin: Compatibility for f/l*xattr, Will Cohen, 2021/11/21
- [PATCH v2 10/11] 9p: darwin: Implement compatibility for mknodat, Will Cohen, 2021/11/21
- [PATCH v2 11/11] 9p: darwin: meson: Allow VirtFS on Darwin, Will Cohen, 2021/11/21
- [PATCH v2 05/11] 9p: darwin: Ignore O_{NOATIME, DIRECT}, Will Cohen, 2021/11/21
- [PATCH v2 03/11] 9p: darwin: Handle struct stat(fs) differences, Will Cohen, 2021/11/21