From 2c0cd5a13a8d1cdb5278388feecb8f41561ae47c Mon Sep 17 00:00:00 2001 From: Missael Palacios Date: Thu, 30 Jan 2025 13:17:21 -0600 Subject: [PATCH] Changed skip flags when calling _ltfs_search_index_wp (#493) --- src/libltfs/ltfs.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/libltfs/ltfs.c b/src/libltfs/ltfs.c index baa7aae..42d1f25 100644 --- a/src/libltfs/ltfs.c +++ b/src/libltfs/ltfs.c @@ -1673,7 +1673,8 @@ int ltfs_mount(bool force_full, bool deep_recovery, bool recover_extra, bool rec (unsigned long long)vol->dp_coh.volume_change_ref, (unsigned long long)volume_change_ref); - ret = _ltfs_search_index_wp(recover_symlink, false, &seekpos, vol); + /* Index of IP could be corrupted. So set skip flag to true */ + ret = _ltfs_search_index_wp(recover_symlink, true, &seekpos, vol); if (ret < 0) goto out_unlock; @@ -1683,7 +1684,7 @@ int ltfs_mount(bool force_full, bool deep_recovery, bool recover_extra, bool rec seekpos.block = vol->dp_coh.set_id; } } else { - if (vollock != PWE_MAM_DP && vollock != PWE_MAM) { + if (vol->ip_coh.count > vol->dp_coh.count && vollock != PWE_MAM_DP && vollock != PWE_MAM) { /* * The index on IP is newer but MAM shows write perm doesn't happen in DP. * LTFS already have written an index on DP when it is writing an index on IP, @@ -1702,8 +1703,13 @@ int ltfs_mount(bool force_full, bool deep_recovery, bool recover_extra, bool rec (unsigned long long)vol->dp_coh.volume_change_ref, (unsigned long long)volume_change_ref); - /* Index of IP could be corrupted. So set skip flag */ - ret = _ltfs_search_index_wp(recover_symlink, true, &seekpos, vol); + if (vollock == PWE_MAM_BOTH) { + /* Index of IP could be corrupted (because of double write perm). So set skip flag to true */ + ret = _ltfs_search_index_wp(recover_symlink, true, &seekpos, vol); + } else { + /* Index of DP could be corrupted. So set skip flag to false */ + ret = _ltfs_search_index_wp(recover_symlink, false, &seekpos, vol); + } if (ret < 0) goto out_unlock;