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