On Jan,Thursday 20 2011, at 3:25 PM, Manuel Bouyer wrote: > Module Name: src > Committed By: bouyer > Date: Thu Jan 20 14:25:05 UTC 2011 > > Modified Files: > src/distrib/sets/lists/comp [bouyer-quota2]: mi > src/etc/mtree [bouyer-quota2]: NetBSD.dist.tests > src/lib/libc/compat/arch/alpha/sys [bouyer-quota2]: Makefile.inc > src/lib/libc/compat/arch/arm/sys [bouyer-quota2]: Makefile.inc > src/lib/libc/compat/arch/hppa/sys [bouyer-quota2]: Makefile.inc > src/lib/libc/compat/arch/i386/sys [bouyer-quota2]: Makefile.inc > src/lib/libc/compat/arch/ia64/sys [bouyer-quota2]: Makefile.inc > src/lib/libc/compat/arch/m68k/sys [bouyer-quota2]: Makefile.inc > src/lib/libc/compat/arch/mips/sys [bouyer-quota2]: Makefile.inc > src/lib/libc/compat/arch/powerpc/sys [bouyer-quota2]: Makefile.inc > src/lib/libc/compat/arch/powerpc64/sys [bouyer-quota2]: Makefile.inc > src/lib/libc/compat/arch/sh3/sys [bouyer-quota2]: Makefile.inc > src/lib/libc/compat/arch/sparc/sys [bouyer-quota2]: Makefile.inc > src/lib/libc/compat/arch/sparc64/sys [bouyer-quota2]: Makefile.inc > src/lib/libc/compat/arch/vax/sys [bouyer-quota2]: Makefile.inc > src/lib/libc/compat/arch/x86_64/sys [bouyer-quota2]: Makefile.inc > src/lib/libc/sys [bouyer-quota2]: Makefile.inc > src/lib/librumphijack [bouyer-quota2]: hijack.c > src/sbin/fsck_ffs [bouyer-quota2]: Makefile dir.c extern.h fsck.h > inode.c main.c pass1.c pass1b.c pass2.c pass3.c pass4.c setup.c > utilities.c > src/sbin/fsdb [bouyer-quota2]: Makefile > src/sbin/newfs [bouyer-quota2]: Makefile extern.h mkfs.c newfs.8 > newfs.c > src/sbin/tunefs [bouyer-quota2]: tunefs.8 tunefs.c > src/sys/compat/netbsd32 [bouyer-quota2]: netbsd32_netbsd.c > netbsd32_syscall.h netbsd32_syscallargs.h netbsd32_syscalls.c > netbsd32_sysent.c syscalls.master > src/sys/conf [bouyer-quota2]: files > src/sys/fs/unionfs [bouyer-quota2]: unionfs_vfsops.c > src/sys/kern [bouyer-quota2]: init_sysent.c syscalls.c syscalls.master > vfs_subr.c vfs_syscalls.c vnode_if.c > src/sys/miscfs/genfs [bouyer-quota2]: layer_extern.h layer_vfsops.c > src/sys/rump/fs/lib/libffs [bouyer-quota2]: Makefile > src/sys/rump/include/rump [bouyer-quota2]: rump_syscalls.h > rumpvnode_if.h > src/sys/rump/librump/rumpkern [bouyer-quota2]: rump_syscalls.c > src/sys/rump/librump/rumpvfs [bouyer-quota2]: rumpvnode_if.c > src/sys/sys [bouyer-quota2]: Makefile mount.h syscall.h syscallargs.h > vnode_if.h > src/sys/ufs [bouyer-quota2]: files.ufs > src/sys/ufs/ffs [bouyer-quota2]: ffs_alloc.c ffs_balloc.c ffs_bswap.c > ffs_extern.h ffs_inode.c ffs_subr.c ffs_vfsops.c fs.h > src/sys/ufs/ufs [bouyer-quota2]: Makefile quota.h ufs_extern.h > ufs_inode.c ufs_quota.c ufs_vfsops.c ufs_vnops.c ufsmount.h > src/tests/fs/ffs [bouyer-quota2]: Makefile > src/tests/sbin [bouyer-quota2]: Makefile > src/usr.bin/quota [bouyer-quota2]: Makefile quota.1 quota.c > Added Files: > src/lib/libc/compat/arch/alpha/sys [bouyer-quota2]: compat_quotactl.S > src/lib/libc/compat/arch/arm/sys [bouyer-quota2]: compat_quotactl.S > src/lib/libc/compat/arch/hppa/sys [bouyer-quota2]: compat_quotactl.S > src/lib/libc/compat/arch/i386/sys [bouyer-quota2]: compat_quotactl.S > src/lib/libc/compat/arch/ia64/sys [bouyer-quota2]: compat_quotactl.S > src/lib/libc/compat/arch/m68k/sys [bouyer-quota2]: compat_quotactl.S > src/lib/libc/compat/arch/mips/sys [bouyer-quota2]: compat_quotactl.S > src/lib/libc/compat/arch/powerpc/sys [bouyer-quota2]: compat_quotactl.S > src/lib/libc/compat/arch/powerpc64/sys [bouyer-quota2]: > compat_quotactl.S > src/lib/libc/compat/arch/sh3/sys [bouyer-quota2]: compat_quotactl.S > src/lib/libc/compat/arch/sparc/sys [bouyer-quota2]: compat_quotactl.S > src/lib/libc/compat/arch/sparc64/sys [bouyer-quota2]: compat_quotactl.S > src/lib/libc/compat/arch/vax/sys [bouyer-quota2]: compat_quotactl.S > src/lib/libc/compat/arch/x86_64/sys [bouyer-quota2]: compat_quotactl.S > src/sbin/fsck_ffs [bouyer-quota2]: pass6.c quota2.c > src/sys/sys [bouyer-quota2]: quota.h > src/sys/ufs/ffs [bouyer-quota2]: ffs_quota2.c > src/sys/ufs/ufs [bouyer-quota2]: quota1.h quota2.h quota2_prop.c > quota2_prop.h quota2_subr.c ufs_quota.h ufs_quota1.c ufs_quota2.c > src/tests/fs/ffs [bouyer-quota2]: h_quota2_server.c t_quota2_1.c > src/tests/sbin/fsck_ffs [bouyer-quota2]: Makefile quotas_common.sh > t_check_quotas.sh t_enable_quotas.sh > src/tests/sbin/newfs [bouyer-quota2]: Makefile quotas_common.sh > t_enable_quotas.sh > > Log Message: > 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). >
Can you test if filesystem resizing still works ? Now when riz fixed resize_ffs it would be nice to keep it working :). > 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. Regards Adam.