-/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
- * vim:expandtab:shiftwidth=8:tabstop=8:
- *
+/*
* GPL HEADER START
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
/*
* Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
+ *
+ * Copyright (c) 2011, 2012, Whamcloud, Inc.
*/
/*
* This file is part of Lustre, http://www.lustre.org/
/* workaround - New target not in objids file; increase mdsize */
/* ld_tgt_count is used as the max index everywhere, despite its name. */
if (data[off] == 0) {
+ __u32 max_easize;
__u32 stripes;
+ max_easize = mds->mds_obt.obt_osd_properties.osd_max_ea_size;
data[off] = 1;
mds->mds_lov_objid_count++;
- stripes = min_t(__u32, LOV_MAX_STRIPE_COUNT,
- mds->mds_lov_objid_count);
+ stripes = min(lov_mds_md_stripecnt(max_easize, LOV_MAGIC_V3),
+ mds->mds_lov_objid_count);
mds->mds_max_mdsize = lov_mds_md_size(stripes, LOV_MAGIC_V3);
mds->mds_max_cookiesize = stripes * sizeof(struct llog_cookie);
int mds_lov_prepare_objids(struct obd_device *obd, struct lov_mds_md *lmm)
{
struct lov_ost_data_v1 *data;
- __u32 count;
+ __u16 count;
int rc = 0;
__u32 j;
switch (le32_to_cpu(lmm->lmm_magic)) {
case LOV_MAGIC_V1:
- count = le32_to_cpu(((struct lov_mds_md_v1*)lmm)->lmm_stripe_count);
+ count = le16_to_cpu(((struct lov_mds_md_v1*)lmm)->lmm_stripe_count);
data = &(((struct lov_mds_md_v1*)lmm)->lmm_objects[0]);
break;
case LOV_MAGIC_V3:
- count = le32_to_cpu(((struct lov_mds_md_v3*)lmm)->lmm_stripe_count);
+ count = le16_to_cpu(((struct lov_mds_md_v3*)lmm)->lmm_stripe_count);
data = &(((struct lov_mds_md_v3*)lmm)->lmm_objects[0]);
break;
default:
}
- cfs_mutex_down(&obd->obd_dev_sem);
+ cfs_mutex_lock(&obd->obd_dev_mutex);
for (j = 0; j < count; j++) {
__u32 i = le32_to_cpu(data[j].l_ost_idx);
if (mds_lov_update_max_ost(&obd->u.mds, i)) {
break;
}
}
- cfs_mutex_up(&obd->obd_dev_sem);
+ cfs_mutex_unlock(&obd->obd_dev_mutex);
RETURN(rc);
}
* after use
*/
static int mds_log_lost_precreated(struct obd_device *obd,
- struct lov_stripe_md **lsmp, int *stripes,
+ struct lov_stripe_md **lsmp, __u16 *stripes,
obd_id id, obd_count count, int idx)
{
struct lov_stripe_md *lsm = *lsmp;
int j;
struct lov_ost_data_v1 *obj;
struct lov_stripe_md *lsm = NULL;
- int stripes = 0;
+ __u16 stripes = 0;
int count;
ENTRY;
switch (le32_to_cpu(lmm->lmm_magic)) {
case LOV_MAGIC_V1:
- count = le32_to_cpu(((struct lov_mds_md_v1*)lmm)->lmm_stripe_count);
+ count = le16_to_cpu(((struct lov_mds_md_v1*)lmm)->lmm_stripe_count);
obj = ((struct lov_mds_md_v1*)lmm)->lmm_objects;
break;
case LOV_MAGIC_V3:
- count = le32_to_cpu(((struct lov_mds_md_v3*)lmm)->lmm_stripe_count);
+ count = le16_to_cpu(((struct lov_mds_md_v3*)lmm)->lmm_stripe_count);
obj = ((struct lov_mds_md_v3*)lmm)->lmm_objects;
break;
default:
static int mds_lov_update_from_read(struct mds_obd *mds, obd_id *data,
__u32 count)
{
- __u32 i;
- __u32 stripes;
+ __u32 max_easize = mds->mds_obt.obt_osd_properties.osd_max_ea_size;
+ __u32 i, stripes;
for (i = 0; i < count; i++) {
if (data[i] == 0)
mds->mds_lov_objid_count++;
}
- stripes = min_t(__u32, LOV_MAX_STRIPE_COUNT,
+ stripes = min(lov_mds_md_stripecnt(max_easize, LOV_MAGIC_V3),
mds->mds_lov_objid_count);
mds->mds_max_mdsize = lov_mds_md_size(stripes, LOV_MAGIC_V3);
size = sizeof(lastid);
lastid.idx = idx;
lastid.data = &data[off];
- rc = obd_get_info(lov_exp, sizeof(KEY_LAST_ID), KEY_LAST_ID,
- &size, &lastid, NULL);
+ rc = obd_get_info(NULL, lov_exp, sizeof(KEY_LAST_ID),
+ KEY_LAST_ID, &size, &lastid, NULL);
if (rc)
GOTO(out, rc);
if (ost_uuid != NULL)
oti.oti_ost_uuid = ost_uuid;
- rc = obd_create(mds->mds_lov_exp, &oa, &empty_ea, &oti);
+ rc = obd_create(NULL, mds->mds_lov_exp, &oa, &empty_ea, &oti);
RETURN(rc);
}
info.idx = idx;
info.data = id;
- rc = obd_set_info_async(mds->mds_lov_exp, sizeof(KEY_NEXT_ID),
+ rc = obd_set_info_async(NULL, mds->mds_lov_exp, sizeof(KEY_NEXT_ID),
KEY_NEXT_ID, sizeof(info), &info, NULL);
if (rc)
CERROR ("%s: mds_lov_set_nextid failed (%d)\n",
if (!ld)
RETURN(-ENOMEM);
- rc = obd_get_info(mds->mds_lov_exp, sizeof(KEY_LOVDESC), KEY_LOVDESC,
- &valsize, ld, NULL);
+ rc = obd_get_info(NULL, mds->mds_lov_exp, sizeof(KEY_LOVDESC),
+ KEY_LOVDESC, &valsize, ld, NULL);
if (rc)
GOTO(out, rc);
CDEBUG(D_CONFIG, "updated lov_desc, tgt_count: %d - idx %d / uuid %s\n",
mds->mds_lov_desc.ld_tgt_count, idx, uuid->uuid);
- cfs_mutex_down(&obd->obd_dev_sem);
+ cfs_mutex_lock(&obd->obd_dev_mutex);
rc = mds_lov_update_max_ost(mds, idx);
- cfs_mutex_up(&obd->obd_dev_sem);
+ cfs_mutex_unlock(&obd->obd_dev_mutex);
if (rc != 0)
GOTO(out, rc );
RETURN(-ENOTCONN);
}
- cfs_mutex_down(&obd->obd_dev_sem);
+ cfs_mutex_lock(&obd->obd_dev_mutex);
rc = mds_lov_read_objids(obd);
- cfs_mutex_up(&obd->obd_dev_sem);
+ cfs_mutex_unlock(&obd->obd_dev_mutex);
if (rc) {
CERROR("cannot read %s: rc = %d\n", "lov_objids", rc);
GOTO(err_exit, rc);
data->ocd_connect_flags = OBD_CONNECT_VERSION | OBD_CONNECT_INDEX |
OBD_CONNECT_REQPORTAL | OBD_CONNECT_QUOTA64 |
- OBD_CONNECT_OSS_CAPA | OBD_CONNECT_FID |
- OBD_CONNECT_BRW_SIZE | OBD_CONNECT_CKSUM |
+ OBD_CONNECT_OSS_CAPA | OBD_CONNECT_FULL20 |
OBD_CONNECT_CHANGE_QS | OBD_CONNECT_AT |
OBD_CONNECT_MDS | OBD_CONNECT_SKIP_ORPHAN |
- OBD_CONNECT_SOM | OBD_CONNECT_FULL20;
+ OBD_CONNECT_SOM | OBD_CONNECT_MAX_EASIZE;
#ifdef HAVE_LRU_RESIZE_SUPPORT
data->ocd_connect_flags |= OBD_CONNECT_LRU_RESIZE;
#endif
data->ocd_version = LUSTRE_VERSION_CODE;
data->ocd_group = mdt_to_obd_objseq(mds->mds_id);
+ data->ocd_max_easize = mds->mds_obt.obt_osd_properties.osd_max_ea_size;
+
/* send max bytes per rpc */
data->ocd_brw_size = PTLRPC_MAX_BRW_PAGES << CFS_PAGE_SHIFT;
/* send the list of supported checksum types */
- data->ocd_cksum_types = OBD_CKSUM_ALL;
+ data->ocd_cksum_types = cksum_types_supported_client();
/* NB: lov_connect() needs to fill in .ocd_index for each OST */
rc = obd_connect(NULL, &mds->mds_lov_exp, mds->mds_lov_obd, &obd->obd_uuid, data, NULL);
OBD_FREE(data, sizeof(*data));
DEBUG_CAPA_KEY(D_SEC, key, "propagate");
info.capa = key;
- rc = obd_set_info_async(mds->mds_lov_exp, sizeof(KEY_CAPA_KEY),
- KEY_CAPA_KEY, sizeof(info), &info, NULL);
+ rc = obd_set_info_async(NULL, mds->mds_lov_exp,
+ sizeof(KEY_CAPA_KEY), KEY_CAPA_KEY,
+ sizeof(info), &info, NULL);
if (rc) {
DEBUG_CAPA_KEY(D_ERROR, key,
"propagate failed (rc = %d) for", rc);
mgi.group = mdt_to_obd_objseq(mds->mds_id);
mgi.uuid = uuid;
- rc = obd_set_info_async(mds->mds_lov_exp, sizeof(KEY_MDS_CONN),
+ rc = obd_set_info_async(NULL, mds->mds_lov_exp, sizeof(KEY_MDS_CONN),
KEY_MDS_CONN, sizeof(mgi), &mgi, NULL);
if (rc != 0)
GOTO(out, rc);
#endif
EXIT;
out:
- cfs_up_read(&mds->mds_notify_lock);
if (rc) {
/* Deactivate it for safety */
CERROR("%s sync failed %d, deactivating\n", obd_uuid2str(uuid),
obd_notify(mds->mds_lov_obd, watched,
OBD_NOTIFY_INACTIVE, NULL);
}
+ cfs_up_read(&mds->mds_notify_lock);
class_decref(obd, "mds_lov_synchronize", obd);
return rc;
if (ev != OBD_NOTIFY_SYNC) {
/* Synchronize in the background */
- rc = cfs_kernel_thread(mds_lov_synchronize, mlsi,
- CLONE_VM | CLONE_FILES);
+ rc = cfs_create_thread(mds_lov_synchronize, mlsi,
+ CFS_DAEMON_FLAGS);
if (rc < 0) {
CERROR("%s: error starting mds_lov_synchronize: %d\n",
obd->obd_name, rc);
switch (ev) {
/* We only handle these: */
case OBD_NOTIFY_CREATE:
- CWARN("MDS %s: add target %s\n",obd->obd_name,
- obd_uuid2str(&watched->u.cli.cl_target_uuid));
+ CDEBUG(D_CONFIG, "%s: add target %s\n", obd->obd_name,
+ obd_uuid2str(&watched->u.cli.cl_target_uuid));
/* We still have to fix the lov descriptor for ost's */
LASSERT(data);
rc = mds_lov_update_desc(obd, *(__u32 *)data,
}
if (obd->obd_recovering) {
- CWARN("MDS %s: in recovery, not resetting orphans on %s\n",
- obd->obd_name,
- obd_uuid2str(&watched->u.cli.cl_target_uuid));
+ CDEBUG(D_CONFIG, "%s: Is in recovery, "
+ "not resetting orphans on %s\n",
+ obd->obd_name,
+ obd_uuid2str(&watched->u.cli.cl_target_uuid));
/* We still have to fix the lov descriptor for ost's added
after the mdt in the config log. They didn't make it into
mds_lov_connect. */