Merge branch 'xfs-4.8-misc-fixes-3' into for-next
This commit is contained in:
commit
f63716175c
@ -543,12 +543,12 @@ xfs_btree_ptr_addr(
|
|||||||
*/
|
*/
|
||||||
STATIC struct xfs_btree_block *
|
STATIC struct xfs_btree_block *
|
||||||
xfs_btree_get_iroot(
|
xfs_btree_get_iroot(
|
||||||
struct xfs_btree_cur *cur)
|
struct xfs_btree_cur *cur)
|
||||||
{
|
{
|
||||||
struct xfs_ifork *ifp;
|
struct xfs_ifork *ifp;
|
||||||
|
|
||||||
ifp = XFS_IFORK_PTR(cur->bc_private.b.ip, cur->bc_private.b.whichfork);
|
ifp = XFS_IFORK_PTR(cur->bc_private.b.ip, cur->bc_private.b.whichfork);
|
||||||
return (struct xfs_btree_block *)ifp->if_broot;
|
return (struct xfs_btree_block *)ifp->if_broot;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1435,41 +1435,57 @@ typedef __be64 xfs_bmbt_ptr_t, xfs_bmdr_ptr_t;
|
|||||||
* with the crc feature bit, and all accesses to them must be conditional on
|
* with the crc feature bit, and all accesses to them must be conditional on
|
||||||
* that flag.
|
* that flag.
|
||||||
*/
|
*/
|
||||||
|
/* short form block header */
|
||||||
|
struct xfs_btree_block_shdr {
|
||||||
|
__be32 bb_leftsib;
|
||||||
|
__be32 bb_rightsib;
|
||||||
|
|
||||||
|
__be64 bb_blkno;
|
||||||
|
__be64 bb_lsn;
|
||||||
|
uuid_t bb_uuid;
|
||||||
|
__be32 bb_owner;
|
||||||
|
__le32 bb_crc;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* long form block header */
|
||||||
|
struct xfs_btree_block_lhdr {
|
||||||
|
__be64 bb_leftsib;
|
||||||
|
__be64 bb_rightsib;
|
||||||
|
|
||||||
|
__be64 bb_blkno;
|
||||||
|
__be64 bb_lsn;
|
||||||
|
uuid_t bb_uuid;
|
||||||
|
__be64 bb_owner;
|
||||||
|
__le32 bb_crc;
|
||||||
|
__be32 bb_pad; /* padding for alignment */
|
||||||
|
};
|
||||||
|
|
||||||
struct xfs_btree_block {
|
struct xfs_btree_block {
|
||||||
__be32 bb_magic; /* magic number for block type */
|
__be32 bb_magic; /* magic number for block type */
|
||||||
__be16 bb_level; /* 0 is a leaf */
|
__be16 bb_level; /* 0 is a leaf */
|
||||||
__be16 bb_numrecs; /* current # of data records */
|
__be16 bb_numrecs; /* current # of data records */
|
||||||
union {
|
union {
|
||||||
struct {
|
struct xfs_btree_block_shdr s;
|
||||||
__be32 bb_leftsib;
|
struct xfs_btree_block_lhdr l;
|
||||||
__be32 bb_rightsib;
|
|
||||||
|
|
||||||
__be64 bb_blkno;
|
|
||||||
__be64 bb_lsn;
|
|
||||||
uuid_t bb_uuid;
|
|
||||||
__be32 bb_owner;
|
|
||||||
__le32 bb_crc;
|
|
||||||
} s; /* short form pointers */
|
|
||||||
struct {
|
|
||||||
__be64 bb_leftsib;
|
|
||||||
__be64 bb_rightsib;
|
|
||||||
|
|
||||||
__be64 bb_blkno;
|
|
||||||
__be64 bb_lsn;
|
|
||||||
uuid_t bb_uuid;
|
|
||||||
__be64 bb_owner;
|
|
||||||
__le32 bb_crc;
|
|
||||||
__be32 bb_pad; /* padding for alignment */
|
|
||||||
} l; /* long form pointers */
|
|
||||||
} bb_u; /* rest */
|
} bb_u; /* rest */
|
||||||
};
|
};
|
||||||
|
|
||||||
#define XFS_BTREE_SBLOCK_LEN 16 /* size of a short form block */
|
/* size of a short form block */
|
||||||
#define XFS_BTREE_LBLOCK_LEN 24 /* size of a long form block */
|
#define XFS_BTREE_SBLOCK_LEN \
|
||||||
|
(offsetof(struct xfs_btree_block, bb_u) + \
|
||||||
|
offsetof(struct xfs_btree_block_shdr, bb_blkno))
|
||||||
|
/* size of a long form block */
|
||||||
|
#define XFS_BTREE_LBLOCK_LEN \
|
||||||
|
(offsetof(struct xfs_btree_block, bb_u) + \
|
||||||
|
offsetof(struct xfs_btree_block_lhdr, bb_blkno))
|
||||||
|
|
||||||
/* sizes of CRC enabled btree blocks */
|
/* sizes of CRC enabled btree blocks */
|
||||||
#define XFS_BTREE_SBLOCK_CRC_LEN (XFS_BTREE_SBLOCK_LEN + 40)
|
#define XFS_BTREE_SBLOCK_CRC_LEN \
|
||||||
#define XFS_BTREE_LBLOCK_CRC_LEN (XFS_BTREE_LBLOCK_LEN + 48)
|
(offsetof(struct xfs_btree_block, bb_u) + \
|
||||||
|
sizeof(struct xfs_btree_block_shdr))
|
||||||
|
#define XFS_BTREE_LBLOCK_CRC_LEN \
|
||||||
|
(offsetof(struct xfs_btree_block, bb_u) + \
|
||||||
|
sizeof(struct xfs_btree_block_lhdr))
|
||||||
|
|
||||||
#define XFS_BTREE_SBLOCK_CRC_OFF \
|
#define XFS_BTREE_SBLOCK_CRC_OFF \
|
||||||
offsetof(struct xfs_btree_block, bb_u.s.bb_crc)
|
offsetof(struct xfs_btree_block, bb_u.s.bb_crc)
|
||||||
|
@ -55,7 +55,7 @@ xfs_error_test(int error_tag, int *fsidp, char *expression,
|
|||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
xfs_errortag_add(int error_tag, xfs_mount_t *mp)
|
xfs_errortag_add(unsigned int error_tag, xfs_mount_t *mp)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
int len;
|
int len;
|
||||||
|
@ -128,7 +128,7 @@ extern int xfs_error_test(int, int *, char *, int, char *, unsigned long);
|
|||||||
xfs_error_test((tag), (mp)->m_fixedfsid, "expr", __LINE__, __FILE__, \
|
xfs_error_test((tag), (mp)->m_fixedfsid, "expr", __LINE__, __FILE__, \
|
||||||
(rf))))
|
(rf))))
|
||||||
|
|
||||||
extern int xfs_errortag_add(int error_tag, struct xfs_mount *mp);
|
extern int xfs_errortag_add(unsigned int error_tag, struct xfs_mount *mp);
|
||||||
extern int xfs_errortag_clearall(struct xfs_mount *mp, int loud);
|
extern int xfs_errortag_clearall(struct xfs_mount *mp, int loud);
|
||||||
#else
|
#else
|
||||||
#define XFS_TEST_ERROR(expr, mp, tag, rf) (expr)
|
#define XFS_TEST_ERROR(expr, mp, tag, rf) (expr)
|
||||||
|
@ -1575,6 +1575,17 @@ xfs_ioc_swapext(
|
|||||||
goto out_put_tmp_file;
|
goto out_put_tmp_file;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We need to ensure that the fds passed in point to XFS inodes
|
||||||
|
* before we cast and access them as XFS structures as we have no
|
||||||
|
* control over what the user passes us here.
|
||||||
|
*/
|
||||||
|
if (f.file->f_op != &xfs_file_operations ||
|
||||||
|
tmp.file->f_op != &xfs_file_operations) {
|
||||||
|
error = -EINVAL;
|
||||||
|
goto out_put_tmp_file;
|
||||||
|
}
|
||||||
|
|
||||||
ip = XFS_I(file_inode(f.file));
|
ip = XFS_I(file_inode(f.file));
|
||||||
tip = XFS_I(file_inode(tmp.file));
|
tip = XFS_I(file_inode(tmp.file));
|
||||||
|
|
||||||
|
@ -39,6 +39,8 @@ xfs_check_ondisk_structs(void)
|
|||||||
XFS_CHECK_STRUCT_SIZE(struct xfs_bmbt_key, 8);
|
XFS_CHECK_STRUCT_SIZE(struct xfs_bmbt_key, 8);
|
||||||
XFS_CHECK_STRUCT_SIZE(struct xfs_bmbt_rec, 16);
|
XFS_CHECK_STRUCT_SIZE(struct xfs_bmbt_rec, 16);
|
||||||
XFS_CHECK_STRUCT_SIZE(struct xfs_bmdr_block, 4);
|
XFS_CHECK_STRUCT_SIZE(struct xfs_bmdr_block, 4);
|
||||||
|
XFS_CHECK_STRUCT_SIZE(struct xfs_btree_block_shdr, 48);
|
||||||
|
XFS_CHECK_STRUCT_SIZE(struct xfs_btree_block_lhdr, 64);
|
||||||
XFS_CHECK_STRUCT_SIZE(struct xfs_btree_block, 72);
|
XFS_CHECK_STRUCT_SIZE(struct xfs_btree_block, 72);
|
||||||
XFS_CHECK_STRUCT_SIZE(struct xfs_dinode, 176);
|
XFS_CHECK_STRUCT_SIZE(struct xfs_dinode, 176);
|
||||||
XFS_CHECK_STRUCT_SIZE(struct xfs_disk_dquot, 104);
|
XFS_CHECK_STRUCT_SIZE(struct xfs_disk_dquot, 104);
|
||||||
|
Loading…
Reference in New Issue
Block a user