Re: [PATCH 1/2] erofs: clean up erofs_iget()

From: Xiang Gao
Date: Fri Jan 13 2023 - 02:46:29 EST




On 2023/1/13 15:41, Jingbo Xu wrote:


On 1/13/23 2:52 PM, Gao Xiang wrote:
Move inode hash function into inode.c and simplify erofs_iget().

Signed-off-by: Gao Xiang <hsiangkao@xxxxxxxxxxxxxxxxx>
---
fs/erofs/inode.c | 40 +++++++++++++++++++++-------------------
fs/erofs/internal.h | 9 ---------
2 files changed, 21 insertions(+), 28 deletions(-)

diff --git a/fs/erofs/inode.c b/fs/erofs/inode.c
index d3b8736fa124..57328691582e 100644
--- a/fs/erofs/inode.c
+++ b/fs/erofs/inode.c
@@ -308,47 +308,49 @@ static int erofs_fill_inode(struct inode *inode)
}
/*
- * erofs nid is 64bits, but i_ino is 'unsigned long', therefore
- * we should do more for 32-bit platform to find the right inode.
+ * ino_t is 32-bits on 32-bit arch. We have to squash the 64-bit value down
+ * so that it will fit.
*/
-static int erofs_ilookup_test_actor(struct inode *inode, void *opaque)
+static ino_t erofs_squash_ino(erofs_nid_t nid)
{
- const erofs_nid_t nid = *(erofs_nid_t *)opaque;
+ ino_t ino = (ino_t)nid;
+
+ if (sizeof(ino_t) < sizeof(erofs_nid_t))
+ ino ^= nid >> (sizeof(erofs_nid_t) - sizeof(ino_t)) * 8;

Shouldn't we do:

ino ^= nid >> sizeof(ino_t) * 8
Actually I copied it from fuse, for 64-bit erofs_nid_t it has no difference
though. I will also update it as your suggestion in v2.

Thanks,
Gao Xiang


?