Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 19 Feb 2018 17:57:15 +0000
From:      rb@gid.co.uk
To:        Willem Jan Withagen <wjw@digiware.nl>
Cc:        FreeBSD Hackers <freebsd-hackers@freebsd.org>
Subject:   Re: Using fstatfs on a ZFS disk
Message-ID:  <456B0CAA-367F-478A-BB61-153942C3EB7A@gid.co.uk>
In-Reply-To: <f03f94db-e5a8-b57f-ec9a-2d434dff7425@digiware.nl>
References:  <ffcfabf1-8cf1-4182-413e-73b7117d66d7@digiware.nl> <1C4DBFA3-5E79-4503-840C-0C548741363B@gid.co.uk> <f03f94db-e5a8-b57f-ec9a-2d434dff7425@digiware.nl>

next in thread | previous in thread | raw e-mail | index | archive | help

Hi,

> On 19 Feb 2018, at 15:50, Willem Jan Withagen <wjw@digiware.nl> wrote:
> 
> On 19-2-2018 16:00, Bob Bishop wrote:
>> Hi,
>>> On 19 Feb 2018, at 14:48, Willem Jan Withagen <wjw@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@freebsd.org mailing list
>>> https://lists.freebsd.org/mailman/listinfo/freebsd-hackers
>>> To unsubscribe, send any mail to "freebsd-hackers-unsubscribe@freebsd.org"
>>> 
>> --
>> Bob Bishop
>> rb@gid.co.uk
> 


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








Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?456B0CAA-367F-478A-BB61-153942C3EB7A>