Lines Matching refs:nsblk
24 static u32 nsblk_meta_size(struct nd_namespace_blk *nsblk) in nsblk_meta_size() argument
26 return nsblk->lbasize - ((nsblk->lbasize >= 4096) ? 4096 : 512); in nsblk_meta_size()
29 static u32 nsblk_internal_lbasize(struct nd_namespace_blk *nsblk) in nsblk_internal_lbasize() argument
31 return roundup(nsblk->lbasize, INT_LBASIZE_ALIGNMENT); in nsblk_internal_lbasize()
34 static u32 nsblk_sector_size(struct nd_namespace_blk *nsblk) in nsblk_sector_size() argument
36 return nsblk->lbasize - nsblk_meta_size(nsblk); in nsblk_sector_size()
39 static resource_size_t to_dev_offset(struct nd_namespace_blk *nsblk, in to_dev_offset() argument
44 for (i = 0; i < nsblk->num_resources; i++) { in to_dev_offset()
45 if (ns_offset < resource_size(nsblk->res[i])) { in to_dev_offset()
46 if (ns_offset + len > resource_size(nsblk->res[i])) { in to_dev_offset()
47 dev_WARN_ONCE(&nsblk->common.dev, 1, in to_dev_offset()
51 return nsblk->res[i]->start + ns_offset; in to_dev_offset()
53 ns_offset -= resource_size(nsblk->res[i]); in to_dev_offset()
56 dev_WARN_ONCE(&nsblk->common.dev, 1, "request out of range\n"); in to_dev_offset()
60 static struct nd_blk_region *to_ndbr(struct nd_namespace_blk *nsblk) in to_ndbr() argument
65 parent = nsblk->common.dev.parent; in to_ndbr()
71 static int nd_blk_rw_integrity(struct nd_namespace_blk *nsblk, in nd_blk_rw_integrity() argument
74 struct nd_blk_region *ndbr = to_ndbr(nsblk); in nd_blk_rw_integrity()
75 unsigned int len = nsblk_meta_size(nsblk); in nd_blk_rw_integrity()
80 internal_lbasize = nsblk_internal_lbasize(nsblk); in nd_blk_rw_integrity()
81 sector_size = nsblk_sector_size(nsblk); in nd_blk_rw_integrity()
83 dev_offset = to_dev_offset(nsblk, ns_offset, len); in nd_blk_rw_integrity()
117 static int nd_blk_rw_integrity(struct nd_namespace_blk *nsblk, in nd_blk_rw_integrity() argument
124 static int nsblk_do_bvec(struct nd_namespace_blk *nsblk, in nsblk_do_bvec() argument
128 struct nd_blk_region *ndbr = to_ndbr(nsblk); in nsblk_do_bvec()
135 internal_lbasize = nsblk_internal_lbasize(nsblk); in nsblk_do_bvec()
136 sector_size = nsblk_sector_size(nsblk); in nsblk_do_bvec()
150 dev_offset = to_dev_offset(nsblk, ns_offset, cur_len); in nsblk_do_bvec()
161 err = nd_blk_rw_integrity(nsblk, bip, lba, rw); in nsblk_do_bvec()
176 struct nd_namespace_blk *nsblk; in nd_blk_make_request() local
187 nsblk = q->queuedata; in nd_blk_make_request()
194 err = nsblk_do_bvec(nsblk, bip, bvec.bv_page, len, in nd_blk_make_request()
197 dev_dbg(&nsblk->common.dev, in nd_blk_make_request()
216 struct nd_namespace_blk *nsblk = to_nd_namespace_blk(&ndns->dev); in nsblk_rw_bytes() local
217 struct nd_blk_region *ndbr = to_ndbr(nsblk); in nsblk_rw_bytes()
220 dev_offset = to_dev_offset(nsblk, offset, n); in nsblk_rw_bytes()
222 if (unlikely(offset + n > nsblk->size)) { in nsblk_rw_bytes()
249 static int nsblk_attach_disk(struct nd_namespace_blk *nsblk) in nsblk_attach_disk() argument
251 struct device *dev = &nsblk->common.dev; in nsblk_attach_disk()
257 internal_nlba = div_u64(nsblk->size, nsblk_internal_lbasize(nsblk)); in nsblk_attach_disk()
258 available_disk_size = internal_nlba * nsblk_sector_size(nsblk); in nsblk_attach_disk()
268 blk_queue_logical_block_size(q, nsblk_sector_size(nsblk)); in nsblk_attach_disk()
270 q->queuedata = nsblk; in nsblk_attach_disk()
280 nvdimm_namespace_disk_name(&nsblk->common, disk->disk_name); in nsblk_attach_disk()
285 if (nsblk_meta_size(nsblk)) { in nsblk_attach_disk()
286 int rc = nd_integrity_init(disk, nsblk_meta_size(nsblk)); in nsblk_attach_disk()
301 struct nd_namespace_blk *nsblk; in nd_blk_probe() local
307 nsblk = to_nd_namespace_blk(&ndns->dev); in nd_blk_probe()
308 nsblk->size = nvdimm_namespace_capacity(ndns); in nd_blk_probe()
309 dev_set_drvdata(dev, nsblk); in nd_blk_probe()
318 return nsblk_attach_disk(nsblk); in nd_blk_probe()