})
}
- /// Read the project quota id for an inode, supported on ext4/XFS/FUSE/(ZFS TODO impl) filesystems
+ /// Read the quota project id for an inode, supported on ext4/XFS/FUSE/ZFS filesystems
fn read_quota_project_id(&self, fd: RawFd, magic: i64, stat: &FileStat) -> Result<Option<CaFormatQuotaProjID>, Error> {
if !(is_directory(&stat) || is_reg_file(&stat)) {
return Ok(None);
}
match magic {
- //TODO ZFS quota
- EXT4_SUPER_MAGIC | XFS_SUPER_MAGIC | FUSE_SUPER_MAGIC => {
+ EXT4_SUPER_MAGIC | XFS_SUPER_MAGIC | FUSE_SUPER_MAGIC | ZFS_SUPER_MAGIC => {
let mut fsxattr = fs::FSXAttr::default();
let res = unsafe {
fs::fs_ioc_fsgetxattr(fd, &mut fsxattr)
pub const FUSE_SUPER_MAGIC: i64 = 0x65735546;
pub const EXT4_SUPER_MAGIC: i64 = 0x0000EF53;
pub const XFS_SUPER_MAGIC: i64 = 0x58465342;
+pub const ZFS_SUPER_MAGIC: i64 = 0x2FC12FC1;
/// Definitions of typical feature flags for the *pxar* encoder/decoder.
/// By this expensive syscalls for unsupported features are avoided.
CA_FORMAT_WITH_FCAPS|
CA_FORMAT_WITH_QUOTA_PROJID
},
+ ZFS_SUPER_MAGIC => {
+ CA_FORMAT_WITH_16BIT_UIDS|
+ CA_FORMAT_WITH_32BIT_UIDS|
+ CA_FORMAT_WITH_USER_NAMES|
+ CA_FORMAT_WITH_SEC_TIME|
+ CA_FORMAT_WITH_USEC_TIME|
+ CA_FORMAT_WITH_NSEC_TIME|
+ CA_FORMAT_WITH_2SEC_TIME|
+ CA_FORMAT_WITH_READ_ONLY|
+ CA_FORMAT_WITH_PERMISSIONS|
+ CA_FORMAT_WITH_SYMLINKS|
+ CA_FORMAT_WITH_DEVICE_NODES|
+ CA_FORMAT_WITH_FIFOS|
+ CA_FORMAT_WITH_SOCKETS|
+ CA_FORMAT_WITH_FLAG_APPEND|
+ CA_FORMAT_WITH_FLAG_NOATIME|
+ CA_FORMAT_WITH_FLAG_NODUMP|
+ CA_FORMAT_WITH_FLAG_DIRSYNC|
+ CA_FORMAT_WITH_FLAG_IMMUTABLE|
+ CA_FORMAT_WITH_FLAG_SYNC|
+ CA_FORMAT_WITH_XATTRS|
+ CA_FORMAT_WITH_ACL|
+ CA_FORMAT_WITH_SELINUX|
+ CA_FORMAT_WITH_FCAPS|
+ CA_FORMAT_WITH_QUOTA_PROJID
+ },
BTRFS_SUPER_MAGIC => {
CA_FORMAT_WITH_16BIT_UIDS|
CA_FORMAT_WITH_32BIT_UIDS|