X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fosd-ldiskfs%2Fosd_lproc.c;h=91fd2ae3ec151bed6739db886dbe04af3e054d36;hb=b24aa65ea63cf665c96950297261b21150fc6be2;hp=c02af7ad5ea2f1ed72536dbe76cbd86acb247d3d;hpb=2d3d4525b1ac6697b5df207400801c4399d20378;p=fs%2Flustre-release.git diff --git a/lustre/osd-ldiskfs/osd_lproc.c b/lustre/osd-ldiskfs/osd_lproc.c index c02af7a..91fd2ae 100644 --- a/lustre/osd-ldiskfs/osd_lproc.c +++ b/lustre/osd-ldiskfs/osd_lproc.c @@ -45,7 +45,7 @@ #include "osd_internal.h" -#ifdef LPROCFS +#ifdef CONFIG_PROC_FS void osd_brw_stats_update(struct osd_device *osd, struct osd_iobuf *iobuf) { @@ -549,7 +549,8 @@ ldiskfs_osd_readcache_seq_write(struct file *file, const char *buffer, } LPROC_SEQ_FOPS(ldiskfs_osd_readcache); -static int ldiskfs_osd_lma_self_repair_seq_show(struct seq_file *m, void *data) +#if LUSTRE_VERSION_CODE < OBD_OCD_VERSION(3, 0, 52, 0) +static int ldiskfs_osd_index_in_idif_seq_show(struct seq_file *m, void *data) { struct osd_device *dev = osd_dt_dev((struct dt_device *)m->private); @@ -557,31 +558,73 @@ static int ldiskfs_osd_lma_self_repair_seq_show(struct seq_file *m, void *data) if (unlikely(dev->od_mnt == NULL)) return -EINPROGRESS; - return seq_printf(m, "%d\n", !!dev->od_lma_self_repair); + return seq_printf(m, "%d\n", (int)(dev->od_index_in_idif)); } static ssize_t -ldiskfs_osd_lma_self_repair_seq_write(struct file *file, const char *buffer, - size_t count, loff_t *off) +ldiskfs_osd_index_in_idif_seq_write(struct file *file, const char *buffer, + size_t count, loff_t *off) { - struct seq_file *m = file->private_data; - struct dt_device *dt = m->private; - struct osd_device *dev = osd_dt_dev(dt); - int val; - int rc; + struct lu_env env; + struct seq_file *m = file->private_data; + struct dt_device *dt = m->private; + struct osd_device *dev = osd_dt_dev(dt); + struct lu_target *tgt; + int val; + int rc; LASSERT(dev != NULL); if (unlikely(dev->od_mnt == NULL)) return -EINPROGRESS; rc = lprocfs_write_helper(buffer, count, &val); - if (rc) + if (rc != 0) + return rc; + + if (dev->od_index_in_idif) { + if (val != 0) + return count; + + LCONSOLE_WARN("%s: OST-index in IDIF has been enabled, " + "it cannot be reverted back.\n", osd_name(dev)); + return -EPERM; + } + + if (val == 0) + return count; + + rc = lu_env_init(&env, LCT_DT_THREAD); + if (rc != 0) + return rc; + + tgt = dev->od_dt_dev.dd_lu_dev.ld_site->ls_tgt; + tgt->lut_lsd.lsd_feature_rocompat |= OBD_ROCOMPAT_IDX_IN_IDIF; + rc = tgt_server_data_update(&env, tgt, 1); + lu_env_fini(&env); + if (rc < 0) return rc; - dev->od_lma_self_repair = !!val; + LCONSOLE_INFO("%s: enable OST-index in IDIF successfully, " + "it cannot be reverted back.\n", osd_name(dev)); + + dev->od_index_in_idif = 1; return count; } -LPROC_SEQ_FOPS(ldiskfs_osd_lma_self_repair); +LPROC_SEQ_FOPS(ldiskfs_osd_index_in_idif); + +int osd_register_proc_index_in_idif(struct osd_device *osd) +{ + struct proc_dir_entry *proc; + + proc = proc_create_data("index_in_idif", 0, osd->od_proc_entry, + &ldiskfs_osd_index_in_idif_fops, + &osd->od_dt_dev); + if (proc == NULL) + return -ENOMEM; + + return 0; +} +#endif LPROC_SEQ_FOPS_RO_TYPE(ldiskfs, dt_blksize); LPROC_SEQ_FOPS_RO_TYPE(ldiskfs, dt_kbytestotal); @@ -590,7 +633,7 @@ LPROC_SEQ_FOPS_RO_TYPE(ldiskfs, dt_kbytesavail); LPROC_SEQ_FOPS_RO_TYPE(ldiskfs, dt_filestotal); LPROC_SEQ_FOPS_RO_TYPE(ldiskfs, dt_filesfree); -struct lprocfs_seq_vars lprocfs_osd_obd_vars[] = { +struct lprocfs_vars lprocfs_osd_obd_vars[] = { { .name = "blocksize", .fops = &ldiskfs_dt_blksize_fops }, { .name = "kbytestotal", @@ -625,12 +668,10 @@ struct lprocfs_seq_vars lprocfs_osd_obd_vars[] = { .fops = &ldiskfs_osd_wcache_fops }, { .name = "readcache_max_filesize", .fops = &ldiskfs_osd_readcache_fops }, - { .name = "lma_self_repair", - .fops = &ldiskfs_osd_lma_self_repair_fops }, { NULL } }; -struct lprocfs_seq_vars lprocfs_osd_module_vars[] = { +struct lprocfs_vars lprocfs_osd_module_vars[] = { { .name = "track_declares_assert", .fops = &ldiskfs_osd_track_declares_assert_fops }, { NULL } @@ -654,9 +695,9 @@ int osd_procfs_init(struct osd_device *osd, const char *name) LASSERT(type != NULL); /* Find the type procroot and add the proc entry for this device */ - osd->od_proc_entry = lprocfs_seq_register(name, type->typ_procroot, - lprocfs_osd_obd_vars, - &osd->od_dt_dev); + osd->od_proc_entry = lprocfs_register(name, type->typ_procroot, + lprocfs_osd_obd_vars, + &osd->od_dt_dev); if (IS_ERR(osd->od_proc_entry)) { rc = PTR_ERR(osd->od_proc_entry); CERROR("Error %d setting up lprocfs for %s\n",