I think I might have found a path through the our code where this could happen. Please write a bug report against the "CoreServicesDaemon" component, version "X" (or put that in the bug report so it gets routed correctly).
Getting a bug report from outside of Apple increases its chances of being addressed. Steps to reproduce the problem (even it the problem is intermittent) increase those chances even more. - Jim > On Apr 14, 2017, at 5:33 PM, Scott Talbert <s...@techie.net> wrote: > > Well, I may have found a partial answer to my question. I came across this > (rather old) post from Quinn: > https://lists.apple.com/archives/Darwin-kernel//2007/Nov/msg00092.html > > It suggests that Finder calls the PBHGetVolParms() (replaced by > FSGetVolumeParms()) and checks for the bSupports2TBFiles flag. > > Sure enough, even with the NSURL properties being reported correctly now, if > I call FSGetVolumeParms() for my filesystem, the bSupports2TBFiles flag is > not set. > > Now to try and figure this one out...the post further suggests that it's > related to the VOL_CAP_FMT_2TB_FILESIZE bit as returned by getattrlist(). > That bit is set correctly, but as I discovered while investigating the NSURL > issue, I never saw a call to getattr() from coreservicesd, even when it > should have fallen back to that when pathconf() was not implemented. > > On Fri, 14 Apr 2017, Scott Talbert wrote: > >> The problem is, this Finder error is only reproducible on two machines, out >> of perhaps several dozen using this filesystem. So, unfortunately, I don't >> have a set of easy steps to reproduce. >> >> On Fri, 14 Apr 2017, Jim Luther wrote: >> >>> At this point, I suggest you write a bug report with easy steps to >>> reproduce the problem. If you file it against NSURL or CFURL, it'll get to >>> the right place. >>> - Jim >>>> On Apr 14, 2017, at 11:49 AM, Scott Talbert <s...@techie.net> wrote: >>>> Sigh. Even after resolving the issue with the getResourceValue returns, I >>>> am still seeing "The item xyz can't be copied because it is too large for >>>> the volume's format" from Finder. >>>> Do you know the precise circumstances under which Finder will issue this >>>> error message? If not, is there a better place to ask about Finder? >>>> Thanks again for your help on this, >>>> Scott >>>> On Fri, 14 Apr 2017, Scott Talbert wrote: >>>>> There doesn't appear to be any similar user checks in getattr(). In >>>>> fact, the only request I'm seeing to getattr() from the coreservicesd PID >>>>> is for the filesystem uuid, and that happens before the request to >>>>> pathconf() comes in. I don't see any calls to getattr() after the >>>>> pathconf() request. >>>>> And yes, I understand about the return values from pathconf(). I was >>>>> just suggesting coreservicesd might be doing something different based on >>>>> the errno, but it sounds like it is not. >>>>> On Fri, 14 Apr 2017, Jim Luther wrote: >>>>>> 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