Whamcloud - gitweb
git://git.whamcloud.com
/
fs
/
lustre-release.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
LU-11164 ldlm: pass env to lvbo methods
[fs/lustre-release.git]
/
lustre
/
quota
/
qsd_handler.c
diff --git
a/lustre/quota/qsd_handler.c
b/lustre/quota/qsd_handler.c
index
e2fdd35
..
eb0bddb
100644
(file)
--- a/
lustre/quota/qsd_handler.c
+++ b/
lustre/quota/qsd_handler.c
@@
-21,7
+21,7
@@
* GPL HEADER END
*/
/*
* GPL HEADER END
*/
/*
- * Copyright (c) 2012, 201
4
, Intel Corporation.
+ * Copyright (c) 2012, 201
7
, Intel Corporation.
* Use is subject to license terms.
*
* Author: Johann Lombardi <johann.lombardi@intel.com>
* Use is subject to license terms.
*
* Author: Johann Lombardi <johann.lombardi@intel.com>
@@
-402,7
+402,7
@@
out:
adjust = qsd_adjust_needed(lqe);
if (reqbody && req_is_acq(reqbody->qb_flags) && ret != -EDQUOT) {
lqe->lqe_acq_rc = ret;
adjust = qsd_adjust_needed(lqe);
if (reqbody && req_is_acq(reqbody->qb_flags) && ret != -EDQUOT) {
lqe->lqe_acq_rc = ret;
- lqe->lqe_acq_time =
cfs_time_current_64
();
+ lqe->lqe_acq_time =
ktime_get_seconds
();
}
out_noadjust:
qsd_request_exit(lqe);
}
out_noadjust:
qsd_request_exit(lqe);
@@
-463,8
+463,7
@@
static int qsd_acquire_local(struct lquota_entry *lqe, __u64 space)
* sometimes due to the race reply of dqacq vs. id lock glimpse
* (see LU-4505), so we revalidate it every 5 seconds. */
} else if (lqe->lqe_edquot &&
* sometimes due to the race reply of dqacq vs. id lock glimpse
* (see LU-4505), so we revalidate it every 5 seconds. */
} else if (lqe->lqe_edquot &&
- cfs_time_before_64(cfs_time_shift_64(-5),
- lqe->lqe_edquot_time)) {
+ (lqe->lqe_edquot_time > ktime_get_seconds() - 5)) {
rc = -EDQUOT;
}else {
rc = -EAGAIN;
rc = -EDQUOT;
}else {
rc = -EAGAIN;
@@
-563,7
+562,7
@@
static int qsd_acquire_remote(const struct lu_env *env,
/* check whether an acquire request completed recently */
if (lqe->lqe_acq_rc != 0 &&
/* check whether an acquire request completed recently */
if (lqe->lqe_acq_rc != 0 &&
-
cfs_time_before_64(cfs_time_shift_64(-1), lqe->lqe_acq_time)
) {
+
lqe->lqe_acq_time > ktime_get_seconds() - 1
) {
lqe_write_unlock(lqe);
LQUOTA_DEBUG(lqe, "using cached return code %d", lqe->lqe_acq_rc);
RETURN(lqe->lqe_acq_rc);
lqe_write_unlock(lqe);
LQUOTA_DEBUG(lqe, "using cached return code %d", lqe->lqe_acq_rc);
RETURN(lqe->lqe_acq_rc);
@@
-653,6
+652,13
@@
static bool qsd_acquire(const struct lu_env *env, struct lquota_entry *lqe,
* rc < 0, something bad happened */
break;
* rc < 0, something bad happened */
break;
+ /* if we have gotten some quota and stil wait more quota,
+ * it's better to give QMT some time to reclaim from clients */
+ if (count > 0) {
+ set_current_state(TASK_INTERRUPTIBLE);
+ schedule_timeout(cfs_time_seconds(1));
+ }
+
/* need to acquire more quota space from master */
rc = qsd_acquire_remote(env, lqe);
}
/* need to acquire more quota space from master */
rc = qsd_acquire_remote(env, lqe);
}