All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/2] Set lost+found inode as used after its allocation
@ 2011-11-08 18:46 Carlos Maiolino
  2011-11-08 18:46 ` [PATCH 1/2] xfs_repair: Add inline function to get avl tree node Carlos Maiolino
  2011-11-08 18:46 ` [PATCH 2/2] xfs_repair: Properly set lost+found inode as used Carlos Maiolino
  0 siblings, 2 replies; 9+ messages in thread
From: Carlos Maiolino @ 2011-11-08 18:46 UTC (permalink / raw)
  To: xfs; +Cc: Carlos Maiolino

This patch set ensure the inode allocated to the lost+found directory is
set as used in AVL tree if it needs to be created (in case no lost+found 
directory is already created on the disk). Also, I added a new inline
function to get AVL tree node offset which currently is being calculated
whenever the offset is needed.

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

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH 1/2] xfs_repair: Add inline function to get avl tree node
  2011-11-08 18:46 [PATCH 0/2] Set lost+found inode as used after its allocation Carlos Maiolino
@ 2011-11-08 18:46 ` Carlos Maiolino
  2011-11-08 18:56   ` Eric Sandeen
  2011-11-08 19:07   ` Christoph Hellwig
  2011-11-08 18:46 ` [PATCH 2/2] xfs_repair: Properly set lost+found inode as used Carlos Maiolino
  1 sibling, 2 replies; 9+ messages in thread
From: Carlos Maiolino @ 2011-11-08 18:46 UTC (permalink / raw)
  To: xfs; +Cc: Carlos Maiolino

dd get_inode_offset() inline function, which will return the offset
of a specific node in the AVL tree avoiding the need to calculate the
the offset each time it needs to be used.
---
 repair/incore.h |    6 ++++++
 1 files changed, 6 insertions(+), 0 deletions(-)

diff --git a/repair/incore.h b/repair/incore.h
index ee0e86a..8e311c9 100644
--- a/repair/incore.h
+++ b/repair/incore.h
@@ -311,6 +311,12 @@ void		get_inode_rec(struct xfs_mount *mp, xfs_agnumber_t agno,
 			      ino_tree_node_t *ino_rec);
 
 extern avltree_desc_t     **inode_tree_ptrs;
+
+static inline int
+get_inode_offset(struct xfs_mount *mp, xfs_ino_t ino, ino_tree_node_t *irec)
+{
+	return XFS_INO_TO_AGINO(mp, ino) - irec->ino_startnum;
+}
 static inline ino_tree_node_t *
 findfirst_inode_rec(xfs_agnumber_t agno)
 {
-- 
1.7.6.4

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

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 2/2] xfs_repair: Properly set lost+found inode as used
  2011-11-08 18:46 [PATCH 0/2] Set lost+found inode as used after its allocation Carlos Maiolino
  2011-11-08 18:46 ` [PATCH 1/2] xfs_repair: Add inline function to get avl tree node Carlos Maiolino
@ 2011-11-08 18:46 ` Carlos Maiolino
  2011-11-08 18:55   ` Eric Sandeen
  2011-11-08 19:07   ` Christoph Hellwig
  1 sibling, 2 replies; 9+ messages in thread
From: Carlos Maiolino @ 2011-11-08 18:46 UTC (permalink / raw)
  To: xfs; +Cc: Carlos Maiolino

This patch makes mk_orphanage() to properly set the inode link count of
the recently allocated inode in the AVL tree, avoiding the lost+found
directory to be bypass the link count check in phase7 and possibly leaving
lost+found directory with a wrong link count.
---
 repair/phase6.c |   17 ++++++++++++++++-
 1 files changed, 16 insertions(+), 1 deletions(-)

diff --git a/repair/phase6.c b/repair/phase6.c
index adad61d..0e0e294 100644
--- a/repair/phase6.c
+++ b/repair/phase6.c
@@ -823,6 +823,8 @@ mk_orphanage(xfs_mount_t *mp)
 	xfs_inode_t	*ip;
 	xfs_inode_t	*pip;
 	xfs_fsblock_t	first;
+	ino_tree_node_t	*irec;
+	int		ino_offset = 0;
 	int		i;
 	int		committed;
 	int		error;
@@ -875,6 +877,18 @@ mk_orphanage(xfs_mount_t *mp)
 			ORPHANAGE, error);
 	}
 	ip->i_d.di_nlink++;		/* account for . */
