Loading fs/ntfs/ChangeLog +3 −0 Original line number Diff line number Diff line Loading @@ -28,6 +28,9 @@ ToDo/Notes: continued the attribute lookup loop instead of aborting it. - Use buffer_migrate_page() for the ->migratepage function of all ntfs address space operations. - Fix comparison of $MFT and $MFTMirr to not bail out when there are unused, invalid mft records which are the same in both $MFT and $MFTMirr. 2.1.26 - Minor bug fixes and updates. Loading fs/ntfs/super.c +25 −13 Original line number Diff line number Diff line Loading @@ -1099,26 +1099,38 @@ static BOOL check_mft_mirror(ntfs_volume *vol) kmirr = page_address(mirr_page); ++index; } /* Do not check the record if it is not in use. */ if (((MFT_RECORD*)kmft)->flags & MFT_RECORD_IN_USE) { /* Make sure the record is ok. */ if (ntfs_is_baad_recordp((le32*)kmft)) { ntfs_error(sb, "Incomplete multi sector transfer " "detected in mft record %i.", i); ntfs_error(sb, "Incomplete multi sector " "transfer detected in mft " "record %i.", i); mm_unmap_out: ntfs_unmap_page(mirr_page); mft_unmap_out: ntfs_unmap_page(mft_page); return FALSE; } } /* Do not check the mirror record if it is not in use. */ if (((MFT_RECORD*)kmirr)->flags & MFT_RECORD_IN_USE) { if (ntfs_is_baad_recordp((le32*)kmirr)) { ntfs_error(sb, "Incomplete multi sector transfer " "detected in mft mirror record %i.", i); ntfs_error(sb, "Incomplete multi sector " "transfer detected in mft " "mirror record %i.", i); goto mm_unmap_out; } } /* Get the amount of data in the current record. */ bytes = le32_to_cpu(((MFT_RECORD*)kmft)->bytes_in_use); if (!bytes || bytes > vol->mft_record_size) { if (bytes < sizeof(MFT_RECORD_OLD) || bytes > vol->mft_record_size || ntfs_is_baad_recordp((le32*)kmft)) { bytes = le32_to_cpu(((MFT_RECORD*)kmirr)->bytes_in_use); if (!bytes || bytes > vol->mft_record_size) if (bytes < sizeof(MFT_RECORD_OLD) || bytes > vol->mft_record_size || ntfs_is_baad_recordp((le32*)kmirr)) bytes = vol->mft_record_size; } /* Compare the two records. */ Loading Loading
fs/ntfs/ChangeLog +3 −0 Original line number Diff line number Diff line Loading @@ -28,6 +28,9 @@ ToDo/Notes: continued the attribute lookup loop instead of aborting it. - Use buffer_migrate_page() for the ->migratepage function of all ntfs address space operations. - Fix comparison of $MFT and $MFTMirr to not bail out when there are unused, invalid mft records which are the same in both $MFT and $MFTMirr. 2.1.26 - Minor bug fixes and updates. Loading
fs/ntfs/super.c +25 −13 Original line number Diff line number Diff line Loading @@ -1099,26 +1099,38 @@ static BOOL check_mft_mirror(ntfs_volume *vol) kmirr = page_address(mirr_page); ++index; } /* Do not check the record if it is not in use. */ if (((MFT_RECORD*)kmft)->flags & MFT_RECORD_IN_USE) { /* Make sure the record is ok. */ if (ntfs_is_baad_recordp((le32*)kmft)) { ntfs_error(sb, "Incomplete multi sector transfer " "detected in mft record %i.", i); ntfs_error(sb, "Incomplete multi sector " "transfer detected in mft " "record %i.", i); mm_unmap_out: ntfs_unmap_page(mirr_page); mft_unmap_out: ntfs_unmap_page(mft_page); return FALSE; } } /* Do not check the mirror record if it is not in use. */ if (((MFT_RECORD*)kmirr)->flags & MFT_RECORD_IN_USE) { if (ntfs_is_baad_recordp((le32*)kmirr)) { ntfs_error(sb, "Incomplete multi sector transfer " "detected in mft mirror record %i.", i); ntfs_error(sb, "Incomplete multi sector " "transfer detected in mft " "mirror record %i.", i); goto mm_unmap_out; } } /* Get the amount of data in the current record. */ bytes = le32_to_cpu(((MFT_RECORD*)kmft)->bytes_in_use); if (!bytes || bytes > vol->mft_record_size) { if (bytes < sizeof(MFT_RECORD_OLD) || bytes > vol->mft_record_size || ntfs_is_baad_recordp((le32*)kmft)) { bytes = le32_to_cpu(((MFT_RECORD*)kmirr)->bytes_in_use); if (!bytes || bytes > vol->mft_record_size) if (bytes < sizeof(MFT_RECORD_OLD) || bytes > vol->mft_record_size || ntfs_is_baad_recordp((le32*)kmirr)) bytes = vol->mft_record_size; } /* Compare the two records. */ Loading