summaryrefslogtreecommitdiff
path: root/fs
diff options
context:
space:
mode:
authorRussell King <rmk+kernel@armlinux.org.uk>2019-12-09 11:09:25 +0000
committerAl Viro <viro@zeniv.linux.org.uk>2020-01-20 20:12:41 -0500
commitacf5f0be8a520c02bfed74cfc6735bf5fdd4a9e5 (patch)
treeb1e0990adac6a249f3dcb192d47ace4f90734fb3 /fs
parent1dd9f5babfd95fea5a77b27bab48c04c29db1f5f (diff)
downloadlwn-acf5f0be8a520c02bfed74cfc6735bf5fdd4a9e5.tar.gz
lwn-acf5f0be8a520c02bfed74cfc6735bf5fdd4a9e5.zip
fs/adfs: dir: add common directory sync method
adfs_fplus_sync() can be used for both directory formats since we now have a common way to access the buffer heads, so move it into dir.c and appropriately rename it. Remove the directory-format specific implementations. Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs')
-rw-r--r--fs/adfs/adfs.h1
-rw-r--r--fs/adfs/dir.c23
-rw-r--r--fs/adfs/dir_f.c17
-rw-r--r--fs/adfs/dir_fplus.c17
4 files changed, 18 insertions, 40 deletions
diff --git a/fs/adfs/adfs.h b/fs/adfs/adfs.h
index 3bb6fd5b5eb0..5f1acee768f5 100644
--- a/fs/adfs/adfs.h
+++ b/fs/adfs/adfs.h
@@ -125,7 +125,6 @@ struct adfs_dir_ops {
int (*update)(struct adfs_dir *dir, struct object_info *obj);
int (*create)(struct adfs_dir *dir, struct object_info *obj);
int (*remove)(struct adfs_dir *dir, struct object_info *obj);
- int (*sync)(struct adfs_dir *dir);
};
struct adfs_discmap {
diff --git a/fs/adfs/dir.c b/fs/adfs/dir.c
index f50302775504..16a2639d3ca5 100644
--- a/fs/adfs/dir.c
+++ b/fs/adfs/dir.c
@@ -38,6 +38,21 @@ static int adfs_dir_read(struct super_block *sb, u32 indaddr,
return ADFS_SB(sb)->s_dir->read(sb, indaddr, size, dir);
}
+static int adfs_dir_sync(struct adfs_dir *dir)
+{
+ int err = 0;
+ int i;
+
+ for (i = dir->nr_buffers - 1; i >= 0; i--) {
+ struct buffer_head *bh = dir->bhs[i];
+ sync_dirty_buffer(bh);
+ if (buffer_req(bh) && !buffer_uptodate(bh))
+ err = -EIO;
+ }
+
+ return err;
+}
+
void adfs_object_fixup(struct adfs_dir *dir, struct object_info *obj)
{
unsigned int dots, i;
@@ -135,10 +150,8 @@ adfs_dir_update(struct super_block *sb, struct object_info *obj, int wait)
printk(KERN_INFO "adfs_dir_update: object %06x in dir %06x\n",
obj->indaddr, obj->parent_id);
- if (!ops->update) {
- ret = -EINVAL;
- goto out;
- }
+ if (!ops->update)
+ return -EINVAL;
ret = adfs_dir_read(sb, obj->parent_id, 0, &dir);
if (ret)
@@ -149,7 +162,7 @@ adfs_dir_update(struct super_block *sb, struct object_info *obj, int wait)
write_unlock(&adfs_dir_lock);
if (wait) {
- int err = ops->sync(&dir);
+ int err = adfs_dir_sync(&dir);
if (!ret)
ret = err;
}
diff --git a/fs/adfs/dir_f.c b/fs/adfs/dir_f.c
index e249fdb915fa..80ac261b9ec4 100644
--- a/fs/adfs/dir_f.c
+++ b/fs/adfs/dir_f.c
@@ -414,26 +414,9 @@ bad_dir:
#endif
}
-static int
-adfs_f_sync(struct adfs_dir *dir)
-{
- int err = 0;
- int i;
-
- for (i = dir->nr_buffers - 1; i >= 0; i--) {
- struct buffer_head *bh = dir->bh[i];
- sync_dirty_buffer(bh);
- if (buffer_req(bh) && !buffer_uptodate(bh))
- err = -EIO;
- }
-
- return err;
-}
-
const struct adfs_dir_ops adfs_f_dir_ops = {
.read = adfs_f_read,
.setpos = adfs_f_setpos,
.getnext = adfs_f_getnext,
.update = adfs_f_update,
- .sync = adfs_f_sync,
};
diff --git a/fs/adfs/dir_fplus.c b/fs/adfs/dir_fplus.c
index 25308b334dd3..1196c8962feb 100644
--- a/fs/adfs/dir_fplus.c
+++ b/fs/adfs/dir_fplus.c
@@ -179,25 +179,8 @@ out:
return ret;
}
-static int
-adfs_fplus_sync(struct adfs_dir *dir)
-{
- int err = 0;
- int i;
-
- for (i = dir->nr_buffers - 1; i >= 0; i--) {
- struct buffer_head *bh = dir->bhs[i];
- sync_dirty_buffer(bh);
- if (buffer_req(bh) && !buffer_uptodate(bh))
- err = -EIO;
- }
-
- return err;
-}
-
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,
};