@@ -552,18 +552,17 @@ release_inval_marks(struct pnfs_inval_markings *marks)
/* Note we are relying on caller locking to prevent nasty races. */
static void
-bl_free_layout(void *p)
+bl_free_layout(struct pnfs_layout_type *lo)
{
- struct pnfs_block_layout *bl = p;
+ struct pnfs_block_layout *bl = BLK_LO2EXT(lo);
dprintk("%s enter\n", __func__);
release_extents(bl, NULL);
release_inval_marks(&bl->bl_inval);
kfree(bl);
- return;
}
-static void *
+static struct pnfs_layout_type *
bl_alloc_layout(struct inode *inode)
{
struct pnfs_block_layout *bl;
@@ -579,7 +578,7 @@ bl_alloc_layout(struct inode *inode)
bl->bl_count = 0;
bl->bl_blocksize = NFS_SERVER(inode)->pnfs_blksize >> 9;
INIT_INVAL_MARKS(&bl->bl_inval, bl->bl_blocksize);
- return bl;
+ return &bl->bl_layout;
}
static void
@@ -177,6 +177,7 @@ static inline int choose_list(enum exstate4 state)
}
struct pnfs_block_layout {
+ struct pnfs_layout_type bl_layout;
struct pnfs_inval_markings bl_inval; /* tracks INVAL->RW transition */
spinlock_t bl_ext_lock; /* Protects list manipulation */
struct list_head bl_extents[EXTENT_LISTS]; /* R and RW extents */
@@ -193,8 +194,18 @@ struct bl_layoutupdate_data {
};
#define BLK_ID(lo) ((struct block_mount_id *)(PNFS_NFS_SERVER(lo)->pnfs_ld_data))
-#define BLK_LSEG2EXT(lseg) ((struct pnfs_block_layout *)lseg->layout->ld_data)
-#define BLK_LO2EXT(lo) ((struct pnfs_block_layout *)lo->ld_data)
+
+static inline struct pnfs_block_layout *
+BLK_LO2EXT(struct pnfs_layout_type *lo)
+{
+ return container_of(lo, struct pnfs_block_layout, bl_layout);
+}
+
+static inline struct pnfs_block_layout *
+BLK_LSEG2EXT(struct pnfs_layout_segment *lseg)
+{
+ return BLK_LO2EXT(lseg->layout);
+}
uint32_t *blk_overflow(uint32_t *p, uint32_t *end, size_t nbytes);
@@ -620,7 +620,7 @@ int
nfs4_blk_process_layoutget(struct pnfs_layout_type *lo,
struct nfs4_pnfs_layoutget_res *lgr)
{
- struct pnfs_block_layout *bl = PNFS_LD_DATA(lo);
+ struct pnfs_block_layout *bl = BLK_LO2EXT(lo);
uint32_t *p = (uint32_t *)lgr->layout.buf;
uint32_t *end = (uint32_t *)((char *)lgr->layout.buf + lgr->layout.len);
int i, status = -EIO;