Using fstatfs on a ZFS disk

rb at gid.co.uk rb at gid.co.uk
Mon Feb 19 17:57:18 UTC 2018


Hi,

> On 19 Feb 2018, at 15:50, Willem Jan Withagen <wjw at digiware.nl> wrote:
> 
> On 19-2-2018 16:00, Bob Bishop wrote:
>> Hi,
>>> On 19 Feb 2018, at 14:48, Willem Jan Withagen <wjw at digiware.nl> wrote:
>>> 
>>> Hi,
>>> 
>>> I'm trying to find the values of the returned f_type for ZFS
>>> in the fstatfs call when a file is on ZFS....
>>> 
>>> But I have not yet found the definitions of the ENUMS that
>>> would fill that value... Let alone the value for ZFS.
>> I chased this particular wild goose myself recently. It’s FS_... in  /usr/include/sys/disklabel,h that you want.
> 
> Hi Bob,
> 
> I grepped on MAGIC and FS, but the combo did not deliver anything useful. So this is already more that I found.
> I did get:
> /usr/include/ufs/ffs/fs.h:#define       FS_UFS1_MAGIC   0x011954 /* UFS1 fast filesystem magic number */
> /usr/include/ufs/ffs/fs.h:#define       FS_UFS2_MAGIC   0x19540119 /* UFS2 fast filesystem magic number */
> /usr/include/ufs/ffs/fs.h:#define       FS_BAD_MAGIC    0x19960408 /* UFS incomplete newfs magic number */

Those I believe are magic numbers for UFS superblocks... 

> So I was looking for something like: FS_ZFS_MAGIC

... so you won’t find that.

> disklabel.h contains:
> #ifdef  FSTYPENAMES
> static const char *fstypenames[] = {
> 
> And further search:
> /usr/include/sys/disk/bsd.h:#define     FS_ZFS  27    /* Sun's ZFS */
> 
> Running:
> #include "stdio.h"
> 
> #include <sys/param.h>
> #include <sys/mount.h>
> 
> int main() {
>        struct statfs fstr;
>        char * str;
> 
>        str = "/tmp";
>        statfs(str, &fstr);
>        printf("%s, ftype: 0x%x.\n", str, fstr.f_type);
> }
> results in:
> 	/tmp, ftype: 0xde.
> 
> Now 0xde != 27, so the question is, where is this 0xde specified.
> And more important is this f_type constant over all FreeBSD ZFS filesystems?

You got me. And a quick look at sys/kern/vfs_syscalls.c doesn’t help except to imply that the type is set when the filesystem is mounted. I have no idea where 0xde comes from.

> --WjW
> 
>>>     struct statfs {
>>>     uint32_t f_version;             /* structure version number */
>>>     uint32_t f_type;                /* type of filesystem */
>>>     uint64_t f_flags;               /* copy of mount exported flags */
>>>     ......
>>>     }
>>> 
>>> Any hints where to look would be welcomed.
>>> 
>>> Thanx,
>>> --WjW
>>> _______________________________________________
>>> freebsd-hackers at freebsd.org mailing list
>>> https://lists.freebsd.org/mailman/listinfo/freebsd-hackers
>>> To unsubscribe, send any mail to "freebsd-hackers-unsubscribe at freebsd.org"
>>> 
>> --
>> Bob Bishop
>> rb at gid.co.uk
> 


--
Bob Bishop       t: +44 (0)118 940 1243
rb at gid.co.uk     m: +44 (0)783 626 4518







More information about the freebsd-hackers mailing list