Linux kernel commit 38129a13e6e7 ("switch mnt_hash to hlist"),
moves mnt_hash from list_head to hlist_node. Introduce these
list type changes to iterate over the mounted filesystem and
walk dentries.

These changes are not compatible with previous kernel versions,
so add new dir_names script file for kernel version >= 3.14
to kernel version <= 4.8.

Signed-off-by: Kamalesh Babulal <[email protected]>
Cc: Atsushi Kumagai <[email protected]>
---
 eppic_scripts/dir_names_3_14_to_4_8.c | 82 +++++++++++++++++++++++++++++++++++
 1 file changed, 82 insertions(+)
 create mode 100644 eppic_scripts/dir_names_3_14_to_4_8.c

diff --git a/eppic_scripts/dir_names_3_14_to_4_8.c 
b/eppic_scripts/dir_names_3_14_to_4_8.c
new file mode 100644
index 0000000..5bf08fe
--- /dev/null
+++ b/eppic_scripts/dir_names_3_14_to_4_8.c
@@ -0,0 +1,82 @@
+string
+vfs_opt()
+{
+           return "l";
+}
+
+string
+vfs_usage()
+{
+           return "\n";
+}
+
+static void
+vfs_showusage()
+{
+           printf("usage : vfs %s", vfs_usage());
+}
+
+string
+vfs_help()
+{
+           return "Help";
+}
+
+void
+rm_names(struct dentry *dir)
+{
+       struct list_head *next, *head;
+       unsigned int hash_len;
+       int i;
+
+       memset(dir->d_iname, 0, 0x20);
+       hash_len = *((unsigned int *)&dir->d_name);
+       memset(dir->d_name.name, 0, hash_len);
+
+       head = (struct list_head *)&(dir->d_subdirs);
+       next = (struct list_head *)dir->d_subdirs.next;
+
+       while (next != head)
+       {
+               struct dentry *child, *off = 0;
+
+               child = (struct dentry *)((unsigned long)next - (unsigned 
long)&(off->d_child));
+               rm_names(child);
+               next = child->d_child.next;
+       }
+
+       return;
+}
+
+int
+vfs()
+{
+       int i;
+       struct hlist_bl_head *tab;
+       unsigned int d_hash_size = d_hash_mask;
+
+       tab = (struct hlist_bl_head *)dentry_hashtable;
+
+       for (i = 0; i < d_hash_size; i++)
+       {
+               struct hlist_bl_head *head;
+               struct hlist_bl_node *head_node, *next;
+
+               head = (struct hlist_bl_head *) (tab + i);
+               head_node = head->first;
+               if (!head_node)
+                       continue;
+
+               next = head_node;
+
+               while (next)
+               {
+                       struct dentry *root, *off = 0;
+
+                       root = (struct dentry *)((unsigned long)next - 
(unsigned long)&(off->d_hash));
+                       rm_names(root);
+                       next = next->next;
+               }
+       }
+       return 1;
+}
-- 
2.7.4


_______________________________________________
kexec mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/kexec

Reply via email to