]> git.proxmox.com Git - proxmox-backup.git/commitdiff
pxar: add support for storing/restoring the quota project id on ZFS
authorChristian Ebner <c.ebner@proxmox.com>
Mon, 29 Jul 2019 15:21:35 +0000 (17:21 +0200)
committerDietmar Maurer <dietmar@proxmox.com>
Tue, 30 Jul 2019 07:40:48 +0000 (09:40 +0200)
Signed-off-by: Christian Ebner <c.ebner@proxmox.com>
src/pxar/encoder.rs
src/pxar/format_definition.rs

index 94957be5f0380e73bdd1af659faa0ddf1cd6b1b4..b00021dd60d63f2325155c8960e88d15f4fd7283 100644 (file)
@@ -419,7 +419,7 @@ impl <'a, W: Write> Encoder<'a, W> {
         })
     }
 
-    /// 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);
@@ -429,8 +429,7 @@ impl <'a, W: Write> Encoder<'a, W> {
         }
 
         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)
index ff533824eed2015e604ec4a3263b4874a672582c..89d796913dfabe4ab37ecb74d997bab1eea0ea74 100644 (file)
@@ -409,6 +409,7 @@ pub const BTRFS_SUPER_MAGIC: i64 =     0x9123683E;
 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.
@@ -542,6 +543,32 @@ pub fn feature_flags_from_magic(magic: i64) -> u64 {
             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|