This change adds the 'defaultuserquota' and 'defaultgroupquota'
properties to ZFS datasets to apply a quota to users and groups that do
not have a specific quota assigned. The default quota checking
mechanism works alongside the existing 'userquota' and 'groupquota'
checks, only taking effect if no quota is assigned for a particular
user/group. This means that it's possible to exceed a default quota
by quite a lot before the user/groupused property is updated and
further writes are denied, which was already the case for
user/groupquota.
Default quotas are implemented similarly to 'normal' user quotas,
but instead of being user properties that are preserved across
snapshots, they default back to none. NB: this is different from the
observed Solaris behavior, which is to preserve default quotas across
snapshot/clone/promote.
For instance, Solaris has:
# zfs set defaultuserquota=100M tank/fs
# zfs snap tank/fs@snap
# zfs clone tank/fs@snap tank/fs-clone
# zfs get -H defaultuserquota tank/fs-clone
tank/fs-clone defaultuserquota 100M -
Whereas this commit does:
# zfs set defaultuserquota=100M tank/fs
# zfs snap tank/fs@snap
# zfs clone tank/fs@snap tank/fs-clone
# zfs get -H defaultuserquota tank/fs-clone
tank/fs-clone defaultuserquota none default
It should also be possible to implement a default project quota using
an analogous process, if doing so makes sense.
Signed-off-by: Todd Seidelmann <seidelma@wharton.upenn.edu>