#include <obd_class.h>
#include "osc_internal.h"
-static int osc_interpret_create(struct ptlrpc_request *req, void *data, int rc)
+static int osc_interpret_create(const struct lu_env *env,
+ struct ptlrpc_request *req, void *data, int rc)
{
struct osc_creator *oscc;
struct ost_body *body = NULL;
oscc = req->rq_async_args.pointer_arg[0];
LASSERT(oscc && (oscc->oscc_obd != LP_POISON));
-
+
spin_lock(&oscc->oscc_lock);
oscc->oscc_flags &= ~OSCC_FLAG_CREATING;
switch (rc) {
case -EAGAIN:
/* valid race delorphan vs create, or somthing after resend */
spin_unlock(&oscc->oscc_lock);
- DEBUG_REQ(D_INODE, req, "Got EGAIN - resend \n");
+ DEBUG_REQ(D_INODE, req, "Got EAGAIN - resend \n");
break;
case -ENOSPC:
- case -EROFS:
+ case -EROFS:
case -EFBIG: {
oscc->oscc_flags |= OSCC_FLAG_NOSPC;
if (body && rc == -ENOSPC) {
break;
}
case -EIO: {
- /* filter always set body->oa.o_id as the last_id
+ /* filter always set body->oa.o_id as the last_id
* of filter (see filter_handle_precreate for detail)*/
if (body && body->oa.o_id > oscc->oscc_last_id)
oscc->oscc_last_id = body->oa.o_id;
request->rq_async_args.pointer_arg[0] = oscc;
request->rq_interpret_reply = osc_interpret_create;
- ptlrpcd_add_req(request);
+ ptlrpcd_add_req(request, PSCOPE_OTHER);
RETURN(0);
}
if (imp != NULL && imp->imp_deactive)
RETURN(1000);
+ if (oscc_recovering(oscc))
+ RETURN(2);
+
if (oscc->oscc_last_id < oscc->oscc_next_id) {
spin_lock(&oscc->oscc_lock);
if (oscc->oscc_flags & OSCC_FLAG_NOSPC) {
spin_unlock(&oscc->oscc_lock);
RETURN(1);
}
- if (oscc->oscc_flags & OSCC_FLAG_RECOVERING) {
- spin_unlock(&oscc->oscc_lock);
- RETURN(2);
- }
-
if (oscc->oscc_flags & OSCC_FLAG_CREATING) {
spin_unlock(&oscc->oscc_lock);
RETURN(1);