Commit 4f0dda35 authored by Linus Torvalds's avatar Linus Torvalds

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
parents adfb743a 1090427b
...@@ -1077,21 +1077,18 @@ xfs_attr_node_hasname( ...@@ -1077,21 +1077,18 @@ xfs_attr_node_hasname(
state = xfs_da_state_alloc(args); state = xfs_da_state_alloc(args);
if (statep != NULL) if (statep != NULL)
*statep = NULL; *statep = state;
/* /*
* Search to see if name exists, and get back a pointer to it. * Search to see if name exists, and get back a pointer to it.
*/ */
error = xfs_da3_node_lookup_int(state, &retval); error = xfs_da3_node_lookup_int(state, &retval);
if (error) { if (error)
xfs_da_state_free(state); retval = error;
return error;
}
if (statep != NULL) if (!statep)
*statep = state;
else
xfs_da_state_free(state); xfs_da_state_free(state);
return retval; return retval;
} }
...@@ -1112,7 +1109,7 @@ xfs_attr_node_addname_find_attr( ...@@ -1112,7 +1109,7 @@ xfs_attr_node_addname_find_attr(
*/ */
retval = xfs_attr_node_hasname(args, &dac->da_state); retval = xfs_attr_node_hasname(args, &dac->da_state);
if (retval != -ENOATTR && retval != -EEXIST) if (retval != -ENOATTR && retval != -EEXIST)
return retval; goto error;
if (retval == -ENOATTR && (args->attr_flags & XATTR_REPLACE)) if (retval == -ENOATTR && (args->attr_flags & XATTR_REPLACE))
goto error; goto error;
...@@ -1337,7 +1334,7 @@ int xfs_attr_node_removename_setup( ...@@ -1337,7 +1334,7 @@ int xfs_attr_node_removename_setup(
error = xfs_attr_node_hasname(args, state); error = xfs_attr_node_hasname(args, state);
if (error != -EEXIST) if (error != -EEXIST)
return error; goto out;
error = 0; error = 0;
ASSERT((*state)->path.blk[(*state)->path.active - 1].bp != NULL); ASSERT((*state)->path.blk[(*state)->path.active - 1].bp != NULL);
......
...@@ -289,22 +289,6 @@ xfs_perag_clear_inode_tag( ...@@ -289,22 +289,6 @@ xfs_perag_clear_inode_tag(
trace_xfs_perag_clear_inode_tag(mp, pag->pag_agno, tag, _RET_IP_); 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 * 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 * part of the structure. This is made more complex by the fact we store
...@@ -368,18 +352,13 @@ xfs_iget_recycle( ...@@ -368,18 +352,13 @@ xfs_iget_recycle(
ASSERT(!rwsem_is_locked(&inode->i_rwsem)); ASSERT(!rwsem_is_locked(&inode->i_rwsem));
error = xfs_reinit_inode(mp, inode); error = xfs_reinit_inode(mp, inode);
if (error) { if (error) {
bool wake;
/* /*
* Re-initializing the inode failed, and we are in deep * Re-initializing the inode failed, and we are in deep
* trouble. Try to re-add it to the reclaim list. * trouble. Try to re-add it to the reclaim list.
*/ */
rcu_read_lock(); rcu_read_lock();
spin_lock(&ip->i_flags_lock); spin_lock(&ip->i_flags_lock);
wake = !!__xfs_iflags_test(ip, XFS_INEW);
ip->i_flags &= ~(XFS_INEW | XFS_IRECLAIM); ip->i_flags &= ~(XFS_INEW | XFS_IRECLAIM);
if (wake)
wake_up_bit(&ip->i_flags, __XFS_INEW_BIT);
ASSERT(ip->i_flags & XFS_IRECLAIMABLE); ASSERT(ip->i_flags & XFS_IRECLAIMABLE);
spin_unlock(&ip->i_flags_lock); spin_unlock(&ip->i_flags_lock);
rcu_read_unlock(); rcu_read_unlock();
......
...@@ -231,8 +231,7 @@ static inline bool xfs_inode_has_bigtime(struct xfs_inode *ip) ...@@ -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_IRECLAIM (1 << 0) /* started reclaiming this inode */
#define XFS_ISTALE (1 << 1) /* inode has been staled */ #define XFS_ISTALE (1 << 1) /* inode has been staled */
#define XFS_IRECLAIMABLE (1 << 2) /* inode can be reclaimed */ #define XFS_IRECLAIMABLE (1 << 2) /* inode can be reclaimed */
#define __XFS_INEW_BIT 3 /* inode has just been allocated */ #define XFS_INEW (1 << 3) /* inode has just been allocated */
#define XFS_INEW (1 << __XFS_INEW_BIT)
#define XFS_IPRESERVE_DM_FIELDS (1 << 4) /* has legacy DMAPI fields set */ #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_ITRUNCATED (1 << 5) /* truncated down so flush-on-close */
#define XFS_IDIRTY_RELEASE (1 << 6) /* dirty release already seen */ #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) ...@@ -492,7 +491,6 @@ static inline void xfs_finish_inode_setup(struct xfs_inode *ip)
xfs_iflags_clear(ip, XFS_INEW); xfs_iflags_clear(ip, XFS_INEW);
barrier(); barrier();
unlock_new_inode(VFS_I(ip)); 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) static inline void xfs_setup_existing_inode(struct xfs_inode *ip)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment