fs/adfs: dir: add common directory sync method
authorRussell King <rmk+kernel@armlinux.org.uk>
Mon, 9 Dec 2019 11:09:25 +0000 (11:09 +0000)
committerAl Viro <viro@zeniv.linux.org.uk>
Tue, 21 Jan 2020 01:12:41 +0000 (20:12 -0500)
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>
fs/adfs/adfs.h
fs/adfs/dir.c
fs/adfs/dir_f.c
fs/adfs/dir_fplus.c

index 3bb6fd5..5f1acee 100644 (file)
@@ -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 {
index f503027..16a2639 100644 (file)
@@ -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;
        }
index e249fdb..80ac261 100644 (file)
@@ -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,
 };
index 25308b3..1196c89 100644 (file)
@@ -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,
 };