All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andreas Dilger <adilger@sun.com>
To: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>
Cc: linux-ext4 <linux-ext4@vger.kernel.org>
Subject: Re: EXT4_FEATURE_RO_COMPAT_DIR_NLINK and the directory size.
Date: Tue, 12 Feb 2008 15:56:42 -0700	[thread overview]
Message-ID: <20080212225642.GS3029@webber.adilger.int> (raw)
In-Reply-To: <20080212150516.GC16634@skywalker>

On Feb 12, 2008  20:35 +0530, Aneesh Kumar K.V wrote:
> On Tue, Feb 12, 2008 at 07:23:42PM +0530, Aneesh Kumar K.V wrote:
> > On Tue, Feb 12, 2008 at 06:06:32PM +0530, Aneesh Kumar K.V wrote:
> > > Also after running fsstress fsck fails with zero size directory on
> > > powerpc. I am finding directories with 
> > > 
> > > i_links_count == 1
> > > i_blocks == 0

Is this after some failure to create a subdirectory (e.g. ENOSPC)?

> > (gdb) p *inode
> > $1 = {i_mode = 16895, i_uid = 0, i_size = 4096, i_atime = 1202822535, i_ctime = 1202822535, i_mtime = 1202822535, i_dtime = 0,
> > i_gid = 0, i_links_count = 1, i_blocks = 0, i_flags = 524288, osd1 = {linux1 = {l_i_version = 1}, hurd1 = {h_i_translator = 1},
> > masix1 = {m_i_reserved1 = 1}}, i_block = {4077518848, 262144, 0 <repeats 13 times>}, i_generation = 2950864834, i_file_acl = 0,
> > i_dir_acl = 0, i_faddr = 0, osd2 = {linux2 = {l_i_blocks_hi = 0, i_pad1 = 0, l_i_uid_high = 0, l_i_gid_high = 0, l_i_reserved2 = 0},
> > hurd2 = {h_i_frag = 0 '\0', h_i_fsize = 0 '\0', h_i_mode_high = 0, h_i_uid_high = 0, h_i_gid_high = 0, h_i_author = 0}, masix2 = {
> > m_i_frag = 0 '\0', m_i_fsize = 0 '\0', m_pad1 = 0, m_i_reserved2 = {0, 0}}}}

This is the subdirectory inode?  The i_block values are the extent magic,
and i_flags = EXTENT_FL it appears (which is fine).

> Right now waiting for the test to finish with this change.
> 
> diff --git a/fs/ext4/namei.c b/fs/ext4/namei.c
> index a9347fb..fd3b031 100644
> --- a/fs/ext4/namei.c
> +++ b/fs/ext4/namei.c
> @@ -1805,7 +1805,7 @@ retry:
>  	inode->i_size = EXT4_I(inode)->i_disksize = inode->i_sb->s_blocksize;
>  	dir_block = ext4_bread (handle, inode, 0, 1, &err);
>  	if (!dir_block) {
> -		ext4_dec_count(handle, inode); /* is this nlink == 0? */
> +		drop_nlink(inode);
>  		ext4_mark_inode_dirty(handle, inode);
>  		iput (inode);
>  		goto out_stop;

It's entirely possible this is the right fix.  The code was changed for
all directory inodes replacing drop_nlink() (or its predecessor) with
ext4_dec_count().  In most cases this is correct, but it seems here it
isn't very clear (even with the useless comment) that the intention is
to drop the nlinks to 0 for the new directory inode.

Cheers, Andreas
--
Andreas Dilger
Sr. Staff Engineer, Lustre Group
Sun Microsystems of Canada, Inc.

      reply	other threads:[~2008-02-12 22:57 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-02-12 12:36 EXT4_FEATURE_RO_COMPAT_DIR_NLINK and the directory size Aneesh Kumar K.V
2008-02-12 13:53 ` Aneesh Kumar K.V
2008-02-12 15:05   ` Aneesh Kumar K.V
2008-02-12 22:56     ` Andreas Dilger [this message]

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=20080212225642.GS3029@webber.adilger.int \
    --to=adilger@sun.com \
    --cc=aneesh.kumar@linux.vnet.ibm.com \
    --cc=linux-ext4@vger.kernel.org \
    /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.