ext4_journal_stop(handle);
                goto out_unlock;
        }
+       /*
+        * Use the correct seed for checksum (i.e. the seed from 'inode').  This
+        * is so that the metadata blocks will have the correct checksum after
+        * the migration.
+        *
+        * Note however that, if a crash occurs during the migration process,
+        * the recovery process is broken because the tmp_inode checksums will
+        * be wrong and the orphans cleanup will fail.
+        */
+       ei = EXT4_I(inode);
+       EXT4_I(tmp_inode)->i_csum_seed = ei->i_csum_seed;
        i_size_write(tmp_inode, i_size_read(inode));
        /*
         * Set the i_nlink to zero so it will be deleted later
                goto out_tmp_inode;
        }
 
-       ei = EXT4_I(inode);
        i_data = ei->i_data;
        memset(&lb, 0, sizeof(lb));