Maybe FUSE is blocking more than pathconf(). That's not my code to debug. And yes, coreservicesd is running as the super user.
From man pathconf: RETURN VALUES If the call to pathconf or fpathconf is not successful, -1 is returned and errno is set appropriately. Otherwise, if the variable is associated with functionality that does not have a limit in the system, -1 is returned and errno is not modified. Otherwise, the current variable value is returned. So as the code I sent showed, we're checking the result against -1. > On Apr 14, 2017, at 8:56 AM, Scott Talbert <s...@techie.net> wrote: > > OK, I think I finally have some idea of what's going on... > > After I added _PC_FILESIZEBITS support, in the cases where > NSURLVolumeMaximumFileSize was still being reported incorrectly, it was > because FUSE was denying the pathconf() request from coreservicesd. FUSE has > some logic for blanket denying requests, and in this case the request was > denied because it was from the root user and not the user who mounted the > filesystem. I don't understand the purpose of trying to deny requests from > root, so when I removed this check, things work correctly. > > Now, I still don't understand why coreservicesd isn't falling back to > getattrlist() when the pathconf() request fails. Perhaps depending on the > type of error from pathconf(), it doesn't go further to getattrlist()? > > Scott > > On Thu, 13 Apr 2017, Jim Luther wrote: > >> OK -- I don't have a clue. >> >> If you have a reproducible case that you can provide steps for, please file >> a bug report against the component "CFURL | all", and I can take a look at >> it. >> >> - Jim >> >>> On Apr 13, 2017, at 3:31 PM, Scott Talbert <s...@techie.net> wrote: >>> >>> On Thu, 13 Apr 2017, Jim Luther wrote: >>> >>>> You could test my theory by writing a program that: >>>> • listens for kNotifyVFSMount BSD notifications (see man 3 notify and the >>>> notify.h and notify_keys.h headers) >>>> • when it gets the kNotifyVFSMount notification, call getmntinfo(3) to get >>>> the array of statfs structures for each currently mounted file system. >>>> • finds your file system in the array and pass its path (f_mntonname) to >>>> the getMaxFileSize() function and see what it does. >>>> If the statfs struct from getmntinfo() for your file system doesn't look >>>> correct, check to make sure your file system's data for the vfs_statfs >>>> callback is initialized before your file system's vfs_mount callback >>>> returns. One way to do that is to have your file system's vfs_mount code >>>> call your file system's vfs_statfs callback (that's the approach I took in >>>> the WebDAV file system long ago when I wrote it). >>>> If getattrlist() fails or returns the wrong value, check the code for your >>>> file system's vfs_getattr callback to make sure it is prepared to handle >>>> requests before your file system's vfs_mount callback returns. Look at >>>> where the vfs_getattr callback handles f_capabilities. >>> >>> Again in this case, getMaxFileSize() returns the correct value, but the >>> NSURL call does not: >>> >>> BLAH f_bsize:4096 f_iosize:4096 f_blocks:0 f_bfree:0 f_bavail:0 f_files:0 >>> f_ffree:0 f_fsid[0]:1258291282 f_fsid[1]:51 f_owner:501 f_type:51 >>> f_flags:26 f_fssubtype:0 f_fstypename:osxfuse >>> f_mntonname:/Users/stalbert/hello f_mntfromname:hello_ll@osxfuse0 >>> BLAH getMaxFileSize ret=0 maxFileSize=9223372036854775807 >>> 2017-04-13 18:16:50.982 notify[73589:1525216] NSURLVolumeMaximumFileSize: 1 >>> (null) (null) >>> >>>> Also, you can add _PC_FILESIZEBITS support to your file >>>> system's vnop_pathconf callback so that pathconf() with _PC_FILESIZEBITS >>>> will return a more exact value. VOL_CAP_FMT_2TB_FILESIZE is the "big dumb >>>> hammer" fallback if we cannot get a value from pathconf(). >>> >>> Interestingly, if I do that, some FUSE filesystems start reporting the >>> correct size with NSURLVolumeMaximumFileSize, but some continue to report >>> TRUE, nil, nil as before. >>> >>> Scott >>
_______________________________________________ Do not post admin requests to the list. They will be ignored. Filesystem-dev mailing list (Filesystem-dev@lists.apple.com) Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/filesystem-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com