Home | History | Annotate | Download | only in rumpvfs
History log of /src/sys/rump/librump/rumpvfs/rumpvnode_if.c
RevisionDateAuthorComments
 1.41  15-Jun-2023  hannken Regen.
 1.40  18-Jul-2022  thorpej branches: 1.40.4;
Regen for:

Make kqueue event status for vnodes shareable, and for stacked file systems
like nullfs, make the upper vnode share that status with the lower vnode.

And, lo, NetBSD 9.99.99.

Fixes PR kern/56713.
 1.39  03-May-2022  hannken Regen.
 1.38  03-May-2022  hannken Regen.
 1.37  20-Oct-2021  thorpej Regen for:

Overhaul of the EVFILT_VNODE kevent(2) filter:

- Centralize vnode kevent handling in the VOP_*() wrappers, rather than
forcing each individual file system to deal with it (except VOP_RENAME(),
because VOP_RENAME() is a mess and we currently have 2 different ways
of handling it; at least it's reasonably well-centralized in the "new"
way).
- Add support for NOTE_OPEN, NOTE_CLOSE, NOTE_CLOSE_WRITE, and NOTE_READ,
compatible with the same events in FreeBSD.
- Track which kevent notifications clients are interested in receiving
to avoid doing work for events no one cares about (avoiding, e.g.
taking locks and traversing the klist to send a NOTE_WRITE when
someone is merely watching for a file to be deleted, for example).

In support of the above:

- Add support in vnode_if.sh for specifying PRE- and POST-op handlers,
to be invoked before and after vop_pre() and vop_post(), respectively.
Basic idea from FreeBSD, but implemented differently.
- Add support in vnode_if.sh for specifying CONTEXT fields in the
vop_*_args structures. These context fields are used to convey information
between the file system VOP function and the VOP wrapper, but do not
occupy an argument slot in the VOP_*() call itself. These context fields
are initialized and subsequently interpreted by PRE- and POST-op handlers.
- Version VOP_REMOVE(), uses the a context field for the file system to report
back the resulting link count of the target vnode. Return this in tmpfs,
udf, nfs, chfs, ext2fs, lfs, and ufs.

NetBSD 9.99.92.
 1.36  02-Jul-2021  dholland Regen.
 1.35  29-Jun-2021  dholland Regen.
 1.34  16-May-2020  christos branches: 1.34.6;
Add ACL support for FFS. From FreeBSD.
 1.33  23-Feb-2020  ad Regen.
 1.32  01-Dec-2019  ad branches: 1.32.2;
Regen for VOP_LOCK & LK_UPGRADE/LK_DOWNGRADE.
 1.31  12-Jul-2017  hannken branches: 1.31.6;
Regen.
 1.30  04-Jun-2017  hannken Operations fstrans_start() and fstrans_start_nowait() now always
use FSTRANS_SHARED as lock type so remove the lock type argument.

File system state FSTRANS_SUSPENDING is now unused so remove it.

Regen vnode_if files.

Ride 8.99.1 less than a hour ago.
 1.29  04-Jun-2017  hannken Regen.
 1.28  26-May-2017  riastradh branches: 1.28.2;
regen
 1.27  26-Apr-2017  riastradh regen
 1.26  16-Apr-2017  riastradh regen to confirm no functional change
 1.25  16-Apr-2017  riastradh regen
 1.24  15-Apr-2017  riastradh regen to confirm no functional change
 1.23  11-Apr-2017  riastradh regen to confirm no functional change
 1.22  11-Apr-2017  riastradh regen
 1.21  22-Feb-2017  hannken Regen.
 1.20  26-Jan-2016  pooka branches: 1.20.2; 1.20.4;
regen vnode interfaces
 1.19  26-Jan-2016  pooka Put the kernelside rump kernel headers into <rump-sys> instead of
sprinkling them around the faction directories. Avoids having
to add a CPPFLAGS (or several) to pretty much every component
Makefile.

