|
AquilaOS documentation
How it works, and its code
|
#include <fs/vfs.h>Go to the source code of this file.
Data Structures | |
| struct | pseudofs_dirent |
| A directory entry, kept in memory. More... | |
Functions | |
| int | pseudofs_vmknod (struct vnode *dir, const char *fn, mode_t mode, dev_t dev, struct uio *uio, struct vnode **ref) |
| Makes a node in a directory: a new vnode, owned by the caller, and an entry for it. | |
| int | pseudofs_vunlink (struct vnode *dir, const char *fn, struct uio *uio) |
| Removes an entry from a directory. | |
| int | pseudofs_vlink (struct vnode *dir, const char *fn, struct vnode *vnode, struct uio *uio) |
| Adds an entry for an existing vnode (a hard link) to a directory. | |
| int | pseudofs_vrename (struct vnode *odir, const char *ofn, struct vnode *ndir, const char *nfn, struct uio *uio) |
| Renames an entry, possibly to another directory, replacing an entry at the new name. | |
| int | pseudofs_setattr (struct vnode *vnode) |
| Stores a vnode's attributes: there's nothing to do, since they only live in the vnode. | |
| ssize_t | pseudofs_readdir (struct vnode *dir, off_t offset, struct dirent *dirent) |
| Reads a directory's entry at an offset. | |
| int | pseudofs_finddir (struct vnode *dir, const char *name, struct dirent *dirent) |
| Finds the entry of a directory that has a name. | |
| int | pseudofs_close (struct vnode *vnode) |
| Frees a vnode that has no names or references left, and its cached pages. | |
| int pseudofs_close | ( | struct vnode * | vnode | ) |
Frees a vnode that has no names or references left, and its cached pages.
Its names belong to the directory entries, which were freed when they were removed.
| vnode | the vnode |
Definition at line 397 of file pseudofs.c.
References kfree(), pseudofs_close(), and vnode_pages_free().
Referenced by pseudofs_close(), and tmpfs_close().
| int pseudofs_finddir | ( | struct vnode * | dir, |
| const char * | name, | ||
| struct dirent * | dirent ) |
Finds the entry of a directory that has a name.
| dir | the directory |
| name | the name |
| dirent | the entry, filled in |
Definition at line 367 of file pseudofs.c.
References vnode::mode, pseudofs_dirent::next, vnode::p, pseudofs_dirent_name(), and pseudofs_finddir().
Referenced by pseudofs_finddir(), and pseudofs_vmknod().
Reads a directory's entry at an offset.
The entries are . and .. first, then the list's entries (except its own ..).
| dir | the directory |
| offset | which entry |
| dirent | the entry, filled in |
Definition at line 320 of file pseudofs.c.
References dotdot(), pseudofs_dirent::next, vnode::p, pseudofs_dirent_name(), and pseudofs_readdir().
Referenced by pseudofs_readdir().
| int pseudofs_setattr | ( | struct vnode * | vnode | ) |
Stores a vnode's attributes: there's nothing to do, since they only live in the vnode.
| vnode | the vnode |
Definition at line 306 of file pseudofs.c.
References pseudofs_setattr().
Referenced by pseudofs_setattr().
Adds an entry for an existing vnode (a hard link) to a directory.
| dir | the directory |
| fn | the new name |
| vnode | the vnode |
| uio | who is asking |
Definition at line 211 of file pseudofs.c.
References pseudofs_dirent::d_ino, pseudofs_dirent::d_name, entry_find(), kfree(), kmalloc(), pseudofs_dirent::next, vnode::nlink, vnode::p, and pseudofs_vlink().
Referenced by pseudofs_vlink().
| int pseudofs_vmknod | ( | struct vnode * | dir, |
| const char * | fn, | ||
| mode_t | mode, | ||
| dev_t | dev, | ||
| struct uio * | uio, | ||
| struct vnode ** | ref ) |
Makes a node in a directory: a new vnode, owned by the caller, and an entry for it.
A new directory gets its .. entry.
| dir | the directory |
| fn | the new node's name |
| mode | its type (S_IF*) and permissions |
| dev | its device number, for a device node |
| uio | who is asking (the owner) |
| ref | if not NULL, set to the new vnode |
Definition at line 49 of file pseudofs.c.
References vnode::atime, vnode::ctime, pseudofs_dirent::d_ino, pseudofs_dirent::d_name, dotdot(), vnode::fs, gettime(), uio::gid, vnode::gid, vnode::ino, kfree(), kmalloc(), M_ZERO, vnode::mode, vnode::mtime, pseudofs_dirent::next, vnode::nlink, NULL, vnode::p, pseudofs_finddir(), pseudofs_vmknod(), vnode::rdev, vnode::size, uio::uid, and vnode::uid.
Referenced by pseudofs_vmknod().
| int pseudofs_vrename | ( | struct vnode * | odir, |
| const char * | ofn, | ||
| struct vnode * | ndir, | ||
| const char * | nfn, | ||
| struct uio * | uio ) |
Renames an entry, possibly to another directory, replacing an entry at the new name.
The VFS has checked the replaced entry already (its type, that a directory is empty).
| odir | the directory the entry is in |
| ofn | its name |
| ndir | the directory it goes to |
| nfn | its new name |
| uio | who is asking |
Definition at line 250 of file pseudofs.c.
References pseudofs_dirent::d_ino, pseudofs_dirent::d_name, dotdot(), entry_find(), entry_remove(), kfree(), vnode::mode, pseudofs_dirent::next, vnode::nlink, vnode::p, and pseudofs_vrename().
Referenced by pseudofs_vrename().
Removes an entry from a directory.
| vnode | the directory |
| fn | the entry's name |
| uio | who is asking |
Definition at line 186 of file pseudofs.c.
References entry_find(), entry_remove(), vnode::mode, and pseudofs_vunlink().
Referenced by pseudofs_vunlink().