From: Tao Ma <tao.ma@oracle.com>
To: ocfs2-devel@oss.oracle.com
Subject: [Ocfs2-devel] [PATCH 12/14] ocfs2: Let ocfs2_xa_prepare_entry() do space checks.
Date: Wed, 02 Sep 2009 09:54:31 +0800 [thread overview]
Message-ID: <4A9DD057.3050306@oracle.com> (raw)
In-Reply-To: <1251448563-12508-13-git-send-email-joel.becker@oracle.com>
Hi Joel,
Joel Becker wrote:
> ocfs2_xattr_set_in_bucket() doesn't need to do its own hacky space
> checking. Let's let ocfs2_xa_prepare_entry() (via ocfs2_xa_set()) do
> the more accurate work. Whenever it doesn't have space,
> ocfs2_xattr_set_in_bucket() can try to get more space.
>
> Signed-off-by: Joel Becker <joel.becker@oracle.com>
> ---
> fs/ocfs2/xattr.c | 239 ++++++++++++++++-------------------------------------
> 1 files changed, 72 insertions(+), 167 deletions(-)
>
> diff --git a/fs/ocfs2/xattr.c b/fs/ocfs2/xattr.c
> index b4cda7e..e400d64 100644
> --- a/fs/ocfs2/xattr.c
> +++ b/fs/ocfs2/xattr.c
<snip>
> - free = xh_free_start - header_size - OCFS2_XATTR_HEADER_GAP;
> + /* Ack, need more space. Let's try to get another bucket! */
> +
> /*
> - * We need to make sure the new name/value pair
> - * can exist in the same block.
> + * We do not allow for overlapping ranges between buckets. And
> + * the maximum number of collisions we will allow for then is
> + * one bucket's worth, so check it here whether we need to
> + * add a new bucket for the insert.
> */
> - if (xh_free_start % blocksize < need)
> - free -= xh_free_start % blocksize;
> -
> - mlog(0, "xs->not_found = %d, in xattr bucket %llu: free = %d, "
> - "need = %d, max_free = %d, xh_free_start = %u, xh_name_value_len ="
> - " %u\n", xs->not_found,
> - (unsigned long long)bucket_blkno(xs->bucket),
> - free, need, max_free, le16_to_cpu(xh->xh_free_start),
> - le16_to_cpu(xh->xh_name_value_len));
> -
> - if (free < need ||
> - (xs->not_found &&
> - count == ocfs2_xattr_max_xe_in_bucket(inode->i_sb))) {
> - if (need <= max_free &&
> - count < ocfs2_xattr_max_xe_in_bucket(inode->i_sb)) {
I just have one concern. Here we used to check whether count ==
ocfs2_xattr_max_xe_in_bucket(inode->i_sb) which make sure
ocfs2_xattr_entry to be stored only in the first block of a bucket(this
is a legacy issue before you added ocfs2_xattr_bucket abstraction), so
now you remove this restriction. Maybe it is ok since now we already
read the whole bucket and it looks that your current xa_* abstraction
can handle it. Just want to remind you of it.
Regards,
Tao
next prev parent reply other threads:[~2009-09-02 1:54 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-08-28 8:35 [Ocfs2-devel] [PATCH 0/14] ocfs2: Unify the setting of extended attributes Joel Becker
2009-08-28 8:35 ` [Ocfs2-devel] [PATCH 01/14] ocfs2: Introduce ocfs2_xa_loc Joel Becker
2009-09-01 5:32 ` Tao Ma
2009-09-01 8:26 ` Joel Becker
2009-09-01 8:45 ` Joel Becker
2009-09-01 8:49 ` Tao Ma
2009-08-28 8:35 ` [Ocfs2-devel] [PATCH 02/14] ocfs2: Remove xattrs via ocfs2_xa_loc Joel Becker
2009-09-01 6:03 ` Tao Ma
2009-09-01 8:28 ` Joel Becker
2009-08-28 8:35 ` [Ocfs2-devel] [PATCH 03/14] ocfs2: Prefix the member fields of struct ocfs2_xattr_info Joel Becker
2009-08-28 8:35 ` [Ocfs2-devel] [PATCH 04/14] ocfs2: Add a name_len field to ocfs2_xattr_info Joel Becker
2009-08-28 8:35 ` [Ocfs2-devel] [PATCH 05/14] ocfs2: Wrap calculation of name+value pair size Joel Becker
2009-08-28 8:35 ` [Ocfs2-devel] [PATCH 06/14] ocfs2: Set the xattr name+value pair in one place Joel Becker
2009-09-01 7:33 ` Tao Ma
2009-09-01 8:30 ` Joel Becker
2009-09-01 8:47 ` Tao Ma
2009-09-01 9:30 ` Joel Becker
2009-09-01 12:12 ` Tao Ma
2009-08-28 8:35 ` [Ocfs2-devel] [PATCH 07/14] ocfs2: Handle value tree roots in ocfs2_xa_set_inline_value() Joel Becker
2009-08-28 8:35 ` [Ocfs2-devel] [PATCH 08/14] ocfs2: Provide ocfs2_xa_fill_value_buf() for external value processing Joel Becker
2009-08-28 8:35 ` [Ocfs2-devel] [PATCH 09/14] ocfs2: Teach ocfs2_xa_loc how to do its own journal work Joel Becker
2009-08-28 8:35 ` [Ocfs2-devel] [PATCH 10/14] ocfs2: Allocation in ocfs2_xa_prepare_entry() values in ocfs2_xa_store_value() Joel Becker
2009-09-01 8:55 ` Tao Ma
2009-09-01 20:21 ` Joel Becker
2009-09-02 1:51 ` Joel Becker
2009-09-02 4:59 ` Tao Ma
2009-09-02 8:05 ` Joel Becker
2009-09-02 8:37 ` Joel Becker
2009-09-02 9:01 ` tristan.ye
2009-09-02 10:24 ` Joel Becker
2009-09-02 10:31 ` Joel Becker
2009-09-03 10:48 ` tristan.ye
2009-09-05 1:35 ` Joel Becker
2009-09-08 1:25 ` tristan.ye
2009-08-28 8:36 ` [Ocfs2-devel] [PATCH 11/14] ocfs2: Gell into ocfs2_xa_set() Joel Becker
2009-08-28 8:36 ` [Ocfs2-devel] [PATCH 12/14] ocfs2: Let ocfs2_xa_prepare_entry() do space checks Joel Becker
2009-09-02 1:54 ` Tao Ma [this message]
2009-09-02 2:11 ` Joel Becker
2009-09-02 2:21 ` Tao Ma
2009-08-28 8:36 ` [Ocfs2-devel] [PATCH 13/14] ocfs2: Set xattr block entries with ocfs2_xa_set() Joel Becker
2009-09-02 2:50 ` Tao Ma
2009-08-28 8:36 ` [Ocfs2-devel] [PATCH 14/14] ocfs2: Set inline xattr " Joel Becker
2009-09-02 2:58 ` Tao Ma
-- strict thread matches above, loose matches on Subject: below --
2009-08-19 19:54 [Ocfs2-devel] [PATCH 0/14] ocfs2: Unify the setting of extended attributes Joel Becker
2009-08-19 19:54 ` [Ocfs2-devel] [PATCH 12/14] ocfs2: Let ocfs2_xa_prepare_entry() do space checks Joel Becker
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=4A9DD057.3050306@oracle.com \
--to=tao.ma@oracle.com \
--cc=ocfs2-devel@oss.oracle.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.