+	ino = ip->i_ino;
+
+	irec = find_inode_rec(mp,
+			XFS_INO_TO_AGNO(mp, ino),
+			XFS_INO_TO_AGINO(mp,ino));
+	ino_offset = get_inode_offset(mp, ino, irec);
+
+	/* Set the inode allocated to lost+found as used in the AVL
+ 	 * tree, so it is not bypassed in phase 7
+ 	 */
+	set_inode_used(irec,ino_offset);
+	add_inode_ref(irec,ino_offset);
 
 	/*
 	 * now that we know the transaction will stay around,
@@ -902,6 +916,8 @@ mk_orphanage(xfs_mount_t *mp)
 				XFS_INO_TO_AGINO(mp, mp->m_sb.sb_rootino)), 0);
 
 
+	add_inode_reached(irec,ino_offset);
+
 	libxfs_trans_log_inode(tp, pip, XFS_ILOG_CORE);
 	libxfs_dir_init(tp, ip, pip);
 	libxfs_trans_log_inode(tp, ip, XFS_ILOG_CORE);
@@ -912,7 +928,6 @@ mk_orphanage(xfs_mount_t *mp)
 			ORPHANAGE, error);
 	}
 
-	ino = ip->i_ino;
 
 	libxfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES|XFS_TRANS_SYNC);
 
-- 
1.7.6.4

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

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH 2/2] xfs_repair: Properly set lost+found inode as used
  2011-11-08 18:46 ` [PATCH 2/2] xfs_repair: Properly set lost+found inode as used Carlos Maiolino
@ 2011-11-08 18:55   ` Eric Sandeen
  2011-11-08 19:07   ` Christoph Hellwig
  1 sibling, 0 replies; 9+ messages in thread
From: Eric Sandeen @ 2011-11-08 18:55 UTC (permalink / raw)
  To: Carlos Maiolino; +Cc: xfs

On 11/8/11 12:46 PM, Carlos Maiolino wrote:
> This patch makes mk_orphanage() to properly set the inode link count of
> the recently allocated inode in the AVL tree, avoiding the lost+found
> directory to be bypass the link count check in phase7 and possibly leaving
> lost+found directory with a wrong link count.

Looks pretty good to me.  I think maybe add_inode_reached shouldn't
be called until the transaction to do it is complete, though?
Otherwise that might fail and we'd still have marked it as reached;
I think that could be a problem.

Thanks,
-Eric

> ---
>  repair/phase6.c |   17 ++++++++++++++++-
>  1 files changed, 16 insertions(+), 1 deletions(-)
> 
> diff --git a/repair/phase6.c b/repair/phase6.c
> index adad61d..0e0e294 100644
> --- a/repair/phase6.c
> +++ b/repair/phase6.c
> @@ -823,6 +823,8 @@ mk_orphanage(xfs_mount_t *mp)
>  	xfs_inode_t	*ip;
>  	xfs_inode_t	*pip;
>  	xfs_fsblock_t	first;
> +	ino_tree_node_t	*irec;
> +	int		ino_offset = 0;
>  	int		i;
>  	int		committed;
>  	int		error;
> @@ -875,6 +877,18 @@ mk_orphanage(xfs_mount_t *mp)
>  			ORPHANAGE, error);
>  	}
>  	ip->i_d.di_nlink++;		/* account for . */
> +	ino = ip->i_ino;
> +
> +	irec = find_inode_rec(mp,
> +			XFS_INO_TO_AGNO(mp, ino),
> +			XFS_INO_TO_AGINO(mp,ino));
> +	ino_offset = get_inode_offset(mp, ino, irec);
> +
> +	/* Set the inode allocated to lost+found as used in the AVL
> + 	 * tree, so it is not bypassed in phase 7
> + 	 */
> +	set_inode_used(irec,ino_offset);
> +	add_inode_ref(irec,ino_offset);
>  
>  	/*
>  	 * now that we know the transaction will stay around,
> @@ -902,6 +916,8 @@ mk_orphanage(xfs_mount_t *mp)
>  				XFS_INO_TO_AGINO(mp, mp->m_sb.sb_rootino)), 0);
>  
>  
> +	add_inode_reached(irec,ino_offset);
> +
>  	libxfs_trans_log_inode(tp, pip, XFS_ILOG_CORE);
>  	libxfs_dir_init(tp, ip, pip);
>  	libxfs_trans_log_inode(tp, ip, XFS_ILOG_CORE);
> @@ -912,7 +928,6 @@ mk_orphanage(xfs_mount_t *mp)
>  			ORPHANAGE, error);
>  	}
>  
> -	ino = ip->i_ino;
>  
>  	libxfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES|XFS_TRANS_SYNC);
>  

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

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 1/2] xfs_repair: Add inline function to get avl tree node
  2011-11-08 18:46 ` [PATCH 1/2] xfs_repair: Add inline function to get avl tree node Carlos Maiolino
@ 2011-11-08 18:56   ` Eric Sandeen
  2011-11-08 19:02     ` Carlos Maiolino
  2011-11-08 19:07   ` Christoph Hellwig
  1 sibling, 1 reply; 9+ messages in thread
From: Eric Sandeen @ 2011-11-08 18:56 UTC (permalink / raw)
  To: Carlos Maiolino; +Cc: xfs

On 11/8/11 12:46 PM, Carlos Maiolino wrote:
> dd get_inode_offset() inline function, which will return the offset
> of a specific node in the AVL tree avoiding the need to calculate the
> the offset each time it needs to be used.

might be good to find the open-coded instances of this, and
make them use the helper too.

-Eric

> ---
>  repair/incore.h |    6 ++++++
>  1 files changed, 6 insertions(+), 0 deletions(-)
> 
> diff --git a/repair/incore.h b/repair/incore.h
> index ee0e86a..8e311c9 100644
> --- a/repair/incore.h
> +++ b/repair/incore.h
> @@ -311,6 +311,12 @@ void		get_inode_rec(struct xfs_mount *mp, xfs_agnumber_t agno,
>  			      ino_tree_node_t *ino_rec);
>  
>  extern avltree_desc_t     **inode_tree_ptrs;
> +
> +static inline int
> +get_inode_offset(struct xfs_mount *mp, xfs_ino_t ino, ino_tree_node_t *irec)
> +{
> +	return XFS_INO_TO_AGINO(mp, ino) - irec->ino_startnum;
> +}
>  static inline ino_tree_node_t *
>  findfirst_inode_rec(xfs_agnumber_t agno)
>  {

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

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 1/2] xfs_repair: Add inline function to get avl tree node
  2011-11-08 18:56   ` Eric Sandeen
@ 2011-11-08 19:02     ` Carlos Maiolino
  0 siblings, 0 replies; 9+ messages in thread
From: Carlos Maiolino @ 2011-11-08 19:02 UTC (permalink / raw)
  To: Eric Sandeen; +Cc: xfs

On Tue, Nov 08, 2011 at 12:56:19PM -0600, Eric Sandeen wrote:
> On 11/8/11 12:46 PM, Carlos Maiolino wrote:
> > dd get_inode_offset() inline function, which will return the offset
> > of a specific node in the AVL tree avoiding the need to calculate the
> > the offset each time it needs to be used.
> 
> might be good to find the open-coded instances of this, and
> make them use the helper too.
> 
> -Eric
> 
Yep, I can trck down these instances and replace by this function later
with no problem

-- 
--Carlos

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

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 2/2] xfs_repair: Properly set lost+found inode as used
  2011-11-08 18:46 ` [PATCH 2/2] xfs_repair: Properly set lost+found inode as used Carlos Maiolino
  2011-11-08 18:55   ` Eric Sandeen
@ 2011-11-08 19:07   ` Christoph Hellwig
  1 sibling, 0 replies; 9+ messages in thread
From: Christoph Hellwig @ 2011-11-08 19:07 UTC (permalink / raw)
  To: Carlos Maiolino; +Cc: xfs

On Tue, Nov 08, 2011 at 04:46:30PM -0200, Carlos Maiolino wrote:
> This patch makes mk_orphanage() to properly set the inode link count of
> the recently allocated inode in the AVL tree, avoiding the lost+found
> directory to be bypass the link count check in phase7 and possibly leaving
> lost+found directory with a wrong link count.

Thanks a lot, this looks very good technically.

Unfortunately I have a few style nipicks anyway:

> @@ -875,6 +877,18 @@ mk_orphanage(xfs_mount_t *mp)
>  			ORPHANAGE, error);
>  	}
>  	ip->i_d.di_nlink++;		/* account for . */
> +	ino = ip->i_ino;
> +
> +	irec = find_inode_rec(mp,
> +			XFS_INO_TO_AGNO(mp, ino),
> +			XFS_INO_TO_AGINO(mp,ino));

