All of lore.kernel.org
 help / color / mirror / Atom feed
From: Alex Elder <aelder@sgi.com>
To: wkendall@sgi.com
Cc: xfs@oss.sgi.com
Subject: Re: [PATCH 2/2] xfsrestore: change nrh_t to be 64 bits instead of 32
Date: Thu, 14 Oct 2010 13:45:12 -0500	[thread overview]
Message-ID: <1287081912.2362.575.camel@doink> (raw)
In-Reply-To: <20101012215400.639300973@sgi.com>

On Tue, 2010-10-12 at 16:53 -0500, wkendall@sgi.com wrote:
> plain text document attachment (namreg_64bit)
> 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.

This is a good change.  The value of an nrh_t is (opaquely)
assigned as a 64-bit file offset, so it makes sense it should
also be 64 bits.  Much better way of computing HDLMAX also.

Do you know why NODESZ (= 48) is defined as a constant, and
used separate from sizeof (struct node)?  Is the format of
a node structure recorded persistently somewhere?  I don't
know this code well enough to recognize whether the change
to the node_t definition affects only in-memory structures.

Provided there are no ill effects due to changing the
node struct to hold the 64-bit name registry handle:

Reviewed-by: Alex Elder <aelder@sgi.com>

> 
> 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



_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs

  reply	other threads:[~2010-10-14 18:46 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 ` [PATCH 2/2] xfsrestore: change nrh_t to be 64 bits instead of 32 wkendall
2010-10-14 18:45   ` Alex Elder [this message]
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=1287081912.2362.575.camel@doink \
    --to=aelder@sgi.com \
    --cc=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.