[Ocfs2-devel] [PATCH 01/14] ocfs2: Introduce ocfs2_xa_loc
Joel Becker
Joel.Becker at oracle.com
Tue Sep 1 01:45:59 PDT 2009
On Tue, Sep 01, 2009 at 01:26:54AM -0700, Joel Becker wrote:
> On Tue, Sep 01, 2009 at 01:32:37PM +0800, Tao Ma wrote:
> > Joel Becker wrote:
> > >+static void *ocfs2_xa_block_offset_pointer(struct ocfs2_xa_loc *loc,
> > >+ int offset)
> > >+{
> > >+ struct buffer_head *bh = loc->xl_storage;
> > >+
> > >+ BUG_ON(offset >= bh->b_size);
> > >+ return bh->b_data + offset;
> > >+}
> > It looks that the "offset" is from the start of the buffer, while in
> > your description above "offset" is from "loc->xl_header". In both
> > inline and block case, header != buffer_start. xl_size seems to be
> > against xl_header, so I would guess here you need to change somehow.
>
> Doh! That's a bug. The description matches reality -
> xe_name_offset is from the start of the header, not the block, right?
> So this function is just wrong!
What about this delta?
Joel
diff --git a/fs/ocfs2/xattr.c b/fs/ocfs2/xattr.c
index d485932..abc8043 100644
--- a/fs/ocfs2/xattr.c
+++ b/fs/ocfs2/xattr.c
@@ -1442,6 +1442,7 @@ static void ocfs2_xa_journal_dirty(handle_t *handle, struct ocfs2_xa_loc *loc)
/* Give a pointer into the storage for the given offset */
static void *ocfs2_xa_offset_pointer(struct ocfs2_xa_loc *loc, int offset)
{
+ BUG_ON(offset >= loc->xl_size);
return loc->xl_ops->xlo_offset_pointer(loc, offset);
}
@@ -1552,10 +1553,7 @@ static void ocfs2_xa_block_journal_dirty(handle_t *handle,
static void *ocfs2_xa_block_offset_pointer(struct ocfs2_xa_loc *loc,
int offset)
{
- struct buffer_head *bh = loc->xl_storage;
-
- BUG_ON(offset >= bh->b_size);
- return bh->b_data + offset;
+ return (char *)loc->xl_header + offset;
}
static int ocfs2_xa_block_can_reuse(struct ocfs2_xa_loc *loc,
@@ -1712,8 +1710,7 @@ static void *ocfs2_xa_bucket_offset_pointer(struct ocfs2_xa_loc *loc,
struct ocfs2_xattr_bucket *bucket = loc->xl_storage;
int block, block_offset;
- BUG_ON(offset >= OCFS2_XATTR_BUCKET_SIZE);
-
+ /* The header is at the front of the bucket */
block = offset >> loc->xl_inode->i_sb->s_blocksize_bits;
block_offset = offset % loc->xl_inode->i_sb->s_blocksize;
--
"Three o'clock is always too late or too early for anything you
want to do."
- Jean-Paul Sartre
Joel Becker
Principal Software Developer
Oracle
E-mail: joel.becker at oracle.com
Phone: (650) 506-8127
More information about the Ocfs2-devel
mailing list