/**
* Append a space separated list of current set flags to str.
*/
-#define flag2seqstr(flag) \
+#define flag2str(flag) \
do { \
if (imp->imp_##flag) { \
seq_printf(m, "%s" #flag, first ? "" : ", "); \
first = false; \
} \
} while (0)
-static void obd_import_flags2seqstr(struct obd_import *imp, struct seq_file *m)
+static void obd_import_flags2str(struct obd_import *imp, struct seq_file *m)
{
bool first = true;
first = false;
}
- flag2seqstr(invalid);
- flag2seqstr(deactive);
- flag2seqstr(replayable);
- flag2seqstr(delayed_recovery);
- flag2seqstr(no_lock_replay);
- flag2seqstr(vbr_failed);
- flag2seqstr(pingable);
- flag2seqstr(resend_replay);
- flag2seqstr(no_pinger_recover);
- flag2seqstr(need_mne_swab);
- flag2seqstr(connect_tried);
+ flag2str(invalid);
+ flag2str(deactive);
+ flag2str(replayable);
+ flag2str(delayed_recovery);
+ flag2str(no_lock_replay);
+ flag2str(vbr_failed);
+ flag2str(pingable);
+ flag2str(resend_replay);
+ flag2str(no_pinger_recover);
+ flag2str(need_mne_swab);
+ flag2str(connect_tried);
}
-#undef flag2seqstr
+#undef flag2str
static const char *obd_connect_names[] = {
"read_only",
seq_printf(m, " ]\n");
obd_connect_data_seqprint(m, ocd);
seq_printf(m, " import_flags: [ ");
- obd_import_flags2seqstr(imp, m);
+ obd_import_flags2str(imp, m);
seq_printf(m, " ]\n"
" connection:\n"
}
EXPORT_SYMBOL(lprocfs_connect_flags_seq_show);
-#ifndef HAVE_ONLY_PROCFS_SEQ
-
-int lprocfs_rd_uint(char *page, char **start, off_t off,
- int count, int *eof, void *data)
-{
- unsigned int *temp = data;
- return snprintf(page, count, "%u\n", *temp);
-}
-EXPORT_SYMBOL(lprocfs_rd_uint);
-
-int lprocfs_rd_u64(char *page, char **start, off_t off,
- int count, int *eof, void *data)
-{
- LASSERT(data != NULL);
- *eof = 1;
- return snprintf(page, count, LPU64"\n", *(__u64 *)data);
-}
-EXPORT_SYMBOL(lprocfs_rd_u64);
-
-int lprocfs_rd_atomic(char *page, char **start, off_t off,
- int count, int *eof, void *data)
-{
- atomic_t *atom = data;
- LASSERT(atom != NULL);
- *eof = 1;
- return snprintf(page, count, "%d\n", atomic_read(atom));
-}
-EXPORT_SYMBOL(lprocfs_rd_atomic);
-
-int lprocfs_wr_atomic(struct file *file, const char *buffer,
- unsigned long count, void *data)
-{
- atomic_t *atm = data;
- int val = 0;
- int rc;
-
- rc = lprocfs_write_helper(buffer, count, &val);
- if (rc < 0)
- return rc;
-
- if (val <= 0)
- return -ERANGE;
-
- atomic_set(atm, val);
- return count;
-}
-EXPORT_SYMBOL(lprocfs_wr_atomic);
-
-int lprocfs_rd_uuid(char *page, char **start, off_t off, int count,
- int *eof, void *data)
-{
- struct obd_device *obd = data;
-
- LASSERT(obd != NULL);
- *eof = 1;
- return snprintf(page, count, "%s\n", obd->obd_uuid.uuid);
-}
-EXPORT_SYMBOL(lprocfs_rd_uuid);
-
-int lprocfs_rd_name(char *page, char **start, off_t off, int count,
- int *eof, void *data)
-{
- struct obd_device *dev = data;
-
- LASSERT(dev != NULL);
- *eof = 1;
- return snprintf(page, count, "%s\n", dev->obd_name);
-}
-EXPORT_SYMBOL(lprocfs_rd_name);
-
-int lprocfs_rd_blksize(char *page, char **start, off_t off, int count,
- int *eof, void *data)
-{
- struct obd_device *obd = data;
- struct obd_statfs osfs;
- int rc = obd_statfs(NULL, obd->obd_self_export, &osfs,
- cfs_time_shift_64(-OBD_STATFS_CACHE_SECONDS),
- OBD_STATFS_NODELAY);
- if (!rc) {
- *eof = 1;
- rc = snprintf(page, count, "%u\n", osfs.os_bsize);
- }
- return rc;
-}
-EXPORT_SYMBOL(lprocfs_rd_blksize);
-
-int lprocfs_rd_kbytestotal(char *page, char **start, off_t off, int count,
- int *eof, void *data)
-{
- struct obd_device *obd = data;
- struct obd_statfs osfs;
- int rc = obd_statfs(NULL, obd->obd_self_export, &osfs,
- cfs_time_shift_64(-OBD_STATFS_CACHE_SECONDS),
- OBD_STATFS_NODELAY);
- if (!rc) {
- __u32 blk_size = osfs.os_bsize >> 10;
- __u64 result = osfs.os_blocks;
-
- while (blk_size >>= 1)
- result <<= 1;
-
- *eof = 1;
- rc = snprintf(page, count, LPU64"\n", result);
- }
- return rc;
-}
-EXPORT_SYMBOL(lprocfs_rd_kbytestotal);
-
-int lprocfs_rd_kbytesfree(char *page, char **start, off_t off, int count,
- int *eof, void *data)
-{
- struct obd_device *obd = data;
- struct obd_statfs osfs;
- int rc = obd_statfs(NULL, obd->obd_self_export, &osfs,
- cfs_time_shift_64(-OBD_STATFS_CACHE_SECONDS),
- OBD_STATFS_NODELAY);
- if (!rc) {
- __u32 blk_size = osfs.os_bsize >> 10;
- __u64 result = osfs.os_bfree;
-
- while (blk_size >>= 1)
- result <<= 1;
-
- *eof = 1;
- rc = snprintf(page, count, LPU64"\n", result);
- }
- return rc;
-}
-EXPORT_SYMBOL(lprocfs_rd_kbytesfree);
-
-int lprocfs_rd_kbytesavail(char *page, char **start, off_t off, int count,
- int *eof, void *data)
-{
- struct obd_device *obd = data;
- struct obd_statfs osfs;
- int rc = obd_statfs(NULL, obd->obd_self_export, &osfs,
- cfs_time_shift_64(-OBD_STATFS_CACHE_SECONDS),
- OBD_STATFS_NODELAY);
- if (!rc) {
- __u32 blk_size = osfs.os_bsize >> 10;
- __u64 result = osfs.os_bavail;
-
- while (blk_size >>= 1)
- result <<= 1;
-
- *eof = 1;
- rc = snprintf(page, count, LPU64"\n", result);
- }
- return rc;
-}
-EXPORT_SYMBOL(lprocfs_rd_kbytesavail);
-
-int lprocfs_rd_filestotal(char *page, char **start, off_t off, int count,
- int *eof, void *data)
-{
- struct obd_device *obd = data;
- struct obd_statfs osfs;
- int rc = obd_statfs(NULL, obd->obd_self_export, &osfs,
- cfs_time_shift_64(-OBD_STATFS_CACHE_SECONDS),
- OBD_STATFS_NODELAY);
- if (!rc) {
- *eof = 1;
- rc = snprintf(page, count, LPU64"\n", osfs.os_files);
- }
-
- return rc;
-}
-EXPORT_SYMBOL(lprocfs_rd_filestotal);
-
-int lprocfs_rd_filesfree(char *page, char **start, off_t off, int count,
- int *eof, void *data)
-{
- struct obd_device *obd = data;
- struct obd_statfs osfs;
- int rc = obd_statfs(NULL, obd->obd_self_export, &osfs,
- cfs_time_shift_64(-OBD_STATFS_CACHE_SECONDS),
- OBD_STATFS_NODELAY);
- if (!rc) {
- *eof = 1;
- rc = snprintf(page, count, LPU64"\n", osfs.os_ffree);
- }
- return rc;
-}
-EXPORT_SYMBOL(lprocfs_rd_filesfree);
-
-int lprocfs_rd_server_uuid(char *page, char **start, off_t off, int count,
- int *eof, void *data)
-{
- struct obd_device *obd = data;
- struct obd_import *imp;
- char *imp_state_name = NULL;
- int rc = 0;
-
- LASSERT(obd != NULL);
- LPROCFS_CLIMP_CHECK(obd);
- imp = obd->u.cli.cl_import;
- imp_state_name = ptlrpc_import_state_name(imp->imp_state);
- *eof = 1;
- rc = snprintf(page, count, "%s\t%s%s\n",
- obd2cli_tgt(obd), imp_state_name,
- imp->imp_deactive ? "\tDEACTIVATED" : "");
-
- LPROCFS_CLIMP_EXIT(obd);
- return rc;
-}
-EXPORT_SYMBOL(lprocfs_rd_server_uuid);
-
-int lprocfs_rd_conn_uuid(char *page, char **start, off_t off, int count,
- int *eof, void *data)
-{
- struct obd_device *obd = data;
- struct ptlrpc_connection *conn;
- int rc = 0;
-
- LASSERT(obd != NULL);
-
- LPROCFS_CLIMP_CHECK(obd);
- conn = obd->u.cli.cl_import->imp_connection;
- *eof = 1;
- if (conn && obd->u.cli.cl_import) {
- rc = snprintf(page, count, "%s\n",
- conn->c_remote_uuid.uuid);
- } else {
- rc = snprintf(page, count, "%s\n", "<none>");
- }
-
- LPROCFS_CLIMP_EXIT(obd);
- return rc;
-}
-EXPORT_SYMBOL(lprocfs_rd_conn_uuid);
-
-/**
- * Append a space separated list of current set flags to str.
- */
-#define flag2str(flag) \
- if (imp->imp_##flag && max - len > 0) \
- len += snprintf(str + len, max - len, "%s" #flag, len ? ", " : "");
-static int obd_import_flags2str(struct obd_import *imp, char *str, int max)
-{
- int len = 0;
-
- if (imp->imp_obd->obd_no_recov)
- len += snprintf(str, max - len, "no_recov");
-
- flag2str(invalid);
- flag2str(deactive);
- flag2str(replayable);
- flag2str(pingable);
- return len;
-}
-#undef flags2str
-
-int lprocfs_rd_import(char *page, char **start, off_t off, int count,
- int *eof, void *data)
-{
- struct lprocfs_counter ret;
- struct lprocfs_counter_header *header;
- struct obd_device *obd = (struct obd_device *)data;
- struct obd_import *imp;
- struct obd_import_conn *conn;
- int i;
- int j;
- int k;
- int rw = 0;
-
- LASSERT(obd != NULL);
- LPROCFS_CLIMP_CHECK(obd);
- imp = obd->u.cli.cl_import;
- *eof = 1;
-
- i = snprintf(page, count,
- "import:\n"
- " name: %s\n"
- " target: %s\n"
- " state: %s\n"
- " instance: %u\n"
- " connect_flags: [",
- obd->obd_name,
- obd2cli_tgt(obd),
- ptlrpc_import_state_name(imp->imp_state),
- imp->imp_connect_data.ocd_instance);
- i += obd_connect_flags2str(page + i, count - i,
- imp->imp_connect_data.ocd_connect_flags,
- ", ");
- i += snprintf(page + i, count - i,
- "]\n"
- " import_flags: [");
- i += obd_import_flags2str(imp, page + i, count - i);
-
- i += snprintf(page + i, count - i,
- "]\n"
- " connection:\n"
- " failover_nids: [");
- spin_lock(&imp->imp_lock);
- j = 0;
- list_for_each_entry(conn, &imp->imp_conn_list, oic_item) {
- i += snprintf(page + i, count - i, "%s%s", j ? ", " : "",
- libcfs_nid2str(conn->oic_conn->c_peer.nid));
- j++;
- }
- i += snprintf(page + i, count - i,
- "]\n"
- " current_connection: %s\n"
- " connection_attempts: %u\n"
- " generation: %u\n"
- " in-progress_invalidations: %u\n",
- imp->imp_connection == NULL ? "<none>" :
- libcfs_nid2str(imp->imp_connection->c_peer.nid),
- imp->imp_conn_cnt,
- imp->imp_generation,
- atomic_read(&imp->imp_inval_count));
- spin_unlock(&imp->imp_lock);
-
- if (obd->obd_svc_stats == NULL)
- goto out_climp;
-
- header = &obd->obd_svc_stats->ls_cnt_header[PTLRPC_REQWAIT_CNTR];
- lprocfs_stats_collect(obd->obd_svc_stats, PTLRPC_REQWAIT_CNTR, &ret);
- if (ret.lc_count != 0) {
- /* first argument to do_div MUST be __u64 */
- __u64 sum = ret.lc_sum;
- do_div(sum, ret.lc_count);
- ret.lc_sum = sum;
- } else
- ret.lc_sum = 0;
- i += snprintf(page + i, count - i,
- " rpcs:\n"
- " inflight: %u\n"
- " unregistering: %u\n"
- " timeouts: %u\n"
- " avg_waittime: "LPU64" %s\n",
- atomic_read(&imp->imp_inflight),
- atomic_read(&imp->imp_unregistering),
- atomic_read(&imp->imp_timeouts),
- ret.lc_sum, header->lc_units);
-
- k = 0;
- for(j = 0; j < IMP_AT_MAX_PORTALS; j++) {
- if (imp->imp_at.iat_portal[j] == 0)
- break;
- k = max_t(unsigned int, k,
- at_get(&imp->imp_at.iat_service_estimate[j]));
- }
- i += snprintf(page + i, count - i,
- " service_estimates:\n"
- " services: %u sec\n"
- " network: %u sec\n",
- k,
- at_get(&imp->imp_at.iat_net_latency));
-
- i += snprintf(page + i, count - i,
- " transactions:\n"
- " last_replay: "LPU64"\n"
- " peer_committed: "LPU64"\n"
- " last_checked: "LPU64"\n",
- imp->imp_last_replay_transno,
- imp->imp_peer_committed_transno,
- imp->imp_last_transno_checked);
-
- /* avg data rates */
- for (rw = 0; rw <= 1; rw++) {
- lprocfs_stats_collect(obd->obd_svc_stats,
- PTLRPC_LAST_CNTR + BRW_READ_BYTES + rw,
- &ret);
- if (ret.lc_sum > 0 && ret.lc_count > 0) {
- /* first argument to do_div MUST be __u64 */
- __u64 sum = ret.lc_sum;
- do_div(sum, ret.lc_count);
- ret.lc_sum = sum;
- i += snprintf(page + i, count - i,
- " %s_data_averages:\n"
- " bytes_per_rpc: "LPU64"\n",
- rw ? "write" : "read",
- ret.lc_sum);
- }
- k = (int)ret.lc_sum;
- j = opcode_offset(OST_READ + rw) + EXTRA_MAX_OPCODES;
- header = &obd->obd_svc_stats->ls_cnt_header[j];
- lprocfs_stats_collect(obd->obd_svc_stats, j, &ret);
- if (ret.lc_sum > 0 && ret.lc_count != 0) {
- /* first argument to do_div MUST be __u64 */
- __u64 sum = ret.lc_sum;
- do_div(sum, ret.lc_count);
- ret.lc_sum = sum;
- i += snprintf(page + i, count - i,
- " %s_per_rpc: "LPU64"\n",
- header->lc_units, ret.lc_sum);
- j = (int)ret.lc_sum;
- if (j > 0)
- i += snprintf(page + i, count - i,
- " MB_per_sec: %u.%.02u\n",
- k / j, (100 * k / j) % 100);
- }
- }
-
-out_climp:
- LPROCFS_CLIMP_EXIT(obd);
- return i;
-}
-EXPORT_SYMBOL(lprocfs_rd_import);
-
-int lprocfs_rd_state(char *page, char **start, off_t off, int count,
- int *eof, void *data)
-{
- struct obd_device *obd = (struct obd_device *)data;
- struct obd_import *imp;
- int i, j, k;
-
- LASSERT(obd != NULL);
- LPROCFS_CLIMP_CHECK(obd);
- imp = obd->u.cli.cl_import;
- *eof = 1;
-
- i = snprintf(page, count, "current_state: %s\n",
- ptlrpc_import_state_name(imp->imp_state));
- i += snprintf(page + i, count - i,
- "state_history:\n");
- k = imp->imp_state_hist_idx;
- for (j = 0; j < IMP_STATE_HIST_LEN; j++) {
- struct import_state_hist *ish =
- &imp->imp_state_hist[(k + j) % IMP_STATE_HIST_LEN];
- if (ish->ish_state == 0)
- continue;
- i += snprintf(page + i, count - i, " - ["CFS_TIME_T", %s]\n",
- ish->ish_time,
- ptlrpc_import_state_name(ish->ish_state));
- }
-
- LPROCFS_CLIMP_EXIT(obd);
- return i;
-}
-EXPORT_SYMBOL(lprocfs_rd_state);
-
-int lprocfs_at_hist_helper(char *page, int count, int rc,
- struct adaptive_timeout *at)
-{
- int i;
- for (i = 0; i < AT_BINS; i++)
- rc += snprintf(page + rc, count - rc, "%3u ", at->at_hist[i]);
- rc += snprintf(page + rc, count - rc, "\n");
- return rc;
-}
-EXPORT_SYMBOL(lprocfs_at_hist_helper);
-
-/* See also ptlrpc_lprocfs_rd_timeouts */
-int lprocfs_rd_timeouts(char *page, char **start, off_t off, int count,
- int *eof, void *data)
-{
- struct obd_device *obd = (struct obd_device *)data;
- struct obd_import *imp;
- unsigned int cur, worst;
- time_t now, worstt;
- struct dhms ts;
- int i, rc = 0;
-
- LASSERT(obd != NULL);
- LPROCFS_CLIMP_CHECK(obd);
- imp = obd->u.cli.cl_import;
- *eof = 1;
-
- now = cfs_time_current_sec();
-
- /* Some network health info for kicks */
- s2dhms(&ts, now - imp->imp_last_reply_time);
- rc += snprintf(page + rc, count - rc,
- "%-10s : %ld, "DHMS_FMT" ago\n",
- "last reply", imp->imp_last_reply_time, DHMS_VARS(&ts));
-
- cur = at_get(&imp->imp_at.iat_net_latency);
- worst = imp->imp_at.iat_net_latency.at_worst_ever;
- worstt = imp->imp_at.iat_net_latency.at_worst_time;
- s2dhms(&ts, now - worstt);
- rc += snprintf(page + rc, count - rc,
- "%-10s : cur %3u worst %3u (at %ld, "DHMS_FMT" ago) ",
- "network", cur, worst, worstt, DHMS_VARS(&ts));
- rc = lprocfs_at_hist_helper(page, count, rc,
- &imp->imp_at.iat_net_latency);
-
- for(i = 0; i < IMP_AT_MAX_PORTALS; i++) {
- if (imp->imp_at.iat_portal[i] == 0)
- break;
- cur = at_get(&imp->imp_at.iat_service_estimate[i]);
- worst = imp->imp_at.iat_service_estimate[i].at_worst_ever;
- worstt = imp->imp_at.iat_service_estimate[i].at_worst_time;
- s2dhms(&ts, now - worstt);
- rc += snprintf(page + rc, count - rc,
- "portal %-2d : cur %3u worst %3u (at %ld, "
- DHMS_FMT" ago) ", imp->imp_at.iat_portal[i],
- cur, worst, worstt, DHMS_VARS(&ts));
- rc = lprocfs_at_hist_helper(page, count, rc,
- &imp->imp_at.iat_service_estimate[i]);
- }
-
- LPROCFS_CLIMP_EXIT(obd);
- return rc;
-}
-EXPORT_SYMBOL(lprocfs_rd_timeouts);
-
-int lprocfs_rd_connect_flags(char *page, char **start, off_t off,
- int count, int *eof, void *data)
-{
- struct obd_device *obd = data;
- __u64 flags;
- int ret = 0;
-
- LPROCFS_CLIMP_CHECK(obd);
- flags = obd->u.cli.cl_import->imp_connect_data.ocd_connect_flags;
- ret = snprintf(page, count, "flags="LPX64"\n", flags);
- ret += obd_connect_flags2str(page + ret, count - ret, flags, "\n");
- ret += snprintf(page + ret, count - ret, "\n");
- LPROCFS_CLIMP_EXIT(obd);
- return ret;
-}
-EXPORT_SYMBOL(lprocfs_rd_connect_flags);
-
-int lprocfs_rd_numrefs(char *page, char **start, off_t off, int count,
- int *eof, void *data)
-{
- struct obd_type *class = (struct obd_type*) data;
-
- LASSERT(class != NULL);
- *eof = 1;
- return snprintf(page, count, "%d\n", class->typ_refcnt);
-}
-EXPORT_SYMBOL(lprocfs_rd_numrefs);
-
-int lprocfs_obd_setup(struct obd_device *obd, struct lprocfs_vars *list)
-{
- int rc = 0;
-
- LASSERT(obd != NULL);
- LASSERT(obd->obd_magic == OBD_DEVICE_MAGIC);
- LASSERT(obd->obd_type->typ_procroot != NULL);
-
- obd->obd_proc_entry = lprocfs_register(obd->obd_name,
- obd->obd_type->typ_procroot,
- list, obd);
- if (IS_ERR(obd->obd_proc_entry)) {
- rc = PTR_ERR(obd->obd_proc_entry);
- CERROR("error %d setting up lprocfs for %s\n",rc,obd->obd_name);
- obd->obd_proc_entry = NULL;
- }
- return rc;
-}
-EXPORT_SYMBOL(lprocfs_obd_setup);
-#endif
-
int
-lprocfs_seq_obd_setup(struct obd_device *obd)
+lprocfs_obd_setup(struct obd_device *obd)
{
int rc = 0;
}
return rc;
}
-EXPORT_SYMBOL(lprocfs_seq_obd_setup);
+EXPORT_SYMBOL(lprocfs_obd_setup);
int lprocfs_obd_cleanup(struct obd_device *obd)
{