#include <lustre_param.h>
#include <lustre_quota.h>
#include <lustre_linkea.h>
+#include <lustre_lfsck.h>
mdl_mode_t mdt_mdl_lock_modes[] = {
[LCK_MINMODE] = MDL_MINMODE,
static const struct lu_object_operations mdt_obj_ops;
/* Slab for MDT object allocation */
-static cfs_mem_cache_t *mdt_object_kmem;
+static struct kmem_cache *mdt_object_kmem;
static struct lu_kmem_descr mdt_caches[] = {
{
PFID(mdt_object_fid(o)), rc);
rc = -EFAULT;
} else {
- int print_limit = min_t(int, CFS_PAGE_SIZE - 128, rc);
+ int print_limit = min_t(int, PAGE_CACHE_SIZE - 128, rc);
if (OBD_FAIL_CHECK(OBD_FAIL_MDS_READLINK_EPROTO))
rc -= 2;
for (i = 0, tmpcount = nob; i < rdpg->rp_npages && tmpcount > 0;
i++, tmpcount -= tmpsize) {
- tmpsize = min_t(int, tmpcount, CFS_PAGE_SIZE);
+ tmpsize = min_t(int, tmpcount, PAGE_CACHE_SIZE);
ptlrpc_prep_bulk_page_pin(desc, rdpg->rp_pages[i], 0, tmpsize);
}
rdpg->rp_attrs |= LUDA_64BITHASH;
rdpg->rp_count = min_t(unsigned int, reqbody->nlink,
exp_max_brw_size(info->mti_exp));
- rdpg->rp_npages = (rdpg->rp_count + CFS_PAGE_SIZE - 1) >>
- CFS_PAGE_SHIFT;
+ rdpg->rp_npages = (rdpg->rp_count + PAGE_CACHE_SIZE - 1) >>
+ PAGE_CACHE_SHIFT;
OBD_ALLOC(rdpg->rp_pages, rdpg->rp_npages * sizeof rdpg->rp_pages[0]);
if (rdpg->rp_pages == NULL)
RETURN(-ENOMEM);
for (i = 0; i < rdpg->rp_npages; ++i) {
- rdpg->rp_pages[i] = cfs_alloc_page(CFS_ALLOC_STD);
+ rdpg->rp_pages[i] = alloc_page(GFP_IOFS);
if (rdpg->rp_pages[i] == NULL)
GOTO(free_rdpg, rc = -ENOMEM);
}
for (i = 0; i < rdpg->rp_npages; i++)
if (rdpg->rp_pages[i] != NULL)
- cfs_free_page(rdpg->rp_pages[i]);
+ __free_page(rdpg->rp_pages[i]);
OBD_FREE(rdpg->rp_pages, rdpg->rp_npages * sizeof rdpg->rp_pages[0]);
if (OBD_FAIL_CHECK(OBD_FAIL_MDS_SENDPAGE))
GOTO(out, rc = -EFAULT);
rdpg->rp_count = min_t(unsigned int, req_ii->ii_count << LU_PAGE_SHIFT,
exp_max_brw_size(info->mti_exp));
- rdpg->rp_npages = (rdpg->rp_count + CFS_PAGE_SIZE -1) >> CFS_PAGE_SHIFT;
+ rdpg->rp_npages = (rdpg->rp_count + PAGE_CACHE_SIZE - 1) >>
+ PAGE_CACHE_SHIFT;
/* allocate pages to store the containers */
OBD_ALLOC(rdpg->rp_pages, rdpg->rp_npages * sizeof(rdpg->rp_pages[0]));
if (rdpg->rp_pages == NULL)
GOTO(out, rc = -ENOMEM);
for (i = 0; i < rdpg->rp_npages; i++) {
- rdpg->rp_pages[i] = cfs_alloc_page(CFS_ALLOC_STD);
+ rdpg->rp_pages[i] = alloc_page(GFP_IOFS);
if (rdpg->rp_pages[i] == NULL)
GOTO(out, rc = -ENOMEM);
}
if (rdpg->rp_pages) {
for (i = 0; i < rdpg->rp_npages; i++)
if (rdpg->rp_pages[i])
- cfs_free_page(rdpg->rp_pages[i]);
+ __free_page(rdpg->rp_pages[i]);
OBD_FREE(rdpg->rp_pages,
rdpg->rp_npages * sizeof(rdpg->rp_pages[0]));
}
/* Get lock from request for possible resent case. */
mdt_intent_fixup_resent(info, *lockp, &new_lock, lhc);
- ldlm_rep->lock_policy_res2 =
- mdt_getattr_name_lock(info, lhc, child_bits, ldlm_rep);
+ rc = mdt_getattr_name_lock(info, lhc, child_bits, ldlm_rep);
+ ldlm_rep->lock_policy_res2 = clear_serious(rc);
if (mdt_get_disposition(ldlm_rep, DISP_LOOKUP_NEG))
ldlm_rep->lock_policy_res2 = 0;
}
fid = &info->mti_tmp_fid2;
- fid_build_from_res_name(fid, &(*lockp)->l_resource->lr_name);
+ fid_extract_from_res_name(fid, &(*lockp)->l_resource->lr_name);
obj = mdt_object_find(info->mti_env, info->mti_mdt, fid);
if (IS_ERR(obj))
RETURN(-EROFS);
}
if (rc == 0 && flv->it_act != NULL) {
- /* execute policy */
- rc = flv->it_act(opc, info, lockp, flags);
+ struct ldlm_reply *rep;
+
+ /* execute policy */
+ rc = flv->it_act(opc, info, lockp, flags);
+
+ /* Check whether the reply has been packed successfully. */
+ if (mdt_info_req(info)->rq_repmsg != NULL) {
+ rep = req_capsule_server_get(info->mti_pill,
+ &RMF_DLM_REP);
+ rep->lock_policy_res2 =
+ ptlrpc_status_hton(rep->lock_policy_res2);
+ }
} else {
rc = -EOPNOTSUPP;
}
static void mdt_stack_pre_fini(const struct lu_env *env,
struct mdt_device *m, struct lu_device *top)
{
- struct obd_device *obd = mdt2obd_dev(m);
+ struct obd_device *obd;
struct lustre_cfg_bufs *bufs;
struct lustre_cfg *lcfg;
struct mdt_thread_info *info;
m->mdt_nosquash_strlen = 0;
}
- next->md_ops->mdo_iocontrol(env, next, OBD_IOC_PAUSE_LFSCK,
- 0, NULL);
+ next->md_ops->mdo_iocontrol(env, next, OBD_IOC_PAUSE_LFSCK, 0, NULL);
+
mdt_seq_fini(env, m);
mdt_fld_fini(env, m);
sptlrpc_rule_set_free(&m->mdt_sptlrpc_rset);
ENTRY;
- OBD_SLAB_ALLOC_PTR_GFP(mo, mdt_object_kmem, CFS_ALLOC_IO);
+ OBD_SLAB_ALLOC_PTR_GFP(mo, mdt_object_kmem, __GFP_IO);
if (mo != NULL) {
struct lu_object *o;
struct lu_object_header *h;
struct mdt_device *mdt = mdt_dev(cdev);
struct lu_device *next = &mdt->mdt_child->md_lu_dev;
struct obd_device *obd = cdev->ld_obd;
+ struct lfsck_start_param lsp;
int rc;
ENTRY;
if (rc)
RETURN(rc);
+ lsp.lsp_start = NULL;
+ lsp.lsp_namespace = mdt->mdt_namespace;
rc = mdt->mdt_child->md_ops->mdo_iocontrol(env, mdt->mdt_child,
OBD_IOC_START_LFSCK,
- 0, NULL);
+ 0, &lsp);
if (rc != 0) {
CWARN("%s: auto trigger paused LFSCK failed: rc = %d\n",
mdt_obd_name(mdt), rc);
if (rc < 0)
return rc;
- linkea_init(ldata);
-
- return 0;
+ return linkea_init(ldata);
}
static int mdt_path_current(struct mdt_thread_info *info,
rc = mdt_links_read(info, mdt_obj, &ldata);
mdt_object_put(info->mti_env, mdt_obj);
if (rc != 0)
- GOTO(out, rc = PTR_ERR(buf));
+ GOTO(out, rc);
leh = buf->lb_buf;
lee = (struct link_ea_entry *)(leh + 1); /* link #0 */
case OBD_IOC_CHANGELOG_CLEAR:
rc = mdt_ioc_child(&env, mdt, cmd, len, karg);
break;
- case OBD_IOC_START_LFSCK:
- case OBD_IOC_STOP_LFSCK: {
+ case OBD_IOC_START_LFSCK: {
struct md_device *next = mdt->mdt_child;
struct obd_ioctl_data *data = karg;
+ struct lfsck_start_param lsp;
if (unlikely(data == NULL)) {
rc = -EINVAL;
break;
}
- rc = next->md_ops->mdo_iocontrol(&env, next, cmd,
- data->ioc_inllen1,
- data->ioc_inlbuf1);
+ lsp.lsp_start = (struct lfsck_start *)(data->ioc_inlbuf1);
+ lsp.lsp_namespace = mdt->mdt_namespace;
+ rc = next->md_ops->mdo_iocontrol(&env, next, cmd, 0, &lsp);
+ break;
+ }
+ case OBD_IOC_STOP_LFSCK: {
+ struct md_device *next = mdt->mdt_child;
+
+ rc = next->md_ops->mdo_iocontrol(&env, next, cmd, 0, NULL);
break;
}
case OBD_IOC_GET_OBJ_VERSION: {
struct lprocfs_static_vars lvars;
int rc;
+ CLASSERT(sizeof("0x0123456789ABCDEF:0x01234567:0x01234567") ==
+ FID_NOBRACE_LEN + 1);
+ CLASSERT(sizeof("[0x0123456789ABCDEF:0x01234567:0x01234567]") ==
+ FID_LEN + 1);
rc = lu_kmem_init(mdt_caches);
if (rc)
return rc;