Re: [PATCH] hpfs: obsolete check=none mount option
From: kernel test robot
Date: Fri Feb 27 2026 - 09:28:36 EST
Hi Tetsuo,
kernel test robot noticed the following build warnings:
[auto build test WARNING on brauner-vfs/vfs.all]
[also build test WARNING on linus/master linux/master v7.0-rc1 next-20260226]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Tetsuo-Handa/hpfs-obsolete-check-none-mount-option/20260226-222815
base: https://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs.git vfs.all
patch link: https://lore.kernel.org/r/fd8dabf8-f0a5-418a-9b3d-da981101ca86%40I-love.SAKURA.ne.jp
patch subject: [PATCH] hpfs: obsolete check=none mount option
config: x86_64-randconfig-r071-20260227 (https://download.01.org/0day-ci/archive/20260227/202602272252.89OlLXUV-lkp@xxxxxxxxx/config)
compiler: gcc-14 (Debian 14.2.0-19) 14.2.0
smatch version: v0.5.0-8994-gd50c5a4c
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@xxxxxxxxx>
| Closes: https://lore.kernel.org/oe-kbuild-all/202602272252.89OlLXUV-lkp@xxxxxxxxx/
New smatch warnings:
fs/hpfs/anode.c:92 hpfs_add_sector_to_btree() warn: inconsistent indenting
fs/hpfs/anode.c:289 hpfs_remove_btree() warn: inconsistent indenting
fs/hpfs/anode.c:444 hpfs_truncate_btree() warn: inconsistent indenting
fs/hpfs/dnode.c:445 move_to_top() warn: inconsistent indenting
fs/hpfs/dnode.c:547 delete_empty_dnode() warn: inconsistent indenting
fs/hpfs/dnode.c:751 hpfs_count_dnodes() warn: inconsistent indenting
fs/hpfs/dnode.c:824 hpfs_de_as_down_as_possible() warn: inconsistent indenting
fs/hpfs/dnode.c:1056 map_fnode_dirent() warn: inconsistent indenting
Old smatch warnings:
fs/hpfs/anode.c:167 hpfs_add_sector_to_btree() warn: inconsistent indenting
fs/hpfs/anode.c:301 hpfs_remove_btree() warn: inconsistent indenting
fs/hpfs/anode.c:322 hpfs_remove_btree() warn: passing freed memory 'bh' (line 300)
fs/hpfs/anode.c:452 hpfs_truncate_btree() warn: passing freed memory 'bh' (line 443)
fs/hpfs/anode.c:470 hpfs_truncate_btree() warn: passing freed memory 'bh' (line 443)
fs/hpfs/dnode.c:47 hpfs_add_pos() error: we previously assumed 'hpfs_inode->i_rddir_off' could be null (see line 31)
fs/hpfs/dnode.c:786 hpfs_count_dnodes() warn: inconsistent indenting
fs/hpfs/dnode.c:1074 map_fnode_dirent() warn: inconsistent indenting
vim +92 fs/hpfs/anode.c
^1da177e4c3f41 Linus Torvalds 2005-04-16 60
^1da177e4c3f41 Linus Torvalds 2005-04-16 61 secno hpfs_add_sector_to_btree(struct super_block *s, secno node, int fnod, unsigned fsecno)
^1da177e4c3f41 Linus Torvalds 2005-04-16 62 {
^1da177e4c3f41 Linus Torvalds 2005-04-16 63 struct bplus_header *btree;
^1da177e4c3f41 Linus Torvalds 2005-04-16 64 struct anode *anode = NULL, *ranode = NULL;
^1da177e4c3f41 Linus Torvalds 2005-04-16 65 struct fnode *fnode;
^1da177e4c3f41 Linus Torvalds 2005-04-16 66 anode_secno a, na = -1, ra, up = -1;
^1da177e4c3f41 Linus Torvalds 2005-04-16 67 secno se;
^1da177e4c3f41 Linus Torvalds 2005-04-16 68 struct buffer_head *bh, *bh1, *bh2;
^1da177e4c3f41 Linus Torvalds 2005-04-16 69 int n;
^1da177e4c3f41 Linus Torvalds 2005-04-16 70 unsigned fs;
^1da177e4c3f41 Linus Torvalds 2005-04-16 71 int c1, c2 = 0;
68a74490629eb6 Gustavo A. R. Silva 2025-08-11 72
^1da177e4c3f41 Linus Torvalds 2005-04-16 73 if (fnod) {
^1da177e4c3f41 Linus Torvalds 2005-04-16 74 if (!(fnode = hpfs_map_fnode(s, node, &bh))) return -1;
68a74490629eb6 Gustavo A. R. Silva 2025-08-11 75 btree = GET_BTREE_PTR(&fnode->btree);
^1da177e4c3f41 Linus Torvalds 2005-04-16 76 } else {
^1da177e4c3f41 Linus Torvalds 2005-04-16 77 if (!(anode = hpfs_map_anode(s, node, &bh))) return -1;
68a74490629eb6 Gustavo A. R. Silva 2025-08-11 78 btree = GET_BTREE_PTR(&anode->btree);
^1da177e4c3f41 Linus Torvalds 2005-04-16 79 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 80 a = node;
^1da177e4c3f41 Linus Torvalds 2005-04-16 81 go_down:
^1da177e4c3f41 Linus Torvalds 2005-04-16 82 if ((n = btree->n_used_nodes - 1) < -!!fnod) {
^1da177e4c3f41 Linus Torvalds 2005-04-16 83 hpfs_error(s, "anode %08x has no entries", a);
^1da177e4c3f41 Linus Torvalds 2005-04-16 84 brelse(bh);
^1da177e4c3f41 Linus Torvalds 2005-04-16 85 return -1;
^1da177e4c3f41 Linus Torvalds 2005-04-16 86 }
ddc19e6e04c113 Al Viro 2012-04-17 87 if (bp_internal(btree)) {
0b69760be6968c Mikulas Patocka 2011-05-08 88 a = le32_to_cpu(btree->u.internal[n].down);
0b69760be6968c Mikulas Patocka 2011-05-08 89 btree->u.internal[n].file_secno = cpu_to_le32(-1);
^1da177e4c3f41 Linus Torvalds 2005-04-16 90 mark_buffer_dirty(bh);
^1da177e4c3f41 Linus Torvalds 2005-04-16 91 brelse(bh);
^1da177e4c3f41 Linus Torvalds 2005-04-16 @92 if (hpfs_stop_cycles(s, a, &c1, &c2, "hpfs_add_sector_to_btree #1")) return -1;
^1da177e4c3f41 Linus Torvalds 2005-04-16 93 if (!(anode = hpfs_map_anode(s, a, &bh))) return -1;
68a74490629eb6 Gustavo A. R. Silva 2025-08-11 94 btree = GET_BTREE_PTR(&anode->btree);
^1da177e4c3f41 Linus Torvalds 2005-04-16 95 goto go_down;
^1da177e4c3f41 Linus Torvalds 2005-04-16 96 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 97 if (n >= 0) {
0b69760be6968c Mikulas Patocka 2011-05-08 98 if (le32_to_cpu(btree->u.external[n].file_secno) + le32_to_cpu(btree->u.external[n].length) != fsecno) {
^1da177e4c3f41 Linus Torvalds 2005-04-16 99 hpfs_error(s, "allocated size %08x, trying to add sector %08x, %cnode %08x",
0b69760be6968c Mikulas Patocka 2011-05-08 100 le32_to_cpu(btree->u.external[n].file_secno) + le32_to_cpu(btree->u.external[n].length), fsecno,
^1da177e4c3f41 Linus Torvalds 2005-04-16 101 fnod?'f':'a', node);
^1da177e4c3f41 Linus Torvalds 2005-04-16 102 brelse(bh);
^1da177e4c3f41 Linus Torvalds 2005-04-16 103 return -1;
^1da177e4c3f41 Linus Torvalds 2005-04-16 104 }
0b69760be6968c Mikulas Patocka 2011-05-08 105 if (hpfs_alloc_if_possible(s, se = le32_to_cpu(btree->u.external[n].disk_secno) + le32_to_cpu(btree->u.external[n].length))) {
32daab969cc16e Wei Yongjun 2012-10-04 106 le32_add_cpu(&btree->u.external[n].length, 1);
^1da177e4c3f41 Linus Torvalds 2005-04-16 107 mark_buffer_dirty(bh);
^1da177e4c3f41 Linus Torvalds 2005-04-16 108 brelse(bh);
^1da177e4c3f41 Linus Torvalds 2005-04-16 109 return se;
^1da177e4c3f41 Linus Torvalds 2005-04-16 110 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 111 } else {
^1da177e4c3f41 Linus Torvalds 2005-04-16 112 if (fsecno) {
^1da177e4c3f41 Linus Torvalds 2005-04-16 113 hpfs_error(s, "empty file %08x, trying to add sector %08x", node, fsecno);
^1da177e4c3f41 Linus Torvalds 2005-04-16 114 brelse(bh);
^1da177e4c3f41 Linus Torvalds 2005-04-16 115 return -1;
^1da177e4c3f41 Linus Torvalds 2005-04-16 116 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 117 se = !fnod ? node : (node + 16384) & ~16383;
^1da177e4c3f41 Linus Torvalds 2005-04-16 118 }
7d23ce36e3f52f Mikulas Patocka 2011-05-08 119 if (!(se = hpfs_alloc_sector(s, se, 1, fsecno*ALLOC_M>ALLOC_FWD_MAX ? ALLOC_FWD_MAX : fsecno*ALLOC_M<ALLOC_FWD_MIN ? ALLOC_FWD_MIN : fsecno*ALLOC_M))) {
^1da177e4c3f41 Linus Torvalds 2005-04-16 120 brelse(bh);
^1da177e4c3f41 Linus Torvalds 2005-04-16 121 return -1;
^1da177e4c3f41 Linus Torvalds 2005-04-16 122 }
0b69760be6968c Mikulas Patocka 2011-05-08 123 fs = n < 0 ? 0 : le32_to_cpu(btree->u.external[n].file_secno) + le32_to_cpu(btree->u.external[n].length);
^1da177e4c3f41 Linus Torvalds 2005-04-16 124 if (!btree->n_free_nodes) {
0b69760be6968c Mikulas Patocka 2011-05-08 125 up = a != node ? le32_to_cpu(anode->up) : -1;
^1da177e4c3f41 Linus Torvalds 2005-04-16 126 if (!(anode = hpfs_alloc_anode(s, a, &na, &bh1))) {
^1da177e4c3f41 Linus Torvalds 2005-04-16 127 brelse(bh);
^1da177e4c3f41 Linus Torvalds 2005-04-16 128 hpfs_free_sectors(s, se, 1);
^1da177e4c3f41 Linus Torvalds 2005-04-16 129 return -1;
^1da177e4c3f41 Linus Torvalds 2005-04-16 130 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 131 if (a == node && fnod) {
0b69760be6968c Mikulas Patocka 2011-05-08 132 anode->up = cpu_to_le32(node);
ddc19e6e04c113 Al Viro 2012-04-17 133 anode->btree.flags |= BP_fnode_parent;
^1da177e4c3f41 Linus Torvalds 2005-04-16 134 anode->btree.n_used_nodes = btree->n_used_nodes;
^1da177e4c3f41 Linus Torvalds 2005-04-16 135 anode->btree.first_free = btree->first_free;
^1da177e4c3f41 Linus Torvalds 2005-04-16 136 anode->btree.n_free_nodes = 40 - anode->btree.n_used_nodes;
^1da177e4c3f41 Linus Torvalds 2005-04-16 137 memcpy(&anode->u, &btree->u, btree->n_used_nodes * 12);
ddc19e6e04c113 Al Viro 2012-04-17 138 btree->flags |= BP_internal;
^1da177e4c3f41 Linus Torvalds 2005-04-16 139 btree->n_free_nodes = 11;
^1da177e4c3f41 Linus Torvalds 2005-04-16 140 btree->n_used_nodes = 1;
0b69760be6968c Mikulas Patocka 2011-05-08 141 btree->first_free = cpu_to_le16((char *)&(btree->u.internal[1]) - (char *)btree);
0b69760be6968c Mikulas Patocka 2011-05-08 142 btree->u.internal[0].file_secno = cpu_to_le32(-1);
0b69760be6968c Mikulas Patocka 2011-05-08 143 btree->u.internal[0].down = cpu_to_le32(na);
^1da177e4c3f41 Linus Torvalds 2005-04-16 144 mark_buffer_dirty(bh);
^1da177e4c3f41 Linus Torvalds 2005-04-16 145 } else if (!(ranode = hpfs_alloc_anode(s, /*a*/0, &ra, &bh2))) {
^1da177e4c3f41 Linus Torvalds 2005-04-16 146 brelse(bh);
^1da177e4c3f41 Linus Torvalds 2005-04-16 147 brelse(bh1);
^1da177e4c3f41 Linus Torvalds 2005-04-16 148 hpfs_free_sectors(s, se, 1);
^1da177e4c3f41 Linus Torvalds 2005-04-16 149 hpfs_free_sectors(s, na, 1);
^1da177e4c3f41 Linus Torvalds 2005-04-16 150 return -1;
^1da177e4c3f41 Linus Torvalds 2005-04-16 151 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 152 brelse(bh);
^1da177e4c3f41 Linus Torvalds 2005-04-16 153 bh = bh1;
68a74490629eb6 Gustavo A. R. Silva 2025-08-11 154 btree = GET_BTREE_PTR(&anode->btree);
^1da177e4c3f41 Linus Torvalds 2005-04-16 155 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 156 btree->n_free_nodes--; n = btree->n_used_nodes++;
32daab969cc16e Wei Yongjun 2012-10-04 157 le16_add_cpu(&btree->first_free, 12);
0b69760be6968c Mikulas Patocka 2011-05-08 158 btree->u.external[n].disk_secno = cpu_to_le32(se);
0b69760be6968c Mikulas Patocka 2011-05-08 159 btree->u.external[n].file_secno = cpu_to_le32(fs);
0b69760be6968c Mikulas Patocka 2011-05-08 160 btree->u.external[n].length = cpu_to_le32(1);
^1da177e4c3f41 Linus Torvalds 2005-04-16 161 mark_buffer_dirty(bh);
^1da177e4c3f41 Linus Torvalds 2005-04-16 162 brelse(bh);
^1da177e4c3f41 Linus Torvalds 2005-04-16 163 if ((a == node && fnod) || na == -1) return se;
^1da177e4c3f41 Linus Torvalds 2005-04-16 164 c2 = 0;
0b69760be6968c Mikulas Patocka 2011-05-08 165 while (up != (anode_secno)-1) {
^1da177e4c3f41 Linus Torvalds 2005-04-16 166 struct anode *new_anode;
^1da177e4c3f41 Linus Torvalds 2005-04-16 167 if (hpfs_stop_cycles(s, up, &c1, &c2, "hpfs_add_sector_to_btree #2")) return -1;
^1da177e4c3f41 Linus Torvalds 2005-04-16 168 if (up != node || !fnod) {
^1da177e4c3f41 Linus Torvalds 2005-04-16 169 if (!(anode = hpfs_map_anode(s, up, &bh))) return -1;
68a74490629eb6 Gustavo A. R. Silva 2025-08-11 170 btree = GET_BTREE_PTR(&anode->btree);
^1da177e4c3f41 Linus Torvalds 2005-04-16 171 } else {
^1da177e4c3f41 Linus Torvalds 2005-04-16 172 if (!(fnode = hpfs_map_fnode(s, up, &bh))) return -1;
68a74490629eb6 Gustavo A. R. Silva 2025-08-11 173 btree = GET_BTREE_PTR(&fnode->btree);
^1da177e4c3f41 Linus Torvalds 2005-04-16 174 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 175 if (btree->n_free_nodes) {
^1da177e4c3f41 Linus Torvalds 2005-04-16 176 btree->n_free_nodes--; n = btree->n_used_nodes++;
32daab969cc16e Wei Yongjun 2012-10-04 177 le16_add_cpu(&btree->first_free, 8);
0b69760be6968c Mikulas Patocka 2011-05-08 178 btree->u.internal[n].file_secno = cpu_to_le32(-1);
0b69760be6968c Mikulas Patocka 2011-05-08 179 btree->u.internal[n].down = cpu_to_le32(na);
0b69760be6968c Mikulas Patocka 2011-05-08 180 btree->u.internal[n-1].file_secno = cpu_to_le32(fs);
^1da177e4c3f41 Linus Torvalds 2005-04-16 181 mark_buffer_dirty(bh);
^1da177e4c3f41 Linus Torvalds 2005-04-16 182 brelse(bh);
^1da177e4c3f41 Linus Torvalds 2005-04-16 183 brelse(bh2);
^1da177e4c3f41 Linus Torvalds 2005-04-16 184 hpfs_free_sectors(s, ra, 1);
^1da177e4c3f41 Linus Torvalds 2005-04-16 185 if ((anode = hpfs_map_anode(s, na, &bh))) {
0b69760be6968c Mikulas Patocka 2011-05-08 186 anode->up = cpu_to_le32(up);
ddc19e6e04c113 Al Viro 2012-04-17 187 if (up == node && fnod)
ddc19e6e04c113 Al Viro 2012-04-17 188 anode->btree.flags |= BP_fnode_parent;
ddc19e6e04c113 Al Viro 2012-04-17 189 else
ddc19e6e04c113 Al Viro 2012-04-17 190 anode->btree.flags &= ~BP_fnode_parent;
^1da177e4c3f41 Linus Torvalds 2005-04-16 191 mark_buffer_dirty(bh);
^1da177e4c3f41 Linus Torvalds 2005-04-16 192 brelse(bh);
^1da177e4c3f41 Linus Torvalds 2005-04-16 193 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 194 return se;
^1da177e4c3f41 Linus Torvalds 2005-04-16 195 }
0b69760be6968c Mikulas Patocka 2011-05-08 196 up = up != node ? le32_to_cpu(anode->up) : -1;
0b69760be6968c Mikulas Patocka 2011-05-08 197 btree->u.internal[btree->n_used_nodes - 1].file_secno = cpu_to_le32(/*fs*/-1);
^1da177e4c3f41 Linus Torvalds 2005-04-16 198 mark_buffer_dirty(bh);
^1da177e4c3f41 Linus Torvalds 2005-04-16 199 brelse(bh);
^1da177e4c3f41 Linus Torvalds 2005-04-16 200 a = na;
^1da177e4c3f41 Linus Torvalds 2005-04-16 201 if ((new_anode = hpfs_alloc_anode(s, a, &na, &bh))) {
^1da177e4c3f41 Linus Torvalds 2005-04-16 202 anode = new_anode;
0b69760be6968c Mikulas Patocka 2011-05-08 203 /*anode->up = cpu_to_le32(up != -1 ? up : ra);*/
ddc19e6e04c113 Al Viro 2012-04-17 204 anode->btree.flags |= BP_internal;
^1da177e4c3f41 Linus Torvalds 2005-04-16 205 anode->btree.n_used_nodes = 1;
^1da177e4c3f41 Linus Torvalds 2005-04-16 206 anode->btree.n_free_nodes = 59;
0b69760be6968c Mikulas Patocka 2011-05-08 207 anode->btree.first_free = cpu_to_le16(16);
68a74490629eb6 Gustavo A. R. Silva 2025-08-11 208 GET_BTREE_PTR(&anode->btree)->u.internal[0].down = cpu_to_le32(a);
68a74490629eb6 Gustavo A. R. Silva 2025-08-11 209 GET_BTREE_PTR(&anode->btree)->u.internal[0].file_secno = cpu_to_le32(-1);
^1da177e4c3f41 Linus Torvalds 2005-04-16 210 mark_buffer_dirty(bh);
^1da177e4c3f41 Linus Torvalds 2005-04-16 211 brelse(bh);
^1da177e4c3f41 Linus Torvalds 2005-04-16 212 if ((anode = hpfs_map_anode(s, a, &bh))) {
0b69760be6968c Mikulas Patocka 2011-05-08 213 anode->up = cpu_to_le32(na);
^1da177e4c3f41 Linus Torvalds 2005-04-16 214 mark_buffer_dirty(bh);
^1da177e4c3f41 Linus Torvalds 2005-04-16 215 brelse(bh);
^1da177e4c3f41 Linus Torvalds 2005-04-16 216 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 217 } else na = a;
^1da177e4c3f41 Linus Torvalds 2005-04-16 218 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 219 if ((anode = hpfs_map_anode(s, na, &bh))) {
0b69760be6968c Mikulas Patocka 2011-05-08 220 anode->up = cpu_to_le32(node);
ddc19e6e04c113 Al Viro 2012-04-17 221 if (fnod)
ddc19e6e04c113 Al Viro 2012-04-17 222 anode->btree.flags |= BP_fnode_parent;
^1da177e4c3f41 Linus Torvalds 2005-04-16 223 mark_buffer_dirty(bh);
^1da177e4c3f41 Linus Torvalds 2005-04-16 224 brelse(bh);
^1da177e4c3f41 Linus Torvalds 2005-04-16 225 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 226 if (!fnod) {
^1da177e4c3f41 Linus Torvalds 2005-04-16 227 if (!(anode = hpfs_map_anode(s, node, &bh))) {
^1da177e4c3f41 Linus Torvalds 2005-04-16 228 brelse(bh2);
^1da177e4c3f41 Linus Torvalds 2005-04-16 229 return -1;
^1da177e4c3f41 Linus Torvalds 2005-04-16 230 }
68a74490629eb6 Gustavo A. R. Silva 2025-08-11 231 btree = GET_BTREE_PTR(&anode->btree);
^1da177e4c3f41 Linus Torvalds 2005-04-16 232 } else {
^1da177e4c3f41 Linus Torvalds 2005-04-16 233 if (!(fnode = hpfs_map_fnode(s, node, &bh))) {
^1da177e4c3f41 Linus Torvalds 2005-04-16 234 brelse(bh2);
^1da177e4c3f41 Linus Torvalds 2005-04-16 235 return -1;
^1da177e4c3f41 Linus Torvalds 2005-04-16 236 }
68a74490629eb6 Gustavo A. R. Silva 2025-08-11 237 btree = GET_BTREE_PTR(&fnode->btree);
^1da177e4c3f41 Linus Torvalds 2005-04-16 238 }
0b69760be6968c Mikulas Patocka 2011-05-08 239 ranode->up = cpu_to_le32(node);
0b69760be6968c Mikulas Patocka 2011-05-08 240 memcpy(&ranode->btree, btree, le16_to_cpu(btree->first_free));
ddc19e6e04c113 Al Viro 2012-04-17 241 if (fnod)
ddc19e6e04c113 Al Viro 2012-04-17 242 ranode->btree.flags |= BP_fnode_parent;
68a74490629eb6 Gustavo A. R. Silva 2025-08-11 243 GET_BTREE_PTR(&ranode->btree)->n_free_nodes = (bp_internal(GET_BTREE_PTR(&ranode->btree)) ? 60 : 40) - GET_BTREE_PTR(&ranode->btree)->n_used_nodes;
68a74490629eb6 Gustavo A. R. Silva 2025-08-11 244 if (bp_internal(GET_BTREE_PTR(&ranode->btree))) for (n = 0; n < GET_BTREE_PTR(&ranode->btree)->n_used_nodes; n++) {
^1da177e4c3f41 Linus Torvalds 2005-04-16 245 struct anode *unode;
0b69760be6968c Mikulas Patocka 2011-05-08 246 if ((unode = hpfs_map_anode(s, le32_to_cpu(ranode->u.internal[n].down), &bh1))) {
0b69760be6968c Mikulas Patocka 2011-05-08 247 unode->up = cpu_to_le32(ra);
ddc19e6e04c113 Al Viro 2012-04-17 248 unode->btree.flags &= ~BP_fnode_parent;
^1da177e4c3f41 Linus Torvalds 2005-04-16 249 mark_buffer_dirty(bh1);
^1da177e4c3f41 Linus Torvalds 2005-04-16 250 brelse(bh1);
^1da177e4c3f41 Linus Torvalds 2005-04-16 251 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 252 }
ddc19e6e04c113 Al Viro 2012-04-17 253 btree->flags |= BP_internal;
^1da177e4c3f41 Linus Torvalds 2005-04-16 254 btree->n_free_nodes = fnod ? 10 : 58;
^1da177e4c3f41 Linus Torvalds 2005-04-16 255 btree->n_used_nodes = 2;
0b69760be6968c Mikulas Patocka 2011-05-08 256 btree->first_free = cpu_to_le16((char *)&btree->u.internal[2] - (char *)btree);
0b69760be6968c Mikulas Patocka 2011-05-08 257 btree->u.internal[0].file_secno = cpu_to_le32(fs);
0b69760be6968c Mikulas Patocka 2011-05-08 258 btree->u.internal[0].down = cpu_to_le32(ra);
0b69760be6968c Mikulas Patocka 2011-05-08 259 btree->u.internal[1].file_secno = cpu_to_le32(-1);
0b69760be6968c Mikulas Patocka 2011-05-08 260 btree->u.internal[1].down = cpu_to_le32(na);
^1da177e4c3f41 Linus Torvalds 2005-04-16 261 mark_buffer_dirty(bh);
^1da177e4c3f41 Linus Torvalds 2005-04-16 262 brelse(bh);
^1da177e4c3f41 Linus Torvalds 2005-04-16 263 mark_buffer_dirty(bh2);
^1da177e4c3f41 Linus Torvalds 2005-04-16 264 brelse(bh2);
^1da177e4c3f41 Linus Torvalds 2005-04-16 265 return se;
^1da177e4c3f41 Linus Torvalds 2005-04-16 266 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 267
^1da177e4c3f41 Linus Torvalds 2005-04-16 268 /*
^1da177e4c3f41 Linus Torvalds 2005-04-16 269 * Remove allocation tree. Recursion would look much nicer but
^1da177e4c3f41 Linus Torvalds 2005-04-16 270 * I want to avoid it because it can cause stack overflow.
^1da177e4c3f41 Linus Torvalds 2005-04-16 271 */
^1da177e4c3f41 Linus Torvalds 2005-04-16 272
^1da177e4c3f41 Linus Torvalds 2005-04-16 273 void hpfs_remove_btree(struct super_block *s, struct bplus_header *btree)
^1da177e4c3f41 Linus Torvalds 2005-04-16 274 {
^1da177e4c3f41 Linus Torvalds 2005-04-16 275 struct bplus_header *btree1 = btree;
^1da177e4c3f41 Linus Torvalds 2005-04-16 276 struct anode *anode = NULL;
^1da177e4c3f41 Linus Torvalds 2005-04-16 277 anode_secno ano = 0, oano;
^1da177e4c3f41 Linus Torvalds 2005-04-16 278 struct buffer_head *bh;
^1da177e4c3f41 Linus Torvalds 2005-04-16 279 int level = 0;
^1da177e4c3f41 Linus Torvalds 2005-04-16 280 int pos = 0;
^1da177e4c3f41 Linus Torvalds 2005-04-16 281 int i;
^1da177e4c3f41 Linus Torvalds 2005-04-16 282 int c1, c2 = 0;
^1da177e4c3f41 Linus Torvalds 2005-04-16 283 int d1, d2;
^1da177e4c3f41 Linus Torvalds 2005-04-16 284 go_down:
^1da177e4c3f41 Linus Torvalds 2005-04-16 285 d2 = 0;
ddc19e6e04c113 Al Viro 2012-04-17 286 while (bp_internal(btree1)) {
0b69760be6968c Mikulas Patocka 2011-05-08 287 ano = le32_to_cpu(btree1->u.internal[pos].down);
^1da177e4c3f41 Linus Torvalds 2005-04-16 288 if (level) brelse(bh);
^1da177e4c3f41 Linus Torvalds 2005-04-16 @289 if (hpfs_stop_cycles(s, ano, &d1, &d2, "hpfs_remove_btree #1"))
^1da177e4c3f41 Linus Torvalds 2005-04-16 290 return;
^1da177e4c3f41 Linus Torvalds 2005-04-16 291 if (!(anode = hpfs_map_anode(s, ano, &bh))) return;
68a74490629eb6 Gustavo A. R. Silva 2025-08-11 292 btree1 = GET_BTREE_PTR(&anode->btree);
^1da177e4c3f41 Linus Torvalds 2005-04-16 293 level++;
^1da177e4c3f41 Linus Torvalds 2005-04-16 294 pos = 0;
^1da177e4c3f41 Linus Torvalds 2005-04-16 295 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 296 for (i = 0; i < btree1->n_used_nodes; i++)
0b69760be6968c Mikulas Patocka 2011-05-08 297 hpfs_free_sectors(s, le32_to_cpu(btree1->u.external[i].disk_secno), le32_to_cpu(btree1->u.external[i].length));
^1da177e4c3f41 Linus Torvalds 2005-04-16 298 go_up:
^1da177e4c3f41 Linus Torvalds 2005-04-16 299 if (!level) return;
^1da177e4c3f41 Linus Torvalds 2005-04-16 300 brelse(bh);
^1da177e4c3f41 Linus Torvalds 2005-04-16 301 if (hpfs_stop_cycles(s, ano, &c1, &c2, "hpfs_remove_btree #2")) return;
^1da177e4c3f41 Linus Torvalds 2005-04-16 302 hpfs_free_sectors(s, ano, 1);
^1da177e4c3f41 Linus Torvalds 2005-04-16 303 oano = ano;
0b69760be6968c Mikulas Patocka 2011-05-08 304 ano = le32_to_cpu(anode->up);
^1da177e4c3f41 Linus Torvalds 2005-04-16 305 if (--level) {
^1da177e4c3f41 Linus Torvalds 2005-04-16 306 if (!(anode = hpfs_map_anode(s, ano, &bh))) return;
68a74490629eb6 Gustavo A. R. Silva 2025-08-11 307 btree1 = GET_BTREE_PTR(&anode->btree);
^1da177e4c3f41 Linus Torvalds 2005-04-16 308 } else btree1 = btree;
^1da177e4c3f41 Linus Torvalds 2005-04-16 309 for (i = 0; i < btree1->n_used_nodes; i++) {
0b69760be6968c Mikulas Patocka 2011-05-08 310 if (le32_to_cpu(btree1->u.internal[i].down) == oano) {
^1da177e4c3f41 Linus Torvalds 2005-04-16 311 if ((pos = i + 1) < btree1->n_used_nodes)
^1da177e4c3f41 Linus Torvalds 2005-04-16 312 goto go_down;
^1da177e4c3f41 Linus Torvalds 2005-04-16 313 else
^1da177e4c3f41 Linus Torvalds 2005-04-16 314 goto go_up;
^1da177e4c3f41 Linus Torvalds 2005-04-16 315 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 316 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 317 hpfs_error(s,
^1da177e4c3f41 Linus Torvalds 2005-04-16 318 "reference to anode %08x not found in anode %08x "
^1da177e4c3f41 Linus Torvalds 2005-04-16 319 "(probably bad up pointer)",
^1da177e4c3f41 Linus Torvalds 2005-04-16 320 oano, level ? ano : -1);
^1da177e4c3f41 Linus Torvalds 2005-04-16 321 if (level)
^1da177e4c3f41 Linus Torvalds 2005-04-16 322 brelse(bh);
^1da177e4c3f41 Linus Torvalds 2005-04-16 323 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 324
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki