X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Ftarget%2Ftgt_grant.c;h=99373cfd6045cf4ea6decf2f8346af71a6ba17bb;hb=881149a66825caa4f9b0ef003b663278d202fbab;hp=17da424ee109e9337a96e36e42c52fff42b45f40;hpb=860e20e42ddc45bf5521cbd5f53d35a310b34ded;p=fs%2Flustre-release.git diff --git a/lustre/target/tgt_grant.c b/lustre/target/tgt_grant.c index 17da424..99373cf 100644 --- a/lustre/target/tgt_grant.c +++ b/lustre/target/tgt_grant.c @@ -894,9 +894,10 @@ static long tgt_grant_alloc(struct obd_export *exp, u64 curgrant, tgd->tgd_grant_compat_disable) || left == 0 || exp->exp_failed) RETURN(0); - if (want > 0x7fffffff) { - CERROR("%s: client %s/%p requesting > 2GB grant %llu\n", - obd->obd_name, exp->exp_client_uuid.uuid, exp, want); + if (want > OBD_MAX_GRANT) { + CERROR("%s: client %s/%p requesting > max (%lu), %llu\n", + obd->obd_name, exp->exp_client_uuid.uuid, exp, + OBD_MAX_GRANT, want); RETURN(0); } @@ -936,6 +937,8 @@ static long tgt_grant_alloc(struct obd_export *exp, u64 curgrant, * client would like to have by more than grants for 2 full * RPCs */ + if (want + chunk <= ted->ted_grant) + RETURN(0); if (ted->ted_grant + grant > want + chunk) grant = want + chunk - ted->ted_grant; @@ -1061,9 +1064,14 @@ EXPORT_SYMBOL(tgt_grant_connect); void tgt_grant_discard(struct obd_export *exp) { struct obd_device *obd = exp->exp_obd; - struct tg_grants_data *tgd = &obd->u.obt.obt_lut->lut_tgd; + struct lu_target *lut = class_exp2tgt(exp); struct tg_export_data *ted = &exp->exp_target_data; + struct tg_grants_data *tgd; + + if (!lut) + return; + tgd = &lut->lut_tgd; spin_lock(&tgd->tgd_grant_lock); LASSERTF(tgd->tgd_tot_granted >= ted->ted_grant, "%s: tot_granted %llu cli %s/%p ted_grant %ld\n",