Commit 8061e16e authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge tag 'xfs-5.18-fixes-1' of git://git.kernel.org/pub/scm/fs/xfs/xfs-linux

Pull xfs fixes from Dave Chinner:

 - define buffer bit flags as unsigned to fix gcc-5 + c11 warnings

 - remove redundant XFS fields from MAINTAINERS

 - fix inode buffer locking order regression

* tag 'xfs-5.18-fixes-1' of git://git.kernel.org/pub/scm/fs/xfs/xfs-linux:
  xfs: reorder iunlink remove operation in xfs_ifree
  MAINTAINERS: update IOMAP FILESYSTEM LIBRARY and XFS FILESYSTEM
  xfs: convert buffer flags to unsigned.
parents 8f4dd166 9a5280b3
Loading
Loading
Loading
Loading
+0 −3
Original line number Diff line number Diff line
@@ -10237,8 +10237,6 @@ F: drivers/net/ethernet/sgi/ioc3-eth.c
IOMAP FILESYSTEM LIBRARY
M:	Christoph Hellwig <hch@infradead.org>
M:	Darrick J. Wong <djwong@kernel.org>
M:	linux-xfs@vger.kernel.org
M:	linux-fsdevel@vger.kernel.org
L:	linux-xfs@vger.kernel.org
L:	linux-fsdevel@vger.kernel.org
S:	Supported
@@ -21596,7 +21594,6 @@ F: drivers/xen/*swiotlb*
XFS FILESYSTEM
C:	irc://irc.oftc.net/xfs
M:	Darrick J. Wong <djwong@kernel.org>
M:	linux-xfs@vger.kernel.org
L:	linux-xfs@vger.kernel.org
S:	Supported
W:	http://xfs.org/
+3 −3
Original line number Diff line number Diff line
@@ -406,7 +406,7 @@ xfs_buf_alloc_pages(
STATIC int
_xfs_buf_map_pages(
	struct xfs_buf		*bp,
	uint			flags)
	xfs_buf_flags_t		flags)
{
	ASSERT(bp->b_flags & _XBF_PAGES);
	if (bp->b_page_count == 1) {
@@ -868,7 +868,7 @@ xfs_buf_read_uncached(
	struct xfs_buftarg	*target,
	xfs_daddr_t		daddr,
	size_t			numblks,
	int			flags,
	xfs_buf_flags_t		flags,
	struct xfs_buf		**bpp,
	const struct xfs_buf_ops *ops)
{
@@ -903,7 +903,7 @@ int
xfs_buf_get_uncached(
	struct xfs_buftarg	*target,
	size_t			numblks,
	int			flags,
	xfs_buf_flags_t		flags,
	struct xfs_buf		**bpp)
{
	int			error;
+21 −21
Original line number Diff line number Diff line
@@ -22,28 +22,28 @@ struct xfs_buf;

#define XFS_BUF_DADDR_NULL	((xfs_daddr_t) (-1LL))

#define XBF_READ	 (1 << 0) /* buffer intended for reading from device */
#define XBF_WRITE	 (1 << 1) /* buffer intended for writing to device */
#define XBF_READ_AHEAD	 (1 << 2) /* asynchronous read-ahead */
#define XBF_NO_IOACCT	 (1 << 3) /* bypass I/O accounting (non-LRU bufs) */
#define XBF_ASYNC	 (1 << 4) /* initiator will not wait for completion */
#define XBF_DONE	 (1 << 5) /* all pages in the buffer uptodate */
#define XBF_STALE	 (1 << 6) /* buffer has been staled, do not find it */
#define XBF_WRITE_FAIL	 (1 << 7) /* async writes have failed on this buffer */
#define XBF_READ	 (1u << 0) /* buffer intended for reading from device */
#define XBF_WRITE	 (1u << 1) /* buffer intended for writing to device */
#define XBF_READ_AHEAD	 (1u << 2) /* asynchronous read-ahead */
#define XBF_NO_IOACCT	 (1u << 3) /* bypass I/O accounting (non-LRU bufs) */
#define XBF_ASYNC	 (1u << 4) /* initiator will not wait for completion */
#define XBF_DONE	 (1u << 5) /* all pages in the buffer uptodate */
#define XBF_STALE	 (1u << 6) /* buffer has been staled, do not find it */
#define XBF_WRITE_FAIL	 (1u << 7) /* async writes have failed on this buffer */

