// SPDX-License-Identifier: GPL-2.0 #include #include #include #include #include #include #include #include #include <../fs/mount.h> int list_mounts(struct seq_file *m, void *v); int list_mounts(struct seq_file *m, void *v) { struct rb_node *cur; struct mount *mnt; char *buf; char *path; cur = current->nsproxy->mnt_ns->mnt_first_node; buf = kmalloc(sizeof(char) * PATH_MAX, GFP_KERNEL); while (cur) { mnt = rb_entry(cur, struct mount, mnt_node); struct path p = { .mnt = &mnt->mnt, .dentry = mnt->mnt.mnt_root, }; path = d_path(&p, buf, PATH_MAX); if (IS_ERR(path)) path = 0; seq_printf(m, "%-10s %s\n", mnt->mnt_devname, path); cur = rb_next(cur); } kfree(buf); return 0; }