From: Waldemar Kozaczuk <[email protected]>
Committer: Waldemar Kozaczuk <[email protected]>
Branch: master

zfs: modify fsid_guid to store extra bits to allow detecting ZFS in pagecache

This patch slightly modifies logic in zfs_domount() to put
ZFS identifier into the 8 highest bits of vfs_fsid field.
This will allow us to detect file system type in pagecache logic.

Please note that vfs_fsid field is used to source st_dev value
in ZFS getattr() function. The combination of st_dev and ino is used
to uniquely identify files in pagecache implementation logic.

Signed-off-by: Waldemar Kozaczuk <[email protected]>

---
diff --git a/bsd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c 
b/bsd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c
--- a/bsd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c
+++ b/bsd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c
@@ -61,6 +61,7 @@
 #include <sys/dmu_objset.h>
 #include <sys/spa_boot.h>
 #include "zfs_comutil.h"
+#include <fs/vfs/vfs_id.h>
 
 #if notyet
 struct mtx zfs_debug_mtx;
@@ -1009,7 +1010,7 @@ zfs_domount(vfs_t *vfsp, const char *osname)
        ASSERT((fsid_guid & ~((1ULL<<56)-1)) == 0);
        vfsp->vfs_fsid.__val[0] = fsid_guid;
        /* fsid type not included */
-       vfsp->vfs_fsid.__val[1] = fsid_guid >> 32;
+       vfsp->vfs_fsid.__val[1] = (ZFS_ID | fsid_guid) >> 32;
 
        /*
         * Set features for file system.
diff --git a/fs/vfs/vfs_id.h b/fs/vfs/vfs_id.h
--- a/fs/vfs/vfs_id.h
+++ b/fs/vfs/vfs_id.h
@@ -0,0 +1,20 @@
+/*
+ * Copyright (C) 2020 Waldemar Kozaczuk
+ *
+ * This work is open source software, licensed under the terms of the
+ * BSD license as described in the LICENSE file in the top-level directory.
+ */
+
+#ifndef _VFS_ID_H
+#define _VFS_ID_H
+
+#define RAMFS_ID       (1ULL<<56)
+#define DEVFS_ID       (2ULL<<56)
+#define NFS_ID         (3ULL<<56)
+#define PROCFS_ID      (4ULL<<56)
+#define SYSFS_ID       (5ULL<<56)
+#define ZFS_ID         (6ULL<<56)
+#define ROFS_ID                (7ULL<<56)
+#define VIRTIOFS_ID    (8ULL<<56)
+
+#endif /* !_VFS_ID_H */

-- 
You received this message because you are subscribed to the Google Groups "OSv 
Development" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/osv-dev/0000000000006a2f6a05a44fdb48%40google.com.

Reply via email to