/* buffer type flags for write callbacks */
#define _XBF_INODES	 (1 << 16)/* inode buffer */
#define _XBF_DQUOTS	 (1 << 17)/* dquot buffer */
#define _XBF_LOGRECOVERY	 (1 << 18)/* log recovery buffer */
#define _XBF_INODES	 (1u << 16)/* inode buffer */
#define _XBF_DQUOTS	 (1u << 17)/* dquot buffer */
#define _XBF_LOGRECOVERY (1u << 18)/* log recovery buffer */

/* flags used only internally */
#define _XBF_PAGES	 (1 << 20)/* backed by refcounted pages */
#define _XBF_KMEM	 (1 << 21)/* backed by heap memory */
#define _XBF_DELWRI_Q	 (1 << 22)/* buffer on a delwri queue */
#define _XBF_PAGES	 (1u << 20)/* backed by refcounted pages */
#define _XBF_KMEM	 (1u << 21)/* backed by heap memory */
#define _XBF_DELWRI_Q	 (1u << 22)/* buffer on a delwri queue */

/* flags used only as arguments to access routines */
#define XBF_TRYLOCK	 (1 << 30)/* lock requested, but do not wait */
#define XBF_UNMAPPED	 (1 << 31)/* do not map the buffer */
#define XBF_TRYLOCK	 (1u << 30)/* lock requested, but do not wait */
#define XBF_UNMAPPED	 (1u << 31)/* do not map the buffer */

typedef unsigned int xfs_buf_flags_t;

@@ -247,10 +247,10 @@ xfs_buf_readahead(
	return xfs_buf_readahead_map(target, &map, 1, ops);
}

int xfs_buf_get_uncached(struct xfs_buftarg *target, size_t numblks, int flags,
		struct xfs_buf **bpp);
int xfs_buf_get_uncached(struct xfs_buftarg *target, size_t numblks,
		xfs_buf_flags_t flags, struct xfs_buf **bpp);
int xfs_buf_read_uncached(struct xfs_buftarg *target, xfs_daddr_t daddr,
			  size_t numblks, int flags, struct xfs_buf **bpp,
		size_t numblks, xfs_buf_flags_t flags, struct xfs_buf **bpp,
		const struct xfs_buf_ops *ops);
int _xfs_buf_read(struct xfs_buf *bp, xfs_buf_flags_t flags);
void xfs_buf_hold(struct xfs_buf *bp);
+13 −11
Original line number Diff line number Diff line
@@ -2594,14 +2594,13 @@ xfs_ifree_cluster(
}

/*
 * This is called to return an inode to the inode free list.
 * The inode should already be truncated to 0 length and have
 * no pages associated with it.  This routine also assumes that
 * the inode is already a part of the transaction.
 * This is called to return an inode to the inode free list.  The inode should
 * already be truncated to 0 length and have no pages associated with it.  This
 * routine also assumes that the inode is already a part of the transaction.
 *
 * The on-disk copy of the inode will have been added to the list
 * of unlinked inodes in the AGI. We need to remove the inode from
 * that list atomically with respect to freeing it here.
 * The on-disk copy of the inode will have been added to the list of unlinked
 * inodes in the AGI. We need to remove the inode from that list atomically with
 * respect to freeing it here.
 */
int
xfs_ifree(
@@ -2623,13 +2622,16 @@ xfs_ifree(
	pag = xfs_perag_get(mp, XFS_INO_TO_AGNO(mp, ip->i_ino));

	/*
	 * Pull the on-disk inode from the AGI unlinked list.
	 * Free the inode first so that we guarantee that the AGI lock is going
	 * to be taken before we remove the inode from the unlinked list. This
	 * makes the AGI lock -> unlinked list modification order the same as
	 * used in O_TMPFILE creation.
	 */
	error = xfs_iunlink_remove(tp, pag, ip);
	error = xfs_difree(tp, pag, ip->i_ino, &xic);
	if (error)
		goto out;
		return error;

	error = xfs_difree(tp, pag, ip->i_ino, &xic);
	error = xfs_iunlink_remove(tp, pag, ip);
	if (error)
		goto out;

+1 −1
Original line number Diff line number Diff line
@@ -175,7 +175,7 @@ xfs_trans_get_buf(
	struct xfs_buftarg	*target,
	xfs_daddr_t		blkno,
	int			numblks,
	uint			flags,
	xfs_buf_flags_t		flags,
	struct xfs_buf		**bpp)
{
	DEFINE_SINGLE_BUF_MAP(map, blkno, numblks);