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

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
...@@ -10237,8 +10237,6 @@ F: drivers/net/ethernet/sgi/ioc3-eth.c ...@@ -10237,8 +10237,6 @@ F: drivers/net/ethernet/sgi/ioc3-eth.c
IOMAP FILESYSTEM LIBRARY IOMAP FILESYSTEM LIBRARY
M: Christoph Hellwig <hch@infradead.org> M: Christoph Hellwig <hch@infradead.org>
M: Darrick J. Wong <djwong@kernel.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-xfs@vger.kernel.org
L: linux-fsdevel@vger.kernel.org L: linux-fsdevel@vger.kernel.org
S: Supported S: Supported
...@@ -21596,7 +21594,6 @@ F: drivers/xen/*swiotlb* ...@@ -21596,7 +21594,6 @@ F: drivers/xen/*swiotlb*
XFS FILESYSTEM XFS FILESYSTEM
C: irc://irc.oftc.net/xfs C: irc://irc.oftc.net/xfs
M: Darrick J. Wong <djwong@kernel.org> M: Darrick J. Wong <djwong@kernel.org>
M: linux-xfs@vger.kernel.org
L: linux-xfs@vger.kernel.org L: linux-xfs@vger.kernel.org
S: Supported S: Supported
W: http://xfs.org/ W: http://xfs.org/
......
...@@ -406,7 +406,7 @@ xfs_buf_alloc_pages( ...@@ -406,7 +406,7 @@ xfs_buf_alloc_pages(
STATIC int STATIC int
_xfs_buf_map_pages( _xfs_buf_map_pages(
struct xfs_buf *bp, struct xfs_buf *bp,
uint flags) xfs_buf_flags_t flags)
{ {
ASSERT(bp->b_flags & _XBF_PAGES); ASSERT(bp->b_flags & _XBF_PAGES);
if (bp->b_page_count == 1) { if (bp->b_page_count == 1) {
...@@ -868,7 +868,7 @@ xfs_buf_read_uncached( ...@@ -868,7 +868,7 @@ xfs_buf_read_uncached(
struct xfs_buftarg *target, struct xfs_buftarg *target,
xfs_daddr_t daddr, xfs_daddr_t daddr,
size_t numblks, size_t numblks,
int flags, xfs_buf_flags_t flags,
struct xfs_buf **bpp, struct xfs_buf **bpp,
const struct xfs_buf_ops *ops) const struct xfs_buf_ops *ops)
{ {
...@@ -903,7 +903,7 @@ int ...@@ -903,7 +903,7 @@ int
xfs_buf_get_uncached( xfs_buf_get_uncached(
struct xfs_buftarg *target, struct xfs_buftarg *target,
size_t numblks, size_t numblks,
int flags, xfs_buf_flags_t flags,
struct xfs_buf **bpp) struct xfs_buf **bpp)
{ {
int error; int error;
......
...@@ -22,28 +22,28 @@ struct xfs_buf; ...@@ -22,28 +22,28 @@ struct xfs_buf;
#define XFS_BUF_DADDR_NULL ((xfs_daddr_t) (-1LL)) #define XFS_BUF_DADDR_NULL ((xfs_daddr_t) (-1LL))
#define XBF_READ (1 << 0) /* buffer intended for reading from device */ #define XBF_READ (1u << 0) /* buffer intended for reading from device */
#define XBF_WRITE (1 << 1) /* buffer intended for writing to device */ #define XBF_WRITE (1u << 1) /* buffer intended for writing to device */
#define XBF_READ_AHEAD (1 << 2) /* asynchronous read-ahead */ #define XBF_READ_AHEAD (1u << 2) /* asynchronous read-ahead */
#define XBF_NO_IOACCT (1 << 3) /* bypass I/O accounting (non-LRU bufs) */ #define XBF_NO_IOACCT (1u << 3) /* bypass I/O accounting (non-LRU bufs) */
#define XBF_ASYNC (1 << 4) /* initiator will not wait for completion */ #define XBF_ASYNC (1u << 4) /* initiator will not wait for completion */
#define XBF_DONE (1 << 5) /* all pages in the buffer uptodate */ #define XBF_DONE (1u << 5) /* all pages in the buffer uptodate */
#define XBF_STALE (1 << 6) /* buffer has been staled, do not find it */ #define XBF_STALE (1u << 6) /* buffer has been staled, do not find it */
#define XBF_WRITE_FAIL (1 << 7) /* async writes have failed on this buffer */ #define XBF_WRITE_FAIL (1u << 7) /* async writes have failed on this buffer */
/* buffer type flags for write callbacks */ /* buffer type flags for write callbacks */
#define _XBF_INODES (1 << 16)/* inode buffer */ #define _XBF_INODES (1u << 16)/* inode buffer */
#define _XBF_DQUOTS (1 << 17)/* dquot buffer */ #define _XBF_DQUOTS (1u << 17)/* dquot buffer */
#define _XBF_LOGRECOVERY (1 << 18)/* log recovery buffer */ #define _XBF_LOGRECOVERY (1u << 18)/* log recovery buffer */
/* flags used only internally */ /* flags used only internally */
#define _XBF_PAGES (1 << 20)/* backed by refcounted pages */ #define _XBF_PAGES (1u << 20)/* backed by refcounted pages */
#define _XBF_KMEM (1 << 21)/* backed by heap memory */ #define _XBF_KMEM (1u << 21)/* backed by heap memory */
#define _XBF_DELWRI_Q (1 << 22)/* buffer on a delwri queue */ #define _XBF_DELWRI_Q (1u << 22)/* buffer on a delwri queue */
/* flags used only as arguments to access routines */ /* flags used only as arguments to access routines */
#define XBF_TRYLOCK (1 << 30)/* lock requested, but do not wait */ #define XBF_TRYLOCK (1u << 30)/* lock requested, but do not wait */
#define XBF_UNMAPPED (1 << 31)/* do not map the buffer */ #define XBF_UNMAPPED (1u << 31)/* do not map the buffer */
typedef unsigned int xfs_buf_flags_t; typedef unsigned int xfs_buf_flags_t;
...@@ -58,7 +58,7 @@ typedef unsigned int xfs_buf_flags_t; ...@@ -58,7 +58,7 @@ typedef unsigned int xfs_buf_flags_t;
{ XBF_WRITE_FAIL, "WRITE_FAIL" }, \ { XBF_WRITE_FAIL, "WRITE_FAIL" }, \
{ _XBF_INODES, "INODES" }, \ { _XBF_INODES, "INODES" }, \
{ _XBF_DQUOTS, "DQUOTS" }, \ { _XBF_DQUOTS, "DQUOTS" }, \
{ _XBF_LOGRECOVERY, "LOG_RECOVERY" }, \ { _XBF_LOGRECOVERY, "LOG_RECOVERY" }, \
{ _XBF_PAGES, "PAGES" }, \ { _XBF_PAGES, "PAGES" }, \
{ _XBF_KMEM, "KMEM" }, \ { _XBF_KMEM, "KMEM" }, \
{ _XBF_DELWRI_Q, "DELWRI_Q" }, \ { _XBF_DELWRI_Q, "DELWRI_Q" }, \
...@@ -247,11 +247,11 @@ xfs_buf_readahead( ...@@ -247,11 +247,11 @@ xfs_buf_readahead(
return xfs_buf_readahead_map(target, &map, 1, ops); return xfs_buf_readahead_map(target, &map, 1, ops);
} }
int xfs_buf_get_uncached(struct xfs_buftarg *target, size_t numblks, int flags, int xfs_buf_get_uncached(struct xfs_buftarg *target, size_t numblks,
struct xfs_buf **bpp); xfs_buf_flags_t flags, struct xfs_buf **bpp);
int xfs_buf_read_uncached(struct xfs_buftarg *target, xfs_daddr_t daddr, 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); const struct xfs_buf_ops *ops);
int _xfs_buf_read(struct xfs_buf *bp, xfs_buf_flags_t flags); int _xfs_buf_read(struct xfs_buf *bp, xfs_buf_flags_t flags);
void xfs_buf_hold(struct xfs_buf *bp); void xfs_buf_hold(struct xfs_buf *bp);
......
...@@ -2594,14 +2594,13 @@ xfs_ifree_cluster( ...@@ -2594,14 +2594,13 @@ xfs_ifree_cluster(
} }
/* /*
* This is called to return an inode to the inode free list. * This is called to return an inode to the inode free list. The inode should
* The inode should already be truncated to 0 length and have * already be truncated to 0 length and have no pages associated with it. This
* no pages associated with it. This routine also assumes that * routine also assumes that the inode is already a part of the transaction.
* the inode is already a part of the transaction.
* *
* The on-disk copy of the inode will have been added to the list * The on-disk copy of the inode will have been added to the list of unlinked
* of unlinked inodes in the AGI. We need to remove the inode from * inodes in the AGI. We need to remove the inode from that list atomically with
* that list atomically with respect to freeing it here. * respect to freeing it here.
*/ */
int int
xfs_ifree( xfs_ifree(
...@@ -2623,13 +2622,16 @@ xfs_ifree( ...@@ -2623,13 +2622,16 @@ xfs_ifree(
pag = xfs_perag_get(mp, XFS_INO_TO_AGNO(mp, ip->i_ino)); 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) if (error)
goto out; return error;
error = xfs_difree(tp, pag, ip->i_ino, &xic); error = xfs_iunlink_remove(tp, pag, ip);
if (error) if (error)
goto out; goto out;
......
...@@ -175,7 +175,7 @@ xfs_trans_get_buf( ...@@ -175,7 +175,7 @@ xfs_trans_get_buf(
struct xfs_buftarg *target, struct xfs_buftarg *target,
xfs_daddr_t blkno, xfs_daddr_t blkno,
int numblks, int numblks,
uint flags, xfs_buf_flags_t flags,
struct xfs_buf **bpp) struct xfs_buf **bpp)
{ {
DEFINE_SINGLE_BUF_MAP(map, blkno, numblks); DEFINE_SINGLE_BUF_MAP(map, blkno, numblks);
......
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