From c05bad93136cc319ec419bb8b1203eb12ea4b9c1 Mon Sep 17 00:00:00 2001 From: Alberto Missael Palacios Oliva Date: Fri, 24 Jan 2025 18:53:03 -0500 Subject: [PATCH 1/2] Changed skip flags when calling _ltfs_search_index_wp --- src/libltfs/ltfs.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/libltfs/ltfs.c b/src/libltfs/ltfs.c index 40ebbe77..101efb7d 100644 --- a/src/libltfs/ltfs.c +++ b/src/libltfs/ltfs.c @@ -1658,7 +1658,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; @@ -1687,8 +1688,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); - /* Index of IP could be corrupted. So set skip flag */ - ret = _ltfs_search_index_wp(recover_symlink, true, &seekpos, vol); + /* 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; From a4e44c2a4ec8cf98f3180295eed6fddffce7e499 Mon Sep 17 00:00:00 2001 From: Alberto Missael Palacios Oliva Date: Wed, 29 Jan 2025 14:52:32 -0600 Subject: [PATCH 2/2] Added logic for double write perm scenario --- src/libltfs/ltfs.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/libltfs/ltfs.c b/src/libltfs/ltfs.c index 101efb7d..defec4f5 100644 --- a/src/libltfs/ltfs.c +++ b/src/libltfs/ltfs.c @@ -1669,7 +1669,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, @@ -1688,8 +1688,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 DP could be corrupted. So set skip flag to false */ - ret = _ltfs_search_index_wp(recover_symlink, false, &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;