Add .zfs control directory
[zfs.git] / include / sys / zfs_vfsops.h
index 6d4d713..33ecf72 100644 (file)
@@ -67,9 +67,12 @@ typedef struct zfs_sb {
        boolean_t       z_unmounted;    /* unmounted */
        rrwlock_t       z_teardown_lock;
        krwlock_t       z_teardown_inactive_lock;
-       list_t          z_all_znodes;   /* all vnodes in the fs */
+       list_t          z_all_znodes;   /* all znodes in the fs */
+       uint64_t        z_nr_znodes;    /* number of znodes in the fs */
        kmutex_t        z_znodes_lock;  /* lock for z_all_znodes */
        struct inode    *z_ctldir;      /* .zfs directory inode */
+       avl_tree_t      z_ctldir_snaps; /* .zfs/snapshot entries */
+       kmutex_t        z_ctldir_lock;  /* .zfs ctldir lock */
        boolean_t       z_show_ctldir;  /* expose .zfs in the root dir */
        boolean_t       z_issnap;       /* true if this is a snapshot */
        boolean_t       z_vscan;        /* virus scan on/off */
@@ -92,30 +95,12 @@ typedef struct zfs_sb {
 
 #define        ZSB_XATTR       0x0001          /* Enable user xattrs */
 
-
-/*
- * Minimal snapshot helpers, the bulk of the Linux snapshot implementation
- * lives in the zpl_snap.c file which is part of the zpl source.
- */
-#define        ZFS_CTLDIR_NAME         ".zfs"
-
-#define        zfs_has_ctldir(zdp)     \
-       ((zdp)->z_id == ZTOZSB(zdp)->z_root && \
-       (ZTOZSB(zdp)->z_ctldir != NULL))
-#define        zfs_show_ctldir(zdp)    \
-       (zfs_has_ctldir(zdp) && \
-       (ZTOZSB(zdp)->z_show_ctldir))
-
-#define        ZFSCTL_INO_ROOT         0x1
-#define        ZFSCTL_INO_SNAPDIR      0x2
-#define        ZFSCTL_INO_SHARES       0x3
-
 /*
  * Allow a maximum number of links.  While ZFS does not internally limit
- * this most Linux filesystems do.  It's probably a good idea to limit
- * this to a large value until it is validated that this is safe.
+ * this the inode->i_nlink member is defined as an unsigned int.  To be
+ * safe we use 2^31-1 as the limit.
  */
-#define ZFS_LINK_MAX           65536
+#define ZFS_LINK_MAX           ((1U << 31) - 1U)
 
 /*
  * Normal filesystems (those not under .zfs/snapshot) have a total
@@ -185,6 +170,8 @@ extern int zfs_get_zplprop(objset_t *os, zfs_prop_t prop,
 extern int zfs_sb_create(const char *name, zfs_sb_t **zsbp);
 extern int zfs_sb_setup(zfs_sb_t *zsb, boolean_t mounting);
 extern void zfs_sb_free(zfs_sb_t *zsb);
+extern int zfs_sb_prune(struct super_block *sb, unsigned long nr_to_scan,
+    int *objects);
 extern int zfs_sb_teardown(zfs_sb_t *zsb, boolean_t unmounting);
 extern int zfs_check_global_label(const char *dsname, const char *hexsl);
 extern boolean_t zfs_is_readonly(zfs_sb_t *zsb);
@@ -192,6 +179,7 @@ extern boolean_t zfs_is_readonly(zfs_sb_t *zsb);
 extern int zfs_register_callbacks(zfs_sb_t *zsb);
 extern void zfs_unregister_callbacks(zfs_sb_t *zsb);
 extern int zfs_domount(struct super_block *sb, void *data, int silent);
+extern void zfs_preumount(struct super_block *sb);
 extern int zfs_umount(struct super_block *sb);
 extern int zfs_remount(struct super_block *sb, int *flags, char *data);
 extern int zfs_root(zfs_sb_t *zsb, struct inode **ipp);