diff options
author | Chris Mason <mason@suse.com> | 2006-09-29 05:00:03 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-09-29 12:18:12 -0400 |
commit | ae78bf9c4f5fde3c67e2829505f195d7347ce3e4 (patch) | |
tree | b9376237e596ed7e95db35b9ccf1ad3177b10460 /fs/fat/file.c | |
parent | 6b77df08a36d989f7dd00ccb6a026a0e96170d16 (diff) |
[PATCH] add -o flush for fat
Fat is commonly used on removable media. Mounting with -o flush tells the
FS to write things to disk as quickly as possible. It is like -o sync, but
much faster (and not as safe).
Signed-off-by: Chris Mason <mason@suse.com>
Cc: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'fs/fat/file.c')
-rw-r--r-- | fs/fat/file.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/fs/fat/file.c b/fs/fat/file.c index 1ee25232e6af..d50fc47169c1 100644 --- a/fs/fat/file.c +++ b/fs/fat/file.c | |||
@@ -13,6 +13,7 @@ | |||
13 | #include <linux/smp_lock.h> | 13 | #include <linux/smp_lock.h> |
14 | #include <linux/buffer_head.h> | 14 | #include <linux/buffer_head.h> |
15 | #include <linux/writeback.h> | 15 | #include <linux/writeback.h> |
16 | #include <linux/blkdev.h> | ||
16 | 17 | ||
17 | int fat_generic_ioctl(struct inode *inode, struct file *filp, | 18 | int fat_generic_ioctl(struct inode *inode, struct file *filp, |
18 | unsigned int cmd, unsigned long arg) | 19 | unsigned int cmd, unsigned long arg) |
@@ -112,6 +113,16 @@ int fat_generic_ioctl(struct inode *inode, struct file *filp, | |||
112 | } | 113 | } |
113 | } | 114 | } |
114 | 115 | ||
116 | static int fat_file_release(struct inode *inode, struct file *filp) | ||
117 | { | ||
118 | if ((filp->f_mode & FMODE_WRITE) && | ||
119 | MSDOS_SB(inode->i_sb)->options.flush) { | ||
120 | fat_flush_inodes(inode->i_sb, inode, NULL); | ||
121 | blk_congestion_wait(WRITE, HZ/10); | ||
122 | } | ||
123 | return 0; | ||
124 | } | ||
125 | |||
115 | const struct file_operations fat_file_operations = { | 126 | const struct file_operations fat_file_operations = { |
116 | .llseek = generic_file_llseek, | 127 | .llseek = generic_file_llseek, |
117 | .read = do_sync_read, | 128 | .read = do_sync_read, |
@@ -121,6 +132,7 @@ const struct file_operations fat_file_operations = { | |||
121 | .aio_read = generic_file_aio_read, | 132 | .aio_read = generic_file_aio_read, |
122 | .aio_write = generic_file_aio_write, | 133 | .aio_write = generic_file_aio_write, |
123 | .mmap = generic_file_mmap, | 134 | .mmap = generic_file_mmap, |
135 | .release = fat_file_release, | ||
124 | .ioctl = fat_generic_ioctl, | 136 | .ioctl = fat_generic_ioctl, |
125 | .fsync = file_fsync, | 137 | .fsync = file_fsync, |
126 | .sendfile = generic_file_sendfile, | 138 | .sendfile = generic_file_sendfile, |
@@ -289,6 +301,7 @@ void fat_truncate(struct inode *inode) | |||
289 | lock_kernel(); | 301 | lock_kernel(); |
290 | fat_free(inode, nr_clusters); | 302 | fat_free(inode, nr_clusters); |
291 | unlock_kernel(); | 303 | unlock_kernel(); |
304 | fat_flush_inodes(inode->i_sb, inode, NULL); | ||
292 | } | 305 | } |
293 | 306 | ||
294 | struct inode_operations fat_file_inode_operations = { | 307 | struct inode_operations fat_file_inode_operations = { |