X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fquota%2Flquota_entry.c;h=ae495d8348eba6dee735e4358831b6b14151cb20;hb=ff35e27da4c76bc93c7641ef54d425d77e821e9f;hp=3cc8fb2709d9e1a7119cb5b4ef03868b77b40cd1;hpb=4b0c3835568b292c53f558af6c46c08508d6cde2;p=fs%2Flustre-release.git diff --git a/lustre/quota/lquota_entry.c b/lustre/quota/lquota_entry.c index 3cc8fb2..ae495d8 100644 --- a/lustre/quota/lquota_entry.c +++ b/lustre/quota/lquota_entry.c @@ -176,8 +176,7 @@ retry: "freed:%lu, repeat:%u\n", hash, d.lid_inuse, d.lid_freed, repeat); repeat++; - set_current_state(TASK_INTERRUPTIBLE); - schedule_timeout(cfs_time_seconds(1)); + schedule_timeout_interruptible(cfs_time_seconds(1)); goto retry; } EXIT; @@ -228,7 +227,11 @@ struct lquota_site *lquota_site_alloc(const struct lu_env *env, void *parent, HASH_LQE_BKT_BITS), 0, CFS_HASH_MIN_THETA, CFS_HASH_MAX_THETA, &lqe64_hash_ops, - CFS_HASH_DEFAULT|CFS_HASH_BIGNAME); + CFS_HASH_RW_SEM_BKTLOCK | + CFS_HASH_COUNTER | + CFS_HASH_REHASH | + CFS_HASH_BIGNAME); + if (site->lqs_hash == NULL) { OBD_FREE_PTR(site); RETURN(ERR_PTR(-ENOMEM)); @@ -282,8 +285,10 @@ static void lqe_init(struct lquota_entry *lqe) * * \param env - the environment passed by the caller * \param lqe - is the quota entry to refresh + * \param find - don't create entry on disk if true */ -static int lqe_read(const struct lu_env *env, struct lquota_entry *lqe) +static int lqe_read(const struct lu_env *env, + struct lquota_entry *lqe, bool find) { struct lquota_site *site; int rc; @@ -296,7 +301,7 @@ static int lqe_read(const struct lu_env *env, struct lquota_entry *lqe) LQUOTA_DEBUG(lqe, "read"); - rc = site->lqs_ops->lqe_read(env, lqe, site->lqs_parent); + rc = site->lqs_ops->lqe_read(env, lqe, site->lqs_parent, find); if (rc == 0) /* mark the entry as up-to-date */ lqe->lqe_uptodate = true; @@ -310,12 +315,15 @@ static int lqe_read(const struct lu_env *env, struct lquota_entry *lqe) * \param env - the environment passed by the caller * \param site - lquota site which stores quota entries in a hash table * \param qid - is the quota ID to be found/created + * \param find - don't create lqe on disk in case of ENOENT if true * * \retval 0 - success * \retval -ve - failure */ -struct lquota_entry *lqe_locate(const struct lu_env *env, - struct lquota_site *site, union lquota_id *qid) +struct lquota_entry *lqe_locate_find(const struct lu_env *env, + struct lquota_site *site, + union lquota_id *qid, + bool find) { struct lquota_entry *lqe, *new = NULL; int rc = 0; @@ -347,7 +355,7 @@ struct lquota_entry *lqe_locate(const struct lu_env *env, lqe_init(new); /* read quota settings from disk and mark lqe as up-to-date */ - rc = lqe_read(env, new); + rc = lqe_read(env, new, find); if (rc) GOTO(out, lqe = ERR_PTR(rc));