Leave compat headers around in the old locations.

The commit changes some autogenerated files, but I'll fix the
generators shortly and regen.
 1.18  20-Apr-2015  riastradh regen for good measure (no functional change)
 1.17  20-Apr-2015  riastradh Make VOP_LINK return directory still locked and referenced.

Ride 7.99.10 bump.
 1.16  25-Jul-2014  dholland branches: 1.16.4;
Regen for VOP_FALLOCATE/VOP_FDISCARD.
 1.15  07-Feb-2014  hannken branches: 1.15.2;
Change vnode operation lookup to return the resulting vnode *vpp unlocked.
Change cache_lookup() to return an unlocked vnode.

Discussed on tech-kern@

Welcome to 6.99.31
 1.14  23-Jan-2014  hannken Change vnode operations create, mknod, mkdir and symlink to return
the resulting vnode *vpp unlocked.

Discussed on tech-kern@

Welcome to 6.99.30
 1.13  17-Jan-2014  hannken Change vnode operations create, mknod, mkdir and symlink to keep the
directory node dvp locked on return.

Discussed on tech-kern@

Welcome to 6.99.29
 1.12  17-Jul-2013  pooka regen
 1.11  08-Aug-2011  manu branches: 1.11.2; 1.11.12; 1.11.16; 1.11.24;
regen
 1.10  11-Jul-2011  hannken Change VOP_BWRITE() to take a vnode as its first argument like all other
VOPs do. Layered file systems no longer have to modify bp->b_vp and run
into trouble when an async VOP_BWRITE() uses the wrong vnode.

- change all occurences of VOP_BWRITE(bp) to VOP_BWRITE(bp->b_vp, bp).
- remove layer_bwrite().
- welcome to 5.99.55

Adresses PR kern/38762 panic: vwakeup: neg numoutput

No objections from tech-kern@.
 1.9  04-Jul-2011  manu Add a flag to VOP_LISTEXTATTR(9) so that the vnode interface can tell the
filesystem in which format extended attribute shall be listed.

There are currently two formats:
- NUL-terminated strings, used for listxattr(2), this is the default.
- one byte length-pprefixed, non NUL-terminated strings, used for
extattr_list_file(2), which is obtanined by setting the
EXTATTR_LIST_PREFIXLEN flag to VOP_LISTEXTATTR(9)

This approach avoid the need for converting the list back and forth, except
in libperfuse, since FUSE uses NUL-terminated strings, and the kernel may
have requested EXTATTR_LIST_PREFIXLEN.
 1.8  06-Mar-2011  bouyer merge the bouyer-quota2 branch. This adds a new on-disk format
to store disk quota usage and limits, integrated with ffs
metadata. Usage is checked by fsck_ffs (no more quotacheck)
and is covered by the WAPBL journal. Enabled with kernel
option QUOTA2 (added where QUOTA was enabled in kernel config files),
turned on with tunefs(8) on a per-filesystem
basis. mount_mfs(8) can also turn quotas on.

See http://mail-index.netbsd.org/tech-kern/2011/02/19/msg010025.html
for details.
 1.7  24-Jun-2010  hannken branches: 1.7.2; 1.7.4;
Clean up vnode lock operations pass 2:

VOP_UNLOCK(vp, flags) -> VOP_UNLOCK(vp): Remove the unneeded flags argument.

Welcome to 5.99.32.

Discussed on tech-kern.
 1.6  14-Apr-2010  pooka regen: rump vnodeif went on a diet
 1.5  14-Apr-2010  pooka regenefactor for comment and whitespace changes
 1.4  10-Apr-2010  pooka regen: remove unused vdesc_transports
 1.3  15-Oct-2009  pooka branches: 1.3.2; 1.3.4;
regen: scheduling points
 1.2  29-Sep-2009  pooka regen: remove VNODE_LOCKDEBUG
 1.1  19-Nov-2008  pooka branches: 1.1.4; 1.1.6; 1.1.10;
