fs/adfs: dir: add common directory buffer release method

With the bhs pointer in place, we have no need for separate per-format
free() methods, since a generic version will do.  Provide a generic
implementation, remove the format specific implementations and the
method function pointer.

Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
Russell King
2019-12-09 11:09:20 +00:00
committed by Al Viro
parent 95fbadbb55
commit 1dd9f5babf
4 changed files with 25 additions and 60 deletions

View File

@@ -15,7 +15,7 @@ adfs_fplus_read(struct super_block *sb, unsigned int id, unsigned int sz, struct
struct adfs_bigdirtail *t;
unsigned long block;
unsigned int blk, size;
int i, ret = -EIO;
int ret = -EIO;
block = __adfs_block_map(sb, id, 0);
if (!block) {
@@ -92,18 +92,8 @@ adfs_fplus_read(struct super_block *sb, unsigned int id, unsigned int sz, struct
return 0;
out:
if (dir->bhs) {
for (i = 0; i < dir->nr_buffers; i++)
brelse(dir->bhs[i]);
adfs_dir_relse(dir);
if (&dir->bh[0] != dir->bhs)
kfree(dir->bhs);
dir->bhs = NULL;
}
dir->nr_buffers = 0;
dir->sb = NULL;
return ret;
}
@@ -205,29 +195,9 @@ adfs_fplus_sync(struct adfs_dir *dir)
return err;
}
static void
adfs_fplus_free(struct adfs_dir *dir)
{
int i;
if (dir->bhs) {
for (i = 0; i < dir->nr_buffers; i++)
brelse(dir->bhs[i]);
if (&dir->bh[0] != dir->bhs)
kfree(dir->bhs);
dir->bhs = NULL;
}
dir->nr_buffers = 0;
dir->sb = NULL;
}
const struct adfs_dir_ops adfs_fplus_dir_ops = {
.read = adfs_fplus_read,
.setpos = adfs_fplus_setpos,
.getnext = adfs_fplus_getnext,
.sync = adfs_fplus_sync,
.free = adfs_fplus_free
};