diff options
| author | Nathan Scott <nathans@sgi.com> | 2006-01-11 18:29:53 -0500 |
|---|---|---|
| committer | Nathan Scott <nathans@sgi.com> | 2006-01-11 18:29:53 -0500 |
| commit | 3762ec6bf76cdd32653c409dbad09f7b85807c68 (patch) | |
| tree | ffe6dbe857d17709c352e0d60a5be8cba3b83400 | |
| parent | 6ab65429b4871c42bfd0013f7f5e49d40c0642cd (diff) | |
[XFS] Merge in trivial changes, sync up headers with userspace
equivalents.
SGI-PV: 907752
SGI-Modid: xfs-linux-melb:xfs-kern:24961a
Signed-off-by: Nathan Scott <nathans@sgi.com>
| -rw-r--r-- | fs/xfs/quota/xfs_dquot_item.c | 4 | ||||
| -rw-r--r-- | fs/xfs/support/debug.c | 58 | ||||
| -rw-r--r-- | fs/xfs/support/debug.h | 25 | ||||
| -rw-r--r-- | fs/xfs/xfs_arch.h | 2 | ||||
| -rw-r--r-- | fs/xfs/xfs_attr_leaf.h | 79 | ||||
| -rw-r--r-- | fs/xfs/xfs_bmap.c | 4 | ||||
| -rw-r--r-- | fs/xfs/xfs_dir_leaf.h | 64 | ||||
| -rw-r--r-- | fs/xfs/xfs_error.c | 1 | ||||
| -rw-r--r-- | fs/xfs/xfs_error.h | 8 | ||||
| -rw-r--r-- | fs/xfs/xfs_inode.c | 33 | ||||
| -rw-r--r-- | fs/xfs/xfs_inode_item.c | 4 |
11 files changed, 141 insertions, 141 deletions
diff --git a/fs/xfs/quota/xfs_dquot_item.c b/fs/xfs/quota/xfs_dquot_item.c index 2f69822344e5..2ec6b441849c 100644 --- a/fs/xfs/quota/xfs_dquot_item.c +++ b/fs/xfs/quota/xfs_dquot_item.c | |||
| @@ -239,7 +239,7 @@ xfs_qm_dquot_logitem_pushbuf( | |||
| 239 | * trying to duplicate our effort. | 239 | * trying to duplicate our effort. |
| 240 | */ | 240 | */ |
| 241 | ASSERT(qip->qli_pushbuf_flag != 0); | 241 | ASSERT(qip->qli_pushbuf_flag != 0); |
| 242 | ASSERT(qip->qli_push_owner == get_thread_id()); | 242 | ASSERT(qip->qli_push_owner == current_pid()); |
| 243 | 243 | ||
| 244 | /* | 244 | /* |
| 245 | * If flushlock isn't locked anymore, chances are that the | 245 | * If flushlock isn't locked anymore, chances are that the |
| @@ -333,7 +333,7 @@ xfs_qm_dquot_logitem_trylock( | |||
| 333 | qip->qli_pushbuf_flag = 1; | 333 | qip->qli_pushbuf_flag = 1; |
| 334 | ASSERT(qip->qli_format.qlf_blkno == dqp->q_blkno); | 334 | ASSERT(qip->qli_format.qlf_blkno == dqp->q_blkno); |
| 335 | #ifdef DEBUG | 335 | #ifdef DEBUG |
| 336 | qip->qli_push_owner = get_thread_id(); | 336 | qip->qli_push_owner = current_pid(); |
| 337 | #endif | 337 | #endif |
| 338 | /* | 338 | /* |
| 339 | * The dquot is left locked. | 339 | * The dquot is left locked. |
diff --git a/fs/xfs/support/debug.c b/fs/xfs/support/debug.c index e281c3a71ad0..b08b3d9345b7 100644 --- a/fs/xfs/support/debug.c +++ b/fs/xfs/support/debug.c | |||
| @@ -33,39 +33,6 @@ static const char * const err_level[XFS_MAX_ERR_LEVEL+1] = | |||
| 33 | KERN_INFO, KERN_DEBUG}; | 33 | KERN_INFO, KERN_DEBUG}; |
| 34 | 34 | ||
| 35 | void | 35 | void |
| 36 | assfail(char *a, char *f, int l) | ||
| 37 | { | ||
| 38 | printk("XFS assertion failed: %s, file: %s, line: %d\n", a, f, l); | ||
| 39 | BUG(); | ||
| 40 | } | ||
| 41 | |||
| 42 | #if ((defined(DEBUG) || defined(INDUCE_IO_ERRROR)) && !defined(NO_WANT_RANDOM)) | ||
| 43 | |||
| 44 | unsigned long | ||
| 45 | random(void) | ||
| 46 | { | ||
| 47 | static unsigned long RandomValue = 1; | ||
| 48 | /* cycles pseudo-randomly through all values between 1 and 2^31 - 2 */ | ||
| 49 | register long rv = RandomValue; | ||
| 50 | register long lo; | ||
| 51 | register long hi; | ||
| 52 | |||
| 53 | hi = rv / 127773; | ||
| 54 | lo = rv % 127773; | ||
| 55 | rv = 16807 * lo - 2836 * hi; | ||
| 56 | if( rv <= 0 ) rv += 2147483647; | ||
| 57 | return( RandomValue = rv ); | ||
| 58 | } | ||
| 59 | |||
| 60 | int | ||
| 61 | get_thread_id(void) | ||
| 62 | { | ||
| 63 | return current->pid; | ||
| 64 | } | ||
| 65 | |||
| 66 | #endif /* DEBUG || INDUCE_IO_ERRROR || !NO_WANT_RANDOM */ | ||
| 67 | |||
| 68 | void | ||
| 69 | cmn_err(register int level, char *fmt, ...) | 36 | cmn_err(register int level, char *fmt, ...) |
| 70 | { | 37 | { |
| 71 | char *fp = fmt; | 38 | char *fp = fmt; |
| @@ -90,7 +57,6 @@ cmn_err(register int level, char *fmt, ...) | |||
| 90 | BUG(); | 57 | BUG(); |
| 91 | } | 58 | } |
| 92 | 59 | ||
| 93 | |||
| 94 | void | 60 | void |
| 95 | icmn_err(register int level, char *fmt, va_list ap) | 61 | icmn_err(register int level, char *fmt, va_list ap) |
| 96 | { | 62 | { |
| @@ -109,3 +75,27 @@ icmn_err(register int level, char *fmt, va_list ap) | |||
| 109 | if (level == CE_PANIC) | 75 | if (level == CE_PANIC) |
| 110 | BUG(); | 76 | BUG(); |
| 111 | } | 77 | } |
| 78 | |||
| 79 | void | ||
| 80 | assfail(char *expr, char *file, int line) | ||
| 81 | { | ||
| 82 | printk("Assertion failed: %s, file: %s, line: %d\n", expr, file, line); | ||
| 83 | BUG(); | ||
| 84 | } | ||
| 85 | |||
| 86 | #if ((defined(DEBUG) || defined(INDUCE_IO_ERRROR)) && !defined(NO_WANT_RANDOM)) | ||
| 87 | unsigned long random(void) | ||
| 88 | { | ||
| 89 | static unsigned long RandomValue = 1; | ||
| 90 | /* cycles pseudo-randomly through all values between 1 and 2^31 - 2 */ | ||
| 91 | register long rv = RandomValue; | ||
| 92 | register long lo; | ||
| 93 | register long hi; | ||
| 94 | |||
| 95 | hi = rv / 127773; | ||
| 96 | lo = rv % 127773; | ||
| 97 | rv = 16807 * lo - 2836 * hi; | ||
| 98 | if (rv <= 0) rv += 2147483647; | ||
| 99 | return RandomValue = rv; | ||
| 100 | } | ||
| 101 | #endif /* DEBUG || INDUCE_IO_ERRROR || !NO_WANT_RANDOM */ | ||
diff --git a/fs/xfs/support/debug.h b/fs/xfs/support/debug.h index aff558664c32..e3bf58112e7e 100644 --- a/fs/xfs/support/debug.h +++ b/fs/xfs/support/debug.h | |||
| @@ -31,24 +31,23 @@ extern void icmn_err(int, char *, va_list) | |||
| 31 | __attribute__ ((format (printf, 2, 0))); | 31 | __attribute__ ((format (printf, 2, 0))); |
| 32 | extern void cmn_err(int, char *, ...) | 32 | extern void cmn_err(int, char *, ...) |
| 33 | __attribute__ ((format (printf, 2, 3))); | 33 | __attribute__ ((format (printf, 2, 3))); |
| 34 | extern void assfail(char *expr, char *f, int l); | ||
| 34 | 35 | ||
| 35 | #ifndef STATIC | 36 | #define prdev(fmt,targ,args...) \ |
| 36 | # define STATIC static | 37 | printk("Device %s - " fmt "\n", XFS_BUFTARG_NAME(targ), ## args) |
| 37 | #endif | ||
| 38 | 38 | ||
| 39 | #ifdef DEBUG | 39 | #define ASSERT_ALWAYS(expr) \ |
| 40 | # define ASSERT(EX) ((EX) ? ((void)0) : assfail(#EX, __FILE__, __LINE__)) | 40 | (unlikely((expr) != 0) ? (void)0 : assfail(#expr, __FILE__, __LINE__)) |
| 41 | #else | ||
| 42 | # define ASSERT(x) ((void)0) | ||
| 43 | #endif | ||
| 44 | 41 | ||
| 45 | extern void assfail(char *, char *, int); | 42 | #ifndef DEBUG |
| 46 | #ifdef DEBUG | 43 | # define ASSERT(expr) ((void)0) |
| 44 | #else | ||
| 45 | # define ASSERT(expr) ASSERT_ALWAYS(expr) | ||
| 47 | extern unsigned long random(void); | 46 | extern unsigned long random(void); |
| 48 | extern int get_thread_id(void); | ||
| 49 | #endif | 47 | #endif |
| 50 | 48 | ||
| 51 | #define ASSERT_ALWAYS(EX) ((EX)?((void)0):assfail(#EX, __FILE__, __LINE__)) | 49 | #ifndef STATIC |
| 52 | #define debug_stop_all_cpus(param) /* param is "cpumask_t *" */ | 50 | # define STATIC static |
| 51 | #endif | ||
| 53 | 52 | ||
| 54 | #endif /* __XFS_SUPPORT_DEBUG_H__ */ | 53 | #endif /* __XFS_SUPPORT_DEBUG_H__ */ |
diff --git a/fs/xfs/xfs_arch.h b/fs/xfs/xfs_arch.h index 71de20cedb5c..c4836890b726 100644 --- a/fs/xfs/xfs_arch.h +++ b/fs/xfs/xfs_arch.h | |||
| @@ -44,7 +44,7 @@ | |||
| 44 | #define cpu_to_be16(val) ((__be16)(val)) | 44 | #define cpu_to_be16(val) ((__be16)(val)) |
| 45 | #define cpu_to_be32(val) ((__be32)(val)) | 45 | #define cpu_to_be32(val) ((__be32)(val)) |
| 46 | #define cpu_to_be64(val) ((__be64)(val)) | 46 | #define cpu_to_be64(val) ((__be64)(val)) |
| 47 | #define be16_to_cpu(val) ((__uint16_t)(val) | 47 | #define be16_to_cpu(val) ((__uint16_t)(val)) |
| 48 | #define be32_to_cpu(val) ((__uint32_t)(val)) | 48 | #define be32_to_cpu(val) ((__uint32_t)(val)) |
| 49 | #define be64_to_cpu(val) ((__uint64_t)(val)) | 49 | #define be64_to_cpu(val) ((__uint64_t)(val)) |
| 50 | #else | 50 | #else |
diff --git a/fs/xfs/xfs_attr_leaf.h b/fs/xfs/xfs_attr_leaf.h index f6143ff251a0..541e34109bb9 100644 --- a/fs/xfs/xfs_attr_leaf.h +++ b/fs/xfs/xfs_attr_leaf.h | |||
| @@ -63,7 +63,7 @@ struct xfs_trans; | |||
| 63 | * the leaf_entry. The namespaces are independent only because we also look | 63 | * the leaf_entry. The namespaces are independent only because we also look |
| 64 | * at the namespace bit when we are looking for a matching attribute name. | 64 | * at the namespace bit when we are looking for a matching attribute name. |
| 65 | * | 65 | * |
| 66 | * We also store a "incomplete" bit in the leaf_entry. It shows that an | 66 | * We also store an "incomplete" bit in the leaf_entry. It shows that an |
| 67 | * attribute is in the middle of being created and should not be shown to | 67 | * attribute is in the middle of being created and should not be shown to |
| 68 | * the user if we crash during the time that the bit is set. We clear the | 68 | * the user if we crash during the time that the bit is set. We clear the |
| 69 | * bit when we have finished setting up the attribute. We do this because | 69 | * bit when we have finished setting up the attribute. We do this because |
| @@ -72,42 +72,48 @@ struct xfs_trans; | |||
| 72 | */ | 72 | */ |
| 73 | #define XFS_ATTR_LEAF_MAPSIZE 3 /* how many freespace slots */ | 73 | #define XFS_ATTR_LEAF_MAPSIZE 3 /* how many freespace slots */ |
| 74 | 74 | ||
| 75 | typedef struct xfs_attr_leaf_map { /* RLE map of free bytes */ | ||
| 76 | __uint16_t base; /* base of free region */ | ||
| 77 | __uint16_t size; /* length of free region */ | ||
| 78 | } xfs_attr_leaf_map_t; | ||
| 79 | |||
| 80 | typedef struct xfs_attr_leaf_hdr { /* constant-structure header block */ | ||
| 81 | xfs_da_blkinfo_t info; /* block type, links, etc. */ | ||
| 82 | __uint16_t count; /* count of active leaf_entry's */ | ||
| 83 | __uint16_t usedbytes; /* num bytes of names/values stored */ | ||
| 84 | __uint16_t firstused; /* first used byte in name area */ | ||
| 85 | __uint8_t holes; /* != 0 if blk needs compaction */ | ||
| 86 | __uint8_t pad1; | ||
| 87 | xfs_attr_leaf_map_t freemap[XFS_ATTR_LEAF_MAPSIZE]; | ||
| 88 | /* N largest free regions */ | ||
| 89 | } xfs_attr_leaf_hdr_t; | ||
| 90 | |||
| 91 | typedef struct xfs_attr_leaf_entry { /* sorted on key, not name */ | ||
| 92 | xfs_dahash_t hashval; /* hash value of name */ | ||
| 93 | __uint16_t nameidx; /* index into buffer of name/value */ | ||
| 94 | __uint8_t flags; /* LOCAL/ROOT/SECURE/INCOMPLETE flag */ | ||
| 95 | __uint8_t pad2; /* unused pad byte */ | ||
| 96 | } xfs_attr_leaf_entry_t; | ||
| 97 | |||
| 98 | typedef struct xfs_attr_leaf_name_local { | ||
| 99 | __uint16_t valuelen; /* number of bytes in value */ | ||
| 100 | __uint8_t namelen; /* length of name bytes */ | ||
| 101 | __uint8_t nameval[1]; /* name/value bytes */ | ||
| 102 | } xfs_attr_leaf_name_local_t; | ||
| 103 | |||
| 104 | typedef struct xfs_attr_leaf_name_remote { | ||
| 105 | xfs_dablk_t valueblk; /* block number of value bytes */ | ||
| 106 | __uint32_t valuelen; /* number of bytes in value */ | ||
| 107 | __uint8_t namelen; /* length of name bytes */ | ||
| 108 | __uint8_t name[1]; /* name bytes */ | ||
| 109 | } xfs_attr_leaf_name_remote_t; | ||
| 110 | |||
| 75 | typedef struct xfs_attr_leafblock { | 111 | typedef struct xfs_attr_leafblock { |
| 76 | struct xfs_attr_leaf_hdr { /* constant-structure header block */ | 112 | xfs_attr_leaf_hdr_t hdr; /* constant-structure header block */ |
| 77 | xfs_da_blkinfo_t info; /* block type, links, etc. */ | 113 | xfs_attr_leaf_entry_t entries[1]; /* sorted on key, not name */ |
| 78 | __uint16_t count; /* count of active leaf_entry's */ | 114 | xfs_attr_leaf_name_local_t namelist; /* grows from bottom of buf */ |
| 79 | __uint16_t usedbytes; /* num bytes of names/values stored */ | 115 | xfs_attr_leaf_name_remote_t valuelist; /* grows from bottom of buf */ |
| 80 | __uint16_t firstused; /* first used byte in name area */ | ||
| 81 | __uint8_t holes; /* != 0 if blk needs compaction */ | ||
| 82 | __uint8_t pad1; | ||
| 83 | struct xfs_attr_leaf_map { /* RLE map of free bytes */ | ||
| 84 | __uint16_t base; /* base of free region */ | ||
| 85 | __uint16_t size; /* length of free region */ | ||
| 86 | } freemap[XFS_ATTR_LEAF_MAPSIZE]; /* N largest free regions */ | ||
| 87 | } hdr; | ||
| 88 | struct xfs_attr_leaf_entry { /* sorted on key, not name */ | ||
| 89 | xfs_dahash_t hashval; /* hash value of name */ | ||
| 90 | __uint16_t nameidx; /* index into buffer of name/value */ | ||
| 91 | __uint8_t flags; /* LOCAL/ROOT/SECURE/INCOMPLETE flag */ | ||
| 92 | __uint8_t pad2; /* unused pad byte */ | ||
| 93 | } entries[1]; /* variable sized array */ | ||
| 94 | struct xfs_attr_leaf_name_local { | ||
| 95 | __uint16_t valuelen; /* number of bytes in value */ | ||
| 96 | __uint8_t namelen; /* length of name bytes */ | ||
| 97 | __uint8_t nameval[1]; /* name/value bytes */ | ||
| 98 | } namelist; /* grows from bottom of buf */ | ||
| 99 | struct xfs_attr_leaf_name_remote { | ||
| 100 | xfs_dablk_t valueblk; /* block number of value bytes */ | ||
| 101 | __uint32_t valuelen; /* number of bytes in value */ | ||
| 102 | __uint8_t namelen; /* length of name bytes */ | ||
| 103 | __uint8_t name[1]; /* name bytes */ | ||
| 104 | } valuelist; /* grows from bottom of buf */ | ||
| 105 | } xfs_attr_leafblock_t; | 116 | } xfs_attr_leafblock_t; |
| 106 | typedef struct xfs_attr_leaf_hdr xfs_attr_leaf_hdr_t; | ||
| 107 | typedef struct xfs_attr_leaf_map xfs_attr_leaf_map_t; | ||
| 108 | typedef struct xfs_attr_leaf_entry xfs_attr_leaf_entry_t; | ||
| 109 | typedef struct xfs_attr_leaf_name_local xfs_attr_leaf_name_local_t; | ||
| 110 | typedef struct xfs_attr_leaf_name_remote xfs_attr_leaf_name_remote_t; | ||
| 111 | 117 | ||
| 112 | /* | 118 | /* |
| 113 | * Flags used in the leaf_entry[i].flags field. | 119 | * Flags used in the leaf_entry[i].flags field. |
| @@ -150,7 +156,8 @@ xfs_attr_leaf_name_local(xfs_attr_leafblock_t *leafp, int idx) | |||
| 150 | (leafp))[INT_GET((leafp)->entries[idx].nameidx, ARCH_CONVERT)]; | 156 | (leafp))[INT_GET((leafp)->entries[idx].nameidx, ARCH_CONVERT)]; |
| 151 | } | 157 | } |
| 152 | 158 | ||
| 153 | #define XFS_ATTR_LEAF_NAME(leafp,idx) xfs_attr_leaf_name(leafp,idx) | 159 | #define XFS_ATTR_LEAF_NAME(leafp,idx) \ |
| 160 | xfs_attr_leaf_name(leafp,idx) | ||
| 154 | static inline char *xfs_attr_leaf_name(xfs_attr_leafblock_t *leafp, int idx) | 161 | static inline char *xfs_attr_leaf_name(xfs_attr_leafblock_t *leafp, int idx) |
| 155 | { | 162 | { |
| 156 | return (&((char *) | 163 | return (&((char *) |
diff --git a/fs/xfs/xfs_bmap.c b/fs/xfs/xfs_bmap.c index 34bfb8ad0a25..70625e577c70 100644 --- a/fs/xfs/xfs_bmap.c +++ b/fs/xfs/xfs_bmap.c | |||
| @@ -4493,8 +4493,8 @@ xfs_bmap_read_extents( | |||
| 4493 | num_recs = be16_to_cpu(block->bb_numrecs); | 4493 | num_recs = be16_to_cpu(block->bb_numrecs); |
| 4494 | if (unlikely(i + num_recs > room)) { | 4494 | if (unlikely(i + num_recs > room)) { |
| 4495 | ASSERT(i + num_recs <= room); | 4495 | ASSERT(i + num_recs <= room); |
| 4496 | xfs_fs_cmn_err(CE_WARN, ip->i_mount, | 4496 | xfs_fs_repair_cmn_err(CE_WARN, ip->i_mount, |
| 4497 | "corrupt dinode %Lu, (btree extents). Unmount and run xfs_repair.", | 4497 | "corrupt dinode %Lu, (btree extents).", |
| 4498 | (unsigned long long) ip->i_ino); | 4498 | (unsigned long long) ip->i_ino); |
| 4499 | XFS_ERROR_REPORT("xfs_bmap_read_extents(1)", | 4499 | XFS_ERROR_REPORT("xfs_bmap_read_extents(1)", |
| 4500 | XFS_ERRLEVEL_LOW, | 4500 | XFS_ERRLEVEL_LOW, |
diff --git a/fs/xfs/xfs_dir_leaf.h b/fs/xfs/xfs_dir_leaf.h index ab6b09eef9ab..eb8cd9a4667f 100644 --- a/fs/xfs/xfs_dir_leaf.h +++ b/fs/xfs/xfs_dir_leaf.h | |||
| @@ -67,34 +67,38 @@ struct xfs_trans; | |||
| 67 | */ | 67 | */ |
| 68 | #define XFS_DIR_LEAF_MAPSIZE 3 /* how many freespace slots */ | 68 | #define XFS_DIR_LEAF_MAPSIZE 3 /* how many freespace slots */ |
| 69 | 69 | ||
| 70 | typedef struct xfs_dir_leaf_map { /* RLE map of free bytes */ | ||
| 71 | __uint16_t base; /* base of free region */ | ||
| 72 | __uint16_t size; /* run length of free region */ | ||
| 73 | } xfs_dir_leaf_map_t; | ||
| 74 | |||
| 75 | typedef struct xfs_dir_leaf_hdr { /* constant-structure header block */ | ||
| 76 | xfs_da_blkinfo_t info; /* block type, links, etc. */ | ||
| 77 | __uint16_t count; /* count of active leaf_entry's */ | ||
| 78 | __uint16_t namebytes; /* num bytes of name strings stored */ | ||
| 79 | __uint16_t firstused; /* first used byte in name area */ | ||
| 80 | __uint8_t holes; /* != 0 if blk needs compaction */ | ||
| 81 | __uint8_t pad1; | ||
| 82 | xfs_dir_leaf_map_t freemap[XFS_DIR_LEAF_MAPSIZE]; | ||
| 83 | } xfs_dir_leaf_hdr_t; | ||
| 84 | |||
| 85 | typedef struct xfs_dir_leaf_entry { /* sorted on key, not name */ | ||
| 86 | xfs_dahash_t hashval; /* hash value of name */ | ||
| 87 | __uint16_t nameidx; /* index into buffer of name */ | ||
| 88 | __uint8_t namelen; /* length of name string */ | ||
| 89 | __uint8_t pad2; | ||
| 90 | } xfs_dir_leaf_entry_t; | ||
| 91 | |||
| 92 | typedef struct xfs_dir_leaf_name { | ||
| 93 | xfs_dir_ino_t inumber; /* inode number for this key */ | ||
| 94 | __uint8_t name[1]; /* name string itself */ | ||
| 95 | } xfs_dir_leaf_name_t; | ||
| 96 | |||
| 70 | typedef struct xfs_dir_leafblock { | 97 | typedef struct xfs_dir_leafblock { |
| 71 | struct xfs_dir_leaf_hdr { /* constant-structure header block */ | 98 | xfs_dir_leaf_hdr_t hdr; /* constant-structure header block */ |
| 72 | xfs_da_blkinfo_t info; /* block type, links, etc. */ | 99 | xfs_dir_leaf_entry_t entries[1]; /* var sized array */ |
| 73 | __uint16_t count; /* count of active leaf_entry's */ | 100 | xfs_dir_leaf_name_t namelist[1]; /* grows from bottom of buf */ |
| 74 | __uint16_t namebytes; /* num bytes of name strings stored */ | ||
| 75 | __uint16_t firstused; /* first used byte in name area */ | ||
| 76 | __uint8_t holes; /* != 0 if blk needs compaction */ | ||
| 77 | __uint8_t pad1; | ||
| 78 | struct xfs_dir_leaf_map {/* RLE map of free bytes */ | ||
| 79 | __uint16_t base; /* base of free region */ | ||
| 80 | __uint16_t size; /* run length of free region */ | ||
| 81 | } freemap[XFS_DIR_LEAF_MAPSIZE]; /* N largest free regions */ | ||
| 82 | } hdr; | ||
| 83 | struct xfs_dir_leaf_entry { /* sorted on key, not name */ | ||
| 84 | xfs_dahash_t hashval; /* hash value of name */ | ||
| 85 | __uint16_t nameidx; /* index into buffer of name */ | ||
| 86 | __uint8_t namelen; /* length of name string */ | ||
| 87 | __uint8_t pad2; | ||
| 88 | } entries[1]; /* var sized array */ | ||
| 89 | struct xfs_dir_leaf_name { | ||
| 90 | xfs_dir_ino_t inumber; /* inode number for this key */ | ||
| 91 | __uint8_t name[1]; /* name string itself */ | ||
| 92 | } namelist[1]; /* grows from bottom of buf */ | ||
| 93 | } xfs_dir_leafblock_t; | 101 | } xfs_dir_leafblock_t; |
| 94 | typedef struct xfs_dir_leaf_hdr xfs_dir_leaf_hdr_t; | ||
| 95 | typedef struct xfs_dir_leaf_map xfs_dir_leaf_map_t; | ||
| 96 | typedef struct xfs_dir_leaf_entry xfs_dir_leaf_entry_t; | ||
| 97 | typedef struct xfs_dir_leaf_name xfs_dir_leaf_name_t; | ||
| 98 | 102 | ||
| 99 | /* | 103 | /* |
| 100 | * Length of name for which a 512-byte block filesystem | 104 | * Length of name for which a 512-byte block filesystem |
| @@ -126,11 +130,10 @@ typedef union { | |||
| 126 | #define XFS_PUT_COOKIE(c,mp,bno,entry,hash) \ | 130 | #define XFS_PUT_COOKIE(c,mp,bno,entry,hash) \ |
| 127 | ((c).s.be = XFS_DA_MAKE_BNOENTRY(mp, bno, entry), (c).s.h = (hash)) | 131 | ((c).s.be = XFS_DA_MAKE_BNOENTRY(mp, bno, entry), (c).s.h = (hash)) |
| 128 | 132 | ||
| 129 | typedef struct xfs_dir_put_args | 133 | typedef struct xfs_dir_put_args { |
| 130 | { | ||
| 131 | xfs_dircook_t cook; /* cookie of (next) entry */ | 134 | xfs_dircook_t cook; /* cookie of (next) entry */ |
| 132 | xfs_intino_t ino; /* inode number */ | 135 | xfs_intino_t ino; /* inode number */ |
| 133 | struct xfs_dirent *dbp; /* buffer pointer */ | 136 | struct xfs_dirent *dbp; /* buffer pointer */ |
| 134 | char *name; /* directory entry name */ | 137 | char *name; /* directory entry name */ |
| 135 | int namelen; /* length of name */ | 138 | int namelen; /* length of name */ |
| 136 | int done; /* output: set if value was stored */ | 139 | int done; /* output: set if value was stored */ |
| @@ -138,7 +141,8 @@ typedef struct xfs_dir_put_args | |||
| 138 | struct uio *uio; /* uio control structure */ | 141 | struct uio *uio; /* uio control structure */ |
| 139 | } xfs_dir_put_args_t; | 142 | } xfs_dir_put_args_t; |
| 140 | 143 | ||
| 141 | #define XFS_DIR_LEAF_ENTSIZE_BYNAME(len) xfs_dir_leaf_entsize_byname(len) | 144 | #define XFS_DIR_LEAF_ENTSIZE_BYNAME(len) \ |
| 145 | xfs_dir_leaf_entsize_byname(len) | ||
| 142 | static inline int xfs_dir_leaf_entsize_byname(int len) | 146 | static inline int xfs_dir_leaf_entsize_byname(int len) |
| 143 | { | 147 | { |
| 144 | return (uint)sizeof(xfs_dir_leaf_name_t)-1 + len; | 148 | return (uint)sizeof(xfs_dir_leaf_name_t)-1 + len; |
diff --git a/fs/xfs/xfs_error.c b/fs/xfs/xfs_error.c index d7b6b5d16704..2a21c5024017 100644 --- a/fs/xfs/xfs_error.c +++ b/fs/xfs/xfs_error.c | |||
| @@ -54,7 +54,6 @@ xfs_error_trap(int e) | |||
| 54 | if (e != xfs_etrap[i]) | 54 | if (e != xfs_etrap[i]) |
| 55 | continue; | 55 | continue; |
| 56 | cmn_err(CE_NOTE, "xfs_error_trap: error %d", e); | 56 | cmn_err(CE_NOTE, "xfs_error_trap: error %d", e); |
| 57 | debug_stop_all_cpus((void *)-1LL); | ||
| 58 | BUG(); | 57 | BUG(); |
| 59 | break; | 58 | break; |
| 60 | } | 59 | } |
diff --git a/fs/xfs/xfs_error.h b/fs/xfs/xfs_error.h index 06d8a8426c16..26b8e709a569 100644 --- a/fs/xfs/xfs_error.h +++ b/fs/xfs/xfs_error.h | |||
| @@ -18,9 +18,6 @@ | |||
| 18 | #ifndef __XFS_ERROR_H__ | 18 | #ifndef __XFS_ERROR_H__ |
| 19 | #define __XFS_ERROR_H__ | 19 | #define __XFS_ERROR_H__ |
| 20 | 20 | ||
| 21 | #define prdev(fmt,targ,args...) \ | ||
| 22 | printk("XFS: device %s - " fmt "\n", XFS_BUFTARG_NAME(targ), ## args) | ||
| 23 | |||
| 24 | #define XFS_ERECOVER 1 /* Failure to recover log */ | 21 | #define XFS_ERECOVER 1 /* Failure to recover log */ |
| 25 | #define XFS_ELOGSTAT 2 /* Failure to stat log in user space */ | 22 | #define XFS_ELOGSTAT 2 /* Failure to stat log in user space */ |
| 26 | #define XFS_ENOLOGSPACE 3 /* Reservation too large */ | 23 | #define XFS_ENOLOGSPACE 3 /* Reservation too large */ |
| @@ -182,8 +179,11 @@ extern int xfs_errortag_clearall_umount(int64_t fsid, char *fsname, int loud); | |||
| 182 | struct xfs_mount; | 179 | struct xfs_mount; |
| 183 | /* PRINTFLIKE4 */ | 180 | /* PRINTFLIKE4 */ |
| 184 | extern void xfs_cmn_err(int panic_tag, int level, struct xfs_mount *mp, | 181 | extern void xfs_cmn_err(int panic_tag, int level, struct xfs_mount *mp, |
| 185 | char *fmt, ...); | 182 | char *fmt, ...); |
| 186 | /* PRINTFLIKE3 */ | 183 | /* PRINTFLIKE3 */ |
| 187 | extern void xfs_fs_cmn_err(int level, struct xfs_mount *mp, char *fmt, ...); | 184 | extern void xfs_fs_cmn_err(int level, struct xfs_mount *mp, char *fmt, ...); |
| 188 | 185 | ||
| 186 | #define xfs_fs_repair_cmn_err(level, mp, fmt, args...) \ | ||
| 187 | xfs_fs_cmn_err(level, mp, fmt " Unmount and run xfs_repair.", ## args) | ||
| 188 | |||
| 189 | #endif /* __XFS_ERROR_H__ */ | 189 | #endif /* __XFS_ERROR_H__ */ |
diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c index 6b7ac8bdcac2..1d7f5a7e063e 100644 --- a/fs/xfs/xfs_inode.c +++ b/fs/xfs/xfs_inode.c | |||
| @@ -404,9 +404,8 @@ xfs_iformat( | |||
| 404 | INT_GET(dip->di_core.di_nextents, ARCH_CONVERT) + | 404 | INT_GET(dip->di_core.di_nextents, ARCH_CONVERT) + |
| 405 | INT_GET(dip->di_core.di_anextents, ARCH_CONVERT) > | 405 | INT_GET(dip->di_core.di_anextents, ARCH_CONVERT) > |
| 406 | INT_GET(dip->di_core.di_nblocks, ARCH_CONVERT))) { | 406 | INT_GET(dip->di_core.di_nblocks, ARCH_CONVERT))) { |
| 407 | xfs_fs_cmn_err(CE_WARN, ip->i_mount, | 407 | xfs_fs_repair_cmn_err(CE_WARN, ip->i_mount, |
| 408 | "corrupt dinode %Lu, extent total = %d, nblocks = %Lu." | 408 | "corrupt dinode %Lu, extent total = %d, nblocks = %Lu.", |
| 409 | " Unmount and run xfs_repair.", | ||
| 410 | (unsigned long long)ip->i_ino, | 409 | (unsigned long long)ip->i_ino, |
| 411 | (int)(INT_GET(dip->di_core.di_nextents, ARCH_CONVERT) | 410 | (int)(INT_GET(dip->di_core.di_nextents, ARCH_CONVERT) |
| 412 | + INT_GET(dip->di_core.di_anextents, ARCH_CONVERT)), | 411 | + INT_GET(dip->di_core.di_anextents, ARCH_CONVERT)), |
| @@ -418,9 +417,8 @@ xfs_iformat( | |||
| 418 | } | 417 | } |
| 419 | 418 | ||
| 420 | if (unlikely(INT_GET(dip->di_core.di_forkoff, ARCH_CONVERT) > ip->i_mount->m_sb.sb_inodesize)) { | 419 | if (unlikely(INT_GET(dip->di_core.di_forkoff, ARCH_CONVERT) > ip->i_mount->m_sb.sb_inodesize)) { |
| 421 | xfs_fs_cmn_err(CE_WARN, ip->i_mount, | 420 | xfs_fs_repair_cmn_err(CE_WARN, ip->i_mount, |
| 422 | "corrupt dinode %Lu, forkoff = 0x%x." | 421 | "corrupt dinode %Lu, forkoff = 0x%x.", |
| 423 | " Unmount and run xfs_repair.", | ||
| 424 | (unsigned long long)ip->i_ino, | 422 | (unsigned long long)ip->i_ino, |
| 425 | (int)(INT_GET(dip->di_core.di_forkoff, ARCH_CONVERT))); | 423 | (int)(INT_GET(dip->di_core.di_forkoff, ARCH_CONVERT))); |
| 426 | XFS_CORRUPTION_ERROR("xfs_iformat(2)", XFS_ERRLEVEL_LOW, | 424 | XFS_CORRUPTION_ERROR("xfs_iformat(2)", XFS_ERRLEVEL_LOW, |
| @@ -451,8 +449,9 @@ xfs_iformat( | |||
| 451 | * no local regular files yet | 449 | * no local regular files yet |
| 452 | */ | 450 | */ |
| 453 | if (unlikely((INT_GET(dip->di_core.di_mode, ARCH_CONVERT) & S_IFMT) == S_IFREG)) { | 451 | if (unlikely((INT_GET(dip->di_core.di_mode, ARCH_CONVERT) & S_IFMT) == S_IFREG)) { |
| 454 | xfs_fs_cmn_err(CE_WARN, ip->i_mount, | 452 | xfs_fs_repair_cmn_err(CE_WARN, ip->i_mount, |
| 455 | "corrupt inode (local format for regular file) %Lu. Unmount and run xfs_repair.", | 453 | "corrupt inode %Lu " |
| 454 | "(local format for regular file).", | ||
| 456 | (unsigned long long) ip->i_ino); | 455 | (unsigned long long) ip->i_ino); |
| 457 | XFS_CORRUPTION_ERROR("xfs_iformat(4)", | 456 | XFS_CORRUPTION_ERROR("xfs_iformat(4)", |
| 458 | XFS_ERRLEVEL_LOW, | 457 | XFS_ERRLEVEL_LOW, |
| @@ -462,8 +461,9 @@ xfs_iformat( | |||
| 462 | 461 | ||
| 463 | di_size = INT_GET(dip->di_core.di_size, ARCH_CONVERT); | 462 | di_size = INT_GET(dip->di_core.di_size, ARCH_CONVERT); |
| 464 | if (unlikely(di_size > XFS_DFORK_DSIZE(dip, ip->i_mount))) { | 463 | if (unlikely(di_size > XFS_DFORK_DSIZE(dip, ip->i_mount))) { |
| 465 | xfs_fs_cmn_err(CE_WARN, ip->i_mount, | 464 | xfs_fs_repair_cmn_err(CE_WARN, ip->i_mount, |
| 466 | "corrupt inode %Lu (bad size %Ld for local inode). Unmount and run xfs_repair.", | 465 | "corrupt inode %Lu " |
| 466 | "(bad size %Ld for local inode).", | ||
| 467 | (unsigned long long) ip->i_ino, | 467 | (unsigned long long) ip->i_ino, |
| 468 | (long long) di_size); | 468 | (long long) di_size); |
| 469 | XFS_CORRUPTION_ERROR("xfs_iformat(5)", | 469 | XFS_CORRUPTION_ERROR("xfs_iformat(5)", |
| @@ -551,8 +551,9 @@ xfs_iformat_local( | |||
| 551 | * kmem_alloc() or memcpy() below. | 551 | * kmem_alloc() or memcpy() below. |
| 552 | */ | 552 | */ |
| 553 | if (unlikely(size > XFS_DFORK_SIZE(dip, ip->i_mount, whichfork))) { | 553 | if (unlikely(size > XFS_DFORK_SIZE(dip, ip->i_mount, whichfork))) { |
| 554 | xfs_fs_cmn_err(CE_WARN, ip->i_mount, | 554 | xfs_fs_repair_cmn_err(CE_WARN, ip->i_mount, |
| 555 | "corrupt inode %Lu (bad size %d for local fork, size = %d). Unmount and run xfs_repair.", | 555 | "corrupt inode %Lu " |
| 556 | "(bad size %d for local fork, size = %d).", | ||
| 556 | (unsigned long long) ip->i_ino, size, | 557 | (unsigned long long) ip->i_ino, size, |
| 557 | XFS_DFORK_SIZE(dip, ip->i_mount, whichfork)); | 558 | XFS_DFORK_SIZE(dip, ip->i_mount, whichfork)); |
| 558 | XFS_CORRUPTION_ERROR("xfs_iformat_local", XFS_ERRLEVEL_LOW, | 559 | XFS_CORRUPTION_ERROR("xfs_iformat_local", XFS_ERRLEVEL_LOW, |
| @@ -610,8 +611,8 @@ xfs_iformat_extents( | |||
| 610 | * kmem_alloc() or memcpy() below. | 611 | * kmem_alloc() or memcpy() below. |
| 611 | */ | 612 | */ |
| 612 | if (unlikely(size < 0 || size > XFS_DFORK_SIZE(dip, ip->i_mount, whichfork))) { | 613 | if (unlikely(size < 0 || size > XFS_DFORK_SIZE(dip, ip->i_mount, whichfork))) { |
| 613 | xfs_fs_cmn_err(CE_WARN, ip->i_mount, | 614 | xfs_fs_repair_cmn_err(CE_WARN, ip->i_mount, |
| 614 | "corrupt inode %Lu ((a)extents = %d). Unmount and run xfs_repair.", | 615 | "corrupt inode %Lu ((a)extents = %d).", |
| 615 | (unsigned long long) ip->i_ino, nex); | 616 | (unsigned long long) ip->i_ino, nex); |
| 616 | XFS_CORRUPTION_ERROR("xfs_iformat_extents(1)", XFS_ERRLEVEL_LOW, | 617 | XFS_CORRUPTION_ERROR("xfs_iformat_extents(1)", XFS_ERRLEVEL_LOW, |
| 617 | ip->i_mount, dip); | 618 | ip->i_mount, dip); |
| @@ -692,8 +693,8 @@ xfs_iformat_btree( | |||
| 692 | || XFS_BMDR_SPACE_CALC(nrecs) > | 693 | || XFS_BMDR_SPACE_CALC(nrecs) > |
| 693 | XFS_DFORK_SIZE(dip, ip->i_mount, whichfork) | 694 | XFS_DFORK_SIZE(dip, ip->i_mount, whichfork) |
| 694 | || XFS_IFORK_NEXTENTS(ip, whichfork) > ip->i_d.di_nblocks)) { | 695 | || XFS_IFORK_NEXTENTS(ip, whichfork) > ip->i_d.di_nblocks)) { |
| 695 | xfs_fs_cmn_err(CE_WARN, ip->i_mount, | 696 | xfs_fs_repair_cmn_err(CE_WARN, ip->i_mount, |
| 696 | "corrupt inode %Lu (btree). Unmount and run xfs_repair.", | 697 | "corrupt inode %Lu (btree).", |
| 697 | (unsigned long long) ip->i_ino); | 698 | (unsigned long long) ip->i_ino); |
| 698 | XFS_ERROR_REPORT("xfs_iformat_btree", XFS_ERRLEVEL_LOW, | 699 | XFS_ERROR_REPORT("xfs_iformat_btree", XFS_ERRLEVEL_LOW, |
| 699 | ip->i_mount); | 700 | ip->i_mount); |
diff --git a/fs/xfs/xfs_inode_item.c b/fs/xfs/xfs_inode_item.c index 9369010f3f16..36aa1fcb90a5 100644 --- a/fs/xfs/xfs_inode_item.c +++ b/fs/xfs/xfs_inode_item.c | |||
| @@ -608,7 +608,7 @@ xfs_inode_item_trylock( | |||
| 608 | if (iip->ili_pushbuf_flag == 0) { | 608 | if (iip->ili_pushbuf_flag == 0) { |
| 609 | iip->ili_pushbuf_flag = 1; | 609 | iip->ili_pushbuf_flag = 1; |
| 610 | #ifdef DEBUG | 610 | #ifdef DEBUG |
| 611 | iip->ili_push_owner = get_thread_id(); | 611 | iip->ili_push_owner = current_pid(); |
| 612 | #endif | 612 | #endif |
| 613 | /* | 613 | /* |
| 614 | * Inode is left locked in shared mode. | 614 | * Inode is left locked in shared mode. |
| @@ -787,7 +787,7 @@ xfs_inode_item_pushbuf( | |||
| 787 | * trying to duplicate our effort. | 787 | * trying to duplicate our effort. |
| 788 | */ | 788 | */ |
| 789 | ASSERT(iip->ili_pushbuf_flag != 0); | 789 | ASSERT(iip->ili_pushbuf_flag != 0); |
| 790 | ASSERT(iip->ili_push_owner == get_thread_id()); | 790 | ASSERT(iip->ili_push_owner == current_pid()); |
| 791 | 791 | ||
| 792 | /* | 792 | /* |
| 793 | * If flushlock isn't locked anymore, chances are that the | 793 | * If flushlock isn't locked anymore, chances are that the |
