#define D_MGS D_CONFIG
#include <obd.h>
-#include <obd_lov.h>
#include <lustre_param.h>
#include <lustre_sec.h>
#include <lustre_quota.h>
RETURN(0);
}
+/* This is only called during replace_nids */
static int only_mgs_is_running(struct obd_device *mgs_obd)
{
/* TDB: Is global variable with devices count exists? */
int num_devices = get_devices_count();
+ int num_exports = 0;
+ struct obd_export *exp;
+
+ spin_lock(&mgs_obd->obd_dev_lock);
+ list_for_each_entry(exp, &mgs_obd->obd_exports, exp_obd_chain) {
+ /* skip self export */
+ if (exp == mgs_obd->obd_self_export)
+ continue;
+ if (exp_connect_flags(exp) & OBD_CONNECT_MDS_MDS)
+ continue;
+
+ ++num_exports;
+
+ CERROR("%s: node %s still connected during replace_nids "
+ "connect_flags:%llx\n",
+ mgs_obd->obd_name,
+ libcfs_nid2str(exp->exp_nid_stats->nid),
+ exp_connect_flags(exp));
+
+ }
+ spin_unlock(&mgs_obd->obd_dev_lock);
+
/* osd, MGS and MGC + self_export
- (wc -l /proc/fs/lustre/devices <= 2) && (num_exports <= 2) */
- return (num_devices <= 3) && (mgs_obd->obd_num_exports <= 2);
+ (wc -l /proc/fs/lustre/devices <= 2) && (non self exports == 0) */
+ return (num_devices <= 3) && (num_exports == 0);
}
static int name_create_mdt(char **logname, char *fsname, int i)
/* Defaults. Can be changed later by lcfg config_param */
lovdesc->ld_default_stripe_count = 1;
lovdesc->ld_pattern = LOV_PATTERN_RAID0;
- lovdesc->ld_default_stripe_size = 1024 * 1024;
+ lovdesc->ld_default_stripe_size = LOV_DESC_STRIPE_SIZE_DEFAULT;
lovdesc->ld_default_stripe_offset = -1;
- lovdesc->ld_qos_maxage = QOS_DEFAULT_MAXAGE;
+ lovdesc->ld_qos_maxage = LOV_DESC_QOS_MAXAGE_DEFAULT;
sprintf((char*)lovdesc->ld_uuid.uuid, "%s_UUID", lovname);
/* can these be the same? */
uuid = (char *)lovdesc->ld_uuid.uuid;
if (rc == 0 && !mgs_parse_devname(devname, NULL, &index)) {
/* param related to llite isn't allowed to set by OST or MDT */
if (rc == 0 && strncmp(param, PARAM_LLITE,
- sizeof(PARAM_LLITE)) == 0)
+ sizeof(PARAM_LLITE) - 1) == 0)
RETURN(-EINVAL);
} else {
/* assume devname is the fsname */
enum lcfg_command_type cmd, const char *nodemap_name,
const char *param)
{
- int rc = 0;
+ lnet_nid_t nid[2];
+ __u32 idmap[2];
+ bool bool_switch;
+ __u32 int_id;
+ int rc = 0;
ENTRY;
switch (cmd) {
case LCFG_NODEMAP_DEL:
rc = nodemap_del(nodemap_name);
break;
+ case LCFG_NODEMAP_ADD_RANGE:
+ rc = nodemap_parse_range(param, nid);
+ if (rc != 0)
+ break;
+ rc = nodemap_add_range(nodemap_name, nid);
+ break;
+ case LCFG_NODEMAP_DEL_RANGE:
+ rc = nodemap_parse_range(param, nid);
+ if (rc != 0)
+ break;
+ rc = nodemap_del_range(nodemap_name, nid);
+ break;
+ case LCFG_NODEMAP_ADMIN:
+ bool_switch = simple_strtoul(param, NULL, 10);
+ rc = nodemap_set_allow_root(nodemap_name, bool_switch);
+ break;
+ case LCFG_NODEMAP_TRUSTED:
+ bool_switch = simple_strtoul(param, NULL, 10);
+ rc = nodemap_set_trust_client_ids(nodemap_name, bool_switch);
+ break;
+ case LCFG_NODEMAP_SQUASH_UID:
+ int_id = simple_strtoul(param, NULL, 10);
+ rc = nodemap_set_squash_uid(nodemap_name, int_id);
+ break;
+ case LCFG_NODEMAP_SQUASH_GID:
+ int_id = simple_strtoul(param, NULL, 10);
+ rc = nodemap_set_squash_gid(nodemap_name, int_id);
+ break;
+ case LCFG_NODEMAP_ADD_UIDMAP:
+ case LCFG_NODEMAP_ADD_GIDMAP:
+ rc = nodemap_parse_idmap(param, idmap);
+ if (rc != 0)
+ break;
+ if (cmd == LCFG_NODEMAP_ADD_UIDMAP)
+ rc = nodemap_add_idmap(nodemap_name, NODEMAP_UID,
+ idmap);
+ else
+ rc = nodemap_add_idmap(nodemap_name, NODEMAP_GID,
+ idmap);
+ break;
+ case LCFG_NODEMAP_DEL_UIDMAP:
+ case LCFG_NODEMAP_DEL_GIDMAP:
+ rc = nodemap_parse_idmap(param, idmap);
+ if (rc != 0)
+ break;
+ if (cmd == LCFG_NODEMAP_DEL_UIDMAP)
+ rc = nodemap_del_idmap(nodemap_name, NODEMAP_UID,
+ idmap);
+ else
+ rc = nodemap_del_idmap(nodemap_name, NODEMAP_GID,
+ idmap);
+ break;
default:
rc = -EINVAL;
}