diff options
Diffstat (limited to 'fs/xfs/xfs_attr_leaf.c')
-rw-r--r-- | fs/xfs/xfs_attr_leaf.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/fs/xfs/xfs_attr_leaf.c b/fs/xfs/xfs_attr_leaf.c index 35e557b00db2..fe91eac4e2a7 100644 --- a/fs/xfs/xfs_attr_leaf.c +++ b/fs/xfs/xfs_attr_leaf.c | |||
@@ -128,7 +128,7 @@ xfs_attr_shortform_bytesfit(xfs_inode_t *dp, int bytes) | |||
128 | return (offset >= minforkoff) ? minforkoff : 0; | 128 | return (offset >= minforkoff) ? minforkoff : 0; |
129 | } | 129 | } |
130 | 130 | ||
131 | if (unlikely(mp->m_flags & XFS_MOUNT_COMPAT_ATTR)) { | 131 | if (!(mp->m_flags & XFS_MOUNT_ATTR2)) { |
132 | if (bytes <= XFS_IFORK_ASIZE(dp)) | 132 | if (bytes <= XFS_IFORK_ASIZE(dp)) |
133 | return mp->m_attroffset >> 3; | 133 | return mp->m_attroffset >> 3; |
134 | return 0; | 134 | return 0; |
@@ -157,7 +157,7 @@ xfs_sbversion_add_attr2(xfs_mount_t *mp, xfs_trans_t *tp) | |||
157 | { | 157 | { |
158 | unsigned long s; | 158 | unsigned long s; |
159 | 159 | ||
160 | if (!(mp->m_flags & XFS_MOUNT_COMPAT_ATTR) && | 160 | if ((mp->m_flags & XFS_MOUNT_ATTR2) && |
161 | !(XFS_SB_VERSION_HASATTR2(&mp->m_sb))) { | 161 | !(XFS_SB_VERSION_HASATTR2(&mp->m_sb))) { |
162 | s = XFS_SB_LOCK(mp); | 162 | s = XFS_SB_LOCK(mp); |
163 | if (!XFS_SB_VERSION_HASATTR2(&mp->m_sb)) { | 163 | if (!XFS_SB_VERSION_HASATTR2(&mp->m_sb)) { |
@@ -310,7 +310,8 @@ xfs_attr_shortform_remove(xfs_da_args_t *args) | |||
310 | * Fix up the start offset of the attribute fork | 310 | * Fix up the start offset of the attribute fork |
311 | */ | 311 | */ |
312 | totsize -= size; | 312 | totsize -= size; |
313 | if (totsize == sizeof(xfs_attr_sf_hdr_t) && !args->addname) { | 313 | if (totsize == sizeof(xfs_attr_sf_hdr_t) && !args->addname && |
314 | (mp->m_flags & XFS_MOUNT_ATTR2)) { | ||
314 | /* | 315 | /* |
315 | * Last attribute now removed, revert to original | 316 | * Last attribute now removed, revert to original |
316 | * inode format making all literal area available | 317 | * inode format making all literal area available |
@@ -328,7 +329,8 @@ xfs_attr_shortform_remove(xfs_da_args_t *args) | |||
328 | xfs_idata_realloc(dp, -size, XFS_ATTR_FORK); | 329 | xfs_idata_realloc(dp, -size, XFS_ATTR_FORK); |
329 | dp->i_d.di_forkoff = xfs_attr_shortform_bytesfit(dp, totsize); | 330 | dp->i_d.di_forkoff = xfs_attr_shortform_bytesfit(dp, totsize); |
330 | ASSERT(dp->i_d.di_forkoff); | 331 | ASSERT(dp->i_d.di_forkoff); |
331 | ASSERT(totsize > sizeof(xfs_attr_sf_hdr_t) || args->addname); | 332 | ASSERT(totsize > sizeof(xfs_attr_sf_hdr_t) || args->addname || |
333 | !(mp->m_flags & XFS_MOUNT_ATTR2)); | ||
332 | dp->i_afp->if_ext_max = | 334 | dp->i_afp->if_ext_max = |
333 | XFS_IFORK_ASIZE(dp) / (uint)sizeof(xfs_bmbt_rec_t); | 335 | XFS_IFORK_ASIZE(dp) / (uint)sizeof(xfs_bmbt_rec_t); |
334 | dp->i_df.if_ext_max = | 336 | dp->i_df.if_ext_max = |
@@ -737,7 +739,8 @@ xfs_attr_shortform_allfit(xfs_dabuf_t *bp, xfs_inode_t *dp) | |||
737 | + name_loc->namelen | 739 | + name_loc->namelen |
738 | + INT_GET(name_loc->valuelen, ARCH_CONVERT); | 740 | + INT_GET(name_loc->valuelen, ARCH_CONVERT); |
739 | } | 741 | } |
740 | if (bytes == sizeof(struct xfs_attr_sf_hdr)) | 742 | if ((dp->i_mount->m_flags & XFS_MOUNT_ATTR2) && |
743 | (bytes == sizeof(struct xfs_attr_sf_hdr))) | ||
741 | return(-1); | 744 | return(-1); |
742 | return(xfs_attr_shortform_bytesfit(dp, bytes)); | 745 | return(xfs_attr_shortform_bytesfit(dp, bytes)); |
743 | } | 746 | } |
@@ -775,6 +778,8 @@ xfs_attr_leaf_to_shortform(xfs_dabuf_t *bp, xfs_da_args_t *args, int forkoff) | |||
775 | goto out; | 778 | goto out; |
776 | 779 | ||
777 | if (forkoff == -1) { | 780 | if (forkoff == -1) { |
781 | ASSERT(dp->i_mount->m_flags & XFS_MOUNT_ATTR2); | ||
782 | |||
778 | /* | 783 | /* |
779 | * Last attribute was removed, revert to original | 784 | * Last attribute was removed, revert to original |
780 | * inode format making all literal area available | 785 | * inode format making all literal area available |