#define DEBUG_SUBSYSTEM S_FILTER
+#include <linux/kthread.h>
#include "ofd_internal.h"
struct ofd_inconsistency_item {
", the old stored PFID "DFID"\n",
ofd_name(ofd), PFID(&fo->ofo_header.loh_fid),
PFID(&oii->oii_pfid), PFID(pfid));
- } else {
+ } else if (rc < 0) {
CDEBUG(D_LFSCK, "%s: fail to fix the OST PFID xattr "
"for "DFID", client given PFID "DFID", local "
"stored PFID "DFID": rc = %d\n",
OBD_ALLOC_PTR(lr);
if (unlikely(lr == NULL))
- GOTO(out, rc = -ENOMEM);
+ GOTO(out_unlocked, rc = -ENOMEM);
lr->lr_event = LE_PAIRS_VERIFY;
lr->lr_active = LFSCK_TYPE_LAYOUT;
GOTO(out, rc = 0);
+out_unlocked:
+ spin_lock(&ofd->ofd_inconsistency_lock);
out:
thread_set_flags(thread, SVC_STOPPED);
wake_up_all(&thread->t_ctl_waitq);
*nr_local = 0;
for (i = 0, j = 0; i < niocount; i++) {
rc = dt_bufs_get(env, ofd_object_child(fo), rnb + i,
- lnb + j, 0, ofd_object_capa(env, fo));
+ lnb + j, 0);
if (unlikely(rc < 0))
GOTO(buf_put, rc);
LASSERT(rc <= PTLRPC_MAX_BRW_PAGES);
}
LASSERT(*nr_local > 0 && *nr_local <= PTLRPC_MAX_BRW_PAGES);
- rc = dt_attr_get(env, ofd_object_child(fo), la,
- ofd_object_capa(env, fo));
+ rc = dt_attr_get(env, ofd_object_child(fo), la);
if (unlikely(rc))
GOTO(buf_put, rc);
*nr_local = 0;
for (i = 0, j = 0; i < obj->ioo_bufcnt; i++) {
rc = dt_bufs_get(env, ofd_object_child(fo),
- rnb + i, lnb + j, 1,
- ofd_object_capa(env, fo));
+ rnb + i, lnb + j, 1);
if (unlikely(rc < 0))
GOTO(err, rc);
LASSERT(rc <= PTLRPC_MAX_BRW_PAGES);
err:
dt_bufs_put(env, ofd_object_child(fo), lnb, *nr_local);
ofd_read_unlock(env, fo);
+ ofd_object_put(env, fo);
/* ofd_grant_prepare_write() was called, so we must commit */
ofd_grant_commit(env, exp, rc);
out:
* \param[in] rnb remote buffers
* \param[in] nr_local number of local buffers
* \param[in] lnb local buffers
- * \param[in] oti request data from OST
- * \param[in] capa capability
*
* \retval 0 on successful prepare
* \retval negative value on error
int ofd_preprw(const struct lu_env *env, int cmd, struct obd_export *exp,
struct obdo *oa, int objcount, struct obd_ioobj *obj,
struct niobuf_remote *rnb, int *nr_local,
- struct niobuf_local *lnb, struct obd_trans_info *oti,
- struct lustre_capa *capa)
+ struct niobuf_local *lnb)
{
struct tgt_session_info *tsi = tgt_ses_info(env);
struct ofd_device *ofd = ofd_exp(exp);
}
if (tgt_ses_req(tsi) == NULL) { /* echo client case */
- LASSERT(oti != NULL);
info = ofd_info_init(env, exp);
- ofd_oti2info(info, oti);
jobid = NULL;
} else {
info = tsi2ofd_info(tsi);
LASSERT(obj->ioo_bufcnt > 0);
if (cmd == OBD_BRW_WRITE) {
- rc = ofd_auth_capa(exp, fid, ostid_seq(&oa->o_oi),
- capa, CAPA_OPC_OSS_WRITE);
- if (rc == 0) {
- la_from_obdo(&info->fti_attr, oa, OBD_MD_FLGETATTR);
- rc = ofd_preprw_write(env, exp, ofd, fid,
- &info->fti_attr, oa, objcount,
- obj, rnb, nr_local, lnb, jobid);
- }
+ la_from_obdo(&info->fti_attr, oa, OBD_MD_FLGETATTR);
+ rc = ofd_preprw_write(env, exp, ofd, fid, &info->fti_attr, oa,
+ objcount, obj, rnb, nr_local, lnb, jobid);
} else if (cmd == OBD_BRW_READ) {
- rc = ofd_auth_capa(exp, fid, ostid_seq(&oa->o_oi),
- capa, CAPA_OPC_OSS_READ);
- if (rc == 0) {
- ofd_grant_prepare_read(env, exp, oa);
- rc = ofd_preprw_read(env, exp, ofd, fid,
- &info->fti_attr, oa,
- obj->ioo_bufcnt, rnb, nr_local,
- lnb, jobid);
- obdo_from_la(oa, &info->fti_attr, LA_ATIME);
- }
+ ofd_grant_prepare_read(env, exp, oa);
+ rc = ofd_preprw_read(env, exp, ofd, fid, &info->fti_attr, oa,
+ obj->ioo_bufcnt, rnb, nr_local, lnb,
+ jobid);
+ obdo_from_la(oa, &info->fti_attr, LA_ATIME);
} else {
CERROR("%s: wrong cmd %d received!\n",
exp->exp_obd->obd_name, cmd);
/* set uid/gid */
if (la->la_valid) {
- rc = dt_attr_set(env, dt_obj, la, th,
- ofd_object_capa(env, ofd_obj));
+ rc = dt_attr_set(env, dt_obj, la, th);
if (rc)
GOTO(out_tx, rc);
}
GOTO(out_tx, rc);
rc = dt_xattr_set(env, dt_obj, &info->fti_buf, XATTR_NAME_FID,
- 0, th, BYPASS_CAPA);
+ 0, th);
if (rc == 0) {
ofd_obj->ofo_pfid.f_seq = le64_to_cpu(ff->ff_parent.f_seq);
ofd_obj->ofo_pfid.f_oid = le32_to_cpu(ff->ff_parent.f_oid);
GOTO(out_stop, rc);
if (la->la_valid) {
- rc = dt_attr_set(env, o, la, th, ofd_object_capa(env, fo));
+ rc = dt_attr_set(env, o, la, th);
if (rc)
GOTO(out_stop, rc);
}
/* get attr to return */
- rc = dt_attr_get(env, o, la, ofd_object_capa(env, fo));
+ rc = dt_attr_get(env, o, la);
out_stop:
/* Force commit to make the just-deleted blocks
* \param[in] rnb remote buffers
* \param[in] npages number of local buffers
* \param[in] lnb local buffers
- * \param[in] oti request data from OST
* \param[in] old_rc result of processing at this point
*
* \retval 0 on successful commit
int ofd_commitrw(const struct lu_env *env, int cmd, struct obd_export *exp,
struct obdo *oa, int objcount, struct obd_ioobj *obj,
struct niobuf_remote *rnb, int npages,
- struct niobuf_local *lnb, struct obd_trans_info *oti,
- int old_rc)
+ struct niobuf_local *lnb, int old_rc)
{
struct ofd_thread_info *info = ofd_info(env);
struct ofd_mod_data *fmd;
rc = -EPROTO;
}
- if (oti != NULL)
- ofd_info2oti(info, oti);
RETURN(rc);
}