@@ -1188,6 +1188,8 @@ static inline struct md_open_data *obd_mod_alloc(void)
if (atomic_dec_and_test(&(mod)->mod_refcount)) { \
if ((mod)->mod_open_req) \
ptlrpc_req_finished((mod)->mod_open_req); \
+ if ((mod)->mod_close_req) \
+ ptlrpc_req_finished((mod)->mod_close_req); \
kfree(mod); \
} \
})
@@ -1033,12 +1033,16 @@ static int mdc_close(struct obd_export *exp, struct md_op_data *op_data,
if (mod) {
if (rc != 0)
mod->mod_close_req = NULL;
+ if (mod->mod_close_req)
+ ptlrpc_request_addref(mod->mod_close_req);
+
/* Since now, mod is accessed through open_req only,
* thus close req does not keep a reference on mod anymore.
*/
obd_mod_put(mod);
}
*request = req;
+
return rc < 0 ? rc : saved_rc;
}