From: Mark Tinguely <tinguely@sgi.com>
To: Eric Sandeen <sandeen@redhat.com>
Cc: xfs-oss <xfs@oss.sgi.com>
Subject: Re: [PATCH] mkfs.xfs: fix protofile name create block reservation
Date: Fri, 09 Aug 2013 08:34:40 -0500 [thread overview]
Message-ID: <5204EFF0.1090402@sgi.com> (raw)
In-Reply-To: <5201E28B.1050800@redhat.com>
On 08/07/13 01:00, Eric Sandeen wrote:
> A large protofile which creates a large directory and requires
> a a dir tree split, can fail:
>
> mkfs.xfs: directory createname error [28 - No space left on device]
>
> This is because when we've split a block once, we decrement args->total:
> (see kernel commit a7444053fb3ebd3d905e3c7a7bd5ea80a54b083a for the
> rationale)
>
> /* account for newly allocated blocks in reserved blocks total */
> args->total -= dp->i_d.di_nblocks - nblks;
>
> but every call into this path from proto file parsing started
> reserved / args->total as only "1" as passed tro newdirent() -
> so if we allocate a block, args->total hits 0, and then in
> xfs_dir2_node_addname():
>
> /*
> * Add the new leaf entry.
> */
> rval = xfs_dir2_leafn_add(blk->bp, args, blk->index);
> if (rval == 0) {
> ...
> } else {
> /*
> * It didn't work, we need to split the leaf block.
> */
> if (args->total == 0) {
> ASSERT(rval == ENOSPC);
> goto done;
> }
> /*
> * Split the leaf block and insert the new entry.
> */
>
> we hit the args->total == 0 special case, and don't do the next
> split, and ENOSPC gets returned all the way up, and we fail.
>
> So rather than calling newdirent with a total of "1" in every case,
> which doesn't account for possible tree splits, we should call it
> with a more appropriate value: XFS_DIRENTER_SPACE_RES(mp, name->len),
> which will handle the maximum nr of block allocations that might be
> needed during a directory entry insert.
>
> Since the reservation required doesn't depend on entry type,
> just push this down a level, into newdirent() itself.
>
> Reported-by: Boris Ranto<branto@redhat.com>
> Signed-off-by: Eric Sandeen<sandeen@redhat.com>
> ---
This patches and the Coverity xfsprog patches have been commited to the
master branch:
commit 312592defb8b6051389a56a5c780819b4239dab4
Author: Eric Sandeen <sandeen@redhat.com>
Date: Thu Aug 1 01:13:10 2013 +0000
xfsprogs: fix unint var in repair phase6
commit aba29588f81dad52129037c15fe584ec89b36a4f
Author: Eric Sandeen <sandeen@sandeen.net>
Date: Thu Aug 1 02:25:18 2013 +0000
xfsprogs: fix agcnts leak in xfs_repair's scan_ags
commit dc93954aa6f13963bcc87fc00ce55a4745dc7b93
Author: Eric Sandeen <sandeen@redhat.com>
Date: Thu Aug 1 01:33:47 2013 +0000
xfsprogs:free bp in xlog_find_tail() error path
commit 4623d1041dd34d73aeab4b51002fc9ca6d543415
Author: Eric Sandeen <sandeen@redhat.com>
Date: Thu Aug 1 01:32:30 2013 +0000
xfsprogs: free bp in xlog_find_zeroed() error path
commit a134873e2903837bdbeab261b6d0ceee2fd499ba
Author: Eric Sandeen <sandeen@redhat.com>
Date: Thu Aug 1 01:42:58 2013 +0000
xfsprogs: fix buffer leak in xlog_print_find_oldest
commit 504dbe46549d462e79565514d86ce69b74b96893
Author: Eric Sandeen <sandeen@redhat.com>
Date: Thu Aug 1 01:18:54 2013 +0000
xfsprogs: avoid double-free in xfs_attr_node_addname
commit 1b6bf714a7179942b8523cc966124249b74381da
Author: Eric Sandeen <sandeen@redhat.com>
Date: Wed Aug 7 06:00:43 2013 +0000
mkfs.xfs: fix protofile name create block reservation
None collide with the for Linux 3.12 kernel/user sync series.
The kernel patches should make Linux 3.12.
--Mark.
_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs
prev parent reply other threads:[~2013-08-09 13:34 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-08-07 6:00 [PATCH] mkfs.xfs: fix protofile name create block reservation Eric Sandeen
2013-08-07 20:19 ` Mark Tinguely
2013-08-07 20:42 ` Eric Sandeen
2013-08-09 13:34 ` Mark Tinguely [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=5204EFF0.1090402@sgi.com \
--to=tinguely@sgi.com \
--cc=sandeen@redhat.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.