NFSv4.1: filelayout i/o helpers
Prepare for filelayout_read_pagelist with helper functions that find the correct data server, filehandle, and offset. Signed-off-by: Andy Adamson <andros@citi.umich.edu> Signed-off-by: Dean Hildebrand <dhildeb@us.ibm.com> Signed-off-by: Fred Isaman <iisaman@netapp.com> Signed-off-by: Marc Eshel <eshel@almaden.ibm.com> Signed-off-by: Mike Sager <sager@netapp.com> Signed-off-by: Oleg Drokin <green@linuxhacker.ru> Signed-off-by: Tao Guo <guotao@nrchpc.ac.cn> Signed-off-by: Tigran Mkrtchyan <tigran@anahit.desy.de> Signed-off-by: Tigran Mkrtchyan <tigran.mkrtchyan@desy.de> Signed-off-by: Andy Adamson <andros@netapp.com> Signed-off-by: Benny Halevy <bhalevy@panasas.com> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:

committed by
Trond Myklebust

parent
d83217c135
commit
cfe7f4120f
@@ -66,6 +66,40 @@ filelayout_clear_layoutdriver(struct nfs_server *nfss)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static loff_t
|
||||
filelayout_get_dense_offset(struct nfs4_filelayout_segment *flseg,
|
||||
loff_t offset)
|
||||
{
|
||||
u32 stripe_width = flseg->stripe_unit * flseg->dsaddr->stripe_count;
|
||||
u64 tmp;
|
||||
|
||||
offset -= flseg->pattern_offset;
|
||||
tmp = offset;
|
||||
do_div(tmp, stripe_width);
|
||||
|
||||
return tmp * flseg->stripe_unit + do_div(offset, flseg->stripe_unit);
|
||||
}
|
||||
|
||||
/* This function is used by the layout driver to calculate the
|
||||
* offset of the file on the dserver based on whether the
|
||||
* layout type is STRIPE_DENSE or STRIPE_SPARSE
|
||||
*/
|
||||
static loff_t
|
||||
filelayout_get_dserver_offset(struct pnfs_layout_segment *lseg, loff_t offset)
|
||||
{
|
||||
struct nfs4_filelayout_segment *flseg = FILELAYOUT_LSEG(lseg);
|
||||
|
||||
switch (flseg->stripe_type) {
|
||||
case STRIPE_SPARSE:
|
||||
return offset;
|
||||
|
||||
case STRIPE_DENSE:
|
||||
return filelayout_get_dense_offset(flseg, offset);
|
||||
}
|
||||
|
||||
BUG();
|
||||
}
|
||||
|
||||
/*
|
||||
* filelayout_check_layout()
|
||||
*
|
||||
|
Reference in New Issue
Block a user