Whamcloud - gitweb
LU-4017 e2fsprogs: add project quota support
[tools/e2fsprogs.git] / lib / ext2fs / swapfs.c
index dfb1cab..6356874 100644 (file)
@@ -210,6 +210,7 @@ void ext2fs_swap_inode_full(ext2_filsys fs, struct ext2_inode_large *t,
        int has_extents = 0;
        int islnk = 0;
        __u32 *eaf, *eat;
+       int inode_size;
 
        if (hostorder && LINUX_S_ISLNK(f->i_mode))
                islnk = 1;
@@ -295,21 +296,24 @@ void ext2fs_swap_inode_full(ext2_filsys fs, struct ext2_inode_large *t,
                /* this is error case: i_extra_size is too large */
                return;
        }
+       inode_size = EXT2_GOOD_OLD_INODE_SIZE + extra_isize;
 
-       if (extra_isize >= 4)
+       if (inode_includes(inode_size, i_checksum_hi))
                t->i_checksum_hi = ext2fs_swab16(f->i_checksum_hi);
-       if (extra_isize >= 8)
+       if (inode_includes(inode_size, i_ctime_extra))
                t->i_ctime_extra = ext2fs_swab32(f->i_ctime_extra);
-       if (extra_isize >= 12)
+       if (inode_includes(inode_size, i_mtime_extra))
                t->i_mtime_extra = ext2fs_swab32(f->i_mtime_extra);
-       if (extra_isize >= 16)
+       if (inode_includes(inode_size, i_atime_extra))
                t->i_atime_extra = ext2fs_swab32(f->i_atime_extra);
-       if (extra_isize >= 20)
+       if (inode_includes(inode_size, i_crtime))
                t->i_crtime = ext2fs_swab32(f->i_crtime);
-       if (extra_isize >= 24)
+       if (inode_includes(inode_size, i_crtime_extra))
                t->i_crtime_extra = ext2fs_swab32(f->i_crtime_extra);
-       if (extra_isize >= 28)
+       if (inode_includes(inode_size, i_version_hi))
                t->i_version_hi = ext2fs_swab32(f->i_version_hi);
+       if (inode_includes(inode_size, i_projid))
+                t->i_projid = ext2fs_swab16(f->i_projid);
 
        i = sizeof(struct ext2_inode) + extra_isize + sizeof(__u32);
        if (bufsize < (int) i)