mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-25 21:24:08 +08:00
Fixes for 5.16-rc2:
- Fix buffer resource leak that could lead to livelock on corrupt fs. - Remove unused function xfs_inew_wait to shut up the build robots. -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEUzaAxoMeQq6m2jMV+H93GTRKtOsFAmGef+UACgkQ+H93GTRK tOtAQQ/9EAzGgADQR2dcCXoZwRP3LKz5WGops0qCqywvH/BfbLmKmqzgfUXaf026 dMmrnP9+d6BFytoLk8IXmpydML8qK2/k8lmwJRUG8arPRbHQwVSckDM4vXVrI2X2 K4f8nu1CBR8MDavVS7cR8CZWO3XJMLKTZtxCTdOQlRAw+m9P1+S00LWkiuDTPTTX YRAGkYEVCtCQLuqJgClf267/5+MaZXRJfFVh1hBQkUtPFXhu1LXfJqZ/thgacmlD D6/tfwt6Ad7iKg4LjtoJC6zkvoTFN7rB39PGPGILWgS3Nimp0xWgKoTnJ6VLRblY FwItA6zERXQoHRse7eGMfQ4ZnGT40pvIiN+JVZ4jju4hElY7dkigBfJv8oLkVm3D xV2dA7YO4DcYS4UAifZ+C00T3pYo/rQnsIwfAGsbh28Xlshyi4+cEqGRTkqrJHnx gkE4uzp0acs6HVTMC3S0pL6oTirPbHAQtt5tjS8ZtxALlYqF3+Y8xzQhMyB7Fo0b is213My5aP6VSr2UZajxpkIOl+5OvQ4v37fhmBXMGKmiz7XCzatyvtUjEBjahFfF FJeug4hRDom/uCKPM3eHfuZxGorlIB1GIeSe7+0ZIXcn+Wuo5seWfJrNP+1H/Asb Vp6TNueGiCKLBD/+MLWp65zyIZu+b2gNEyYCuhwnOf2sQflhZmI= =Fa6X -----END PGP SIGNATURE----- Merge tag 'xfs-5.16-fixes-1' of git://git.kernel.org/pub/scm/fs/xfs/xfs-linux Pull xfs fixes from Darrick Wong: "Fixes for a resource leak and a build robot complaint about totally dead code: - Fix buffer resource leak that could lead to livelock on corrupt fs. - Remove unused function xfs_inew_wait to shut up the build robots" * tag 'xfs-5.16-fixes-1' of git://git.kernel.org/pub/scm/fs/xfs/xfs-linux: xfs: remove xfs_inew_wait xfs: Fix the free logic of state in xfs_attr_node_hasname
This commit is contained in:
commit
4f0dda359c
@ -1077,21 +1077,18 @@ xfs_attr_node_hasname(
|
||||
|
||||
state = xfs_da_state_alloc(args);
|
||||
if (statep != NULL)
|
||||
*statep = NULL;
|
||||
*statep = state;
|
||||
|
||||
/*
|
||||
* Search to see if name exists, and get back a pointer to it.
|
||||
*/
|
||||
error = xfs_da3_node_lookup_int(state, &retval);
|
||||
if (error) {
|
||||
xfs_da_state_free(state);
|
||||
return error;
|
||||
}
|
||||
if (error)
|
||||
retval = error;
|
||||
|
||||
if (statep != NULL)
|
||||
*statep = state;
|
||||
else
|
||||
if (!statep)
|
||||
xfs_da_state_free(state);
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
@ -1112,7 +1109,7 @@ xfs_attr_node_addname_find_attr(
|
||||
*/
|
||||
retval = xfs_attr_node_hasname(args, &dac->da_state);
|
||||
if (retval != -ENOATTR && retval != -EEXIST)
|
||||
return retval;
|
||||
goto error;
|
||||
|
||||
if (retval == -ENOATTR && (args->attr_flags & XATTR_REPLACE))
|
||||
goto error;
|
||||
@ -1337,7 +1334,7 @@ int xfs_attr_node_removename_setup(
|
||||
|
||||
error = xfs_attr_node_hasname(args, state);
|
||||
if (error != -EEXIST)
|
||||
return error;
|
||||
goto out;
|
||||
error = 0;
|
||||
|
||||
ASSERT((*state)->path.blk[(*state)->path.active - 1].bp != NULL);
|
||||
|
@ -289,22 +289,6 @@ xfs_perag_clear_inode_tag(
|
||||
trace_xfs_perag_clear_inode_tag(mp, pag->pag_agno, tag, _RET_IP_);
|
||||
}
|
||||
|
||||
static inline void
|
||||
xfs_inew_wait(
|
||||
struct xfs_inode *ip)
|
||||
{
|
||||
wait_queue_head_t *wq = bit_waitqueue(&ip->i_flags, __XFS_INEW_BIT);
|
||||
DEFINE_WAIT_BIT(wait, &ip->i_flags, __XFS_INEW_BIT);
|
||||
|
||||
do {
|
||||
prepare_to_wait(wq, &wait.wq_entry, TASK_UNINTERRUPTIBLE);
|
||||
if (!xfs_iflags_test(ip, XFS_INEW))
|
||||
break;
|
||||
schedule();
|
||||
} while (true);
|
||||
finish_wait(wq, &wait.wq_entry);
|
||||
}
|
||||
|
||||
/*
|
||||
* When we recycle a reclaimable inode, we need to re-initialise the VFS inode
|
||||
* part of the structure. This is made more complex by the fact we store
|
||||
@ -368,18 +352,13 @@ xfs_iget_recycle(
|
||||
ASSERT(!rwsem_is_locked(&inode->i_rwsem));
|
||||
error = xfs_reinit_inode(mp, inode);
|
||||
if (error) {
|
||||
bool wake;
|
||||
|
||||
/*
|
||||
* Re-initializing the inode failed, and we are in deep
|
||||
* trouble. Try to re-add it to the reclaim list.
|
||||
*/
|
||||
rcu_read_lock();
|
||||
spin_lock(&ip->i_flags_lock);
|
||||
wake = !!__xfs_iflags_test(ip, XFS_INEW);
|
||||
ip->i_flags &= ~(XFS_INEW | XFS_IRECLAIM);
|
||||
if (wake)
|
||||
wake_up_bit(&ip->i_flags, __XFS_INEW_BIT);
|
||||
ASSERT(ip->i_flags & XFS_IRECLAIMABLE);
|
||||
spin_unlock(&ip->i_flags_lock);
|
||||
rcu_read_unlock();
|
||||
|
@ -231,8 +231,7 @@ static inline bool xfs_inode_has_bigtime(struct xfs_inode *ip)
|
||||
#define XFS_IRECLAIM (1 << 0) /* started reclaiming this inode */
|
||||
#define XFS_ISTALE (1 << 1) /* inode has been staled */
|
||||
#define XFS_IRECLAIMABLE (1 << 2) /* inode can be reclaimed */
|
||||
#define __XFS_INEW_BIT 3 /* inode has just been allocated */
|
||||
#define XFS_INEW (1 << __XFS_INEW_BIT)
|
||||
#define XFS_INEW (1 << 3) /* inode has just been allocated */
|
||||
#define XFS_IPRESERVE_DM_FIELDS (1 << 4) /* has legacy DMAPI fields set */
|
||||
#define XFS_ITRUNCATED (1 << 5) /* truncated down so flush-on-close */
|
||||
#define XFS_IDIRTY_RELEASE (1 << 6) /* dirty release already seen */
|
||||
@ -492,7 +491,6 @@ static inline void xfs_finish_inode_setup(struct xfs_inode *ip)
|
||||
xfs_iflags_clear(ip, XFS_INEW);
|
||||
barrier();
|
||||
unlock_new_inode(VFS_I(ip));
|
||||
wake_up_bit(&ip->i_flags, __XFS_INEW_BIT);
|
||||
}
|
||||
|
||||
static inline void xfs_setup_existing_inode(struct xfs_inode *ip)
|
||||
|
Loading…
Reference in New Issue
Block a user