From: wkendall@sgi.com
To: xfs@oss.sgi.com
Subject: [PATCH 2/2] xfsrestore: change nrh_t to be 64 bits instead of 32
Date: Tue, 12 Oct 2010 16:53:24 -0500 [thread overview]
Message-ID: <20101012215400.639300973@sgi.com> (raw)
In-Reply-To: 20101012215322.749700656@sgi.com
[-- Attachment #1: namreg_64bit --]
[-- Type: text/plain, Size: 4064 bytes --]
An nrh_t refers to a byte offset in a file containing all the pathname
components from a dump. At an average filename length of 20
characters, an nrh_t would overflow on a dump containing ~214 million
directory entries.
Signed-off-by: Bill Kendall <wkendall@sgi.com>
Index: xfsdump-kernel.org/restore/namreg.h
===================================================================
--- xfsdump-kernel.org.orig/restore/namreg.h
+++ xfsdump-kernel.org/restore/namreg.h
@@ -26,8 +26,8 @@
/* nrh_t - handle to a registered name
*/
-typedef size32_t nrh_t;
-#define NRH_NULL SIZE32MAX
+typedef size64_t nrh_t;
+#define NRH_NULL SIZE64MAX
/* namreg_init - creates the name registry. resync is TRUE if the
Index: xfsdump-kernel.org/restore/namreg.c
===================================================================
--- xfsdump-kernel.org.orig/restore/namreg.c
+++ xfsdump-kernel.org/restore/namreg.c
@@ -72,26 +72,20 @@ typedef struct namreg_tran namreg_tran_t
*/
#define CHKBITCNT 2
#define CHKBITSHIFT ( NBBY * sizeof( nrh_t ) - CHKBITCNT )
-#define CHKBITLOMASK ( ( 1 << CHKBITCNT ) - 1 )
+#define CHKBITLOMASK ( ( 1ULL << CHKBITCNT ) - 1 )
#define CHKBITMASK ( CHKBITLOMASK << CHKBITSHIFT )
#define CHKHDLCNT CHKBITSHIFT
-#define CHKHDLMASK ( ( 1 << CHKHDLCNT ) - 1 )
-#define CHKGETBIT( h ) ( ( h >> CHKBITSHIFT ) & CHKBITLOMASK )
-#define CHKGETHDL( h ) ( h & CHKHDLMASK )
-#define CHKMKHDL( c, h ) ( ( ( c << CHKBITSHIFT ) & CHKBITMASK ) \
+#define CHKHDLMASK ( ( 1ULL << CHKHDLCNT ) - 1 )
+#define CHKGETBIT( h ) ( ( (h) >> CHKBITSHIFT ) & CHKBITLOMASK )
+#define CHKGETHDL( h ) ( (h) & CHKHDLMASK )
+#define CHKMKHDL( c, h ) ( ( ( (c) << CHKBITSHIFT ) & CHKBITMASK ) \
| \
- ( h & CHKHDLMASK ))
+ ( (h) & CHKHDLMASK ))
#define HDLMAX ( ( off64_t )CHKHDLMASK )
#else /* NAMREGCHK */
-#define HDLMAX ( ( ( off64_t )1 \
- << \
- ( ( off64_t )NBBY \
- * \
- ( off64_t )sizeof( nrh_t ))) \
- - \
- ( off64_t )2 ) /* 2 to avoid NRH_NULL */
+#define HDLMAX ( NRH_NULL - 1 )
#endif /* NAMREGCHK */
Index: xfsdump-kernel.org/restore/tree.c
===================================================================
--- xfsdump-kernel.org.orig/restore/tree.c
+++ xfsdump-kernel.org/restore/tree.c
@@ -166,19 +166,18 @@ typedef struct tran tran_t;
#define NODESZ 48
struct node {
- xfs_ino_t n_ino; /* 8 8 ino */
- nrh_t n_nrh; /* 4 12 handle to name in name registry */
- dah_t n_dah; /* 4 16 handle to directory attributes */
- nh_t n_hashh; /* 4 20 hash array */
- nh_t n_parh; /* 4 24 parent */
- nh_t n_sibh; /* 4 28 sibling list */
- nh_t n_sibprevh; /* 4 32 prev sibling list - dbl link list */
- nh_t n_cldh; /* 4 36 children list */
- nh_t n_lnkh; /* 4 40 hard link list */
- gen_t n_gen; /* 2 42 generation count mod 0x10000 */
- u_char_t n_flags; /* 1 43 action and state flags */
- u_char_t n_nodehkbyte; /* 1 44 given to node abstraction */
- int32_t pad; /* 4 48 padding to 8 byte boundary */
+ xfs_ino_t n_ino; /* 8 8 ino */
+ nrh_t n_nrh; /* 8 16 handle to name in name registry */
+ dah_t n_dah; /* 4 20 handle to directory attributes */
+ nh_t n_hashh; /* 4 24 hash array */
+ nh_t n_parh; /* 4 28 parent */
+ nh_t n_sibh; /* 4 32 sibling list */
+ nh_t n_sibprevh; /* 4 36 prev sibling list - dbl link list */
+ nh_t n_cldh; /* 4 40 children list */
+ nh_t n_lnkh; /* 4 44 hard link list */
+ gen_t n_gen; /* 2 46 generation count mod 0x10000 */
+ u_char_t n_flags; /* 1 47 action and state flags */
+ u_char_t n_nodehkbyte; /* 1 48 given to node abstraction */
};
typedef struct node node_t;
@@ -3393,9 +3392,9 @@ Node_free( nh_t *nhp )
namreg_del( np->n_nrh );
np->n_nrh = NRH_NULL;
}
- if ( np->n_dah != NRH_NULL ) {
+ if ( np->n_dah != DAH_NULL ) {
dirattr_del( np->n_dah );
- np->n_dah = NRH_NULL;
+ np->n_dah = DAH_NULL;
}
np->n_flags = 0;
np->n_parh = NH_NULL;
_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs
next prev parent reply other threads:[~2010-10-12 21:52 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-10-12 21:53 [PATCH 0/2] xfsrestore: lift directory entry count limitations wkendall
2010-10-12 21:53 ` [PATCH 1/2] xfsrestore: turn off NODECHK wkendall
2010-10-14 18:45 ` Alex Elder
2010-10-15 14:07 ` Bill Kendall
2010-10-12 21:53 ` wkendall [this message]
2010-10-14 18:45 ` [PATCH 2/2] xfsrestore: change nrh_t to be 64 bits instead of 32 Alex Elder
2010-10-15 14:06 ` Bill Kendall
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=20101012215400.639300973@sgi.com \
--to=wkendall@sgi.com \
--cc=xfs@oss.sgi.com \
/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.