[PATCH] let vfat handle MS_SYNCHRONOUS flag
From: Colin Leroy
Date: Thu Nov 18 2004 - 14:08:16 EST
On 18 Nov 2004 at 19h11, Colin Leroy wrote:
Hi,
Same patch for vfat.
Signed-off-by: Colin Leroy <colin@xxxxxxxxxx>
--- a/fs/vfat/namei.c 2004-10-18 23:54:37.000000000 +0200
+++ b/fs/vfat/namei.c 2004-11-18 18:41:52.000000000 +0100
@@ -743,6 +743,8 @@
(*de)->adate = (*de)->cdate = (*de)->date;
mark_buffer_dirty(*bh);
+ if (dir->i_sb->s_flags & MS_SYNCHRONOUS)
+ sync_dirty_buffer(*bh);
/* slots can't be less than 1 */
sinfo_out->long_slots = slots - 1;
@@ -844,7 +846,6 @@
if (res < 0)
goto out;
inode = fat_build_inode(sb, de, sinfo.i_pos, &res);
- brelse(bh);
if (!inode)
goto out;
res = 0;
@@ -854,7 +855,10 @@
dir->i_version++;
dentry->d_time = dentry->d_parent->d_inode->i_version;
d_instantiate(dentry,inode);
+ if (sb->s_flags & MS_SYNCHRONOUS)
+ sync_dirty_buffer(bh);
out:
+ brelse(bh);
unlock_kernel();
return res;
}
@@ -871,6 +875,7 @@
mark_inode_dirty(dir);
de->name[0] = DELETED_FLAG;
mark_buffer_dirty(bh);
+
/* remove the longname */
offset = sinfo->longname_offset; de = NULL;
for (i = sinfo->long_slots; i > 0; --i) {
@@ -880,6 +885,9 @@
de->attr = ATTR_NONE;
mark_buffer_dirty(bh);
}
+ if (dir->i_sb->s_flags & MS_SYNCHRONOUS)
+ sync_dirty_buffer(bh);
+
brelse(bh);
}
@@ -903,7 +911,7 @@
dentry->d_inode->i_mtime = dentry->d_inode->i_atime = CURRENT_TIME;
fat_detach(dentry->d_inode);
mark_inode_dirty(dentry->d_inode);
- /* releases bh */
+ /* releases bh and syncs it if necessary */
vfat_remove_entry(dir,&sinfo,bh,de);
dir->i_nlink--;
out:
@@ -926,7 +934,7 @@
dentry->d_inode->i_mtime = dentry->d_inode->i_atime = CURRENT_TIME;
fat_detach(dentry->d_inode);
mark_inode_dirty(dentry->d_inode);
- /* releases bh */
+ /* releases bh and syncs it if necessary */
vfat_remove_entry(dir,&sinfo,bh,de);
out:
unlock_kernel();
@@ -956,6 +964,10 @@
dir->i_version++;
dir->i_nlink++;
inode->i_nlink = 2; /* no need to mark them dirty */
+
+ if (sb->s_flags & MS_SYNCHRONOUS)
+ sync_dirty_buffer(bh);
+
res = fat_new_dir(inode, dir, 1);
if (res < 0)
goto mkdir_failed;
@@ -972,7 +984,7 @@
inode->i_mtime = inode->i_atime = CURRENT_TIME;
fat_detach(inode);
mark_inode_dirty(inode);
- /* releases bh */
+ /* releases bh ands syncs if necessary */
vfat_remove_entry(dir,&sinfo,bh,de);
iput(inode);
dir->i_nlink--;
@@ -1057,6 +1069,8 @@
new_dir->i_nlink++;
mark_inode_dirty(new_dir);
}
+ if (new_dir->i_sb->s_flags & MS_SYNCHRONOUS)
+ sync_dirty_buffer(dotdot_bh);
}
rename_done:
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/