Whamcloud - gitweb
git://git.whamcloud.com
/
fs
/
lustre-release.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
| inline |
side by side
LU-8066 sysfs: make ping sysfs file read and writable
[fs/lustre-release.git]
/
lustre
/
ptlrpc
/
lproc_ptlrpc.c
diff --git
a/lustre/ptlrpc/lproc_ptlrpc.c
b/lustre/ptlrpc/lproc_ptlrpc.c
index
ee4e78e
..
4e009e0
100644
(file)
--- a/
lustre/ptlrpc/lproc_ptlrpc.c
+++ b/
lustre/ptlrpc/lproc_ptlrpc.c
@@
-109,17
+109,17
@@
static struct ll_rpc_opcode {
{ MGS_TARGET_DEL, "mgs_target_del" },
{ MGS_SET_INFO, "mgs_set_info" },
{ MGS_CONFIG_READ, "mgs_config_read" },
-
{ OBD_PING,
"obd_ping" },
- {
OBD_LOG_CANCEL,
"llog_cancel" },
-
{ OBD_QC_CALLBACK,
"obd_quota_callback" },
- { OBD_IDX_READ, "dt_index_read" },
+
{ OBD_PING,
"obd_ping" },
+ {
401, /* was OBD_LOG_CANCEL */
"llog_cancel" },
+
{ 402, /* was OBD_QC_CALLBACK */
"obd_quota_callback" },
+ { OBD_IDX_READ,
"dt_index_read" },
{ LLOG_ORIGIN_HANDLE_CREATE, "llog_origin_handle_open" },
{ LLOG_ORIGIN_HANDLE_NEXT_BLOCK, "llog_origin_handle_next_block" },
{ LLOG_ORIGIN_HANDLE_READ_HEADER,"llog_origin_handle_read_header" },
- {
LLOG_ORIGIN_HANDLE_WRITE_REC,
"llog_origin_handle_write_rec" },
- {
LLOG_ORIGIN_HANDLE_CLOSE,
"llog_origin_handle_close" },
- {
LLOG_ORIGIN_CONNECT,
"llog_origin_connect" },
- {
LLOG_CATINFO,
"llog_catinfo" },
+ {
504, /*LLOG_ORIGIN_HANDLE_WRITE_REC*/
"llog_origin_handle_write_rec" },
+ {
505, /* was LLOG_ORIGIN_HANDLE_CLOSE */
"llog_origin_handle_close" },
+ {
506, /* was LLOG_ORIGIN_CONNECT */
"llog_origin_connect" },
+ {
507, /* was LLOG_CATINFO */
"llog_catinfo" },
{ LLOG_ORIGIN_HANDLE_PREV_BLOCK, "llog_origin_handle_prev_block" },
{ LLOG_ORIGIN_HANDLE_DESTROY, "llog_origin_handle_destroy" },
{ QUOTA_DQACQ, "quota_acquire" },
@@
-194,32
+194,33
@@
static const char *ll_eopcode2str(__u32 opcode)
return ll_eopcode_table[opcode].opname;
}
-#ifdef CONFIG_PROC_FS
-
static void ptlrpc_lprocfs_register(struct proc_dir_entry *root, char *dir
,
-
char *name, struct proc_dir_entry **proc
root_ret,
-
struct lprocfs_stats **stats_ret)
+static void
+
ptlrpc_ldebugfs_register(struct dentry *root, char *dir, char *name
,
+
struct dentry **debugfs_
root_ret,
+ struct lprocfs_stats **stats_ret)
{
-
struct proc_dir_entry *svc_procroot
;
+
struct dentry *svc_debugfs_entry
;
struct lprocfs_stats *svc_stats;
int i, rc;
unsigned int svc_counter_config = LPROCFS_CNTR_AVGMINMAX |
LPROCFS_CNTR_STDDEV;
-
LASSERT(*procroot_ret == NULL
);
-
LASSERT(*stats_ret == NULL
);
+
LASSERT(!*debugfs_root_ret
);
+
LASSERT(!*stats_ret
);
- svc_stats = lprocfs_alloc_stats(EXTRA_MAX_OPCODES+LUSTRE_MAX_OPCODES,0);
- if (svc_stats == NULL)
+ svc_stats = lprocfs_alloc_stats(EXTRA_MAX_OPCODES + LUSTRE_MAX_OPCODES,
+ 0);
+ if (!svc_stats)
return;
if (dir) {
- svc_
procroot = lproc
fs_register(dir, root, NULL, NULL);
-
if (IS_ERR(svc_procroot
)) {
+ svc_
debugfs_entry = ldebug
fs_register(dir, root, NULL, NULL);
+
if (IS_ERR(svc_debugfs_entry
)) {
lprocfs_free_stats(&svc_stats);
return;
}
} else {
-
svc_procroot
= root;
+
svc_debugfs_entry
= root;
}
lprocfs_counter_init(svc_stats, PTLRPC_REQWAIT_CNTR,
@@
-235,7
+236,7
@@
static void ptlrpc_lprocfs_register(struct proc_dir_entry *root, char *dir,
for (i = 0; i < EXTRA_LAST_OPC; i++) {
char *units;
-
switch
(i) {
+
switch
(i) {
case BRW_WRITE_BYTES:
case BRW_READ_BYTES:
units = "bytes";
@@
-255,14
+256,14
@@
static void ptlrpc_lprocfs_register(struct proc_dir_entry *root, char *dir,
ll_opcode2str(opcode), "usec");
}
-
rc = lprocfs_register_stats(svc_procroot
, name, svc_stats);
+
rc = ldebugfs_register_stats(svc_debugfs_entry
, name, svc_stats);
if (rc < 0) {
if (dir)
-
lprocfs_remove(&svc_procroot
);
+
ldebugfs_remove(&svc_debugfs_entry
);
lprocfs_free_stats(&svc_stats);
} else {
if (dir)
-
*procroot_ret = svc_procroot
;
+
*debugfs_root_ret = svc_debugfs_entry
;
*stats_ret = svc_stats;
}
}
@@
-281,7
+282,9
@@
ptlrpc_lprocfs_req_history_len_seq_show(struct seq_file *m, void *v)
seq_printf(m, "%d\n", total);
return 0;
}
-LPROC_SEQ_FOPS_RO(ptlrpc_lprocfs_req_history_len);
+
+
+LDEBUGFS_SEQ_FOPS_RO(ptlrpc_lprocfs_req_history_len);
static int
ptlrpc_lprocfs_req_history_max_seq_show(struct seq_file *m, void *n)
@@
-324,8
+327,8
@@
ptlrpc_lprocfs_req_history_max_seq_write(struct file *file,
bufpages = (roundup_pow_of_two(svc->srv_buf_size) + PAGE_SIZE - 1) >>
PAGE_SHIFT;
/* do not allow history to consume more than half max number of rqbds */
- if ((svc->srv_nrqbds_max == 0 && val > totalram_pages
/
(2 * bufpages)) ||
-
val > svc->srv_nrqbds_max/2
)
+ if ((svc->srv_nrqbds_max == 0 && val > totalram_pages
/
(2 * bufpages)) ||
+
(svc->srv_nrqbds_max != 0 && val > svc->srv_nrqbds_max / 2)
)
return -ERANGE;
spin_lock(&svc->srv_lock);
@@
-340,7
+343,8
@@
ptlrpc_lprocfs_req_history_max_seq_write(struct file *file,
return count;
}
-LPROC_SEQ_FOPS(ptlrpc_lprocfs_req_history_max);
+
+LDEBUGFS_SEQ_FOPS(ptlrpc_lprocfs_req_history_max);
static int
ptlrpc_lprocfs_req_buffers_max_seq_show(struct seq_file *m, void *n)
@@
-365,7
+369,7
@@
ptlrpc_lprocfs_req_buffers_max_seq_write(struct file *file,
if (rc < 0)
return rc;
- if (val < svc->srv_nbuf_per_group)
+ if (val < svc->srv_nbuf_per_group
&& val != 0
)
return -ERANGE;
spin_lock(&svc->srv_lock);
@@
-376,7
+380,8
@@
ptlrpc_lprocfs_req_buffers_max_seq_write(struct file *file,
return count;
}
-LPROC_SEQ_FOPS(ptlrpc_lprocfs_req_buffers_max);
+
+LDEBUGFS_SEQ_FOPS(ptlrpc_lprocfs_req_buffers_max);
static ssize_t threads_min_show(struct kobject *kobj, struct attribute *attr,
char *buf)
@@
-784,7
+789,8
@@
out:
RETURN(rc < 0 ? rc : count);
}
-LPROC_SEQ_FOPS(ptlrpc_lprocfs_nrs);
+
+LDEBUGFS_SEQ_FOPS(ptlrpc_lprocfs_nrs);
/** @} nrs */
@@
-904,10
+910,12
@@
ptlrpc_lprocfs_svc_req_history_start(struct seq_file *s, loff_t *pos)
if (i > cpt) /* make up the lowest position for this CPT */
*pos = PTLRPC_REQ_CPT2POS(svc, i);
+ mutex_lock(&svcpt->scp_mutex);
spin_lock(&svcpt->scp_lock);
rc = ptlrpc_lprocfs_svc_req_history_seek(svcpt, srhi,
PTLRPC_REQ_POS2SEQ(svc, *pos));
spin_unlock(&svcpt->scp_lock);
+ mutex_unlock(&svcpt->scp_mutex);
if (rc == 0) {
*pos = PTLRPC_REQ_SEQ2POS(svc, srhi->srhi_seq);
srhi->srhi_idx = i;
@@
-949,9
+957,11
@@
ptlrpc_lprocfs_svc_req_history_next(struct seq_file *s,
seq = srhi->srhi_seq + (1 << svc->srv_cpt_bits);
}
+ mutex_lock(&svcpt->scp_mutex);
spin_lock(&svcpt->scp_lock);
rc = ptlrpc_lprocfs_svc_req_history_seek(svcpt, srhi, seq);
spin_unlock(&svcpt->scp_lock);
+ mutex_unlock(&svcpt->scp_mutex);
if (rc == 0) {
*pos = PTLRPC_REQ_SEQ2POS(svc, srhi->srhi_seq);
srhi->srhi_idx = i;
@@
-1005,6
+1015,7
@@
static int ptlrpc_lprocfs_svc_req_history_show(struct seq_file *s, void *iter)
svcpt = svc->srv_parts[srhi->srhi_idx];
+ mutex_lock(&svcpt->scp_mutex);
spin_lock(&svcpt->scp_lock);
rc = ptlrpc_lprocfs_svc_req_history_seek(svcpt, srhi, srhi->srhi_seq);
@@
-1045,6
+1056,8
@@
static int ptlrpc_lprocfs_svc_req_history_show(struct seq_file *s, void *iter)
}
spin_unlock(&svcpt->scp_lock);
+ mutex_unlock(&svcpt->scp_mutex);
+
return rc;
}
@@
-1069,7
+1082,7
@@
ptlrpc_lprocfs_svc_req_history_open(struct inode *inode, struct file *file)
return rc;
seqf = file->private_data;
- seqf->private =
PDE_DATA(inode)
;
+ seqf->private =
inode->i_private
;
return 0;
}
@@
-1103,7
+1116,8
@@
static int ptlrpc_lprocfs_timeouts_seq_show(struct seq_file *m, void *n)
return 0;
}
-LPROC_SEQ_FOPS_RO(ptlrpc_lprocfs_timeouts);
+
+LDEBUGFS_SEQ_FOPS_RO(ptlrpc_lprocfs_timeouts);
static ssize_t high_priority_ratio_show(struct kobject *kobj,
struct attribute *attr,
@@
-1177,8
+1191,8
@@
int ptlrpc_sysfs_register_service(struct kset *parent,
&parent->kobj, "%s", svc->srv_name);
}
-void ptlrpc_l
procfs_register_service(struct proc_dir_
entry *entry,
- struct ptlrpc_service *svc)
+void ptlrpc_l
debugfs_register_service(struct d
entry *entry,
+ struct ptlrpc_service *svc)
{
struct lprocfs_vars lproc_vars[] = {
{ .name = "req_buffer_history_len",
@@
-1208,25
+1222,24
@@
void ptlrpc_lprocfs_register_service(struct proc_dir_entry *entry,
int rc;
- ptlrpc_lprocfs_register(entry, svc->srv_name,
- "stats", &svc->srv_procroot,
- &svc->srv_stats);
- if (svc->srv_procroot == NULL)
+ ptlrpc_ldebugfs_register(entry, svc->srv_name, "stats",
+ &svc->srv_debugfs_entry, &svc->srv_stats);
+ if (IS_ERR_OR_NULL(svc->srv_debugfs_entry))
return;
- l
procfs_add_vars(svc->srv_procroot
, lproc_vars, NULL);
+ l
debugfs_add_vars(svc->srv_debugfs_entry
, lproc_vars, NULL);
- rc = l
procfs_seq_create(svc->srv_procroot
, "req_history",
- 0400, &req_history_fops, svc);
+ rc = l
debugfs_seq_create(svc->srv_debugfs_entry
, "req_history",
+
0400, &req_history_fops, svc);
if (rc)
CWARN("Error adding the req_history file\n");
}
void ptlrpc_lprocfs_register_obd(struct obd_device *obddev)
{
-
ptlrpc_lprocfs_register(obddev->obd_proc
_entry, NULL, "stats",
- &obddev->obd_svc_
procroot
,
- &obddev->obd_svc_stats);
+
ptlrpc_ldebugfs_register(obddev->obd_debugfs
_entry, NULL, "stats",
+ &obddev->obd_svc_
debugfs_entry
,
+ &obddev->obd_svc_stats);
}
EXPORT_SYMBOL(ptlrpc_lprocfs_register_obd);
@@
-1274,8
+1287,8
@@
EXPORT_SYMBOL(ptlrpc_lprocfs_brw);
void ptlrpc_lprocfs_unregister_service(struct ptlrpc_service *svc)
{
-
if (svc->srv_procroot != NULL
)
-
lprocfs_remove(&svc->srv_procroot
);
+
if (!IS_ERR_OR_NULL(svc->srv_debugfs_entry)
)
+
ldebugfs_remove(&svc->srv_debugfs_entry
);
if (svc->srv_stats)
lprocfs_free_stats(&svc->srv_stats);
@@
-1288,16
+1301,16
@@
void ptlrpc_lprocfs_unregister_obd(struct obd_device *obd)
*/
lprocfs_obd_cleanup(obd);
-
if (obd->obd_svc_procroot
)
-
lprocfs_remove(&obd->obd_svc_procroot
);
+
if (!IS_ERR_OR_NULL(obd->obd_svc_debugfs_entry)
)
+
ldebugfs_remove(&obd->obd_svc_debugfs_entry
);
if (obd->obd_svc_stats)
lprocfs_free_stats(&obd->obd_svc_stats);
}
EXPORT_SYMBOL(ptlrpc_lprocfs_unregister_obd);
-ssize_t ping_s
tore
(struct kobject *kobj, struct attribute *attr,
-
const char *buffer, size_t count
)
+ssize_t ping_s
how
(struct kobject *kobj, struct attribute *attr,
+
char *buffer
)
{
struct obd_device *obd = container_of(kobj, struct obd_device,
obd_kset.kobj);
@@
-1316,36
+1329,17
@@
ssize_t ping_store(struct kobject *kobj, struct attribute *attr,
rc = ptlrpc_queue_wait(req);
ptlrpc_req_finished(req);
- RETURN(rc
>= 0 ? count : rc
);
+ RETURN(rc);
}
-EXPORT_SYMBOL(ping_s
tore
);
+EXPORT_SYMBOL(ping_s
how
);
-ssize_t
-
lprocfs_ping_seq_write(struct file *file, const char __user *buffe
r,
-
size_t count, loff_t *off
)
+/* kept for older verison of tools. */
+
ssize_t ping_store(struct kobject *kobj, struct attribute *att
r,
+
const char *buffer, size_t count
)
{
- struct seq_file *m = file->private_data;
- struct obd_device *obd = m->private;
- struct ptlrpc_request *req;
- int rc;
- ENTRY;
-
- LPROCFS_CLIMP_CHECK(obd);
- req = ptlrpc_prep_ping(obd->u.cli.cl_import);
- LPROCFS_CLIMP_EXIT(obd);
- if (req == NULL)
- RETURN(-ENOMEM);
-
- req->rq_send_state = LUSTRE_IMP_FULL;
-
- rc = ptlrpc_queue_wait(req);
-
- ptlrpc_req_finished(req);
- if (rc >= 0)
- RETURN(count);
- RETURN(rc);
+ return ping_show(kobj, attr, (char *)buffer);
}
-EXPORT_SYMBOL(
lprocfs_ping_seq_writ
e);
+EXPORT_SYMBOL(
ping_stor
e);
/* Write the connection UUID to this file to attempt to connect to that node.
* The connection UUID is a node's primary NID. For example,
@@
-1384,14
+1378,14
@@
lprocfs_import_seq_write(struct file *file, const char __user *buffer,
uuid = kbuf + prefix_len;
ptr = strstr(uuid, "::");
if (ptr) {
-
__
u32 inst;
-
char *endptr
;
+ u32 inst;
+
int rc
;
*ptr = 0;
do_reconn = 0;
ptr += 2; /* Skip :: */
-
inst = simple_strtol(ptr, &endptr, 10
);
- if (
*endptr
) {
+
rc = kstrtouint(ptr, 10, &inst
);
+ if (
rc
) {
CERROR("config: wrong instance # %s\n", ptr);
} else if (inst != imp->imp_connect_data.ocd_instance) {
CDEBUG(D_INFO, "IR: %s is connecting to an obsoleted "
@@
-1450,5
+1444,3
@@
lprocfs_pinger_recov_seq_write(struct file *file, const char __user *buffer,
return count;
}
EXPORT_SYMBOL(lprocfs_pinger_recov_seq_write);
-
-#endif /* CONFIG_PROC_FS */