static ssize_t ldiskfs_osd_full_scrub_threshold_rate_seq_write(struct file *file, const char __user *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 rc; __s64 val; LASSERT(dev != NULL); if (unlikely(dev->od_mnt == NULL)) return -EINPROGRESS; rc = lprocfs_str_to_s64(buffer, count, &val); if (rc != 0) return rc; if (val < 0) return -EINVAL; dev->od_full_scrub_threshold_rate = val; return count; }
static int lprocfs_osd_rd_fstype(char *page, char **start, off_t off, int count, int *eof, void *data) { struct osd_device *osd = osd_dt_dev(data); LASSERT(osd != NULL); return snprintf(page, count, "ldiskfs\n"); }
static int lprocfs_osd_rd_iused_est(char *page, char **start, off_t off, int count, int *eof, void *data) { struct osd_device *osd = osd_dt_dev((struct dt_device *)data); LASSERT(osd != NULL); return snprintf(page, count, "%d\n", osd->od_quota_iused_est); }
static int lprocfs_osd_rd_mntdev(char *page, char **start, off_t off, int count, int *eof, void *data) { struct osd_device *osd = osd_dt_dev((struct dt_device *)data); LASSERT(osd != NULL); *eof = 1; return snprintf(page, count, "%s\n", osd->od_mntdev); }
static int lprocfs_osd_rd_wcache(char *page, char **start, off_t off, int count, int *eof, void *data) { struct osd_device *osd = osd_dt_dev(data); LASSERT(osd != NULL); if (unlikely(osd->od_mnt == NULL)) return -EINPROGRESS; return snprintf(page, count, "%u\n", osd->od_writethrough_cache); }
static int lprocfs_osd_rd_oi_scrub(char *page, char **start, off_t off, int count, int *eof, void *data) { struct osd_device *dev = osd_dt_dev(data); LASSERT(dev != NULL); if (unlikely(dev->od_mnt == NULL)) return -EINPROGRESS; *eof = 1; return osd_scrub_dump(dev, page, count); }
static int lprocfs_osd_rd_auto_scrub(char *page, char **start, off_t off, int count, int *eof, void *data) { struct osd_device *dev = osd_dt_dev(data); LASSERT(dev != NULL); if (unlikely(dev->od_mnt == NULL)) return -EINPROGRESS; *eof = 1; return snprintf(page, count, "%d\n", !dev->od_noscrub); }
int lprocfs_osd_rd_readcache(char *page, char **start, off_t off, int count, int *eof, void *data) { struct osd_device *osd = osd_dt_dev(data); int rc; LASSERT(osd != NULL); if (unlikely(osd->od_mnt == NULL)) return -EINPROGRESS; rc = snprintf(page, count, LPU64"\n", osd->od_readcache_max_filesize); return rc; }
static ssize_t ldiskfs_osd_index_in_idif_seq_write(struct file *file, const char __user *buffer, size_t count, loff_t *off) { 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; __s64 val; int rc; LASSERT(dev != NULL); if (unlikely(dev->od_mnt == NULL)) return -EINPROGRESS; rc = lprocfs_str_to_s64(buffer, count, &val); 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; 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; }
static int lprocfs_osd_wr_iused_est(struct file *file, const char *buffer, unsigned long count, void *data) { struct osd_device *osd = osd_dt_dev((struct dt_device *)data); int rc, val; LASSERT(osd != NULL); rc = lprocfs_write_helper(buffer, count, &val); if (rc) return rc; osd->od_quota_iused_est = !!val; return count; }
static int lprocfs_osd_wr_wcache(struct file *file, const char *buffer, unsigned long count, void *data) { struct osd_device *osd = osd_dt_dev(data); int val, rc; LASSERT(osd != NULL); if (unlikely(osd->od_mnt == NULL)) return -EINPROGRESS; rc = lprocfs_write_helper(buffer, count, &val); if (rc) return rc; osd->od_writethrough_cache = !!val; return count; }
static int lprocfs_osd_wr_auto_scrub(struct file *file, const char *buffer, unsigned long count, void *data) { struct osd_device *dev = osd_dt_dev(data); int val, rc; LASSERT(dev != NULL); if (unlikely(dev->od_mnt == NULL)) return -EINPROGRESS; rc = lprocfs_write_helper(buffer, count, &val); if (rc) return rc; dev->od_noscrub = !val; return count; }
static ssize_t zfs_osd_iused_est_seq_write(struct file *file, const char __user *buffer, size_t count, loff_t *off) { struct seq_file *m = file->private_data; struct dt_device *dt = m->private; struct osd_device *osd = osd_dt_dev(dt); int rc, val; LASSERT(osd != NULL); rc = lprocfs_write_helper(buffer, count, &val); if (rc) return rc; osd->od_quota_iused_est = !!val; return count; }
int lprocfs_osd_wr_readcache(struct file *file, const char *buffer, unsigned long count, void *data) { struct osd_device *osd = osd_dt_dev(data); __u64 val; int rc; LASSERT(osd != NULL); if (unlikely(osd->od_mnt == NULL)) return -EINPROGRESS; rc = lprocfs_write_u64_helper(buffer, count, &val); if (rc) return rc; osd->od_readcache_max_filesize = val > OSD_MAX_CACHE_SIZE ? OSD_MAX_CACHE_SIZE : val; return count; }
static ssize_t ldiskfs_osd_auto_scrub_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, rc; LASSERT(dev != NULL); if (unlikely(dev->od_mnt == NULL)) return -EINPROGRESS; rc = lprocfs_write_helper(buffer, count, &val); if (rc) return rc; dev->od_noscrub = !val; return count; }
static ssize_t ldiskfs_osd_wcache_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 *osd = osd_dt_dev(dt); int val, rc; LASSERT(osd != NULL); if (unlikely(osd->od_mnt == NULL)) return -EINPROGRESS; rc = lprocfs_write_helper(buffer, count, &val); if (rc) return rc; osd->od_writethrough_cache = !!val; return count; }
static int lprocfs_osd_wr_force_sync(struct file *file, const char *buffer, unsigned long count, void *data) { struct osd_device *osd = osd_dt_dev(data); struct dt_device *dt = data; struct lu_env env; int rc; LASSERT(osd != NULL); if (unlikely(osd->od_mnt == NULL)) return -EINPROGRESS; rc = lu_env_init(&env, LCT_LOCAL); if (rc) return rc; rc = dt_sync(&env, dt); lu_env_fini(&env); return rc == 0 ? count : rc; }
ssize_t ldiskfs_osd_readcache_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 *osd = osd_dt_dev(dt); __u64 val; int rc; LASSERT(osd != NULL); if (unlikely(osd->od_mnt == NULL)) return -EINPROGRESS; rc = lprocfs_write_u64_helper(buffer, count, &val); if (rc) return rc; osd->od_readcache_max_filesize = val > OSD_MAX_CACHE_SIZE ? OSD_MAX_CACHE_SIZE : val; return count; }
static ssize_t lprocfs_osd_force_sync_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 *osd = osd_dt_dev(dt); struct lu_env env; int rc; LASSERT(osd != NULL); if (unlikely(osd->od_mnt == NULL)) return -EINPROGRESS; rc = lu_env_init(&env, LCT_LOCAL); if (rc) return rc; rc = dt_sync(&env, dt); lu_env_fini(&env); return rc == 0 ? count : rc; }
static ssize_t ldiskfs_osd_readcache_seq_write(struct file *file, const char __user *buffer, size_t count, loff_t *off) { struct seq_file *m = file->private_data; struct dt_device *dt = m->private; struct osd_device *osd = osd_dt_dev(dt); __s64 val; int rc; LASSERT(osd != NULL); if (unlikely(osd->od_mnt == NULL)) return -EINPROGRESS; rc = lprocfs_str_with_units_to_s64(buffer, count, &val, '1'); if (rc) return rc; if (val < 0) return -ERANGE; osd->od_readcache_max_filesize = val > OSD_MAX_CACHE_SIZE ? OSD_MAX_CACHE_SIZE : val; return count; }