]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
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 3bb6fd5b5eb0ac87830aa03505c7faf3799a0b53..5f1acee768f51eea2730b00c29786bef0c3e52aa 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 f50302775504fe7f730601e4272b3c7fc2a528bf..16a2639d3ca5f7f192e3731fbede52cf6b1c805f 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 e249fdb915fae6afc14dfdcf20c667bdc91c2fac..80ac261b9ec4f22969e7b598a52e7ad609d8e1df 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 25308b334dd32bccde1a86f53e2e40a5457024e6..1196c8962febcc76692509fa084b949ab9ac9947 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,
 };