vmount or mount Subroutine

Purpose

Makes a file system available for use.

Library

Standard C Library (libc.a)

Syntax

#include <sys/types.h>
#include <sys/vmount.h>

int vmount ( VMount,  Size)
struct vmount *VMount;
int Size;

int mount
(
Device,  Path,  Flags)
char *Device;
char *Path;
int Flags;

Description

The vmount subroutine mounts a file system, thereby making the file available for use. The vmount subroutine effectively creates what is known as a virtual file system. After a file system is mounted, references to the path name that is to be mounted over refer to the root directory on the mounted file system.

A directory can only be mounted over a directory, and a file can only be mounted over a file. (The file or directory may be a symbolic link.)

Therefore, the vmount subroutine can provide the following types of mounts:

A mount to a directory or a file can be issued if the calling process has root user authority or is in the system group and has write access to the mount point.

To mount a block device, remote file, or remote directory, the calling process must also have root user authority.

The mount subroutine only allows mounts of a block device over a local directory with the default file system type. The mount subroutine searches the /etc/filesystems file to find a corresponding stanza for the desired file system.

Note: The mount subroutine interface is provided only for compatibility with previous releases of the operating system. The use of the mount subroutine is strongly discouraged by normal application programs.

If the directory you are trying to mount over has the sticky bit set to on, you must either own that directory or be the root user for the mount to succeed. This restriction applies only to directory-over-directory mounts.

Parameters

Device
A path name identifying the block device (also called a special file) that contains the physical file system.
Path
A path name identifying the directory on which the file system is to be mounted.
Flags
Values that define characteristics of the object to be mounted. Currently these values are defined in the /usr/include/sys/vmount.h file:
MNT_READONLY
Indicates that the object to be mounted is read-only and that write access is not allowed. If this value is not specified, writing is permitted according to individual file accessibility.
MNT_NOSUID
Indicates that setuid and setgid programs referenced through the mount should not be executable. If this value is not specified, setuid and setgid programs referenced through the mount may be executable.
MNT_NODEV
Indicates that opens of device special files referenced through the mount should not succeed. If this value is not specified, opens of device special files referenced through the mount may succeed.
VMount
A pointer to a variable-length vmount structure. This structure is defined in the sys/vmount.h file.

The following fields of the VMount parameter must be initialized before the call to the vmount subroutine:

vmt_revision
The revision code in effect when the program that created this virtual file system was compiled. This is the value VMT_REVISION.
vmt_length
The total length of the structure with all its data. This must be a multiple of the word size (4 bytes) and correspond with the Size parameter.
vmt_flags
Contains the general mount characteristics. The following value may be specified:
MNT_READONLY
A read-only virtual file system is to be created.
vmt_gfstype
The type of the generic file system underlying the VMT_OBJECT. Values for this field are defined in the sys/vmount.h file and include:
MNT_JFS
Indicates the native file system.
MNT_NFS
Indicates a Network File System client.
MNT_CDROM
Indicates a CD-ROM file system.
vmt_data
An array of structures that describe variable length data associated with the vmount structure. The structure consists of the following fields:
vmt_off
The offset of the data from the beginning of the vmount structure.
vmt_size
The size, in bytes, of the data.

The array consists of the following fields:

vmt_data[VMT_OBJECT]
Specifies he name of the device, directory, or file to be mounted.
vmt_data[VMT_STUB]
Specifies the name of the device, directory, or file to be mounted over.
vmt_data[VMT_HOST]
Specifies the short (binary) name of the host that owns the mounted object. This need not be specified if VMT_OBJECT is local (that is, it has the same vmt_gfstype as / (root), the root of all file systems).
vmt_data[VMT_HOSTNAME]
Specifies the long (character) name of the host that owns the mounted object. This need not be specified if VMT_OBJECT is local.
vmt_data[VMT_INFO]
Specifies binary information to be passed to the generic file-system implementation that supports VMT_OBJECT. The interpretation of this field is specific to the gfs_type.
vmt_data[VMT_ARGS]
Specifies a character string representation of VMT_INFO.

On return from the vmount subroutine, the following additional fields of the VMount parameter are initialized:

vmt_fsid
Specifies the two-word file system identifier; the interpretation of this identifier depends on the gfs_type.
vmt_vfsnumber
Specifies the unique identifier of the virtual file system. Virtual file systems do not survive the IPL; neither does this identifier.
vmt_time
Specifies the time at which the virtual file system was created.
Size
Specifies the size, in bytes, of the supplied data area.

Return Values

Upon successful completion, a value of 0 is returned. Otherwise, a value of -1 is returned, and the errno global variable is set to indicate the error.

Error Codes

The mount and vmount subroutines fail and the virtual file system is not created if any of the following is true:

Item Description
EACCES The calling process does not have write permission on the stub directory (the directory to be mounted over).
EBUSY VMT_OBJECT specifies a device that is already mounted or an object that is open for writing, or the kernel's mount table is full.
EFAULT The VMount parameter points to a location outside of the allocated address space of the process.
EFBIG The size of the file system is too big.
EFORMAT An internal inconsistency has been detected in the file system.
EINVAL The contents of the VMount parameter are unintelligible (for example, the vmt_gfstype is unrecognizable, or the file system implementation does not understand the VMT_INFO provided).
ENOSYS The file system type requested has not been configured.
ENOTBLK The object to be mounted is not a file, directory, or device.
ENOTDIR The types of VMT_OBJECT and VMT_STUB are incompatible.
EPERM VMT_OBJECT specifies a block device, and the calling process does not have root user authority.
EROFS An attempt has been made to mount a file system for read/write when the file system cannot support writing.

The mount and vmount subroutines can also fail if additional errors occur.