* File join has been disabled in this release, refer to Bugzilla 16929.
Severity : enhancement
+Bugzilla : 1819
+Description: Add /proc entry for import status
+Details : The mdc, osc, and mgc import directories now have
+ an import directory that contains useful import data for debugging
+ connection problems.
+
+Severity : enhancement
Bugzilla : 15966
Description: Re-disable certain /proc logging
Details : Enable and disable client's offset_stats, extents_stats and
int count, int *eof, void *data);
extern int lprocfs_rd_conn_uuid(char *page, char **start, off_t off,
int count, int *eof, void *data);
+extern int lprocfs_rd_import(char *page, char **start, off_t off, int count,
+ int *eof, void *data);
extern int lprocfs_rd_connect_flags(char *page, char **start, off_t off,
int count, int *eof, void *data);
extern int lprocfs_rd_num_exports(char *page, char **start, off_t off,
static inline int lprocfs_rd_conn_uuid(char *page, char **start, off_t off,
int count, int *eof, void *data)
{ return 0; }
+static inline int lprocfs_rd_import(char *page, char **start, off_t off, int count,
+ int *eof, void *data) { return 0; }
static inline int lprocfs_rd_connect_flags(char *page, char **start, off_t off,
int count, int *eof, void *data)
{ return 0; }
{ "max_rpcs_in_flight", mdc_rd_max_rpcs_in_flight,
mdc_wr_max_rpcs_in_flight, 0 },
{ "timeouts", lprocfs_rd_timeouts, 0, 0 },
+ { "import", lprocfs_rd_import, 0, 0 },
{ 0 }
};
{ "connect_flags", lprocfs_rd_connect_flags, 0, 0 },
{ "mgs_server_uuid", lprocfs_rd_server_uuid, 0, 0 },
{ "mgs_conn_uuid", lprocfs_rd_conn_uuid, 0, 0 },
+ { "import", lprocfs_rd_import, 0, 0 },
{ 0 }
};
return rc;
}
+#define flag2str(flag) \
+ if (imp->imp_##flag && max - len > 0) \
+ len += snprintf(str + len, max - len, " " #flag);
+
+/**
+ * Append a space separated list of current set flags to str.
+ */
+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);
+ flag2str(recon_bk);
+ flag2str(last_recon);
+ return len;
+}
+#undef flags2str
+
+int lprocfs_rd_import(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;
+ 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,
+ "import: %s\n"
+ " target: %s@%s\n"
+ " state: %s\n"
+ " inflight: %u\n"
+ " conn_cnt: %u\n"
+ " generation: %u\n"
+ " inval_cnt: %u\n"
+ " last_replay_transno: "LPU64"\n"
+ " peer_committed_transno: "LPU64"\n"
+ " last_trasno_checked: "LPU64"\n"
+ " flags:",
+ obd->obd_name,
+ obd2cli_tgt(obd), imp->imp_connection->c_remote_uuid.uuid,
+ imp_state_name,
+ atomic_read(&imp->imp_inflight),
+ imp->imp_conn_cnt,
+ imp->imp_generation,
+ atomic_read(&imp->imp_inval_count),
+ imp->imp_last_replay_transno,
+ imp->imp_peer_committed_transno,
+ imp->imp_last_transno_checked);
+ rc += obd_import_flags2str(imp, page + rc, count - rc);
+ rc += snprintf(page+rc, count - rc, "\n");
+ LPROCFS_CLIMP_EXIT(obd);
+ return rc;
+}
+
int lprocfs_at_hist_helper(char *page, int count, int rc,
struct adaptive_timeout *at)
{
EXPORT_SYMBOL(lprocfs_rd_num_exports);
EXPORT_SYMBOL(lprocfs_rd_numrefs);
EXPORT_SYMBOL(lprocfs_at_hist_helper);
+EXPORT_SYMBOL(lprocfs_rd_import);
EXPORT_SYMBOL(lprocfs_rd_timeouts);
EXPORT_SYMBOL(lprocfs_rd_blksize);
EXPORT_SYMBOL(lprocfs_rd_kbytestotal);
{ "checksum_type", osc_rd_checksum_type, osc_wd_checksum_type, 0 },
{ "resend_count", osc_rd_resend_count, osc_wr_resend_count, 0},
{ "timeouts", lprocfs_rd_timeouts, 0, 0 },
+ { "import", lprocfs_rd_import, 0, 0 },
{ 0 }
};