]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/blobdiff - repair/incore.h
xfs_{copy,db,logprint,repair}: pass xfs_mount pointers instead of xfs_sb pointers
[thirdparty/xfsprogs-dev.git] / repair / incore.h
index fd66084f034271276deb301126003b3ffc0f5cc8..d64315fd25853709a202452358faebe064b44423 100644 (file)
@@ -1,19 +1,7 @@
+// SPDX-License-Identifier: GPL-2.0
 /*
  * Copyright (c) 2000-2002,2005 Silicon Graphics, Inc.
  * All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write the Free Software Foundation,
- * Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  */
 
 #ifndef XFS_REPAIR_INCORE_H
@@ -113,8 +101,6 @@ typedef struct rt_extent_tree_node  {
 /* separate state bit, OR'ed into high (4th) bit of ex_state field */
 
 #define XR_E_WRITTEN   0x8     /* extent has been written out, can't reclaim */
-#define good_state(state)      (((state) & (~XR_E_WRITTEN)) >= XR_E_UNKNOWN && \
-                               ((state) & (~XR_E_WRITTEN) < XF_E_BAD_STATE))
 #define written(state)         ((state) & XR_E_WRITTEN)
 #define set_written(state)     (state) &= XR_E_WRITTEN
 
@@ -228,7 +214,9 @@ int         count_bcnt_extents(xfs_agnumber_t);
 #define XR_INO_BLKDEV  8               /* block device */
 #define XR_INO_SOCK    9               /* socket */
 #define XR_INO_FIFO    10              /* fifo */
-#define XR_INO_MOUNTPOINT 11           /* mountpoint */
+#define XR_INO_UQUOTA  12              /* user quota inode */
+#define XR_INO_GQUOTA  13              /* group quota inode */
+#define XR_INO_PQUOTA  14              /* project quota inode */
 
 /* inode allocation tree */
 
@@ -293,6 +281,7 @@ typedef struct ino_tree_node  {
                parent_list_t   *plist;         /* phases 2-5 */
        } ino_un;
        uint8_t                 *ftypes;        /* phases 3,6 */
+       pthread_mutex_t         lock;
 } ino_tree_node_t;
 
 #define INOS_PER_IREC  (sizeof(uint64_t) * NBBY)
@@ -423,7 +412,9 @@ next_free_ino_rec(ino_tree_node_t *ino_rec)
  */
 static inline void add_inode_refchecked(struct ino_tree_node *irec, int offset)
 {
+       pthread_mutex_lock(&irec->lock);
        irec->ino_un.ex_data->ino_processed |= IREC_MASK(offset);
+       pthread_mutex_unlock(&irec->lock);
 }
 
 static inline int is_inode_refchecked(struct ino_tree_node *irec, int offset)
@@ -449,12 +440,16 @@ static inline int is_inode_confirmed(struct ino_tree_node *irec, int offset)
  */
 static inline void set_inode_isadir(struct ino_tree_node *irec, int offset)
 {
+       pthread_mutex_lock(&irec->lock);
        irec->ino_isa_dir |= IREC_MASK(offset);
+       pthread_mutex_unlock(&irec->lock);
 }
 
 static inline void clear_inode_isadir(struct ino_tree_node *irec, int offset)
 {
+       pthread_mutex_lock(&irec->lock);
        irec->ino_isa_dir &= ~IREC_MASK(offset);
+       pthread_mutex_unlock(&irec->lock);
 }
 
 static inline int inode_isadir(struct ino_tree_node *irec, int offset)
@@ -467,15 +462,19 @@ static inline int inode_isadir(struct ino_tree_node *irec, int offset)
  */
 static inline void set_inode_free(struct ino_tree_node *irec, int offset)
 {
+       pthread_mutex_lock(&irec->lock);
        set_inode_confirmed(irec, offset);
        irec->ir_free |= XFS_INOBT_MASK(offset);
+       pthread_mutex_unlock(&irec->lock);
 
 }
 
 static inline void set_inode_used(struct ino_tree_node *irec, int offset)
 {
+       pthread_mutex_lock(&irec->lock);
        set_inode_confirmed(irec, offset);
        irec->ir_free &= ~XFS_INOBT_MASK(offset);
+       pthread_mutex_unlock(&irec->lock);
 }
 
 static inline int is_inode_free(struct ino_tree_node *irec, int offset)
@@ -488,7 +487,9 @@ static inline int is_inode_free(struct ino_tree_node *irec, int offset)
  */
 static inline void set_inode_sparse(struct ino_tree_node *irec, int offset)
 {
+       pthread_mutex_lock(&irec->lock);
        irec->ir_sparse |= XFS_INOBT_MASK(offset);
+       pthread_mutex_unlock(&irec->lock);
 }
 
 static inline bool is_inode_sparse(struct ino_tree_node *irec, int offset)
@@ -501,12 +502,16 @@ static inline bool is_inode_sparse(struct ino_tree_node *irec, int offset)
  */
 static inline void set_inode_was_rl(struct ino_tree_node *irec, int offset)
 {
+       pthread_mutex_lock(&irec->lock);
        irec->ino_was_rl |= IREC_MASK(offset);
+       pthread_mutex_unlock(&irec->lock);
 }
 
 static inline void clear_inode_was_rl(struct ino_tree_node *irec, int offset)
 {
+       pthread_mutex_lock(&irec->lock);
        irec->ino_was_rl &= ~IREC_MASK(offset);
+       pthread_mutex_unlock(&irec->lock);
 }
 
 static inline int inode_was_rl(struct ino_tree_node *irec, int offset)
@@ -519,12 +524,16 @@ static inline int inode_was_rl(struct ino_tree_node *irec, int offset)
  */
 static inline void set_inode_is_rl(struct ino_tree_node *irec, int offset)
 {
+       pthread_mutex_lock(&irec->lock);
        irec->ino_is_rl |= IREC_MASK(offset);
+       pthread_mutex_unlock(&irec->lock);
 }
 
 static inline void clear_inode_is_rl(struct ino_tree_node *irec, int offset)
 {
+       pthread_mutex_lock(&irec->lock);
        irec->ino_is_rl &= ~IREC_MASK(offset);
+       pthread_mutex_unlock(&irec->lock);
 }
 
 static inline int inode_is_rl(struct ino_tree_node *irec, int offset)
@@ -557,7 +566,9 @@ static inline int is_inode_reached(struct ino_tree_node *irec, int offset)
 static inline void add_inode_reached(struct ino_tree_node *irec, int offset)
 {
        add_inode_ref(irec, offset);
+       pthread_mutex_lock(&irec->lock);
        irec->ino_un.ex_data->ino_reached |= IREC_MASK(offset);
+       pthread_mutex_unlock(&irec->lock);
 }
 
 /*
@@ -611,7 +622,7 @@ typedef struct bm_level_state  {
 /*
        int                     level;
        uint64_t                prev_last_key;
-       xfs_buf_t               *bp;
+       struct xfs_buf          *bp;
        xfs_bmbt_block_t        *block;
 */
 } bm_level_state_t;