-int mds_log_op_unlink(struct obd_device *obd, struct inode *inode,
- struct lov_mds_md *lmm, int lmm_size,
- struct llog_cookie *logcookies, int cookies_size,
- struct llog_create_locks **res)
-{
- struct mds_obd *mds = &obd->u.mds;
- struct lov_stripe_md *lsm = NULL;
- struct llog_ctxt *ctxt;
- struct llog_create_locks *lcl = NULL;
- int rc, size = 0,offset = offsetof(struct llog_create_locks, lcl_locks);
- int lock_count = 0;
- ENTRY;
-
- if (IS_ERR(mds->mds_lov_obd))
- RETURN(PTR_ERR(mds->mds_lov_obd));
-
- RETURN(0);
-
- rc = obd_unpackmd(mds->mds_lov_exp, &lsm, lmm, lmm_size);
- if (rc < 0)
- RETURN(rc);
-
- if (res != NULL) {
- size = offset +
- sizeof(struct rw_semaphore *) * lsm->lsm_stripe_count;
- OBD_ALLOC(lcl, size);
- if (lcl == NULL)
- RETURN(-ENOMEM);
-
- lcl->lcl_count = lsm->lsm_stripe_count;
- *res = lcl;
- }
-
- ctxt = llog_get_context(&obd->obd_llogs, LLOG_UNLINK_ORIG_CTXT);
- rc = llog_add(ctxt, NULL, lsm, logcookies,
- cookies_size / sizeof(struct llog_cookie), NULL,
- res ? &lcl->lcl_locks[0] : NULL, &lock_count);
-
- obd_free_memmd(mds->mds_lov_exp, &lsm);
-
- if (res && (rc <= 0 || lock_count == 0)) {
- OBD_FREE(lcl, size);
- *res = NULL;
- }
-
- RETURN(rc);
-}
-
-static struct llog_operations mds_unlink_orig_logops = {