libnvdimm, btt: refactor map entry operations with macros
authorVishal Verma <vishal.l.verma@intel.com>
Thu, 31 Aug 2017 01:35:59 +0000 (19:35 -0600)
committerDan Williams <dan.j.williams@intel.com>
Thu, 31 Aug 2017 22:05:10 +0000 (15:05 -0700)
Add helpers for converting a raw map entry to just the block number, or
either of the 'e' or 'z' flags in preparation for actually using the
error flag to mark blocks with media errors.

Signed-off-by: Vishal Verma <vishal.l.verma@intel.com>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
drivers/nvdimm/btt.c
drivers/nvdimm/btt.h

index a5e4134e1ed0267cac953387e854193419697582..bb816bc1a906eb4a916ec2985c302bcabfc723e5 100644 (file)
@@ -106,7 +106,7 @@ static int btt_map_write(struct arena_info *arena, u32 lba, u32 mapping,
         * This 'mapping' is supposed to be just the LBA mapping, without
         * any flags set, so strip the flag bits.
         */
-       mapping &= MAP_LBA_MASK;
+       mapping = ent_lba(mapping);
 
        ze = (z_flag << 1) + e_flag;
        switch (ze) {
@@ -155,10 +155,10 @@ static int btt_map_read(struct arena_info *arena, u32 lba, u32 *mapping,
 
        raw_mapping = le32_to_cpu(in);
 
-       z_flag = (raw_mapping & MAP_TRIM_MASK) >> MAP_TRIM_SHIFT;
-       e_flag = (raw_mapping & MAP_ERR_MASK) >> MAP_ERR_SHIFT;
+       z_flag = ent_z_flag(raw_mapping);
+       e_flag = ent_e_flag(raw_mapping);
        ze = (z_flag << 1) + e_flag;
-       postmap = raw_mapping & MAP_LBA_MASK;
+       postmap = ent_lba(raw_mapping);
 
        /* Reuse the {z,e}_flag variables for *trim and *error */
        z_flag = 0;
index 888e862907a0cab358a66abc6818cf33d9b9c559..09fabf5a5590eb7bb6e9531addd54df49c9a18c7 100644 (file)
 #define IB_FLAG_ERROR 0x00000001
 #define IB_FLAG_ERROR_MASK 0x00000001
 
+#define ent_lba(ent) (ent & MAP_LBA_MASK)
+#define ent_e_flag(ent) (!!(ent & MAP_ERR_MASK))
+#define ent_z_flag(ent) (!!(ent & MAP_TRIM_MASK))
+
 enum btt_init_state {
        INIT_UNCHECKED = 0,
        INIT_NOTFOUND,