From: green Date: Thu, 13 Nov 2008 02:16:07 +0000 (+0000) Subject: b=16823 X-Git-Tag: v1_7_140~1^134 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=f82ea3adce96e76332678a9f44d179d8f478ef2e;p=fs%2Flustre-release.git b=16823 r=adilger,shadow Remove 4G limit for stripe_size * num_stripes. 4G limit on stripe_size is still in place, though. --- diff --git a/lustre/lov/lov_offset.c b/lustre/lov/lov_offset.c index 804fb54..487f6da 100644 --- a/lustre/lov/lov_offset.c +++ b/lustre/lov/lov_offset.c @@ -54,8 +54,9 @@ obd_size lov_stripe_size(struct lov_stripe_md *lsm, obd_size ost_size, int stripeno) { - unsigned long ssize = lsm->lsm_stripe_size; - unsigned long swidth, stripe_size; + obd_size ssize = lsm->lsm_stripe_size; + unsigned long stripe_size; + obd_off swidth; int sindex = stripeno; obd_size lov_size; int magic = lsm->lsm_magic; @@ -67,8 +68,8 @@ obd_size lov_stripe_size(struct lov_stripe_md *lsm, obd_size ost_size, LASSERT(lsm_op_find(magic) != NULL); lsm_op_find(magic)->lsm_stripe_by_index(lsm, &stripeno, NULL, &swidth); - /* do_div(a, b) returns a % b, and a = a / b */ - stripe_size = do_div(ost_size, ssize); + /* ll_do_div64(a, b) returns a % b, and a = a / b */ + stripe_size = ll_do_div64(ost_size, ssize); if (stripe_size) lov_size = ost_size * swidth + stripeno * ssize + stripe_size; else @@ -127,42 +128,43 @@ obd_size lov_stripe_size(struct lov_stripe_md *lsm, obd_size ost_size, * falls in the stripe and no shifting was done; > 0 when the offset * was outside the stripe and was pulled back to its final byte. */ int lov_stripe_offset(struct lov_stripe_md *lsm, obd_off lov_off, - int stripeno, obd_off *obd_off) + int stripeno, obd_off *obdoff) { unsigned long ssize = lsm->lsm_stripe_size; - unsigned long swidth, stripe_off, this_stripe; + unsigned long stripe_off, this_stripe; __u64 l_off, s_off; + obd_off swidth; int magic = lsm->lsm_magic; int ret = 0; if (lov_off == OBD_OBJECT_EOF) { - *obd_off = OBD_OBJECT_EOF; + *obdoff = OBD_OBJECT_EOF; return 0; } LASSERT(lsm_op_find(magic) != NULL); /*It will check whether the lov_off and stripeno *are in the same extent. - *1) lov_off extent < stripeno extent, ret = -1, obd_off = 0 + *1) lov_off extent < stripeno extent, ret = -1, obdoff = 0 *2) lov_off extent > stripeno extent, ret = 1, - * obd_off = lov_off extent offset*/ + * obdoff = lov_off extent offset*/ l_off = lsm_op_find(magic)->lsm_stripe_offset_by_index(lsm, stripeno); s_off = lsm_op_find(magic)->lsm_stripe_offset_by_offset(lsm, lov_off); if (s_off < l_off) { ret = -1; - *obd_off = 0; + *obdoff = 0; return ret; } else if (s_off > l_off) { ret = 1; - *obd_off = s_off; + *obdoff = s_off; return ret; } /*If they are in the same extent, original logic*/ lsm_op_find(magic)->lsm_stripe_by_index(lsm, &stripeno, &lov_off, &swidth); - /* do_div(a, b) returns a % b, and a = a / b */ - stripe_off = do_div(lov_off, swidth); + /* ll_do_div64(a, b) returns a % b, and a = a / b */ + stripe_off = ll_do_div64(lov_off, swidth); this_stripe = stripeno * ssize; if (stripe_off < this_stripe) { @@ -177,7 +179,7 @@ int lov_stripe_offset(struct lov_stripe_md *lsm, obd_off lov_off, } } - *obd_off = lov_off * ssize + stripe_off; + *obdoff = lov_off * ssize + stripe_off; return ret; } @@ -204,7 +206,8 @@ obd_off lov_size_to_stripe(struct lov_stripe_md *lsm, obd_off file_size, int stripeno) { unsigned long ssize = lsm->lsm_stripe_size; - unsigned long swidth, stripe_off, this_stripe; + unsigned long stripe_off, this_stripe; + obd_off swidth; int magic = lsm->lsm_magic; if (file_size == OBD_OBJECT_EOF) @@ -214,8 +217,8 @@ obd_off lov_size_to_stripe(struct lov_stripe_md *lsm, obd_off file_size, lsm_op_find(magic)->lsm_stripe_by_index(lsm, &stripeno, &file_size, &swidth); - /* do_div(a, b) returns a % b, and a = a / b */ - stripe_off = do_div(file_size, swidth); + /* ll_do_div64(a, b) returns a % b, and a = a / b */ + stripe_off = ll_do_div64(file_size, swidth); this_stripe = stripeno * ssize; if (stripe_off < this_stripe) { @@ -277,14 +280,15 @@ int lov_stripe_intersects(struct lov_stripe_md *lsm, int stripeno, int lov_stripe_number(struct lov_stripe_md *lsm, obd_off lov_off) { unsigned long ssize = lsm->lsm_stripe_size; - unsigned long swidth, stripe_off; + unsigned long stripe_off; + obd_off swidth; obd_off offset = lov_off; int magic = lsm->lsm_magic; LASSERT(lsm_op_find(magic) != NULL); lsm_op_find(magic)->lsm_stripe_by_offset(lsm, NULL, &lov_off, &swidth); - stripe_off = do_div(lov_off, swidth); + stripe_off = ll_do_div64(lov_off, swidth); return (stripe_off/ssize + lsm_op_find(magic)->lsm_stripe_index_by_offset(lsm, offset));