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:
>=20
> On 19-2-2018 16:00, Bob Bishop wrote:
>> Hi,
>>> On 19 Feb 2018, at 14:48, Willem Jan Withagen <wjw@digiware.nl> =
wrote:
>>>=20
>>> Hi,
>>>=20
>>> I'm trying to find the values of the returned f_type for ZFS
>>> in the fstatfs call when a file is on ZFS....
>>>=20
>>> 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=E2=80=99s =
FS_... in  /usr/include/sys/disklabel,h that you want.
>=20
> Hi Bob,
>=20
> 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...=20

> So I was looking for something like: FS_ZFS_MAGIC

... so you won=E2=80=99t find that.

> disklabel.h contains:
> #ifdef  FSTYPENAMES
> static const char *fstypenames[] =3D {
>=20
> And further search:
> /usr/include/sys/disk/bsd.h:#define     FS_ZFS  27    /* Sun's ZFS */
>=20
> Running:
> #include "stdio.h"
>=20
> #include <sys/param.h>
> #include <sys/mount.h>
>=20
> int main() {
>        struct statfs fstr;
>        char * str;
>=20
>        str =3D "/tmp";
>        statfs(str, &fstr);
>        printf("%s, ftype: 0x%x.\n", str, fstr.f_type);
> }
> results in:
> 	/tmp, ftype: 0xde.
>=20
> Now 0xde !=3D 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=E2=80=99t =
help except to imply that the type is set when the filesystem is =
mounted. I have no idea where 0xde comes from.

> --WjW
>=20
>>>     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 =
*/
>>>     ......
>>>     }
>>>=20
>>> Any hints where to look would be welcomed.
>>>=20
>>> 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"
>>>=20
>> --
>> Bob Bishop
>> rb@gid.co.uk
>=20


--
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>