xfs: make xfs_inode_item_size idempotent
Move all code messing with the inode log item flags into xfs_inode_item_format to make sure xfs_inode_item_size really only calculates the the number of vectors, but doesn't modify any state of the inode item. Reviewed-by: Dave Chinner <dchinner@redhat.com> Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Mark Tinguely <tinguely@sgi.com> Signed-off-by: Ben Myers <bpm@sgi.com>
This commit is contained in:
parent
8a9c9980f2
commit
339a5f5dd9
@ -57,77 +57,28 @@ xfs_inode_item_size(
|
|||||||
struct xfs_inode *ip = iip->ili_inode;
|
struct xfs_inode *ip = iip->ili_inode;
|
||||||
uint nvecs = 2;
|
uint nvecs = 2;
|
||||||
|
|
||||||
/*
|
|
||||||
* Only log the data/extents/b-tree root if there is something
|
|
||||||
* left to log.
|
|
||||||
*/
|
|
||||||
iip->ili_format.ilf_fields |= XFS_ILOG_CORE;
|
|
||||||
|
|
||||||
switch (ip->i_d.di_format) {
|
switch (ip->i_d.di_format) {
|
||||||
case XFS_DINODE_FMT_EXTENTS:
|
case XFS_DINODE_FMT_EXTENTS:
|
||||||
iip->ili_format.ilf_fields &=
|
|
||||||
~(XFS_ILOG_DDATA | XFS_ILOG_DBROOT |
|
|
||||||
XFS_ILOG_DEV | XFS_ILOG_UUID);
|
|
||||||
if ((iip->ili_format.ilf_fields & XFS_ILOG_DEXT) &&
|
if ((iip->ili_format.ilf_fields & XFS_ILOG_DEXT) &&
|
||||||
(ip->i_d.di_nextents > 0) &&
|
ip->i_d.di_nextents > 0 &&
|
||||||
(ip->i_df.if_bytes > 0)) {
|
ip->i_df.if_bytes > 0)
|
||||||
ASSERT(ip->i_df.if_u1.if_extents != NULL);
|
|
||||||
nvecs++;
|
nvecs++;
|
||||||
} else {
|
|
||||||
iip->ili_format.ilf_fields &= ~XFS_ILOG_DEXT;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case XFS_DINODE_FMT_BTREE:
|
case XFS_DINODE_FMT_BTREE:
|
||||||
iip->ili_format.ilf_fields &=
|
|
||||||
~(XFS_ILOG_DDATA | XFS_ILOG_DEXT |
|
|
||||||
XFS_ILOG_DEV | XFS_ILOG_UUID);
|
|
||||||
if ((iip->ili_format.ilf_fields & XFS_ILOG_DBROOT) &&
|
if ((iip->ili_format.ilf_fields & XFS_ILOG_DBROOT) &&
|
||||||
(ip->i_df.if_broot_bytes > 0)) {
|
ip->i_df.if_broot_bytes > 0)
|
||||||
ASSERT(ip->i_df.if_broot != NULL);
|
|
||||||
nvecs++;
|
nvecs++;
|
||||||
} else {
|
|
||||||
ASSERT(!(iip->ili_format.ilf_fields &
|
|
||||||
XFS_ILOG_DBROOT));
|
|
||||||
#ifdef XFS_TRANS_DEBUG
|
|
||||||
if (iip->ili_root_size > 0) {
|
|
||||||
ASSERT(iip->ili_root_size ==
|
|
||||||
ip->i_df.if_broot_bytes);
|
|
||||||
ASSERT(memcmp(iip->ili_orig_root,
|
|
||||||
ip->i_df.if_broot,
|
|
||||||
iip->ili_root_size) == 0);
|
|
||||||
} else {
|
|
||||||
ASSERT(ip->i_df.if_broot_bytes == 0);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
iip->ili_format.ilf_fields &= ~XFS_ILOG_DBROOT;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case XFS_DINODE_FMT_LOCAL:
|
case XFS_DINODE_FMT_LOCAL:
|
||||||
iip->ili_format.ilf_fields &=
|
|
||||||
~(XFS_ILOG_DEXT | XFS_ILOG_DBROOT |
|
|
||||||
XFS_ILOG_DEV | XFS_ILOG_UUID);
|
|
||||||
if ((iip->ili_format.ilf_fields & XFS_ILOG_DDATA) &&
|
if ((iip->ili_format.ilf_fields & XFS_ILOG_DDATA) &&
|
||||||
(ip->i_df.if_bytes > 0)) {
|
ip->i_df.if_bytes > 0)
|
||||||
ASSERT(ip->i_df.if_u1.if_data != NULL);
|
|
||||||
ASSERT(ip->i_d.di_size > 0);
|
|
||||||
nvecs++;
|
nvecs++;
|
||||||
} else {
|
|
||||||
iip->ili_format.ilf_fields &= ~XFS_ILOG_DDATA;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case XFS_DINODE_FMT_DEV:
|
case XFS_DINODE_FMT_DEV:
|
||||||
iip->ili_format.ilf_fields &=
|
|
||||||
~(XFS_ILOG_DDATA | XFS_ILOG_DBROOT |
|
|
||||||
XFS_ILOG_DEXT | XFS_ILOG_UUID);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case XFS_DINODE_FMT_UUID:
|
case XFS_DINODE_FMT_UUID:
|
||||||
iip->ili_format.ilf_fields &=
|
|
||||||
~(XFS_ILOG_DDATA | XFS_ILOG_DBROOT |
|
|
||||||
XFS_ILOG_DEXT | XFS_ILOG_DEV);
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@ -135,56 +86,31 @@ xfs_inode_item_size(
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
if (!XFS_IFORK_Q(ip))
|
||||||
* If there are no attributes associated with this file,
|
|
||||||
* then there cannot be anything more to log.
|
|
||||||
* Clear all attribute-related log flags.
|
|
||||||
*/
|
|
||||||
if (!XFS_IFORK_Q(ip)) {
|
|
||||||
iip->ili_format.ilf_fields &=
|
|
||||||
~(XFS_ILOG_ADATA | XFS_ILOG_ABROOT | XFS_ILOG_AEXT);
|
|
||||||
return nvecs;
|
return nvecs;
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Log any necessary attribute data.
|
* Log any necessary attribute data.
|
||||||
*/
|
*/
|
||||||
switch (ip->i_d.di_aformat) {
|
switch (ip->i_d.di_aformat) {
|
||||||
case XFS_DINODE_FMT_EXTENTS:
|
case XFS_DINODE_FMT_EXTENTS:
|
||||||
iip->ili_format.ilf_fields &=
|
|
||||||
~(XFS_ILOG_ADATA | XFS_ILOG_ABROOT);
|
|
||||||
if ((iip->ili_format.ilf_fields & XFS_ILOG_AEXT) &&
|
if ((iip->ili_format.ilf_fields & XFS_ILOG_AEXT) &&
|
||||||
(ip->i_d.di_anextents > 0) &&
|
ip->i_d.di_anextents > 0 &&
|
||||||
(ip->i_afp->if_bytes > 0)) {
|
ip->i_afp->if_bytes > 0)
|
||||||
ASSERT(ip->i_afp->if_u1.if_extents != NULL);
|
|
||||||
nvecs++;
|
nvecs++;
|
||||||
} else {
|
|
||||||
iip->ili_format.ilf_fields &= ~XFS_ILOG_AEXT;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case XFS_DINODE_FMT_BTREE:
|
case XFS_DINODE_FMT_BTREE:
|
||||||
iip->ili_format.ilf_fields &=
|
|
||||||
~(XFS_ILOG_ADATA | XFS_ILOG_AEXT);
|
|
||||||
if ((iip->ili_format.ilf_fields & XFS_ILOG_ABROOT) &&
|
if ((iip->ili_format.ilf_fields & XFS_ILOG_ABROOT) &&
|
||||||
(ip->i_afp->if_broot_bytes > 0)) {
|
ip->i_afp->if_broot_bytes > 0)
|
||||||
ASSERT(ip->i_afp->if_broot != NULL);
|
|
||||||
nvecs++;
|
nvecs++;
|
||||||
} else {
|
|
||||||
iip->ili_format.ilf_fields &= ~XFS_ILOG_ABROOT;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case XFS_DINODE_FMT_LOCAL:
|
case XFS_DINODE_FMT_LOCAL:
|
||||||
iip->ili_format.ilf_fields &=
|
|
||||||
~(XFS_ILOG_AEXT | XFS_ILOG_ABROOT);
|
|
||||||
if ((iip->ili_format.ilf_fields & XFS_ILOG_ADATA) &&
|
if ((iip->ili_format.ilf_fields & XFS_ILOG_ADATA) &&
|
||||||
(ip->i_afp->if_bytes > 0)) {
|
ip->i_afp->if_bytes > 0)
|
||||||
ASSERT(ip->i_afp->if_u1.if_data != NULL);
|
|
||||||
nvecs++;
|
nvecs++;
|
||||||
} else {
|
|
||||||
iip->ili_format.ilf_fields &= ~XFS_ILOG_ADATA;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@ -292,16 +218,17 @@ xfs_inode_item_format(
|
|||||||
|
|
||||||
switch (ip->i_d.di_format) {
|
switch (ip->i_d.di_format) {
|
||||||
case XFS_DINODE_FMT_EXTENTS:
|
case XFS_DINODE_FMT_EXTENTS:
|
||||||
ASSERT(!(iip->ili_format.ilf_fields &
|
iip->ili_format.ilf_fields &=
|
||||||
(XFS_ILOG_DDATA | XFS_ILOG_DBROOT |
|
~(XFS_ILOG_DDATA | XFS_ILOG_DBROOT |
|
||||||
XFS_ILOG_DEV | XFS_ILOG_UUID)));
|
XFS_ILOG_DEV | XFS_ILOG_UUID);
|
||||||
if (iip->ili_format.ilf_fields & XFS_ILOG_DEXT) {
|
|
||||||
ASSERT(ip->i_df.if_bytes > 0);
|
if ((iip->ili_format.ilf_fields & XFS_ILOG_DEXT) &&
|
||||||
|
ip->i_d.di_nextents > 0 &&
|
||||||
|
ip->i_df.if_bytes > 0) {
|
||||||
ASSERT(ip->i_df.if_u1.if_extents != NULL);
|
ASSERT(ip->i_df.if_u1.if_extents != NULL);
|
||||||
ASSERT(ip->i_d.di_nextents > 0);
|
ASSERT(ip->i_df.if_bytes / sizeof(xfs_bmbt_rec_t) > 0);
|
||||||
ASSERT(iip->ili_extents_buf == NULL);
|
ASSERT(iip->ili_extents_buf == NULL);
|
||||||
ASSERT((ip->i_df.if_bytes /
|
|
||||||
(uint)sizeof(xfs_bmbt_rec_t)) > 0);
|
|
||||||
#ifdef XFS_NATIVE_HOST
|
#ifdef XFS_NATIVE_HOST
|
||||||
if (ip->i_d.di_nextents == ip->i_df.if_bytes /
|
if (ip->i_d.di_nextents == ip->i_df.if_bytes /
|
||||||
(uint)sizeof(xfs_bmbt_rec_t)) {
|
(uint)sizeof(xfs_bmbt_rec_t)) {
|
||||||
@ -323,15 +250,18 @@ xfs_inode_item_format(
|
|||||||
iip->ili_format.ilf_dsize = vecp->i_len;
|
iip->ili_format.ilf_dsize = vecp->i_len;
|
||||||
vecp++;
|
vecp++;
|
||||||
nvecs++;
|
nvecs++;
|
||||||
|
} else {
|
||||||
|
iip->ili_format.ilf_fields &= ~XFS_ILOG_DEXT;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case XFS_DINODE_FMT_BTREE:
|
case XFS_DINODE_FMT_BTREE:
|
||||||
ASSERT(!(iip->ili_format.ilf_fields &
|
iip->ili_format.ilf_fields &=
|
||||||
(XFS_ILOG_DDATA | XFS_ILOG_DEXT |
|
~(XFS_ILOG_DDATA | XFS_ILOG_DEXT |
|
||||||
XFS_ILOG_DEV | XFS_ILOG_UUID)));
|
XFS_ILOG_DEV | XFS_ILOG_UUID);
|
||||||
if (iip->ili_format.ilf_fields & XFS_ILOG_DBROOT) {
|
|
||||||
ASSERT(ip->i_df.if_broot_bytes > 0);
|
if ((iip->ili_format.ilf_fields & XFS_ILOG_DBROOT) &&
|
||||||
|
ip->i_df.if_broot_bytes > 0) {
|
||||||
ASSERT(ip->i_df.if_broot != NULL);
|
ASSERT(ip->i_df.if_broot != NULL);
|
||||||
vecp->i_addr = ip->i_df.if_broot;
|
vecp->i_addr = ip->i_df.if_broot;
|
||||||
vecp->i_len = ip->i_df.if_broot_bytes;
|
vecp->i_len = ip->i_df.if_broot_bytes;
|
||||||
@ -339,15 +269,30 @@ xfs_inode_item_format(
|
|||||||
vecp++;
|
vecp++;
|
||||||
nvecs++;
|
nvecs++;
|
||||||
iip->ili_format.ilf_dsize = ip->i_df.if_broot_bytes;
|
iip->ili_format.ilf_dsize = ip->i_df.if_broot_bytes;
|
||||||
|
} else {
|
||||||
|
ASSERT(!(iip->ili_format.ilf_fields &
|
||||||
|
XFS_ILOG_DBROOT));
|
||||||
|
#ifdef XFS_TRANS_DEBUG
|
||||||
|
if (iip->ili_root_size > 0) {
|
||||||
|
ASSERT(iip->ili_root_size ==
|
||||||
|
ip->i_df.if_broot_bytes);
|
||||||
|
ASSERT(memcmp(iip->ili_orig_root,
|
||||||
|
ip->i_df.if_broot,
|
||||||
|
iip->ili_root_size) == 0);
|
||||||
|
} else {
|
||||||
|
ASSERT(ip->i_df.if_broot_bytes == 0);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
iip->ili_format.ilf_fields &= ~XFS_ILOG_DBROOT;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case XFS_DINODE_FMT_LOCAL:
|
case XFS_DINODE_FMT_LOCAL:
|
||||||
ASSERT(!(iip->ili_format.ilf_fields &
|
iip->ili_format.ilf_fields &=
|
||||||
(XFS_ILOG_DBROOT | XFS_ILOG_DEXT |
|
~(XFS_ILOG_DEXT | XFS_ILOG_DBROOT |
|
||||||
XFS_ILOG_DEV | XFS_ILOG_UUID)));
|
XFS_ILOG_DEV | XFS_ILOG_UUID);
|
||||||
if (iip->ili_format.ilf_fields & XFS_ILOG_DDATA) {
|
if ((iip->ili_format.ilf_fields & XFS_ILOG_DDATA) &&
|
||||||
ASSERT(ip->i_df.if_bytes > 0);
|
ip->i_df.if_bytes > 0) {
|
||||||
ASSERT(ip->i_df.if_u1.if_data != NULL);
|
ASSERT(ip->i_df.if_u1.if_data != NULL);
|
||||||
ASSERT(ip->i_d.di_size > 0);
|
ASSERT(ip->i_d.di_size > 0);
|
||||||
|
|
||||||
@ -365,13 +310,15 @@ xfs_inode_item_format(
|
|||||||
vecp++;
|
vecp++;
|
||||||
nvecs++;
|
nvecs++;
|
||||||
iip->ili_format.ilf_dsize = (unsigned)data_bytes;
|
iip->ili_format.ilf_dsize = (unsigned)data_bytes;
|
||||||
|
} else {
|
||||||
|
iip->ili_format.ilf_fields &= ~XFS_ILOG_DDATA;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case XFS_DINODE_FMT_DEV:
|
case XFS_DINODE_FMT_DEV:
|
||||||
ASSERT(!(iip->ili_format.ilf_fields &
|
iip->ili_format.ilf_fields &=
|
||||||
(XFS_ILOG_DBROOT | XFS_ILOG_DEXT |
|
~(XFS_ILOG_DDATA | XFS_ILOG_DBROOT |
|
||||||
XFS_ILOG_DDATA | XFS_ILOG_UUID)));
|
XFS_ILOG_DEXT | XFS_ILOG_UUID);
|
||||||
if (iip->ili_format.ilf_fields & XFS_ILOG_DEV) {
|
if (iip->ili_format.ilf_fields & XFS_ILOG_DEV) {
|
||||||
iip->ili_format.ilf_u.ilfu_rdev =
|
iip->ili_format.ilf_u.ilfu_rdev =
|
||||||
ip->i_df.if_u2.if_rdev;
|
ip->i_df.if_u2.if_rdev;
|
||||||
@ -379,9 +326,9 @@ xfs_inode_item_format(
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case XFS_DINODE_FMT_UUID:
|
case XFS_DINODE_FMT_UUID:
|
||||||
ASSERT(!(iip->ili_format.ilf_fields &
|
iip->ili_format.ilf_fields &=
|
||||||
(XFS_ILOG_DBROOT | XFS_ILOG_DEXT |
|
~(XFS_ILOG_DDATA | XFS_ILOG_DBROOT |
|
||||||
XFS_ILOG_DDATA | XFS_ILOG_DEV)));
|
XFS_ILOG_DEXT | XFS_ILOG_DEV);
|
||||||
if (iip->ili_format.ilf_fields & XFS_ILOG_UUID) {
|
if (iip->ili_format.ilf_fields & XFS_ILOG_UUID) {
|
||||||
iip->ili_format.ilf_u.ilfu_uuid =
|
iip->ili_format.ilf_u.ilfu_uuid =
|
||||||
ip->i_df.if_u2.if_uuid;
|
ip->i_df.if_u2.if_uuid;
|
||||||
@ -394,31 +341,26 @@ xfs_inode_item_format(
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If there are no attributes associated with the file,
|
* If there are no attributes associated with the file, then we're done.
|
||||||
* then we're done.
|
|
||||||
* Assert that no attribute-related log flags are set.
|
|
||||||
*/
|
*/
|
||||||
if (!XFS_IFORK_Q(ip)) {
|
if (!XFS_IFORK_Q(ip)) {
|
||||||
iip->ili_format.ilf_size = nvecs;
|
iip->ili_format.ilf_size = nvecs;
|
||||||
ASSERT(!(iip->ili_format.ilf_fields &
|
iip->ili_format.ilf_fields &=
|
||||||
(XFS_ILOG_ADATA | XFS_ILOG_ABROOT | XFS_ILOG_AEXT)));
|
~(XFS_ILOG_ADATA | XFS_ILOG_ABROOT | XFS_ILOG_AEXT);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (ip->i_d.di_aformat) {
|
switch (ip->i_d.di_aformat) {
|
||||||
case XFS_DINODE_FMT_EXTENTS:
|
case XFS_DINODE_FMT_EXTENTS:
|
||||||
ASSERT(!(iip->ili_format.ilf_fields &
|
iip->ili_format.ilf_fields &=
|
||||||
(XFS_ILOG_ADATA | XFS_ILOG_ABROOT)));
|
~(XFS_ILOG_ADATA | XFS_ILOG_ABROOT);
|
||||||
if (iip->ili_format.ilf_fields & XFS_ILOG_AEXT) {
|
|
||||||
#ifdef DEBUG
|
if ((iip->ili_format.ilf_fields & XFS_ILOG_AEXT) &&
|
||||||
int nrecs = ip->i_afp->if_bytes /
|
ip->i_d.di_anextents > 0 &&
|
||||||
(uint)sizeof(xfs_bmbt_rec_t);
|
ip->i_afp->if_bytes > 0) {
|
||||||
ASSERT(nrecs > 0);
|
ASSERT(ip->i_afp->if_bytes / sizeof(xfs_bmbt_rec_t) ==
|
||||||
ASSERT(nrecs == ip->i_d.di_anextents);
|
ip->i_d.di_anextents);
|
||||||
ASSERT(ip->i_afp->if_bytes > 0);
|
|
||||||
ASSERT(ip->i_afp->if_u1.if_extents != NULL);
|
ASSERT(ip->i_afp->if_u1.if_extents != NULL);
|
||||||
ASSERT(ip->i_d.di_anextents > 0);
|
|
||||||
#endif
|
|
||||||
#ifdef XFS_NATIVE_HOST
|
#ifdef XFS_NATIVE_HOST
|
||||||
/*
|
/*
|
||||||
* There are not delayed allocation extents
|
* There are not delayed allocation extents
|
||||||
@ -435,29 +377,36 @@ xfs_inode_item_format(
|
|||||||
iip->ili_format.ilf_asize = vecp->i_len;
|
iip->ili_format.ilf_asize = vecp->i_len;
|
||||||
vecp++;
|
vecp++;
|
||||||
nvecs++;
|
nvecs++;
|
||||||
|
} else {
|
||||||
|
iip->ili_format.ilf_fields &= ~XFS_ILOG_AEXT;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case XFS_DINODE_FMT_BTREE:
|
case XFS_DINODE_FMT_BTREE:
|
||||||
ASSERT(!(iip->ili_format.ilf_fields &
|
iip->ili_format.ilf_fields &=
|
||||||
(XFS_ILOG_ADATA | XFS_ILOG_AEXT)));
|
~(XFS_ILOG_ADATA | XFS_ILOG_AEXT);
|
||||||
if (iip->ili_format.ilf_fields & XFS_ILOG_ABROOT) {
|
|
||||||
ASSERT(ip->i_afp->if_broot_bytes > 0);
|
if ((iip->ili_format.ilf_fields & XFS_ILOG_ABROOT) &&
|
||||||
|
ip->i_afp->if_broot_bytes > 0) {
|
||||||
ASSERT(ip->i_afp->if_broot != NULL);
|
ASSERT(ip->i_afp->if_broot != NULL);
|
||||||
|
|
||||||
vecp->i_addr = ip->i_afp->if_broot;
|
vecp->i_addr = ip->i_afp->if_broot;
|
||||||
vecp->i_len = ip->i_afp->if_broot_bytes;
|
vecp->i_len = ip->i_afp->if_broot_bytes;
|
||||||
vecp->i_type = XLOG_REG_TYPE_IATTR_BROOT;
|
vecp->i_type = XLOG_REG_TYPE_IATTR_BROOT;
|
||||||
vecp++;
|
vecp++;
|
||||||
nvecs++;
|
nvecs++;
|
||||||
iip->ili_format.ilf_asize = ip->i_afp->if_broot_bytes;
|
iip->ili_format.ilf_asize = ip->i_afp->if_broot_bytes;
|
||||||
|
} else {
|
||||||
|
iip->ili_format.ilf_fields &= ~XFS_ILOG_ABROOT;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case XFS_DINODE_FMT_LOCAL:
|
case XFS_DINODE_FMT_LOCAL:
|
||||||
ASSERT(!(iip->ili_format.ilf_fields &
|
iip->ili_format.ilf_fields &=
|
||||||
(XFS_ILOG_ABROOT | XFS_ILOG_AEXT)));
|
~(XFS_ILOG_AEXT | XFS_ILOG_ABROOT);
|
||||||
if (iip->ili_format.ilf_fields & XFS_ILOG_ADATA) {
|
|
||||||
ASSERT(ip->i_afp->if_bytes > 0);
|
if ((iip->ili_format.ilf_fields & XFS_ILOG_ADATA) &&
|
||||||
|
ip->i_afp->if_bytes > 0) {
|
||||||
ASSERT(ip->i_afp->if_u1.if_data != NULL);
|
ASSERT(ip->i_afp->if_u1.if_data != NULL);
|
||||||
|
|
||||||
vecp->i_addr = ip->i_afp->if_u1.if_data;
|
vecp->i_addr = ip->i_afp->if_u1.if_data;
|
||||||
@ -474,6 +423,8 @@ xfs_inode_item_format(
|
|||||||
vecp++;
|
vecp++;
|
||||||
nvecs++;
|
nvecs++;
|
||||||
iip->ili_format.ilf_asize = (unsigned)data_bytes;
|
iip->ili_format.ilf_asize = (unsigned)data_bytes;
|
||||||
|
} else {
|
||||||
|
iip->ili_format.ilf_fields &= ~XFS_ILOG_ADATA;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user