diff options
Diffstat (limited to 'fs/ocfs2/xattr.c')
| -rw-r--r-- | fs/ocfs2/xattr.c | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/fs/ocfs2/xattr.c b/fs/ocfs2/xattr.c index 2e3ea308c144..317ef0abccbb 100644 --- a/fs/ocfs2/xattr.c +++ b/fs/ocfs2/xattr.c | |||
| @@ -2751,7 +2751,6 @@ static int ocfs2_xattr_ibody_set(struct inode *inode, | |||
| 2751 | { | 2751 | { |
| 2752 | int ret; | 2752 | int ret; |
| 2753 | struct ocfs2_inode_info *oi = OCFS2_I(inode); | 2753 | struct ocfs2_inode_info *oi = OCFS2_I(inode); |
| 2754 | struct ocfs2_dinode *di = (struct ocfs2_dinode *)xs->inode_bh->b_data; | ||
| 2755 | struct ocfs2_xa_loc loc; | 2754 | struct ocfs2_xa_loc loc; |
| 2756 | 2755 | ||
| 2757 | if (inode->i_sb->s_blocksize == OCFS2_MIN_BLOCKSIZE) | 2756 | if (inode->i_sb->s_blocksize == OCFS2_MIN_BLOCKSIZE) |
| @@ -2759,13 +2758,6 @@ static int ocfs2_xattr_ibody_set(struct inode *inode, | |||
| 2759 | 2758 | ||
| 2760 | down_write(&oi->ip_alloc_sem); | 2759 | down_write(&oi->ip_alloc_sem); |
| 2761 | if (!(oi->ip_dyn_features & OCFS2_INLINE_XATTR_FL)) { | 2760 | if (!(oi->ip_dyn_features & OCFS2_INLINE_XATTR_FL)) { |
| 2762 | if (!ocfs2_xattr_has_space_inline(inode, di)) { | ||
| 2763 | ret = -ENOSPC; | ||
| 2764 | goto out; | ||
| 2765 | } | ||
| 2766 | } | ||
| 2767 | |||
| 2768 | if (!(oi->ip_dyn_features & OCFS2_INLINE_XATTR_FL)) { | ||
| 2769 | ret = ocfs2_xattr_ibody_init(inode, xs->inode_bh, ctxt); | 2761 | ret = ocfs2_xattr_ibody_init(inode, xs->inode_bh, ctxt); |
| 2770 | if (ret) { | 2762 | if (ret) { |
| 2771 | if (ret != -ENOSPC) | 2763 | if (ret != -ENOSPC) |
| @@ -6499,6 +6491,16 @@ static int ocfs2_reflink_xattr_inline(struct ocfs2_xattr_reflink *args) | |||
| 6499 | } | 6491 | } |
| 6500 | 6492 | ||
| 6501 | new_oi = OCFS2_I(args->new_inode); | 6493 | new_oi = OCFS2_I(args->new_inode); |
| 6494 | /* | ||
| 6495 | * Adjust extent record count to reserve space for extended attribute. | ||
| 6496 | * Inline data count had been adjusted in ocfs2_duplicate_inline_data(). | ||
| 6497 | */ | ||
| 6498 | if (!(new_oi->ip_dyn_features & OCFS2_INLINE_DATA_FL) && | ||
| 6499 | !(ocfs2_inode_is_fast_symlink(args->new_inode))) { | ||
| 6500 | struct ocfs2_extent_list *el = &new_di->id2.i_list; | ||
| 6501 | le16_add_cpu(&el->l_count, -(inline_size / | ||
| 6502 | sizeof(struct ocfs2_extent_rec))); | ||
| 6503 | } | ||
| 6502 | spin_lock(&new_oi->ip_lock); | 6504 | spin_lock(&new_oi->ip_lock); |
| 6503 | new_oi->ip_dyn_features |= OCFS2_HAS_XATTR_FL | OCFS2_INLINE_XATTR_FL; | 6505 | new_oi->ip_dyn_features |= OCFS2_HAS_XATTR_FL | OCFS2_INLINE_XATTR_FL; |
| 6504 | new_di->i_dyn_features = cpu_to_le16(new_oi->ip_dyn_features); | 6506 | new_di->i_dyn_features = cpu_to_le16(new_oi->ip_dyn_features); |
