summaryrefslogtreecommitdiffstats
path: root/fs/adfs
diff options
context:
space:
mode:
authorRussell King <rmk+kernel@armlinux.org.uk>2019-12-09 12:09:45 +0100
committerAl Viro <viro@zeniv.linux.org.uk>2020-01-21 02:12:41 +0100
commitc3c8149b3552b6656ded9ac86d53072f74771ba7 (patch)
tree9f8b790d61c436d3a022c73bdba74be0414ac191 /fs/adfs
parentfs/adfs: dir: add helper to read directory using inode (diff)
downloadlinux-c3c8149b3552b6656ded9ac86d53072f74771ba7.tar.xz
linux-c3c8149b3552b6656ded9ac86d53072f74771ba7.zip
fs/adfs: dir: add helper to mark directory buffers dirty
Provide a helper for marking directory buffers dirty so they get written back to disk. Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/adfs')
-rw-r--r--fs/adfs/dir.c12
-rw-r--r--fs/adfs/dir_f.c5
2 files changed, 13 insertions, 4 deletions
diff --git a/fs/adfs/dir.c b/fs/adfs/dir.c
index 882377e86041..e8aafc65d545 100644
--- a/fs/adfs/dir.c
+++ b/fs/adfs/dir.c
@@ -157,6 +157,15 @@ static int adfs_dir_read_inode(struct super_block *sb, struct inode *inode,
return ret;
}
+static void adfs_dir_mark_dirty(struct adfs_dir *dir)
+{
+ unsigned int i;
+
+ /* Mark the buffers dirty */
+ for (i = 0; i < dir->nr_buffers; i++)
+ mark_buffer_dirty(dir->bhs[i]);
+}
+
static int adfs_dir_sync(struct adfs_dir *dir)
{
int err = 0;
@@ -280,6 +289,9 @@ adfs_dir_update(struct super_block *sb, struct object_info *obj, int wait)
ret = ops->update(&dir, obj);
write_unlock(&adfs_dir_lock);
+ if (ret == 0)
+ adfs_dir_mark_dirty(&dir);
+
if (wait) {
int err = adfs_dir_sync(&dir);
if (!ret)
diff --git a/fs/adfs/dir_f.c b/fs/adfs/dir_f.c
index 027ee714f42b..682df46d8d33 100644
--- a/fs/adfs/dir_f.c
+++ b/fs/adfs/dir_f.c
@@ -306,7 +306,7 @@ static int
adfs_f_update(struct adfs_dir *dir, struct object_info *obj)
{
struct super_block *sb = dir->sb;
- int ret, i;
+ int ret;
ret = adfs_dir_find_entry(dir, obj->indaddr);
if (ret < 0) {
@@ -347,9 +347,6 @@ adfs_f_update(struct adfs_dir *dir, struct object_info *obj)
goto bad_dir;
}
#endif
- for (i = dir->nr_buffers - 1; i >= 0; i--)
- mark_buffer_dirty(dir->bh[i]);
-
ret = 0;
out:
return ret;