Split vfs out of rumpkern into rumpvfs. Non-fs rumps no longer
include the file system code. File system rumps explicitly need
to include rumpvfs from now on.
 1.1.10.4  11-Aug-2010  yamt sync with head.
 1.1.10.3  11-Mar-2010  yamt sync with head
 1.1.10.2  04-May-2009  yamt sync with head.
 1.1.10.1  19-Nov-2008  yamt file rumpvnode_if.c was added on branch yamt-nfs-mp on 2009-05-04 08:14:31 +0000
 1.1.6.2  19-Jan-2009  skrll Sync with HEAD.
 1.1.6.1  19-Nov-2008  skrll file rumpvnode_if.c was added on branch nick-hppapmap on 2009-01-19 13:20:27 +0000
 1.1.4.2  17-Jan-2009  mjf Sync with HEAD.
 1.1.4.1  19-Nov-2008  mjf file rumpvnode_if.c was added on branch mjf-devfs2 on 2009-01-17 13:29:38 +0000
 1.3.4.3  21-Apr-2011  rmind sync with head
 1.3.4.2  03-Jul-2010  rmind sync with head
 1.3.4.1  30-May-2010  rmind sync with head
 1.3.2.2  17-Aug-2010  uebayasi Sync with HEAD.
 1.3.2.1  30-Apr-2010  uebayasi Sync with HEAD.
 1.7.4.1  20-Jan-2011  bouyer Snapshot of work in progress on a modernised disk quota system:
- new quotactl syscall (versionned for backward compat), which takes
as parameter a path to a mount point, and a prop_dictionary
(in plistref format) describing commands and arguments.
For each command, status and data are returned as a prop_dictionary.
quota commands features will be added to take advantage of this,
exporting quota data or getting quota commands as plists.

- new on disk-format storage (all 64bit wide), integrated to metadata for
ffs (and playing nicely with wapbl).
Quotas are enabled on a ffs filesystem via superblock flags.
tunefs(8) can enable or disable quotas.
On a quota-enabled filesystem, fsck_ffs(8) will track per-uid/gid
block and inode usages, and will check and update quotas in Pass 6.
quota usage and limits are stored in unliked files (one for users,
one for groups)l fsck_ffs(8) will create the files if needed, or
free them if needed. This means that after enabling or disabling
quotas on a filesystem; a fsck_ffs(8) run is required.
quotacheck(8) is not needed any more, on a unclean shutdown
fsck or journal replay will take care of fixing quotas.
newfs(8) can create a ready-to-mount quota-enabled filesystem
(superblock flags are set and quota inodes are created).
Other new features or semantic changes:
- default quota datas, applied to users or groups which don't already
have a quota entry
- per-user/group grace time (instead of a filesystem global one)
- 0 really means "nothing allowed at all", not "no limit".
If you want "no limit", set the limit to UQUAD_MAX (tools will
understand "unlimited" and "-")

A quota file is structured as follow:
it starts with a header, containing a few per-filesystem values,
and the default quota limits.
Quota entries are linked together as a simple list, each entry has a
pointer (as an offset withing the file) to the next.
The header has a pointer to a list of free quota entries, and
a hash table of in-use entries. The size of the hash table depends
on the filesystem block size (header+hash table should fit in the
first block). The file is not sparse and is a multiple of
filesystem block size (when the free quota entry list is empty a new
filesystem block is allocated). quota entries to not cross
filesystem block boundaries.

In memory, the kernel keeps a cache of recently used quota entries
as a reference to the block number, and offset withing the block.
The quota entry itself is keept in the buf cache.

fsck_ffs(8), tunefs(8) and newfs(8) supports are completed (with
related atf tests :)
The kernel can update disk usage and report it via quotactl(2).

Todo: enforce quotas limits (limits are not checked by kernel yet)
update repquota, edquota and rpc.rquotad to the new world
implement compat_50_quotactl ioctl.
update quotactl(2) man page