Please always use whitespaces after the comma.

> +	ino_offset = get_inode_offset(mp, ino, irec);
> +
> +	/* Set the inode allocated to lost+found as used in the AVL
> + 	 * tree, so it is not bypassed in phase 7
> + 	 */

The canonical comment style would be:

	/*
	 * Mark the inode allocated to lost+found as used in the AVL tree
	 * so it is not skipped in phase 7.
	 */

(also note the slight change in wording to make it easier to parse for
 me, but I'm no native speaker either)
	 *

> +	set_inode_used(irec,ino_offset);
> +	add_inode_ref(irec,ino_offset);

Same whitespace comment as above here.

Feel free to add my:

Reviewed-by: Christoph Hellwig <hch@lst.de>

after these cosmetic fixups.

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

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 1/2] xfs_repair: Add inline function to get avl tree node
  2011-11-08 18:46 ` [PATCH 1/2] xfs_repair: Add inline function to get avl tree node Carlos Maiolino
  2011-11-08 18:56   ` Eric Sandeen
@ 2011-11-08 19:07   ` Christoph Hellwig
  1 sibling, 0 replies; 9+ messages in thread
From: Christoph Hellwig @ 2011-11-08 19:07 UTC (permalink / raw)
  To: Carlos Maiolino; +Cc: xfs

On Tue, Nov 08, 2011 at 04:46:29PM -0200, Carlos Maiolino wrote:
> dd get_inode_offset() inline function, which will return the offset
> of a specific node in the AVL tree avoiding the need to calculate the
> the offset each time it needs to be used.

Looks good.  We should also use it a bit more, but I can take care of
that.

Reviewed-by: Christoph Hellwig <hch@lst.de>

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

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH 1/2] xfs_repair: Add inline function to get avl tree node
  2011-11-09 16:54 [PATCH 0/2] Set lost+found inode as used after its allocation Carlos Maiolino
@ 2011-11-09 16:54 ` Carlos Maiolino
  0 siblings, 0 replies; 9+ messages in thread
