]> www.infradead.org Git - users/hch/xfsprogs.git/commitdiff
libxfs: remove dangerous casting between xfs_buf and cache_node
authorDarrick J. Wong <darrick.wong@oracle.com>
Sun, 1 Mar 2020 17:34:11 +0000 (12:34 -0500)
committerEric Sandeen <sandeen@sandeen.net>
Sun, 1 Mar 2020 17:34:11 +0000 (12:34 -0500)
Get rid of all the dangerous casting between xfs_buf and cache_node
since we can dereference directly.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
libxfs/libxfs_io.h
libxfs/rdwr.c

index 646e340b3c6f590e8c0f243e9d60d7b3e04e19fe..cd1598811343da945acb7d652629c2c2b2af833c 100644 (file)
@@ -109,10 +109,9 @@ typedef unsigned int xfs_buf_flags_t;
 
 #define XFS_BUF_SET_PRIORITY(bp,pri)   cache_node_set_priority( \
                                                libxfs_bcache, \
-                                               (struct cache_node *)(bp), \
+                                               &(bp)->b_node, \
                                                (pri))
-#define XFS_BUF_PRIORITY(bp)           (cache_node_get_priority( \
-                                               (struct cache_node *)(bp)))
+#define XFS_BUF_PRIORITY(bp)           (cache_node_get_priority(&(bp)->b_node))
 #define xfs_buf_set_ref(bp,ref)                ((void) 0)
 #define xfs_buf_ioerror(bp,err)                ((bp)->b_error = (err))
 
index bb925711f93757aba87095740efc1838053b35d8..f92c7db93c67bc2e3faab041721be3c7c7fe6539 100644 (file)
@@ -525,8 +525,8 @@ __cache_lookup(struct xfs_bufkey *key, unsigned int flags)
                bp->b_holder = pthread_self();
        }
 
-       cache_node_set_priority(libxfs_bcache, (struct cache_node *)bp,
-               cache_node_get_priority((struct cache_node *)bp) -
+       cache_node_set_priority(libxfs_bcache, &bp->b_node,
+                       cache_node_get_priority(&bp->b_node) -
                                                CACHE_PREFETCH_PRIORITY);
 #ifdef XFS_BUF_TRACING
        pthread_mutex_lock(&libxfs_bcache->c_mutex);
@@ -542,7 +542,7 @@ __cache_lookup(struct xfs_bufkey *key, unsigned int flags)
 
        return bp;
 out_put:
-       cache_node_put(libxfs_bcache, (struct cache_node *)bp);
+       cache_node_put(libxfs_bcache, &bp->b_node);
        return NULL;
 }
 
@@ -639,23 +639,25 @@ libxfs_buf_relse(
        }
 
        if (!list_empty(&bp->b_node.cn_hash))
-               cache_node_put(libxfs_bcache, (struct cache_node *)bp);
+               cache_node_put(libxfs_bcache, &bp->b_node);
        else if (--bp->b_node.cn_count == 0)
                libxfs_putbufr(bp);
 }
 
 static struct cache_node *
-libxfs_balloc(cache_key_t key)
+libxfs_balloc(
+       cache_key_t             key)
 {
-       struct xfs_bufkey *bufkey = (struct xfs_bufkey *)key;
+       struct xfs_bufkey       *bufkey = (struct xfs_bufkey *)key;
+       struct xfs_buf          *bp;
 
        if (bufkey->map)
-               return (struct cache_node *)
-                      libxfs_getbufr_map(bufkey->buftarg,
-                                         bufkey->blkno, bufkey->bblen,
-                                         bufkey->map, bufkey->nmaps);
-       return (struct cache_node *)libxfs_getbufr(bufkey->buftarg,
-                                         bufkey->blkno, bufkey->bblen);
+               bp = libxfs_getbufr_map(bufkey->buftarg, bufkey->blkno,
+                               bufkey->bblen, bufkey->map, bufkey->nmaps);
+       else
+               bp = libxfs_getbufr(bufkey->buftarg, bufkey->blkno,
+                               bufkey->bblen);
+       return &bp->b_node;
 }
 
 
@@ -1127,7 +1129,7 @@ libxfs_putbufr(xfs_buf_t *bp)
 {
        if (bp->b_flags & LIBXFS_B_DIRTY)
                libxfs_bwrite(bp);
-       libxfs_brelse((struct cache_node *)bp);
+       libxfs_brelse(&bp->b_node);
 }