|
@@ -116,6 +116,17 @@ static ssize_t recover_status_show(struct gdlm_ls *ls, char *buf)
|
|
return sprintf(buf, "%d\n", ls->recover_jid_status);
|
|
return sprintf(buf, "%d\n", ls->recover_jid_status);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+static ssize_t drop_count_show(struct gdlm_ls *ls, char *buf)
|
|
|
|
+{
|
|
|
|
+ return sprintf(buf, "%d\n", ls->drop_locks_count);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static ssize_t drop_count_store(struct gdlm_ls *ls, const char *buf, size_t len)
|
|
|
|
+{
|
|
|
|
+ ls->drop_locks_count = simple_strtol(buf, NULL, 0);
|
|
|
|
+ return len;
|
|
|
|
+}
|
|
|
|
+
|
|
struct gdlm_attr {
|
|
struct gdlm_attr {
|
|
struct attribute attr;
|
|
struct attribute attr;
|
|
ssize_t (*show)(struct gdlm_ls *, char *);
|
|
ssize_t (*show)(struct gdlm_ls *, char *);
|
|
@@ -135,6 +146,7 @@ GDLM_ATTR(first_done, 0444, first_done_show, NULL);
|
|
GDLM_ATTR(recover, 0644, recover_show, recover_store);
|
|
GDLM_ATTR(recover, 0644, recover_show, recover_store);
|
|
GDLM_ATTR(recover_done, 0444, recover_done_show, NULL);
|
|
GDLM_ATTR(recover_done, 0444, recover_done_show, NULL);
|
|
GDLM_ATTR(recover_status, 0444, recover_status_show, NULL);
|
|
GDLM_ATTR(recover_status, 0444, recover_status_show, NULL);
|
|
|
|
+GDLM_ATTR(drop_count, 0644, drop_count_show, drop_count_store);
|
|
|
|
|
|
static struct attribute *gdlm_attrs[] = {
|
|
static struct attribute *gdlm_attrs[] = {
|
|
&gdlm_attr_proto_name.attr,
|
|
&gdlm_attr_proto_name.attr,
|
|
@@ -147,6 +159,7 @@ static struct attribute *gdlm_attrs[] = {
|
|
&gdlm_attr_recover.attr,
|
|
&gdlm_attr_recover.attr,
|
|
&gdlm_attr_recover_done.attr,
|
|
&gdlm_attr_recover_done.attr,
|
|
&gdlm_attr_recover_status.attr,
|
|
&gdlm_attr_recover_status.attr,
|
|
|
|
+ &gdlm_attr_drop_count.attr,
|
|
NULL,
|
|
NULL,
|
|
};
|
|
};
|
|
|
|
|