All of lore.kernel.org
 help / color / mirror / Atom feed
From: tristan.ye <tristan.ye@oracle.com>
To: ocfs2-devel@oss.oracle.com
Subject: [Ocfs2-devel] [PATCH] ocfs2: Use xs->bucket to set xattr value	outside.
Date: Thu, 12 Mar 2009 10:28:50 +0800	[thread overview]
Message-ID: <1236824930.6816.142.camel@tristan-laptop.cn.oracle.com> (raw)
In-Reply-To: <1236642573-4073-1-git-send-email-tao.ma@oracle.com>

On Tue, 2009-03-10 at 07:49 +0800, Tao Ma wrote:
> Tristan,
> 	could you please run your xattr test against it?

Awesome! All single&multi-nodes xattr tests passed!


For detail testing info, refer to:
http://oss.oracle.com/osswiki/OCFS2/XattrTest


Regards,
Tristan

> 
> xs->base used to be allocated a 4K size and all the contents in the
> bucket are copied to the it. So in ocfs2_xattr_bucket_set_value_outside,
> we are safe to use xs->base + offset. Now we use ocfs2_xattr_bucket to
> abstract xattr bucket and xs->base is initialized to the start of the
> bu_bhs[0]. So xs->base + offset will overflow when the value root is
> stored outside the first block.
> 
> Then why we can survive the xattr test by now? It is because we always
> read the bucket contiguously now and kernel mm allocate continguous
> memory for us. We are lucky, but we should fix it. So just get the
> right value root as other callers do.
> 
> Signed-off-by: Tao Ma <tao.ma@oracle.com>
> ---
>  fs/ocfs2/xattr.c |   27 +++++++++++++++++++++------
>  1 files changed, 21 insertions(+), 6 deletions(-)
> 
> diff --git a/fs/ocfs2/xattr.c b/fs/ocfs2/xattr.c
> index f1b9af1..503a1d7 100644
> --- a/fs/ocfs2/xattr.c
> +++ b/fs/ocfs2/xattr.c
> @@ -4795,19 +4795,34 @@ static int ocfs2_xattr_bucket_set_value_outside(struct inode *inode,
>  						char *val,
>  						int value_len)
>  {
> -	int offset;
> +	int ret, offset, block_off;
>  	struct ocfs2_xattr_value_root *xv;
>  	struct ocfs2_xattr_entry *xe = xs->here;
> +	struct ocfs2_xattr_bucket *bucket = xs->bucket;
> +	struct ocfs2_xattr_header *xh = bucket_xh(bucket);
> +	void *base;
>  
>  	BUG_ON(!xs->base || !xe || ocfs2_xattr_is_local(xe));
>  
> -	offset = le16_to_cpu(xe->xe_name_offset) +
> -		 OCFS2_XATTR_SIZE(xe->xe_name_len);
> +	ret = ocfs2_xattr_bucket_get_name_value(inode, xh,
> +						xe - xh->xh_entries,
> +						&block_off,
> +						&offset);
> +	if (ret) {
> +		mlog_errno(ret);
> +		goto out;
> +	}
>  
> -	xv = (struct ocfs2_xattr_value_root *)(xs->base + offset);
> +	base = bucket_block(xs->bucket, block_off);
> +	xv = (struct ocfs2_xattr_value_root *)(base + offset +
> +		 OCFS2_XATTR_SIZE(xe->xe_name_len));
>  
> -	return __ocfs2_xattr_set_value_outside(inode, handle,
> -					       xv, val, value_len);
> +	ret = __ocfs2_xattr_set_value_outside(inode, handle,
> +					      xv, val, value_len);
> +	if (ret)
> +		mlog_errno(ret);
> +out:
> +	return ret;
>  }
>  
>  static int ocfs2_rm_xattr_cluster(struct inode *inode,

  parent reply	other threads:[~2009-03-12  2:28 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-03-09 23:49 [Ocfs2-devel] [PATCH] ocfs2: Use xs->bucket to set xattr value outside Tao Ma
2009-03-10  9:30 ` tristan.ye
2009-03-12  2:28 ` tristan.ye [this message]
2009-03-12  9:29 ` Joel Becker
2009-03-12  0:37   ` [Ocfs2-devel] [PATCH] ocfs2: Use xs->bucket to set xattr value outside.v2 Tao Ma
2009-03-12 10:18     ` 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=1236824930.6816.142.camel@tristan-laptop.cn.oracle.com \
    --to=tristan.ye@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.