X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;ds=sidebyside;f=lustre%2Fmdt%2Fmdt_lproc.c;h=e483884013d041e23b132ba87030ea75fa0a04ee;hb=580ef453d1d6f901c3227a037137a7db9e600009;hp=1ad735ee103151de4599086e256bb3b04f7b57f8;hpb=8a0a6dbec5537764958d4863e76de249fdd675a4;p=fs%2Flustre-release.git diff --git a/lustre/mdt/mdt_lproc.c b/lustre/mdt/mdt_lproc.c index 1ad735e..e483884 100644 --- a/lustre/mdt/mdt_lproc.c +++ b/lustre/mdt/mdt_lproc.c @@ -531,6 +531,34 @@ static ssize_t commit_on_sharing_store(struct kobject *kobj, } LUSTRE_RW_ATTR(commit_on_sharing); +static ssize_t local_recovery_show(struct kobject *kobj, + struct attribute *attr, char *buf) +{ + struct obd_device *obd = container_of(kobj, struct obd_device, + obd_kset.kobj); + + return scnprintf(buf, PAGE_SIZE, "%u\n", + obd->u.obt.obt_lut->lut_local_recovery); +} + +static ssize_t local_recovery_store(struct kobject *kobj, + struct attribute *attr, + const char *buffer, size_t count) +{ + struct obd_device *obd = container_of(kobj, struct obd_device, + obd_kset.kobj); + bool val; + int rc; + + rc = kstrtobool(buffer, &val); + if (rc) + return rc; + + obd->u.obt.obt_lut->lut_local_recovery = !!val; + return count; +} +LUSTRE_RW_ATTR(local_recovery); + static int mdt_root_squash_seq_show(struct seq_file *m, void *data) { struct obd_device *obd = m->private; @@ -649,6 +677,36 @@ static ssize_t enable_remote_dir_gid_store(struct kobject *kobj, } LUSTRE_RW_ATTR(enable_remote_dir_gid); +static ssize_t enable_chprojid_gid_show(struct kobject *kobj, + struct attribute *attr, char *buf) +{ + struct obd_device *obd = container_of(kobj, struct obd_device, + obd_kset.kobj); + struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev); + + return scnprintf(buf, PAGE_SIZE, "%d\n", + (int)mdt->mdt_enable_chprojid_gid); +} + +static ssize_t enable_chprojid_gid_store(struct kobject *kobj, + struct attribute *attr, + const char *buffer, size_t count) +{ + struct obd_device *obd = container_of(kobj, struct obd_device, + obd_kset.kobj); + struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev); + int val; + int rc; + + rc = kstrtoint(buffer, 0, &val); + if (rc) + return rc; + + mdt->mdt_enable_chprojid_gid = val; + return count; +} +LUSTRE_RW_ATTR(enable_chprojid_gid); + static ssize_t enable_striped_dir_show(struct kobject *kobj, struct attribute *attr, char *buf) { @@ -707,6 +765,65 @@ static ssize_t enable_dir_migration_store(struct kobject *kobj, } LUSTRE_RW_ATTR(enable_dir_migration); +static ssize_t enable_dir_restripe_show(struct kobject *kobj, + struct attribute *attr, char *buf) +{ + struct obd_device *obd = container_of(kobj, struct obd_device, + obd_kset.kobj); + struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev); + + return scnprintf(buf, PAGE_SIZE, "%u\n", mdt->mdt_enable_dir_restripe); +} + +static ssize_t enable_dir_restripe_store(struct kobject *kobj, + struct attribute *attr, + const char *buffer, size_t count) +{ + struct obd_device *obd = container_of(kobj, struct obd_device, + obd_kset.kobj); + struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev); + bool val; + int rc; + + rc = kstrtobool(buffer, &val); + if (rc) + return rc; + + mdt->mdt_enable_dir_restripe = val; + return count; +} +LUSTRE_RW_ATTR(enable_dir_restripe); + +static ssize_t enable_dir_auto_split_show(struct kobject *kobj, + struct attribute *attr, char *buf) +{ + struct obd_device *obd = container_of(kobj, struct obd_device, + obd_kset.kobj); + struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev); + + return scnprintf(buf, PAGE_SIZE, "%u\n", + mdt->mdt_enable_dir_auto_split); +} + +static ssize_t enable_dir_auto_split_store(struct kobject *kobj, + struct attribute *attr, + const char *buffer, size_t count) +{ + struct obd_device *obd = container_of(kobj, struct obd_device, + obd_kset.kobj); + struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev); + bool val; + int rc; + + rc = kstrtobool(buffer, &val); + if (rc) + return rc; + + mdt->mdt_enable_dir_auto_split = val; + return count; +} +LUSTRE_RW_ATTR(enable_dir_auto_split); + /** * Show MDT async commit count. * @@ -786,7 +903,7 @@ static ssize_t sync_count_store(struct kobject *kobj, struct attribute *attr, } LUSTRE_RW_ATTR(sync_count); -static char *dom_open_lock_modes[NUM_DOM_LOCK_ON_OPEN_MODES] = { +static const char *dom_open_lock_modes[NUM_DOM_LOCK_ON_OPEN_MODES] = { [NO_DOM_LOCK_ON_OPEN] = "never", [TRYLOCK_DOM_ON_OPEN] = "trylock", [ALWAYS_DOM_LOCK_ON_OPEN] = "always", @@ -1014,6 +1131,102 @@ static ssize_t enable_remote_rename_store(struct kobject *kobj, } LUSTRE_RW_ATTR(enable_remote_rename); +static ssize_t dir_split_count_show(struct kobject *kobj, + struct attribute *attr, + char *buf) +{ + struct obd_device *obd = container_of(kobj, struct obd_device, + obd_kset.kobj); + struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev); + + return scnprintf(buf, PAGE_SIZE, "%llu\n", + mdt->mdt_restriper.mdr_dir_split_count); +} + +static ssize_t dir_split_count_store(struct kobject *kobj, + struct attribute *attr, + const char *buffer, size_t count) +{ + struct obd_device *obd = container_of(kobj, struct obd_device, + obd_kset.kobj); + struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev); + s64 val; + int rc; + + rc = sysfs_memparse(buffer, count, &val, "B"); + if (rc < 0) + return rc; + + if (val < 0) + return -ERANGE; + + mdt->mdt_restriper.mdr_dir_split_count = val; + + return count; +} +LUSTRE_RW_ATTR(dir_split_count); + +static ssize_t dir_split_delta_show(struct kobject *kobj, + struct attribute *attr, + char *buf) +{ + struct obd_device *obd = container_of(kobj, struct obd_device, + obd_kset.kobj); + struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev); + + return scnprintf(buf, PAGE_SIZE, "%u\n", + mdt->mdt_restriper.mdr_dir_split_delta); +} + +static ssize_t dir_split_delta_store(struct kobject *kobj, + struct attribute *attr, + const char *buffer, size_t count) +{ + struct obd_device *obd = container_of(kobj, struct obd_device, + obd_kset.kobj); + struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev); + u32 val; + int rc; + + rc = kstrtouint(buffer, 0, &val); + if (rc) + return rc; + + mdt->mdt_restriper.mdr_dir_split_delta = val; + + return count; +} +LUSTRE_RW_ATTR(dir_split_delta); + +static ssize_t dir_restripe_nsonly_show(struct kobject *kobj, + struct attribute *attr, char *buf) +{ + struct obd_device *obd = container_of(kobj, struct obd_device, + obd_kset.kobj); + struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev); + + return scnprintf(buf, PAGE_SIZE, "%u\n", mdt->mdt_dir_restripe_nsonly); +} + +static ssize_t dir_restripe_nsonly_store(struct kobject *kobj, + struct attribute *attr, + const char *buffer, size_t count) +{ + struct obd_device *obd = container_of(kobj, struct obd_device, + obd_kset.kobj); + struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev); + bool val; + int rc; + + rc = kstrtobool(buffer, &val); + if (rc) + return rc; + + mdt->mdt_dir_restripe_nsonly = val; + return count; +} +LUSTRE_RW_ATTR(dir_restripe_nsonly); + LPROC_SEQ_FOPS_RO_TYPE(mdt, hash); LPROC_SEQ_FOPS_WR_ONLY(mdt, mds_evict_client); LUSTRE_RW_ATTR(job_cleanup_interval); @@ -1050,10 +1263,14 @@ static struct attribute *mdt_attrs[] = { &lustre_attr_evict_tgt_nids.attr, &lustre_attr_enable_remote_dir.attr, &lustre_attr_enable_remote_dir_gid.attr, + &lustre_attr_enable_chprojid_gid.attr, &lustre_attr_enable_striped_dir.attr, &lustre_attr_enable_dir_migration.attr, + &lustre_attr_enable_dir_restripe.attr, + &lustre_attr_enable_dir_auto_split.attr, &lustre_attr_enable_remote_rename.attr, &lustre_attr_commit_on_sharing.attr, + &lustre_attr_local_recovery.attr, &lustre_attr_async_commit_count.attr, &lustre_attr_sync_count.attr, &lustre_attr_dom_lock.attr, @@ -1062,6 +1279,9 @@ static struct attribute *mdt_attrs[] = { &lustre_attr_hsm_control.attr, &lustre_attr_job_cleanup_interval.attr, &lustre_attr_readonly.attr, + &lustre_attr_dir_split_count.attr, + &lustre_attr_dir_split_delta.attr, + &lustre_attr_dir_restripe_nsonly.attr, NULL, }; @@ -1084,10 +1304,8 @@ static struct lprocfs_vars lprocfs_mdt_obd_vars[] = { }; static int -lprocfs_mdt_print_open_files(struct cfs_hash *hs, struct cfs_hash_bd *bd, - struct hlist_node *hnode, void *v) +lprocfs_mdt_print_open_files(struct obd_export *exp, void *v) { - struct obd_export *exp = cfs_hash_object(hs, hnode); struct seq_file *seq = v; if (exp->exp_lock_hash != NULL) { @@ -1108,12 +1326,9 @@ lprocfs_mdt_print_open_files(struct cfs_hash *hs, struct cfs_hash_bd *bd, static int lprocfs_mdt_open_files_seq_show(struct seq_file *seq, void *v) { struct nid_stat *stats = seq->private; - struct obd_device *obd = stats->nid_obd; - cfs_hash_for_each_key(obd->obd_nid_hash, &stats->nid, - lprocfs_mdt_print_open_files, seq); - - return 0; + return obd_nid_export_for_each(stats->nid_obd, stats->nid, + lprocfs_mdt_print_open_files, seq); } int lprocfs_mdt_open_files_seq_open(struct inode *inode, struct file *file) @@ -1167,6 +1382,7 @@ static const char * const mdt_stats[] = { [LPROC_MDT_IO_READ] = "read_bytes", [LPROC_MDT_IO_WRITE] = "write_bytes", [LPROC_MDT_IO_PUNCH] = "punch", + [LPROC_MDT_MIGRATE] = "migrate", }; void mdt_stats_counter_init(struct lprocfs_stats *stats)