Merge branch 'xfs-misc-fixes-for-4.3-2' into for-next
This commit is contained in:
@@ -139,6 +139,8 @@ xfs_attr_get(
|
||||
|
||||
args.value = value;
|
||||
args.valuelen = *valuelenp;
|
||||
/* Entirely possible to look up a name which doesn't exist */
|
||||
args.op_flags = XFS_DA_OP_OKNOENT;
|
||||
|
||||
lock_mode = xfs_ilock_attr_map_shared(ip);
|
||||
if (!xfs_inode_hasattr(ip))
|
||||
|
@@ -1822,6 +1822,7 @@ xfs_da3_path_shift(
|
||||
struct xfs_da_args *args;
|
||||
struct xfs_da_node_entry *btree;
|
||||
struct xfs_da3_icnode_hdr nodehdr;
|
||||
struct xfs_buf *bp;
|
||||
xfs_dablk_t blkno = 0;
|
||||
int level;
|
||||
int error;
|
||||
@@ -1866,20 +1867,24 @@ xfs_da3_path_shift(
|
||||
*/
|
||||
for (blk++, level++; level < path->active; blk++, level++) {
|
||||
/*
|
||||
* Release the old block.
|
||||
* (if it's dirty, trans won't actually let go)
|
||||
* Read the next child block into a local buffer.
|
||||
*/
|
||||
error = xfs_da3_node_read(args->trans, dp, blkno, -1, &bp,
|
||||
args->whichfork);
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
/*
|
||||
* Release the old block (if it's dirty, the trans doesn't
|
||||
* actually let go) and swap the local buffer into the path
|
||||
* structure. This ensures failure of the above read doesn't set
|
||||
* a NULL buffer in an active slot in the path.
|
||||
*/
|
||||
if (release)
|
||||
xfs_trans_brelse(args->trans, blk->bp);
|
||||
|
||||
/*
|
||||
* Read the next child block.
|
||||
*/
|
||||
blk->blkno = blkno;
|
||||
error = xfs_da3_node_read(args->trans, dp, blkno, -1,
|
||||
&blk->bp, args->whichfork);
|
||||
if (error)
|
||||
return error;
|
||||
blk->bp = bp;
|
||||
|
||||
info = blk->bp->b_addr;
|
||||
ASSERT(info->magic == cpu_to_be16(XFS_DA_NODE_MAGIC) ||
|
||||
info->magic == cpu_to_be16(XFS_DA3_NODE_MAGIC) ||
|
||||
|
@@ -680,8 +680,15 @@ typedef struct xfs_attr_leaf_name_remote {
|
||||
typedef struct xfs_attr_leafblock {
|
||||
xfs_attr_leaf_hdr_t hdr; /* constant-structure header block */
|
||||
xfs_attr_leaf_entry_t entries[1]; /* sorted on key, not name */
|
||||
xfs_attr_leaf_name_local_t namelist; /* grows from bottom of buf */
|
||||
xfs_attr_leaf_name_remote_t valuelist; /* grows from bottom of buf */
|
||||
/*
|
||||
* The rest of the block contains the following structures after the
|
||||
* leaf entries, growing from the bottom up. The variables are never
|
||||
* referenced and definining them can actually make gcc optimize away
|
||||
* accesses to the 'entries' array above index 0 so don't do that.
|
||||
*
|
||||
* xfs_attr_leaf_name_local_t namelist;
|
||||
* xfs_attr_leaf_name_remote_t valuelist;
|
||||
*/
|
||||
} xfs_attr_leafblock_t;
|
||||
|
||||
/*
|
||||
|
@@ -362,6 +362,7 @@ xfs_dir_lookup(
|
||||
struct xfs_da_args *args;
|
||||
int rval;
|
||||
int v; /* type-checking value */
|
||||
int lock_mode;
|
||||
|
||||
ASSERT(S_ISDIR(dp->i_d.di_mode));
|
||||
XFS_STATS_INC(xs_dir_lookup);
|
||||
@@ -387,6 +388,7 @@ xfs_dir_lookup(
|
||||
if (ci_name)
|
||||
args->op_flags |= XFS_DA_OP_CILOOKUP;
|
||||
|
||||
lock_mode = xfs_ilock_data_map_shared(dp);
|
||||
if (dp->i_d.di_format == XFS_DINODE_FMT_LOCAL) {
|
||||
rval = xfs_dir2_sf_lookup(args);
|
||||
goto out_check_rval;
|
||||
@@ -419,6 +421,7 @@ out_check_rval:
|
||||
}
|
||||
}
|
||||
out_free:
|
||||
xfs_iunlock(dp, lock_mode);
|
||||
kmem_free(args);
|
||||
return rval;
|
||||
}
|
||||
|
@@ -252,7 +252,8 @@ xfs_dir3_data_reada_verify(
|
||||
return;
|
||||
case cpu_to_be32(XFS_DIR2_DATA_MAGIC):
|
||||
case cpu_to_be32(XFS_DIR3_DATA_MAGIC):
|
||||
xfs_dir3_data_verify(bp);
|
||||
bp->b_ops = &xfs_dir3_data_buf_ops;
|
||||
bp->b_ops->verify_read(bp);
|
||||
return;
|
||||
default:
|
||||
xfs_buf_ioerror(bp, -EFSCORRUPTED);
|
||||
|
@@ -186,9 +186,6 @@ xfs_mount_validate_sb(
|
||||
if (xfs_sb_version_hassparseinodes(sbp)) {
|
||||
uint32_t align;
|
||||
|
||||
xfs_alert(mp,
|
||||
"EXPERIMENTAL sparse inode feature enabled. Use at your own risk!");
|
||||
|
||||
align = XFS_INODES_PER_CHUNK * sbp->sb_inodesize
|
||||
>> sbp->sb_blocklog;
|
||||
if (sbp->sb_inoalignmt != align) {
|
||||
|
Reference in New Issue
Block a user