fsck_ffs required fixes so that allocating new blocks or inodes will
properly update the superblock and cg sumaries. This was not an issue up
to now because superblock and cg sumaries check happened last, but now
allocations or frees can happen in pass 6.
 1.7.2.1  06-Jun-2011  jruoho Sync with HEAD.
 1.11.24.1  23-Jul-2013  riastradh sync with HEAD
 1.11.16.2  18-May-2014  rmind sync with head
 1.11.16.1  28-Aug-2013  rmind sync with head
 1.11.12.2  03-Dec-2017  jdolecek update from HEAD
 1.11.12.1  20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.11.2.1  22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.15.2.1  10-Aug-2014  tls Rebase.
 1.16.4.3  28-Aug-2017  skrll Sync with HEAD
 1.16.4.2  19-Mar-2016  skrll Sync with HEAD
 1.16.4.1  06-Jun-2015  skrll Sync with HEAD
 1.20.4.1  21-Apr-2017  bouyer Sync with HEAD
 1.20.2.2  26-Apr-2017  pgoyette Sync with HEAD
 1.20.2.1  20-Mar-2017  pgoyette Sync with HEAD
 1.28.2.2  25-Jul-2017  snj regen for ticket 130
 1.28.2.1  04-Jun-2017  bouyer pullup the following revisions, requested by hannken in ticket #2:
src/share/man/man9/fstrans.9 1.25
src/sys/kern/vfs_mount.c 1.66
src/sys/kern/vfs_subr.c 1.468
src/sys/kern/vfs_trans.c 1.46
src/sys/kern/vfs_vnode.c 1.94, 1.95, 1.96
src/sys/kern/vnode_if.c 1.105, 1.106
src/sys/kern/vnode_if.sh 1.65, 1.66
src/sys/kern/vnode_if.src 1.76
src/sys/miscfs/genfs/genfs_io.c 1.69
src/sys/miscfs/genfs/genfs_vnops.c 1.196, 1.197
src/sys/miscfs/genfs/layer_extern.h 1.40
src/sys/miscfs/genfs/layer_vfsops.c 1.51
src/sys/miscfs/genfs/layer_vnops.c 1.67
src/sys/miscfs/nullfs/null_vnops.c 1.42
src/sys/miscfs/overlay/overlay_vnops.c 1.24
src/sys/miscfs/umapfs/umap_vnops.c 1.60
src/sys/rump/include/rump/rumpvnode_if.h 1.29, 1.30
src/sys/rump/librump/rumpkern/emul.c 1.182
src/sys/rump/librump/rumpvfs/rumpvnode_if.c 1.29, 1.30
src/sys/sys/fstrans.h 1.11
src/sys/sys/vnode.h 1.278
src/sys/sys/vnode_if.h 1.100, 1.101
src/sys/sys/vnode_impl.h 1.14, 1.15
src/sys/ufs/lfs/lfs_pages.c 1.12

Vnode state, lock and fstrans cleanup:
- Rename vnode state "VS_ACTIVE" to "VS_LOADED" and add synthetic
state "VS_ACTIVE" to assert a loaded vnode with usecount > 0.

- Redo FSTRANS in vnode_if.c and use it for VOP_LOCK and VOP_UNLOCK.

- Cleanup the genfs lock operations.

- Make "struct vnode_impl" member "vi_lock" a krwlock_t again.

- Remove the lock type argument from fstrans_start and
fstrans_start_nowait,
remove now unused FSTRANS state "FSTRANS_SUSPENDING".
 1.31.6.1  08-Apr-2020  martin Merge changes from current as of 20200406
 1.32.2.1  29-Feb-2020  ad Sync with head.
 1.34.6.1  01-Aug-2021  thorpej Sync with HEAD.
 1.40.4.1  21-Jun-2023  martin Regen (ticket #197)

RSS XML Feed