nlen = strlen(name);
hash = lafs_hash_name(seed, nlen, name);
+ dprintk("name= %s hash=%lu\n", name, (unsigned long)bn);
while (1) {
char *buf;
bn = hash+1;
+ dprintk("bn=%lu\n", (unsigned long)bn);
if (lafs_find_next(dir, &bn) == 0)
bn = 0;
+ dprintk("now=%lu\n", (unsigned long)bn);
err = -ENOMEM;
b = lafs_get_block(dir, bn, NULL, GFP_KERNEL, REF);
if (err)
break;
buf = map_dblock(b);
+ if (lafs_trace) {
+ void lafs_dir_print(char *buf, int psz);
+ lafs_dir_print(buf, bits);
+ }
for ( ; hash < (bn ? bn : MaxDirHash) ; hash++) {
u8 piece;
struct dir_ent de;
doh->dirent_block =
dirblk = dir_lookup_blk(dir, name, nlen, &doh->index,
0, &doh->hash, MKREF(dir_blk));
+ if (IS_ERR(dirblk) && PTR_ERR(dirblk) == -ENOENT) {
+ lafs_trace = 1;
+ dirblk = dir_lookup_blk(dir, name, nlen, &doh->index,
+ 0, &doh->hash, MKREF(dir_blk));
+ if (!IS_ERR(dirblk))
+ printk("Weird: %s\n", strblk(&dirblk->b));
+ lafs_trace = 0;
+ }
+
if (IS_ERR(dirblk))
return PTR_ERR(dirblk);
err = dir_delete_prepare(fs, dir, de->d_name.name, de->d_name.len,
&doh);
+ BUG_ON(err == -ENOENT);
err = dir_log_prepare(&uh, fs, &de->d_name) ?: err;
inodb = lafs_inode_dblock(inode, SYNC, MKREF(inode_update));
if (IS_ERR(inodb))