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

Reply via email to