From: Carlos Maiolino @ 2011-11-09 16:54 UTC (permalink / raw)
  To: xfs; +Cc: Carlos Maiolino

Add get_inode_offset() inline function, which will return the offset
of a specific node in the AVL tree avoiding the need to calculate the
the offset each time it needs to be used.

Signed-off-by: Carlos Maiolino <cmaiolino@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Eric Sandeen <sandeen@redhat.com>
---
 repair/incore.h |    6 ++++++
 1 files changed, 6 insertions(+), 0 deletions(-)

diff --git a/repair/incore.h b/repair/incore.h
index ee0e86a..8e311c9 100644
--- a/repair/incore.h
+++ b/repair/incore.h
@@ -311,6 +311,12 @@ void		get_inode_rec(struct xfs_mount *mp, xfs_agnumber_t agno,
 			      ino_tree_node_t *ino_rec);
 
 extern avltree_desc_t     **inode_tree_ptrs;
+
+static inline int
+get_inode_offset(struct xfs_mount *mp, xfs_ino_t ino, ino_tree_node_t *irec)
+{
+	return XFS_INO_TO_AGINO(mp, ino) - irec->ino_startnum;
+}
 static inline ino_tree_node_t *
 findfirst_inode_rec(xfs_agnumber_t agno)
 {
-- 
1.7.6.4

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

^ permalink raw reply related	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2011-11-09 16:54 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-11-08 18:46 [PATCH 0/2] Set lost+found inode as used after its allocation Carlos Maiolino
2011-11-08 18:46 ` [PATCH 1/2] xfs_repair: Add inline function to get avl tree node Carlos Maiolino
2011-11-08 18:56   ` Eric Sandeen
2011-11-08 19:02     ` Carlos Maiolino
2011-11-08 19:07   ` Christoph Hellwig
2011-11-08 18:46 ` [PATCH 2/2] xfs_repair: Properly set lost+found inode as used Carlos Maiolino
2011-11-08 18:55   ` Eric Sandeen
2011-11-08 19:07   ` Christoph Hellwig
  -- strict thread matches above, loose matches on Subject: below --
2011-11-09 16:54 [PATCH 0/2] Set lost+found inode as used after its allocation Carlos Maiolino
2011-11-09 16:54 ` [PATCH 1/2] xfs_repair: Add inline function to get avl tree node Carlos Maiolino

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.