Scott wrote a good bug report so I have something to work with. Reproducible 
problem == much easier to figure out.

I'll let you know what I find, and let you know if there's a work around.

- Jim

> On Apr 15, 2017, at 4:01 PM, Benjamin Fleischer <flei...@gmail.com> wrote:
> 
> Hi Jim,
> 
> Is there anything we can do to work around this in the meantime? 
> NSURLVolumeMaximumFileSize seems to work after adding support for 
> _PC_FILESIZEBITS. However, so far we have not found a way to make 
> FSGetVolumeParms() return the bSupports2TBFiles flag.
> 
> corservicesd calls vfsop_getattr multiple times but never with an active 
> f_capabilities flag. This would explain why NSURLVolumeMaximumFileSize didn’t 
> work before adding support for _PC_FILESIZEBITS.
> 
> Since FSGetVolumeParms() works for HFS volumes I assume there might be a way 
> we can work around this. In particular, I'm interested in the specific 
> conditions under which coreservicesd does not ask for the file system’s 
> capabilities. It would be very helpful if you could share your findings.
> 
> Thanks,
> Benjamin
> 
>> Am 15.04.2017 um 23:34 schrieb Jim Luther <luthe...@apple.com>:
>> 
>> 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/fleiben%40gmail.com
>> 
>> This email sent to flei...@gmail.com
> 

 _______________________________________________
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

Reply via email to