+ block_truncate_page(inode->i_mapping, inode->i_size, xfs_get_blocks);
+}
+
+STATIC int
+xfs_vn_sync_flags(struct inode *inode)
+{
+ unsigned int oldflags, newflags;
+ int flags = 0;
+ int error;
+ bhv_vattr_t vattr;
+ bhv_vnode_t *vp = vn_from_inode(inode);
+
+ memset(&vattr, 0, sizeof vattr);
+
+ vattr.va_mask = XFS_AT_XFLAGS;
+ error = bhv_vop_getattr(vp, &vattr, 0, NULL);
+
+ if (error)
+ return error;
+ oldflags = vattr.va_xflags;
+ newflags = oldflags & ~(XFS_XFLAG_IMMUTABLE |
+ XFS_XFLAG_IUNLINK | XFS_XFLAG_BARRIER);
+
+ if (IS_IMMUTABLE(inode))
+ newflags |= XFS_XFLAG_IMMUTABLE;
+ if (IS_IUNLINK(inode))
+ newflags |= XFS_XFLAG_IUNLINK;
+ if (IS_BARRIER(inode))
+ newflags |= XFS_XFLAG_BARRIER;
+
+ if (oldflags ^ newflags) {
+ vattr.va_xflags = newflags;
+ vattr.va_mask |= XFS_AT_XFLAGS;
+ error = bhv_vop_setattr(vp, &vattr, flags, NULL);
+ }
+ vn_revalidate(vp);
+ return error;