*/
static DEFINE_RWLOCK(adfs_dir_lock);
+static int adfs_dir_read(struct super_block *sb, u32 indaddr,
+ unsigned int size, struct adfs_dir *dir)
+{
+ dir->sb = sb;
+ dir->bhs = dir->bh;
+ dir->nr_buffers = 0;
+
+ return ADFS_SB(sb)->s_dir->read(sb, indaddr, size, dir);
+}
+
void adfs_object_fixup(struct adfs_dir *dir, struct object_info *obj)
{
unsigned int dots, i;
if (ctx->pos >> 32)
return 0;
- ret = ops->read(sb, inode->i_ino, inode->i_size, &dir);
+ ret = adfs_dir_read(sb, inode->i_ino, inode->i_size, &dir);
if (ret)
return ret;
goto out;
}
- ret = ops->read(sb, obj->parent_id, 0, &dir);
+ ret = adfs_dir_read(sb, obj->parent_id, 0, &dir);
if (ret)
goto out;
u32 name_len;
int ret;
- ret = ops->read(sb, inode->i_ino, inode->i_size, &dir);
+ ret = adfs_dir_read(sb, inode->i_ino, inode->i_size, &dir);
if (ret)
goto out;
unsigned int blk, size;
int i, ret = -EIO;
- dir->nr_buffers = 0;
-
- /* start off using fixed bh set - only alloc for big dirs */
- dir->bhs = &dir->bh[0];
-
block = __adfs_block_map(sb, id, 0);
if (!block) {
adfs_error(sb, "dir object %X has a hole at offset 0", id);
}
dir->parent_id = le32_to_cpu(h->bigdirparent);
- dir->sb = sb;
return 0;
out: