+extern int hfs_chashremove(struct cnode *cp);
+extern void hfs_chash_abort(struct cnode *cp);
+extern void hfs_chash_rehash(struct cnode *cp1, struct cnode *cp2);
+extern void hfs_chashwakeup(struct cnode *cp, int flags);
+extern void hfs_chash_mark_in_transit(struct cnode *cp);
+
+extern struct vnode * hfs_chash_getvnode(dev_t dev, ino_t inum, int wantrsrc, int skiplock);
+extern struct cnode * hfs_chash_getcnode(dev_t dev, ino_t inum, struct vnode **vpp, int wantrsrc, int skiplock);
+extern int hfs_chash_snoop(dev_t, ino_t, int (*)(const struct cat_desc *,
+ const struct cat_attr *, void *), void *);
+extern int hfs_valid_cnode(struct hfsmount *hfsmp, struct vnode *dvp, struct componentname *cnp, cnid_t cnid);
+
+extern int hfs_chash_set_childlinkbit(dev_t dev, cnid_t cnid);
+
+/*
+ * HFS cnode lock functions.
+ *
+ * HFS Locking Order:
+ *
+ * 1. cnode truncate lock (if needed)
+ * 2. cnode lock (in parent-child order if related, otherwise by address order)
+ * 3. journal (if needed)
+ * 4. system files (as needed)
+ * A. Catalog B-tree file
+ * B. Attributes B-tree file
+ * C. Startup file (if there is one)
+ * D. Allocation Bitmap file (always exclusive, supports recursion)
+ * E. Overflow Extents B-tree file (always exclusive, supports recursion)
+ * 5. hfs mount point (always last)
+ *
+ */
+enum hfslocktype {HFS_SHARED_LOCK = 1, HFS_EXCLUSIVE_LOCK = 2, HFS_FORCE_LOCK = 3};
+#define HFS_SHARED_OWNER (void *)0xffffffff
+
+extern int hfs_lock(struct cnode *, enum hfslocktype);
+extern int hfs_lockpair(struct cnode *, struct cnode *, enum hfslocktype);
+extern int hfs_lockfour(struct cnode *, struct cnode *, struct cnode *, struct cnode *,
+ enum hfslocktype);
+
+extern void hfs_unlock(struct cnode *);
+extern void hfs_unlockpair(struct cnode *, struct cnode *);
+extern void hfs_unlockfour(struct cnode *, struct cnode *, struct cnode *, struct cnode *);
+
+extern void hfs_lock_truncate(struct cnode *, int);
+extern void hfs_unlock_truncate(struct cnode *, int);