|
@@ -4795,19 +4795,33 @@ static int ocfs2_xattr_bucket_set_value_outside(struct inode *inode,
|
|
char *val,
|
|
char *val,
|
|
int value_len)
|
|
int value_len)
|
|
{
|
|
{
|
|
- int offset;
|
|
|
|
|
|
+ int ret, offset, block_off;
|
|
struct ocfs2_xattr_value_root *xv;
|
|
struct ocfs2_xattr_value_root *xv;
|
|
struct ocfs2_xattr_entry *xe = xs->here;
|
|
struct ocfs2_xattr_entry *xe = xs->here;
|
|
|
|
+ struct ocfs2_xattr_header *xh = bucket_xh(xs->bucket);
|
|
|
|
+ void *base;
|
|
|
|
|
|
BUG_ON(!xs->base || !xe || ocfs2_xattr_is_local(xe));
|
|
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,
|
|
static int ocfs2_rm_xattr_cluster(struct inode *inode,
|