X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fosp%2Fosp_precreate.c;h=20783fc92a7ba93e98b5531085350dd329705cb4;hb=2b13169cd86b4868730f2c45432645b7d2cc0073;hp=11dd60ccb525fb45ad54ea938acf10ce0fdae97c;hpb=11db1a551172f596d1d284e8496530f9ce24ac81;p=fs%2Flustre-release.git diff --git a/lustre/osp/osp_precreate.c b/lustre/osp/osp_precreate.c index 11dd60c..20783fc 100644 --- a/lustre/osp/osp_precreate.c +++ b/lustre/osp/osp_precreate.c @@ -70,7 +70,7 @@ static void osp_statfs_timer_cb(unsigned long _d) struct osp_device *d = (struct osp_device *) _d; LASSERT(d); - cfs_waitq_signal(&d->opd_pre_waitq); + wake_up(&d->opd_pre_waitq); } static int osp_statfs_interpret(const struct lu_env *env, @@ -108,7 +108,7 @@ static int osp_statfs_interpret(const struct lu_env *env, RETURN(0); out: /* couldn't update statfs, try again as soon as possible */ - cfs_waitq_signal(&d->opd_pre_waitq); + wake_up(&d->opd_pre_waitq); if (req->rq_import_generation == imp->imp_generation) CDEBUG(D_CACHE, "%s: couldn't update statfs: rc = %d\n", d->opd_obd->obd_name, rc); @@ -174,7 +174,7 @@ void osp_statfs_need_now(struct osp_device *d) */ d->opd_statfs_fresh_till = cfs_time_shift(-1); cfs_timer_disarm(&d->opd_statfs_timer); - cfs_waitq_signal(&d->opd_pre_waitq); + wake_up(&d->opd_pre_waitq); } } @@ -459,7 +459,7 @@ static int osp_precreate_send(const struct lu_env *env, struct osp_device *d) osp_pre_update_status(d, -ENOSPC); rc = -ENOSPC; } - cfs_waitq_signal(&d->opd_pre_waitq); + wake_up(&d->opd_pre_waitq); GOTO(out_req, rc); } @@ -516,7 +516,7 @@ static int osp_precreate_send(const struct lu_env *env, struct osp_device *d) out_req: /* now we can wakeup all users awaiting for objects */ osp_pre_update_status(d, rc); - cfs_waitq_signal(&d->opd_pre_user_waitq); + wake_up(&d->opd_pre_user_waitq); ptlrpc_req_finished(req); RETURN(rc); @@ -539,24 +539,22 @@ static int osp_get_lastfid_from_ost(const struct lu_env *env, if (req == NULL) RETURN(-ENOMEM); - req_capsule_set_size(&req->rq_pill, &RMF_SETINFO_KEY, RCL_CLIENT, + req_capsule_set_size(&req->rq_pill, &RMF_GETINFO_KEY, RCL_CLIENT, sizeof(KEY_LAST_FID)); - req_capsule_set_size(&req->rq_pill, &RMF_SETINFO_VAL, RCL_CLIENT, - sizeof(struct lu_fid)); - rc = ptlrpc_request_pack(req, LUSTRE_OST_VERSION, OST_GET_INFO); if (rc) { ptlrpc_request_free(req); RETURN(rc); } - tmp = req_capsule_client_get(&req->rq_pill, &RMF_SETINFO_KEY); + tmp = req_capsule_client_get(&req->rq_pill, &RMF_GETINFO_KEY); memcpy(tmp, KEY_LAST_FID, sizeof(KEY_LAST_FID)); req->rq_no_delay = req->rq_no_resend = 1; - tmp = req_capsule_client_get(&req->rq_pill, &RMF_SETINFO_VAL); - fid_cpu_to_le((struct lu_fid *)tmp, &d->opd_last_used_fid); + last_fid = req_capsule_client_get(&req->rq_pill, &RMF_FID); + fid_cpu_to_le(last_fid, &d->opd_last_used_fid); + ptlrpc_request_set_replen(req); rc = ptlrpc_queue_wait(req); @@ -721,7 +719,9 @@ out: if (req) ptlrpc_req_finished(req); + spin_lock(&d->opd_pre_lock); d->opd_pre_recovering = 0; + spin_unlock(&d->opd_pre_lock); /* * If rc is zero, the pre-creation window should have been emptied. @@ -739,7 +739,7 @@ out: * this OSP isn't quite functional yet */ osp_pre_update_status(d, rc); } else { - cfs_waitq_signal(&d->opd_pre_user_waitq); + wake_up(&d->opd_pre_user_waitq); } } @@ -795,9 +795,11 @@ void osp_pre_update_status(struct osp_device *d, int rc) d->opd_syn_changes, d->opd_syn_rpc_in_progress); } else if (old == -ENOSPC) { d->opd_pre_status = 0; + spin_lock(&d->opd_pre_lock); d->opd_pre_grow_slow = 0; d->opd_pre_grow_count = OST_MIN_PRECREATE; - cfs_waitq_signal(&d->opd_pre_waitq); + spin_unlock(&d->opd_pre_lock); + wake_up(&d->opd_pre_waitq); CDEBUG(D_INFO, "%s: no space: "LPU64" blocks, "LPU64 " free, "LPU64" used, "LPU64" avail -> %d: " "rc = %d\n", d->opd_obd->obd_name, @@ -807,7 +809,7 @@ void osp_pre_update_status(struct osp_device *d, int rc) } out: - cfs_waitq_signal(&d->opd_pre_user_waitq); + wake_up(&d->opd_pre_user_waitq); } static int osp_init_pre_fid(struct osp_device *osp) @@ -884,7 +886,7 @@ static int osp_precreate_thread(void *_arg) spin_lock(&d->opd_pre_lock); thread->t_flags = SVC_RUNNING; spin_unlock(&d->opd_pre_lock); - cfs_waitq_signal(&thread->t_ctl_waitq); + wake_up(&thread->t_ctl_waitq); while (osp_precreate_running(d)) { /* @@ -986,7 +988,7 @@ static int osp_precreate_thread(void *_arg) thread->t_flags = SVC_STOPPED; lu_env_fini(&env); - cfs_waitq_signal(&thread->t_ctl_waitq); + wake_up(&thread->t_ctl_waitq); RETURN(0); } @@ -1002,11 +1004,15 @@ static int osp_precreate_ready_condition(const struct lu_env *env, if (d->opd_pre_reserved + 1 < osp_objs_precreated(env, d)) return 1; - /* ready if OST reported no space and no destoys in progress */ + /* ready if OST reported no space and no destroys in progress */ if (d->opd_syn_changes + d->opd_syn_rpc_in_progress == 0 && d->opd_pre_status == -ENOSPC) return 1; + /* Bail out I/O fails to OST */ + if (d->opd_pre_status == -EIO) + return 1; + return 0; } @@ -1078,7 +1084,7 @@ int osp_precreate_reserve(const struct lu_env *env, struct osp_device *d) /* XXX: don't wake up if precreation is in progress */ if (osp_precreate_near_empty_nolock(env, d) && !osp_precreate_end_seq_nolock(env, d)) - cfs_waitq_signal(&d->opd_pre_waitq); + wake_up(&d->opd_pre_waitq); break; } @@ -1107,7 +1113,7 @@ int osp_precreate_reserve(const struct lu_env *env, struct osp_device *d) } /* XXX: don't wake up if precreation is in progress */ - cfs_waitq_signal(&d->opd_pre_waitq); + wake_up(&d->opd_pre_waitq); lwi = LWI_TIMEOUT(expire - cfs_time_current(), osp_precreate_timeout_condition, d); @@ -1154,7 +1160,7 @@ int osp_precreate_get_fid(const struct lu_env *env, struct osp_device *d, * osp_precreate_thread() just before orphan cleanup */ if (unlikely(d->opd_pre_reserved == 0 && d->opd_pre_status)) - cfs_waitq_signal(&d->opd_pre_waitq); + wake_up(&d->opd_pre_waitq); return 0; } @@ -1232,7 +1238,7 @@ out: int osp_init_precreate(struct osp_device *d) { struct l_wait_info lwi = { 0 }; - cfs_task_t *task; + struct task_struct *task; ENTRY; @@ -1250,9 +1256,9 @@ int osp_init_precreate(struct osp_device *d) d->opd_pre_max_grow_count = OST_MAX_PRECREATE; spin_lock_init(&d->opd_pre_lock); - cfs_waitq_init(&d->opd_pre_waitq); - cfs_waitq_init(&d->opd_pre_user_waitq); - cfs_waitq_init(&d->opd_pre_thread.t_ctl_waitq); + init_waitqueue_head(&d->opd_pre_waitq); + init_waitqueue_head(&d->opd_pre_user_waitq); + init_waitqueue_head(&d->opd_pre_thread.t_ctl_waitq); /* * Initialize statfs-related things @@ -1290,9 +1296,9 @@ void osp_precreate_fini(struct osp_device *d) cfs_timer_disarm(&d->opd_statfs_timer); thread->t_flags = SVC_STOPPING; - cfs_waitq_signal(&d->opd_pre_waitq); + wake_up(&d->opd_pre_waitq); - cfs_wait_event(thread->t_ctl_waitq, thread->t_flags & SVC_STOPPED); + wait_event(thread->t_ctl_waitq, thread->t_flags & SVC_STOPPED); EXIT; }