In btt_map_read, we read the map twice to make sure that the map entry
didn't change after we added it to the read tracking table. In
anticipation of expanding the use of the error bit, also make sure that
the error and zero flags are constant across the two map reads.

Signed-off-by: Vishal Verma <vishal.l.ve...@intel.com>
---
 drivers/nvdimm/btt.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/drivers/nvdimm/btt.c b/drivers/nvdimm/btt.c
index 8842baa..374ae62 100644
--- a/drivers/nvdimm/btt.c
+++ b/drivers/nvdimm/btt.c
@@ -1032,6 +1032,7 @@ static int btt_read_pg(struct btt *btt, struct 
bio_integrity_payload *bip,
                 */
                while (1) {
                        u32 new_map;
+                       int new_t, new_e;
 
                        if (t_flag) {
                                zero_fill_data(page, off, cur_len);
@@ -1050,15 +1051,18 @@ static int btt_read_pg(struct btt *btt, struct 
bio_integrity_payload *bip,
                         */
                        barrier();
 
-                       ret = btt_map_read(arena, premap, &new_map, &t_flag,
-                                               &e_flag, NVDIMM_IO_ATOMIC);
+                       ret = btt_map_read(arena, premap, &new_map, &new_t,
+                                               &new_e, NVDIMM_IO_ATOMIC);
                        if (ret)
                                goto out_rtt;
 
-                       if (postmap == new_map)
+                       if ((postmap == new_map) && (t_flag == new_t) &&
+                                       (e_flag == new_e))
                                break;
 
                        postmap = new_map;
+                       t_flag = new_t;
+                       e_flag = new_e;
                }
 
                ret = btt_data_read(arena, page, off, postmap, cur_len);
-- 
2.9.3

_______________________________________________
Linux-nvdimm mailing list
Linux-nvdimm@lists.01.org
https://lists.01.org/mailman/listinfo/linux-nvdimm

Reply via email to