lightnvm: refactor phys addrs type to u64
authorMatias Bjørling <m@bjorling.me>
Mon, 2 Nov 2015 16:12:27 +0000 (17:12 +0100)
committerJens Axboe <axboe@fb.com>
Tue, 3 Nov 2015 16:53:24 +0000 (09:53 -0700)
For cases where CONFIG_LBDAF is not set. The struct ppa_addr exceeds its
type on 32 bit architectures. ppa_addr requires a 64bit integer to hold
the generic ppa format. We therefore refactor it to u64 and
replaces the sector_t usages with u64 for physical addresses.

Signed-off-by: Matias Bjørling <m@bjorling.me>
Signed-off-by: Jens Axboe <axboe@fb.com>
drivers/lightnvm/rrpc.c
drivers/lightnvm/rrpc.h
include/linux/lightnvm.h

index 22fcd629565d21085b0e4a22acdeb2a5f90d7a3b..64a888a5e9b3d4ba41901843b557092e725f0717 100644 (file)
@@ -116,15 +116,14 @@ static int block_is_full(struct rrpc *rrpc, struct rrpc_block *rblk)
        return (rblk->next_page == rrpc->dev->pgs_per_blk);
 }
 
-static sector_t block_to_addr(struct rrpc *rrpc, struct rrpc_block *rblk)
+static u64 block_to_addr(struct rrpc *rrpc, struct rrpc_block *rblk)
 {
        struct nvm_block *blk = rblk->parent;
 
        return blk->id * rrpc->dev->pgs_per_blk;
 }
 
-static struct ppa_addr rrpc_ppa_to_gaddr(struct nvm_dev *dev,
-                                                               sector_t addr)
+static struct ppa_addr rrpc_ppa_to_gaddr(struct nvm_dev *dev, u64 addr)
 {
        struct ppa_addr paddr;
 
@@ -231,7 +230,7 @@ static int rrpc_move_valid_pages(struct rrpc *rrpc, struct rrpc_block *rblk)
        struct page *page;
        int slot;
        int nr_pgs_per_blk = rrpc->dev->pgs_per_blk;
-       sector_t phys_addr;
+       u64 phys_addr;
        DECLARE_COMPLETION_ONSTACK(wait);
 
        if (bitmap_full(rblk->invalid_pages, nr_pgs_per_blk))
@@ -464,7 +463,7 @@ static struct rrpc_lun *rrpc_get_lun_rr(struct rrpc *rrpc, int is_gc)
 }
 
 static struct rrpc_addr *rrpc_update_map(struct rrpc *rrpc, sector_t laddr,
-                                       struct rrpc_block *rblk, sector_t paddr)
+                                       struct rrpc_block *rblk, u64 paddr)
 {
        struct rrpc_addr *gp;
        struct rrpc_rev_addr *rev;
@@ -486,9 +485,9 @@ static struct rrpc_addr *rrpc_update_map(struct rrpc *rrpc, sector_t laddr,
        return gp;
 }
 
-static sector_t rrpc_alloc_addr(struct rrpc *rrpc, struct rrpc_block *rblk)
+static u64 rrpc_alloc_addr(struct rrpc *rrpc, struct rrpc_block *rblk)
 {
-       sector_t addr = ADDR_EMPTY;
+       u64 addr = ADDR_EMPTY;
 
        spin_lock(&rblk->lock);
        if (block_is_full(rrpc, rblk))
@@ -516,7 +515,7 @@ static struct rrpc_addr *rrpc_map_page(struct rrpc *rrpc, sector_t laddr,
        struct rrpc_lun *rlun;
        struct rrpc_block *rblk;
        struct nvm_lun *lun;
-       sector_t paddr;
+       u64 paddr;
 
        rlun = rrpc_get_lun_rr(rrpc, is_gc);
        lun = rlun->parent;
@@ -1144,7 +1143,7 @@ static void rrpc_block_map_update(struct rrpc *rrpc, struct rrpc_block *rblk)
        struct nvm_dev *dev = rrpc->dev;
        int offset;
        struct rrpc_addr *laddr;
-       sector_t paddr, pladdr;
+       u64 paddr, pladdr;
 
        for (offset = 0; offset < dev->pgs_per_blk; offset++) {
                paddr = block_to_addr(rrpc, rblk) + offset;
index b5df08d7b8bfd9b63538a62d52c517a0530d0201..a9696a06c38c79c91821aa9f0104dd41ce3dbf00 100644 (file)
@@ -86,7 +86,7 @@ struct rrpc {
        struct nvm_dev *dev;
        struct gendisk *disk;
 
-       sector_t poffset; /* physical page offset */
+       u64 poffset; /* physical page offset */
        int lun_offset;
 
        int nr_luns;
@@ -136,13 +136,13 @@ struct rrpc_block_gc {
 
 /* Logical to physical mapping */
 struct rrpc_addr {
-       sector_t addr;
+       u64 addr;
        struct rrpc_block *rblk;
 };
 
 /* Physical to logical mapping */
 struct rrpc_rev_addr {
-       sector_t addr;
+       u64 addr;
 };
 
 static inline sector_t rrpc_get_laddr(struct bio *bio)
index 122b176600fadf488e9129d26f01afbd387d0cd3..5ebd70d12f3534b09cbc5fe9e73d6f35639317e2 100644 (file)
@@ -134,26 +134,26 @@ struct ppa_addr {
        union {
                /* Channel-based PPA format in nand 4x2x2x2x8x10 */
                struct {
-                       sector_t ch             : 4;
-                       sector_t sec            : 2; /* 4 sectors per page */
-                       sector_t pl             : 2; /* 4 planes per LUN */
-                       sector_t lun            : 2; /* 4 LUNs per channel */
-                       sector_t pg             : 8; /* 256 pages per block */
-                       sector_t blk            : 10;/* 1024 blocks per plane */
-                       sector_t resved         : 36;
+                       u64 ch          : 4;
+                       u64 sec         : 2; /* 4 sectors per page */
+                       u64 pl          : 2; /* 4 planes per LUN */
+                       u64 lun         : 2; /* 4 LUNs per channel */
+                       u64 pg          : 8; /* 256 pages per block */
+                       u64 blk         : 10;/* 1024 blocks per plane */
+                       u64 resved              : 36;
                } chnl;
 
                /* Generic structure for all addresses */
                struct {
-                       sector_t sec            : NVM_SEC_BITS;
-                       sector_t pl             : NVM_PL_BITS;
-                       sector_t pg             : NVM_PG_BITS;
-                       sector_t blk            : NVM_BLK_BITS;
-                       sector_t lun            : NVM_LUN_BITS;
-                       sector_t ch             : NVM_CH_BITS;
+                       u64 sec         : NVM_SEC_BITS;
+                       u64 pl          : NVM_PL_BITS;
+                       u64 pg          : NVM_PG_BITS;
+                       u64 blk         : NVM_BLK_BITS;
+                       u64 lun         : NVM_LUN_BITS;
+                       u64 ch          : NVM_CH_BITS;
                } g;
 
-               sector_t ppa;
+               u64 ppa;
        };
 } __packed;