diff options
Diffstat (limited to 'fs/jfs/jfs_xtree.c')
| -rw-r--r-- | fs/jfs/jfs_xtree.c | 340 |
1 files changed, 0 insertions, 340 deletions
diff --git a/fs/jfs/jfs_xtree.c b/fs/jfs/jfs_xtree.c index 31b34db4519e..a7fe2f2b969f 100644 --- a/fs/jfs/jfs_xtree.c +++ b/fs/jfs/jfs_xtree.c | |||
| @@ -135,14 +135,6 @@ static int xtSearchNode(struct inode *ip, | |||
| 135 | static int xtRelink(tid_t tid, struct inode *ip, xtpage_t * fp); | 135 | static int xtRelink(tid_t tid, struct inode *ip, xtpage_t * fp); |
| 136 | #endif /* _STILL_TO_PORT */ | 136 | #endif /* _STILL_TO_PORT */ |
| 137 | 137 | ||
| 138 | /* External references */ | ||
| 139 | |||
| 140 | /* | ||
| 141 | * debug control | ||
| 142 | */ | ||
| 143 | /* #define _JFS_DEBUG_XTREE 1 */ | ||
| 144 | |||
| 145 | |||
| 146 | /* | 138 | /* |
| 147 | * xtLookup() | 139 | * xtLookup() |
| 148 | * | 140 | * |
| @@ -4140,338 +4132,6 @@ s64 xtTruncate_pmap(tid_t tid, struct inode *ip, s64 committed_size) | |||
| 4140 | return 0; | 4132 | return 0; |
| 4141 | } | 4133 | } |
| 4142 | 4134 | ||
| 4143 | |||
| 4144 | #ifdef _JFS_DEBUG_XTREE | ||
| 4145 | /* | ||
| 4146 | * xtDisplayTree() | ||
| 4147 | * | ||
| 4148 | * function: traverse forward | ||
| 4149 | */ | ||
| 4150 | int xtDisplayTree(struct inode *ip) | ||
| 4151 | { | ||
| 4152 | int rc = 0; | ||
| 4153 | struct metapage *mp; | ||
| 4154 | xtpage_t *p; | ||
| 4155 | s64 bn, pbn; | ||
| 4156 | int index, lastindex, v, h; | ||
| 4157 | xad_t *xad; | ||
| 4158 | struct btstack btstack; | ||
| 4159 | struct btframe *btsp; | ||
| 4160 | struct btframe *parent; | ||
| 4161 | |||
| 4162 | printk("display B+-tree.\n"); | ||
| 4163 | |||
| 4164 | /* clear stack */ | ||
| 4165 | btsp = btstack.stack; | ||
| 4166 | |||
| 4167 | /* | ||
| 4168 | * start with root | ||
| 4169 | * | ||
| 4170 | * root resides in the inode | ||
| 4171 | */ | ||
| 4172 | bn = 0; | ||
| 4173 | v = h = 0; | ||
| 4174 | |||
| 4175 | /* | ||
| 4176 | * first access of each page: | ||
| 4177 | */ | ||
| 4178 | getPage: | ||
| 4179 | XT_GETPAGE(ip, bn, mp, PSIZE, p, rc); | ||
| 4180 | if (rc) | ||
| 4181 | return rc; | ||
| 4182 | |||
| 4183 | /* process entries forward from first index */ | ||
| 4184 | index = XTENTRYSTART; | ||
| 4185 | lastindex = le16_to_cpu(p->header.nextindex) - 1; | ||
| 4186 | |||
| 4187 | if (p->header.flag & BT_INTERNAL) { | ||
| 4188 | /* | ||
| 4189 | * first access of each internal page | ||
| 4190 | */ | ||
| 4191 | goto getChild; | ||
| 4192 | } else { /* (p->header.flag & BT_LEAF) */ | ||
| 4193 | |||
| 4194 | /* | ||
| 4195 | * first access of each leaf page | ||
| 4196 | */ | ||
| 4197 | printf("leaf page "); | ||
| 4198 | xtDisplayPage(ip, bn, p); | ||
| 4199 | |||
| 4200 | /* unpin the leaf page */ | ||
| 4201 | XT_PUTPAGE(mp); | ||
| 4202 | } | ||
| 4203 | |||
| 4204 | /* | ||
| 4205 | * go back up to the parent page | ||
| 4206 | */ | ||
| 4207 | getParent: | ||
| 4208 | /* pop/restore parent entry for the current child page */ | ||
| 4209 | if ((parent = (btsp == btstack.stack ? NULL : --btsp)) == NULL) | ||
| 4210 | /* current page must have been root */ | ||
| 4211 | return; | ||
| 4212 | |||
| 4213 | /* | ||
| 4214 | * parent page scan completed | ||
| 4215 | */ | ||
| 4216 | if ((index = parent->index) == (lastindex = parent->lastindex)) { | ||
| 4217 | /* go back up to the parent page */ | ||
| 4218 | goto getParent; | ||
| 4219 | } | ||
| 4220 | |||
| 4221 | /* | ||
| 4222 | * parent page has entries remaining | ||
| 4223 | */ | ||
| 4224 | /* get back the parent page */ | ||
| 4225 | bn = parent->bn; | ||
| 4226 | /* v = parent->level; */ | ||
| 4227 | XT_GETPAGE(ip, bn, mp, PSIZE, p, rc); | ||
| 4228 | if (rc) | ||
| 4229 | return rc; | ||
| 4230 | |||
| 4231 | /* get next parent entry */ | ||
| 4232 | index++; | ||
| 4233 | |||
| 4234 | /* | ||
| 4235 | * internal page: go down to child page of current entry | ||
| 4236 | */ | ||
| 4237 | getChild: | ||
| 4238 | /* push/save current parent entry for the child page */ | ||
| 4239 | btsp->bn = pbn = bn; | ||
| 4240 | btsp->index = index; | ||
| 4241 | btsp->lastindex = lastindex; | ||
| 4242 | /* btsp->level = v; */ | ||
| 4243 | /* btsp->node = h; */ | ||
| 4244 | ++btsp; | ||
| 4245 | |||
| 4246 | /* get child page */ | ||
| 4247 | xad = &p->xad[index]; | ||
| 4248 | bn = addressXAD(xad); | ||
| 4249 | |||
| 4250 | /* | ||
| 4251 | * first access of each internal entry: | ||
| 4252 | */ | ||
| 4253 | /* release parent page */ | ||
| 4254 | XT_PUTPAGE(mp); | ||
| 4255 | |||
| 4256 | printk("traverse down 0x%lx[%d]->0x%lx\n", (ulong) pbn, index, | ||
| 4257 | (ulong) bn); | ||
| 4258 | v++; | ||
| 4259 | h = index; | ||
| 4260 | |||
| 4261 | /* process the child page */ | ||
| 4262 | goto getPage; | ||
| 4263 | } | ||
| 4264 | |||
| 4265 | |||
| 4266 | /* | ||
| 4267 | * xtDisplayPage() | ||
| 4268 | * | ||
| 4269 | * function: display page | ||
| 4270 | */ | ||
| 4271 | int xtDisplayPage(struct inode *ip, s64 bn, xtpage_t * p) | ||
| 4272 | { | ||
| 4273 | int rc = 0; | ||
| 4274 | xad_t *xad; | ||
| 4275 | s64 xaddr, xoff; | ||
| 4276 | int xlen, i, j; | ||
| 4277 | |||
| 4278 | /* display page control */ | ||
| 4279 | printf("bn:0x%lx flag:0x%x nextindex:%d\n", | ||
| 4280 | (ulong) bn, p->header.flag, | ||
| 4281 | le16_to_cpu(p->header.nextindex)); | ||
| 4282 | |||
| 4283 | /* display entries */ | ||
| 4284 | xad = &p->xad[XTENTRYSTART]; | ||
| 4285 | for (i = XTENTRYSTART, j = 1; i < le16_to_cpu(p->header.nextindex); | ||
| 4286 | i++, xad++, j++) { | ||
| 4287 | xoff = offsetXAD(xad); | ||
| 4288 | xaddr = addressXAD(xad); | ||
| 4289 | xlen = lengthXAD(xad); | ||
| 4290 | printf("\t[%d] 0x%lx:0x%lx(0x%x)", i, (ulong) xoff, | ||
| 4291 | (ulong) xaddr, xlen); | ||
| 4292 | |||
| 4293 | if (j == 4) { | ||
| 4294 | printf("\n"); | ||
| 4295 | j = 0; | ||
| 4296 | } | ||
| 4297 | } | ||
| 4298 | |||
| 4299 | printf("\n"); | ||
| 4300 | } | ||
| 4301 | #endif /* _JFS_DEBUG_XTREE */ | ||
| 4302 | |||
| 4303 | |||
| 4304 | #ifdef _JFS_WIP | ||
| 4305 | /* | ||
| 4306 | * xtGather() | ||
| 4307 | * | ||
| 4308 | * function: | ||
| 4309 | * traverse for allocation acquiring tlock at commit time | ||
| 4310 | * (vs at the time of update) logging backward top down | ||
| 4311 | * | ||
| 4312 | * note: | ||
| 4313 | * problem - establishing that all new allocation have been | ||
| 4314 | * processed both for append and random write in sparse file | ||
| 4315 | * at the current entry at the current subtree root page | ||
| 4316 | * | ||
| 4317 | */ | ||
| 4318 | int xtGather(btree_t *t) | ||
| 4319 | { | ||
| 4320 | int rc = 0; | ||
| 4321 | xtpage_t *p; | ||
| 4322 | u64 bn; | ||
| 4323 | int index; | ||
| 4324 | btentry_t *e; | ||
| 4325 | struct btstack btstack; | ||
| 4326 | struct btsf *parent; | ||
| 4327 | |||
| 4328 | /* clear stack */ | ||
| 4329 | BT_CLR(&btstack); | ||
| 4330 | |||
| 4331 | /* | ||
| 4332 | * start with root | ||
| 4333 | * | ||
| 4334 | * root resides in the inode | ||
| 4335 | */ | ||
| 4336 | bn = 0; | ||
| 4337 | XT_GETPAGE(ip, bn, mp, PSIZE, p, rc); | ||
| 4338 | if (rc) | ||
| 4339 | return rc; | ||
| 4340 | |||
| 4341 | /* new root is NOT pointed by a new entry | ||
| 4342 | if (p->header.flag & NEW) | ||
| 4343 | allocate new page lock; | ||
| 4344 | write a NEWPAGE log; | ||
| 4345 | */ | ||
| 4346 | |||
| 4347 | dopage: | ||
| 4348 | /* | ||
| 4349 | * first access of each page: | ||
| 4350 | */ | ||
| 4351 | /* process entries backward from last index */ | ||
| 4352 | index = le16_to_cpu(p->header.nextindex) - 1; | ||
| 4353 | |||
| 4354 | if (p->header.flag & BT_LEAF) { | ||
| 4355 | /* | ||
| 4356 | * first access of each leaf page | ||
| 4357 | */ | ||
| 4358 | /* process leaf page entries backward */ | ||
| 4359 | for (; index >= XTENTRYSTART; index--) { | ||
| 4360 | e = &p->xad[index]; | ||
| 4361 | /* | ||
| 4362 | * if newpage, log NEWPAGE. | ||
| 4363 | * | ||
| 4364 | if (e->flag & XAD_NEW) { | ||
| 4365 | nfound =+ entry->length; | ||
| 4366 | update current page lock for the entry; | ||
| 4367 | newpage(entry); | ||
| 4368 | * | ||
| 4369 | * if moved, log move. | ||
| 4370 | * | ||
| 4371 | } else if (e->flag & XAD_MOVED) { | ||
| 4372 | reset flag; | ||
| 4373 | update current page lock for the entry; | ||
| 4374 | } | ||
| 4375 | */ | ||
| 4376 | } | ||
| 4377 | |||
| 4378 | /* unpin the leaf page */ | ||
| 4379 | XT_PUTPAGE(mp); | ||
| 4380 | |||
| 4381 | /* | ||
| 4382 | * go back up to the parent page | ||
| 4383 | */ | ||
| 4384 | getParent: | ||
| 4385 | /* restore parent entry for the current child page */ | ||
| 4386 | if ((parent = BT_POP(&btstack)) == NULL) | ||
| 4387 | /* current page must have been root */ | ||
| 4388 | return 0; | ||
| 4389 | |||
| 4390 | if ((index = parent->index) == XTENTRYSTART) { | ||
| 4391 | /* | ||
| 4392 | * parent page scan completed | ||
| 4393 | */ | ||
| 4394 | /* go back up to the parent page */ | ||
| 4395 | goto getParent; | ||
| 4396 | } else { | ||
| 4397 | /* | ||
| 4398 | * parent page has entries remaining | ||
| 4399 | */ | ||
| 4400 | /* get back the parent page */ | ||
| 4401 | bn = parent->bn; | ||
| 4402 | XT_GETPAGE(ip, bn, mp, PSIZE, p, rc); | ||
| 4403 | if (rc) | ||
| 4404 | return -EIO; | ||
| 4405 | |||
| 4406 | /* first subroot page which | ||
| 4407 | * covers all new allocated blocks | ||
| 4408 | * itself not new/modified. | ||
| 4409 | * (if modified from split of descendent, | ||
| 4410 | * go down path of split page) | ||
| 4411 | |||
| 4412 | if (nfound == nnew && | ||
| 4413 | !(p->header.flag & (NEW | MOD))) | ||
| 4414 | exit scan; | ||
| 4415 | */ | ||
| 4416 | |||
| 4417 | /* process parent page entries backward */ | ||
| 4418 | index--; | ||
| 4419 | } | ||
| 4420 | } else { | ||
| 4421 | /* | ||
| 4422 | * first access of each internal page | ||
| 4423 | */ | ||
| 4424 | } | ||
| 4425 | |||
| 4426 | /* | ||
| 4427 | * internal page: go down to child page of current entry | ||
| 4428 | */ | ||
| 4429 | |||
| 4430 | /* save current parent entry for the child page */ | ||
| 4431 | BT_PUSH(&btstack, bn, index); | ||
| 4432 | |||
| 4433 | /* get current entry for the child page */ | ||
| 4434 | e = &p->xad[index]; | ||
| 4435 | |||
| 4436 | /* | ||
| 4437 | * first access of each internal entry: | ||
| 4438 | */ | ||
| 4439 | /* | ||
| 4440 | * if new entry, log btree_tnewentry. | ||
| 4441 | * | ||
| 4442 | if (e->flag & XAD_NEW) | ||
| 4443 | update parent page lock for the entry; | ||
| 4444 | */ | ||
| 4445 | |||
| 4446 | /* release parent page */ | ||
| 4447 | XT_PUTPAGE(mp); | ||
| 4448 | |||
| 4449 | /* get child page */ | ||
| 4450 | bn = e->bn; | ||
| 4451 | XT_GETPAGE(ip, bn, mp, PSIZE, p, rc); | ||
| 4452 | if (rc) | ||
| 4453 | return rc; | ||
| 4454 | |||
| 4455 | /* | ||
| 4456 | * first access of each non-root page: | ||
| 4457 | */ | ||
| 4458 | /* | ||
| 4459 | * if new, log btree_newpage. | ||
| 4460 | * | ||
| 4461 | if (p->header.flag & NEW) | ||
| 4462 | allocate new page lock; | ||
| 4463 | write a NEWPAGE log (next, prev); | ||
| 4464 | */ | ||
| 4465 | |||
| 4466 | /* process the child page */ | ||
| 4467 | goto dopage; | ||
| 4468 | |||
| 4469 | out: | ||
| 4470 | return 0; | ||
| 4471 | } | ||
| 4472 | #endif /* _JFS_WIP */ | ||
| 4473 | |||
| 4474 | |||
| 4475 | #ifdef CONFIG_JFS_STATISTICS | 4135 | #ifdef CONFIG_JFS_STATISTICS |
| 4476 | int jfs_xtstat_read(char *buffer, char **start, off_t offset, int length, | 4136 | int jfs_xtstat_read(char *buffer, char **start, off_t offset, int length, |
| 4477 | int *eof, void *data) | 4137 | int *eof, void *data) |
