From 7be4c8e5488e0a1d32918339fa80f3ea33bf48c6 Mon Sep 17 00:00:00 2001 From: Eric Biggers Date: Sun, 31 May 2015 00:18:00 -0500 Subject: [PATCH] Save memory by using hlist for i_dentry --- include/wimlib/dentry.h | 2 +- include/wimlib/inode.h | 6 +++--- src/inode.c | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/include/wimlib/dentry.h b/include/wimlib/dentry.h index efaf1768..74cb7ad6 100644 --- a/include/wimlib/dentry.h +++ b/include/wimlib/dentry.h @@ -57,7 +57,7 @@ struct wim_dentry { /* Linked list node that places this dentry in the list of aliases for * its inode (d_inode) */ - struct list_head d_alias; + struct hlist_node d_alias; /* Pointer to the UTF-16LE short filename (malloc()ed buffer), or NULL * if this dentry has no short name. */ diff --git a/include/wimlib/inode.h b/include/wimlib/inode.h index 777a05b5..20e1b5cc 100644 --- a/include/wimlib/inode.h +++ b/include/wimlib/inode.h @@ -119,7 +119,7 @@ struct wim_inode { /* List of dentries that are aliases for this inode. There will be * i_nlink dentries in this list. */ - struct list_head i_dentry; + struct hlist_head i_dentry; /* Field to place this inode into a list. While reading a WIM image or * adding files to a WIM image this is owned by the inode table; @@ -268,11 +268,11 @@ new_inode(struct wim_dentry *dentry, bool set_timestamps); /* Iterate through each alias of the specified inode. */ #define inode_for_each_dentry(dentry, inode) \ - list_for_each_entry((dentry), &(inode)->i_dentry, d_alias) + hlist_for_each_entry((dentry), &(inode)->i_dentry, d_alias) /* Return an alias of the specified inode. */ #define inode_first_dentry(inode) \ - container_of(inode->i_dentry.next, struct wim_dentry, d_alias) + hlist_entry(inode->i_dentry.first, struct wim_dentry, d_alias) /* Return the full path of an alias of the specified inode, or NULL if a full * path could not be determined. */ diff --git a/src/inode.c b/src/inode.c index e43fd2d0..a181e885 100644 --- a/src/inode.c +++ b/src/inode.c @@ -57,7 +57,7 @@ new_inode(struct wim_dentry *dentry, bool set_timestamps) inode->i_security_id = -1; /*inode->i_nlink = 0;*/ inode->i_rp_flags = WIM_RP_FLAG_NOT_FIXED; - INIT_LIST_HEAD(&inode->i_dentry); + INIT_HLIST_HEAD(&inode->i_dentry); inode->i_streams = inode->i_embedded_streams; if (set_timestamps) { u64 now = now_as_wim_timestamp(); @@ -108,7 +108,7 @@ d_associate(struct wim_dentry *dentry, struct wim_inode *inode) { wimlib_assert(!dentry->d_inode); - list_add_tail(&dentry->d_alias, &inode->i_dentry); + hlist_add_head(&dentry->d_alias, &inode->i_dentry); dentry->d_inode = inode; inode->i_nlink++; } @@ -125,7 +125,7 @@ d_disassociate(struct wim_dentry *dentry) wimlib_assert(inode->i_nlink > 0); - list_del(&dentry->d_alias); + hlist_del(&dentry->d_alias); dentry->d_inode = NULL; inode->i_nlink--; -- 2.43.0