lkml.org 
[lkml]   [2004]   [Nov]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
SubjectRe: [PATCH] let fat handle MS_SYNCHRONOUS flag
On 25 Nov 2004 at 03h11, OGAWA Hirofumi wrote:

Hi,

> int fat_sync_inode(struct inode *inode)
> {
> return fat_write_inode(inode, 1);
> }

Thanks for the hint. Here's a third patch.

Signed-off-by: Colin Leroy <colin@colino.net>
--- a/fs/fat/dir.c 2004-11-24 15:57:17.000000000 +0100
+++ fs/fat/dir.c 2004-11-24 21:21:51.783396408 +0100
@@ -760,10 +760,16 @@
de[1].start = cpu_to_le16(MSDOS_I(parent)->i_logstart);
de[1].starthi = cpu_to_le16(MSDOS_I(parent)->i_logstart>>16);
mark_buffer_dirty(bh);
- brelse(bh);
dir->i_atime = dir->i_ctime = dir->i_mtime = CURRENT_TIME;
mark_inode_dirty(dir);

+ if (dir->i_sb->s_flags & MS_SYNCHRONOUS) {
+ sync_dirty_buffer(bh);
+ fat_sync_inode(dir);
+ }
+
+ brelse(bh);
+
return 0;
}

--- a/fs/fat/fatfs_syms.c 2004-11-24 15:57:17.000000000 +0100
+++ fs/fat/fatfs_syms.c 2004-11-24 21:05:18.665605752 +0100
@@ -19,6 +19,7 @@
EXPORT_SYMBOL(fat_detach);
EXPORT_SYMBOL(fat_build_inode);
EXPORT_SYMBOL(fat_fill_super);
+EXPORT_SYMBOL(fat_sync_inode);
EXPORT_SYMBOL(fat_search_long);
EXPORT_SYMBOL(fat_scan);
EXPORT_SYMBOL(fat_add_entries);
--- a/fs/fat/file.c 2004-10-18 23:53:44.000000000 +0200
+++ fs/fat/file.c 2004-11-24 21:06:56.271767360 +0100
@@ -74,18 +74,22 @@
{
struct inode *inode = filp->f_dentry->d_inode;
int retval;
+ struct super_block *sb = inode->i_sb;

retval = generic_file_write(filp, buf, count, ppos);
if (retval > 0) {
inode->i_mtime = inode->i_ctime = CURRENT_TIME;
MSDOS_I(inode)->i_attrs |= ATTR_ARCH;
mark_inode_dirty(inode);
+ if (sb->s_flags & MS_SYNCHRONOUS)
+ fat_sync_inode(inode);
}
return retval;
}

void fat_truncate(struct inode *inode)
{
+ struct super_block *sb = inode->i_sb;
struct msdos_sb_info *sbi = MSDOS_SB(inode->i_sb);
const unsigned int cluster_size = sbi->cluster_size;
int nr_clusters;
@@ -105,4 +109,6 @@
unlock_kernel();
inode->i_ctime = inode->i_mtime = CURRENT_TIME;
mark_inode_dirty(inode);
+ if (sb->s_flags & MS_SYNCHRONOUS)
+ fat_sync_inode(inode);
}
--- a/fs/fat/inode.c 2004-11-24 15:57:17.000000000 +0100
+++ fs/fat/inode.c 2004-11-24 21:04:23.031063488 +0100
@@ -1224,6 +1224,11 @@
return 0;
}

+int fat_sync_inode(struct inode *inode)
+{
+ return fat_write_inode(inode, 1);
+}
+
static int fat_write_inode(struct inode *inode, int wait)
{
struct super_block *sb = inode->i_sb;
@@ -1273,8 +1278,12 @@
}
spin_unlock(&sbi->inode_hash_lock);
mark_buffer_dirty(bh);
- brelse(bh);
unlock_kernel();
+
+ if (sb->s_flags & MS_SYNCHRONOUS)
+ sync_dirty_buffer(bh);
+ brelse(bh);
+
return 0;
}

--- a/include/linux/msdos_fs.h 2004-11-24 15:57:20.000000000 +0100
+++ b/include/linux/msdos_fs.h 2004-11-24 21:06:17.858607048 +0100
@@ -266,6 +266,7 @@
struct msdos_dir_entry *de, loff_t i_pos, int
*res); int fat_fill_super(struct super_block *sb, void *data, int
silent, struct inode_operations *fs_dir_inode_ops,
int isvfat);+int fat_sync_inode(struct inode *inode);
extern int fat_notify_change(struct dentry * dentry, struct iattr *
attr);
/* fat/misc.c */


--
Colin
"That's the difference between me and the rest of the world!
Happiness isn't good enough for me! I demand euphoria!"
-- Calvin
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
\
 
 \ /
  Last update: 2005-03-22 14:08    [from the cache]
©2003-2011 Jasper Spaans