@@ -1658,7 +1658,8 @@ int ltfs_mount(bool force_full, bool deep_recovery, bool recover_extra, bool rec
16581658 (unsigned long long )vol -> dp_coh .volume_change_ref ,
16591659 (unsigned long long )volume_change_ref );
16601660
1661- ret = _ltfs_search_index_wp (recover_symlink , false, & seekpos , vol );
1661+ /* Index of IP could be corrupted. So set skip flag to true */
1662+ ret = _ltfs_search_index_wp (recover_symlink , true, & seekpos , vol );
16621663 if (ret < 0 )
16631664 goto out_unlock ;
16641665
@@ -1668,7 +1669,7 @@ int ltfs_mount(bool force_full, bool deep_recovery, bool recover_extra, bool rec
16681669 seekpos .block = vol -> dp_coh .set_id ;
16691670 }
16701671 } else {
1671- if (vollock != PWE_MAM_DP && vollock != PWE_MAM ) {
1672+ if (vol -> ip_coh . count > vol -> dp_coh . count && vollock != PWE_MAM_DP && vollock != PWE_MAM ) {
16721673 /*
16731674 * The index on IP is newer but MAM shows write perm doesn't happen in DP.
16741675 * LTFS already have written an index on DP when it is writing an index on IP,
@@ -1687,8 +1688,13 @@ int ltfs_mount(bool force_full, bool deep_recovery, bool recover_extra, bool rec
16871688 (unsigned long long )vol -> dp_coh .volume_change_ref ,
16881689 (unsigned long long )volume_change_ref );
16891690
1690- /* Index of IP could be corrupted. So set skip flag */
1691- ret = _ltfs_search_index_wp (recover_symlink , true, & seekpos , vol );
1691+ if (vollock == PWE_MAM_BOTH ) {
1692+ /* Index of IP could be corrupted (because of double write perm). So set skip flag to true */
1693+ ret = _ltfs_search_index_wp (recover_symlink , true, & seekpos , vol );
1694+ } else {
1695+ /* Index of DP could be corrupted. So set skip flag to false */
1696+ ret = _ltfs_search_index_wp (recover_symlink , false, & seekpos , vol );
1697+ }
16921698 if (ret < 0 )
16931699 goto out_unlock ;
16941700
0 commit comments