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-2835 ptlrpc: Fix race during exp_flock_hash creation
[fs/lustre-release.git]
/
lustre
/
quota
/
qsd_writeback.c
diff --git
a/lustre/quota/qsd_writeback.c
b/lustre/quota/qsd_writeback.c
index
828ff43
..
61518d0
100644
(file)
--- a/
lustre/quota/qsd_writeback.c
+++ b/
lustre/quota/qsd_writeback.c
@@
-28,10
+28,6
@@
* Author: Niu Yawei <yawei.niu@intel.com>
*/
* Author: Niu Yawei <yawei.niu@intel.com>
*/
-#ifndef EXPORT_SYMTAB
-# define EXPORT_SYMTAB
-#endif
-
#define DEBUG_SUBSYSTEM S_LQUOTA
#include "qsd_internal.h"
#define DEBUG_SUBSYSTEM S_LQUOTA
#include "qsd_internal.h"
@@
-93,18
+89,27
@@
static void qsd_upd_add(struct qsd_instance *qsd, struct qsd_upd_rec *upd)
/* wake up the upd thread */
cfs_waitq_signal(&qsd->qsd_upd_thread.t_ctl_waitq);
} else {
/* wake up the upd thread */
cfs_waitq_signal(&qsd->qsd_upd_thread.t_ctl_waitq);
} else {
- CWARN("%s: discard
deferred
update.\n", qsd->qsd_svname);
+ CWARN("%s: discard update.\n", qsd->qsd_svname);
if (upd->qur_lqe)
if (upd->qur_lqe)
- LQUOTA_WARN(upd->qur_lqe, "discard
deferred
update.");
+ LQUOTA_WARN(upd->qur_lqe, "discard update.");
qsd_upd_free(upd);
}
}
/* must hold the qsd_lock */
qsd_upd_free(upd);
}
}
/* must hold the qsd_lock */
-static void qsd_add_deferred(cfs_list_t *list, struct qsd_upd_rec *upd)
+static void qsd_add_deferred(struct qsd_instance *qsd, cfs_list_t *list,
+ struct qsd_upd_rec *upd)
{
struct qsd_upd_rec *tmp, *n;
{
struct qsd_upd_rec *tmp, *n;
+ if (qsd->qsd_stopping) {
+ CWARN("%s: discard deferred udpate.\n", qsd->qsd_svname);
+ if (upd->qur_lqe)
+ LQUOTA_WARN(upd->qur_lqe, "discard deferred update.");
+ qsd_upd_free(upd);
+ return;
+ }
+
/* Sort the updates in ascending order */
cfs_list_for_each_entry_safe_reverse(tmp, n, list, qur_link) {
/* Sort the updates in ascending order */
cfs_list_for_each_entry_safe_reverse(tmp, n, list, qur_link) {
@@
-261,7
+266,7
@@
void qsd_upd_schedule(struct qsd_qtype_info *qqi, struct lquota_entry *lqe,
* the reintegration is in progress. Defer the update. */
cfs_list_t *list = global ? &qqi->qqi_deferred_glb :
&qqi->qqi_deferred_slv;
* the reintegration is in progress. Defer the update. */
cfs_list_t *list = global ? &qqi->qqi_deferred_glb :
&qqi->qqi_deferred_slv;
- qsd_add_deferred(list, upd);
+ qsd_add_deferred(
qsd,
list, upd);
}
write_unlock(&qsd->qsd_lock);
}
write_unlock(&qsd->qsd_lock);
@@
-311,6
+316,13
@@
void qsd_adjust_schedule(struct lquota_entry *lqe, bool defer, bool cancel)
struct qsd_instance *qsd = lqe2qqi(lqe)->qqi_qsd;
bool added = false;
struct qsd_instance *qsd = lqe2qqi(lqe)->qqi_qsd;
bool added = false;
+ read_lock(&qsd->qsd_lock);
+ if (qsd->qsd_stopping) {
+ read_unlock(&qsd->qsd_lock);
+ return;
+ }
+ read_unlock(&qsd->qsd_lock);
+
lqe_getref(lqe);
spin_lock(&qsd->qsd_adjust_lock);
lqe_getref(lqe);
spin_lock(&qsd->qsd_adjust_lock);