blob: 2c92a0a947e4a601869a72f2a9601f329c6fa682 [file] [log] [blame]
/*
* Copyright (c) 1998 The Santa Cruz Operation, Inc.. All Rights Reserved.
*
* THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF THE
* SANTA CRUZ OPERATION INC.
*
* The copyright notice above does not evidence any actual or intended
* publication of such source code.
*/
#ifndef _FS_NAMEFS_NAMENODE_H /* wrapper symbol for kernel use */
#define _FS_NAMEFS_NAMENODE_H /* subject to change without notice */
#ident "@(#)kern:fs/namefs/namenode.h 1.13.2.1"
#ident "$Header: $"
#if defined(__cplusplus)
extern "C" {
#endif
#ifdef _KERNEL_HEADERS
#include <util/types.h> /* REQUIRED */
#include <util/ksynch.h> /* REQUIRED */
#include <fs/vnode.h> /* REQUIRED */
#include <acc/dac/acl.h> /* REQUIRED */
#elif defined(_KERNEL) || defined(_KMEMUSER)
#include <sys/types.h> /* REQUIRED */
#include <sys/ksynch.h> /* REQUIRED */
#include <sys/vnode.h> /* REQUIRED */
#include <sys/acl.h> /* REQUIRED */
#endif /* _KERNEL_HEADERS */
/*
* This structure is used to pass a file descriptor from user
* level to the kernel. It is first used by fattach() and then
* be NAMEFS.
*/
struct namefd {
int fd;
};
#if defined(_KERNEL) || defined(_KMEMUSER)
/*
* Each NAMEFS object is identified by a struct namenode/vnode pair.
*/
struct namenode {
struct vnode nm_vnode; /* represents mounted file desc.*/
ushort nm_flag; /* flags defined below */
struct vattr nm_vattr; /* attributes of mounted file desc.*/
struct vnode *nm_filevp; /* file desc. prior to mounting */
struct file *nm_filep; /* file pointer of nm_filevp */
struct vnode *nm_mountpt; /* mount point prior to mounting */
struct namenode *nm_nextp; /* next link in the linked list */
struct namenode *nm_backp; /* back link in linked list */
struct acl *nm_aclp; /* ACL entries */
rwsleep_t nm_lock; /* protects namenode */
};
#endif /* _KERNEL || _KMEMUSER */
#ifdef _KERNEL
/*
* Valid flags for namenodes.
*/
#define NMUNMOUNT 01 /* the namenode is unmounted */
#define NMREMOVED 02 /* the namenode is removed from namenode list */
#define NMREAD 04 /* the mount file has FREAD set */
#define NMWRITE 010 /* the mount file has FWRITE set */
/*
* Constants.
*/
#define NMBSIZE 1024 /* NAMEFS block size */
#define NMFSIZE 1024 /* NAMEFS fundamental block size */
/*
* Macros to convert a vnode to a namenode, and vice versa.
*/
#define VTONM(vp) ((struct namenode *)((vp)->v_data))
#define NMTOV(nm) (&(nm)->nm_vnode)
#define STREAM_LOCK(stp) LOCK((stp)->sd_mutex, PLSTR);
#define STREAM_UNLOCK(stp, pl) UNLOCK((stp)->sd_mutex, pl);
extern int nm_tflush; /* the frequency of flush namefs */
extern int namefs_fstype; /* index into vfssw returned by vfs_attach */
#endif /* _KERNEL */
#if defined(__cplusplus)
}
#endif
#endif /* _FS_NAMEFS_NAMENODE_H */