+LUSTRE_RW_ATTR(maxage);
+
+/**
+ * Show current precreation status: output 0 means success, otherwise negative
+ * number is printed
+ *
+ * \param[in] m seq_file handle
+ * \param[in] data unused for single entry
+ * \retval 0 on success
+ * \retval negative number on error
+ */
+static ssize_t prealloc_status_show(struct kobject *kobj,
+ struct attribute *attr,
+ char *buf)
+{
+ struct dt_device *dt = container_of(kobj, struct dt_device,
+ dd_kobj);
+ struct osp_device *osp = dt2osp_dev(dt);
+
+ if (!osp->opd_pre)
+ return -EINVAL;
+
+ return sprintf(buf, "%d\n", osp->opd_pre_status);
+}
+LUSTRE_RO_ATTR(prealloc_status);
+
+/**
+ * Show the number of RPCs in processing (including uncommitted by OST) plus
+ * changes to sync, i.e. this is the total number of changes OST needs to apply
+ * and commit.
+ *
+ * This counter is used to determine if OST has space returned. A zero value
+ * indicates that OST storage space consumed by destroyed objects has been freed
+ * on disk, the associated llog records have been cleared, and no synchronous
+ * RPC are being processed.
+ *
+ * \param[in] m seq_file handle
+ * \param[in] data unused for single entry
+ * \retval 0 on success
+ * \retval negative number on error
+ */
+static ssize_t destroys_in_flight_show(struct kobject *kobj,
+ struct attribute *attr,
+ char *buf)
+{
+ struct dt_device *dt = container_of(kobj, struct dt_device,
+ dd_kobj);
+ struct osp_device *osp = dt2osp_dev(dt);
+
+ return sprintf(buf, "%u\n",
+ atomic_read(&osp->opd_sync_rpcs_in_progress) +
+ atomic_read(&osp->opd_sync_changes));
+}
+LUSTRE_RO_ATTR(destroys_in_flight);
+
+/**
+ * Show changes synced from previous mount
+ *
+ * \param[in] m seq_file handle
+ * \param[in] data unused for single entry
+ * \retval 0 on success
+ * \retval negative number on error
+ */
+static ssize_t old_sync_processed_show(struct kobject *kobj,
+ struct attribute *attr,
+ char *buf)
+{
+ struct dt_device *dt = container_of(kobj, struct dt_device,
+ dd_kobj);
+ struct osp_device *osp = dt2osp_dev(dt);
+
+ return sprintf(buf, "%d\n", osp->opd_sync_prev_done);
+}
+LUSTRE_RO_ATTR(old_sync_processed);
+
+/**
+ * Show maximum number of RPCs in flight
+ *
+ * \param[in] m seq_file handle
+ * \param[in] data unused for single entry
+ * \retval 0 on success
+ * \retval negative number on error
+ */
+static ssize_t lfsck_max_rpcs_in_flight_show(struct kobject *kobj,
+ struct attribute *attr,
+ char *buf)
+{
+ struct dt_device *dt = container_of(kobj, struct dt_device,
+ dd_kobj);
+ struct lu_device *lu = dt2lu_dev(dt);
+ struct obd_device *obd = lu->ld_obd;
+ u32 max;
+
+ max = obd_get_max_rpcs_in_flight(&obd->u.cli);
+ return sprintf(buf, "%u\n", max);
+}
+
+/**
+ * Change maximum number of RPCs in flight
+ *
+ * \param[in] file proc file
+ * \param[in] buffer string which represents maximum number of RPCs in flight
+ * \param[in] count \a buffer length
+ * \param[in] off unused for single entry
+ * \retval \a count on success
+ * \retval negative number on error
+ */
+static ssize_t lfsck_max_rpcs_in_flight_store(struct kobject *kobj,
+ struct attribute *attr,
+ const char *buffer,
+ size_t count)
+{
+ struct dt_device *dt = container_of(kobj, struct dt_device,
+ dd_kobj);
+ struct lu_device *lu = dt2lu_dev(dt);
+ struct obd_device *obd = lu->ld_obd;
+ unsigned int val;
+ int rc;
+
+ rc = kstrtouint(buffer, 0, &val);
+ if (rc)
+ return rc;
+
+ rc = obd_set_max_rpcs_in_flight(&obd->u.cli, val);
+ return rc ? rc : count;
+}
+LUSTRE_RW_ATTR(lfsck_max_rpcs_in_flight);
+
+ssize_t ping_show(struct kobject *kobj, struct attribute *attr,
+ char *buffer)
+{
+ struct dt_device *dt = container_of(kobj, struct dt_device,
+ dd_kobj);
+ struct lu_device *lu = dt2lu_dev(dt);
+ struct obd_device *obd = lu->ld_obd;
+ int rc;
+
+ LPROCFS_CLIMP_CHECK(obd);
+ rc = ptlrpc_obd_ping(obd);
+ LPROCFS_CLIMP_EXIT(obd);
+
+ return rc;
+}
+LUSTRE_RO_ATTR(ping);