From: Luo Longjun <luolongjun@huawei.com>
To: <viro@zeniv.linux.org.uk>, <jlayton@kernel.org>, <bfields@fieldses.org>
Cc: <linux-fsdevel@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
<sangyan@huawei.com>, <luchunhua@huawei.com>
Subject: [PATCH] fs/locks: print full locks information
Date: Sat, 20 Feb 2021 01:32:50 -0500 [thread overview]
Message-ID: <20210220063250.742164-1-luolongjun@huawei.com> (raw)
Commit fd7732e033e3 ("fs/locks: create a tree of dependent requests.")
has put blocked locks into a tree.
So, with a for loop, we can't check all locks information.
To solve this problem, we should traverse the tree by DFS.
Signed-off-by: Luo Longjun <luolongjun@huawei.com>
---
fs/locks.c | 30 +++++++++++++++++++++++++-----
1 file changed, 25 insertions(+), 5 deletions(-)
diff --git a/fs/locks.c b/fs/locks.c
index 99ca97e81b7a..1f7b6683ed54 100644
--- a/fs/locks.c
+++ b/fs/locks.c
@@ -2828,9 +2828,10 @@ struct locks_iterator {
};
static void lock_get_status(struct seq_file *f, struct file_lock *fl,
- loff_t id, char *pfx)
+ loff_t id, char *pfx, int repeat)
{
struct inode *inode = NULL;
+ int i;
unsigned int fl_pid;
struct pid_namespace *proc_pidns = proc_pid_ns(file_inode(f->file)->i_sb);
@@ -2844,7 +2845,13 @@ static void lock_get_status(struct seq_file *f, struct file_lock *fl,
if (fl->fl_file != NULL)
inode = locks_inode(fl->fl_file);
- seq_printf(f, "%lld:%s ", id, pfx);
+ seq_printf(f, "%lld: ", id);
+ for (i = 1; i < repeat; i++)
+ seq_puts(f, " ");
+
+ if (repeat)
+ seq_printf(f, "%s", pfx);
+
if (IS_POSIX(fl)) {
if (fl->fl_flags & FL_ACCESS)
seq_puts(f, "ACCESS");
@@ -2906,6 +2913,19 @@ static void lock_get_status(struct seq_file *f, struct file_lock *fl,
}
}
+static int __locks_show(struct seq_file *f, struct file_lock *fl, int level)
+{
+ struct locks_iterator *iter = f->private;
+ struct file_lock *bfl;
+
+ lock_get_status(f, fl, iter->li_pos, "-> ", level);
+
+ list_for_each_entry(bfl, &fl->fl_blocked_requests, fl_blocked_member)
+ __locks_show(f, bfl, level + 1);
+
+ return 0;
+}
+
static int locks_show(struct seq_file *f, void *v)
{
struct locks_iterator *iter = f->private;
@@ -2917,10 +2937,10 @@ static int locks_show(struct seq_file *f, void *v)
if (locks_translate_pid(fl, proc_pidns) == 0)
return 0;
- lock_get_status(f, fl, iter->li_pos, "");
+ lock_get_status(f, fl, iter->li_pos, "", 0);
list_for_each_entry(bfl, &fl->fl_blocked_requests, fl_blocked_member)
- lock_get_status(f, bfl, iter->li_pos, " ->");
+ __locks_show(f, bfl, 1);
return 0;
}
@@ -2941,7 +2961,7 @@ static void __show_fd_locks(struct seq_file *f,
(*id)++;
seq_puts(f, "lock:\t");
- lock_get_status(f, fl, *id, "");
+ lock_get_status(f, fl, *id, "", 0);
}
}
--
2.17.1
next reply other threads:[~2021-02-20 9:25 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-02-20 6:32 Luo Longjun [this message]
2021-02-21 16:34 ` [PATCH] fs/locks: print full locks information Jeff Layton
2021-02-21 16:52 ` Al Viro
2021-02-21 18:43 ` Jeff Layton
2021-02-21 20:10 ` J. Bruce Fields
2021-02-26 3:58 ` [PATCH v3] " Luo Longjun
2021-03-09 13:37 ` Jeff Layton
2021-03-11 3:45 ` Luo Longjun
2021-03-11 13:52 ` Jeff Layton
2021-02-24 8:35 ` [PATCH v2 02/24] " Luo Longjun
2021-02-24 14:44 ` J. Bruce Fields
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210220063250.742164-1-luolongjun@huawei.com \
--to=luolongjun@huawei.com \
--cc=bfields@fieldses.org \
--cc=jlayton@kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=luchunhua@huawei.com \
--cc=sangyan@huawei.com \
--cc=viro@zeniv.linux.org.uk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.