diff options
Diffstat (limited to 'fs/bfs')
-rw-r--r-- | fs/bfs/dir.c | 8 | ||||
-rw-r--r-- | fs/bfs/inode.c | 12 |
2 files changed, 13 insertions, 7 deletions
diff --git a/fs/bfs/dir.c b/fs/bfs/dir.c index 4dd1b623f937..54bd07d44e68 100644 --- a/fs/bfs/dir.c +++ b/fs/bfs/dir.c | |||
@@ -79,7 +79,7 @@ static int bfs_readdir(struct file *f, void *dirent, filldir_t filldir) | |||
79 | const struct file_operations bfs_dir_operations = { | 79 | const struct file_operations bfs_dir_operations = { |
80 | .read = generic_read_dir, | 80 | .read = generic_read_dir, |
81 | .readdir = bfs_readdir, | 81 | .readdir = bfs_readdir, |
82 | .fsync = file_fsync, | 82 | .fsync = simple_fsync, |
83 | .llseek = generic_file_llseek, | 83 | .llseek = generic_file_llseek, |
84 | }; | 84 | }; |
85 | 85 | ||
@@ -205,7 +205,7 @@ static int bfs_unlink(struct inode *dir, struct dentry *dentry) | |||
205 | inode->i_nlink = 1; | 205 | inode->i_nlink = 1; |
206 | } | 206 | } |
207 | de->ino = 0; | 207 | de->ino = 0; |
208 | mark_buffer_dirty(bh); | 208 | mark_buffer_dirty_inode(bh, dir); |
209 | dir->i_ctime = dir->i_mtime = CURRENT_TIME_SEC; | 209 | dir->i_ctime = dir->i_mtime = CURRENT_TIME_SEC; |
210 | mark_inode_dirty(dir); | 210 | mark_inode_dirty(dir); |
211 | inode->i_ctime = dir->i_ctime; | 211 | inode->i_ctime = dir->i_ctime; |
@@ -267,7 +267,7 @@ static int bfs_rename(struct inode *old_dir, struct dentry *old_dentry, | |||
267 | new_inode->i_ctime = CURRENT_TIME_SEC; | 267 | new_inode->i_ctime = CURRENT_TIME_SEC; |
268 | inode_dec_link_count(new_inode); | 268 | inode_dec_link_count(new_inode); |
269 | } | 269 | } |
270 | mark_buffer_dirty(old_bh); | 270 | mark_buffer_dirty_inode(old_bh, old_dir); |
271 | error = 0; | 271 | error = 0; |
272 | 272 | ||
273 | end_rename: | 273 | end_rename: |
@@ -320,7 +320,7 @@ static int bfs_add_entry(struct inode *dir, const unsigned char *name, | |||
320 | for (i = 0; i < BFS_NAMELEN; i++) | 320 | for (i = 0; i < BFS_NAMELEN; i++) |
321 | de->name[i] = | 321 | de->name[i] = |
322 | (i < namelen) ? name[i] : 0; | 322 | (i < namelen) ? name[i] : 0; |
323 | mark_buffer_dirty(bh); | 323 | mark_buffer_dirty_inode(bh, dir); |
324 | brelse(bh); | 324 | brelse(bh); |
325 | return 0; | 325 | return 0; |
326 | } | 326 | } |
diff --git a/fs/bfs/inode.c b/fs/bfs/inode.c index 3a9a1361fdc1..d1d9d9088371 100644 --- a/fs/bfs/inode.c +++ b/fs/bfs/inode.c | |||
@@ -98,14 +98,15 @@ error: | |||
98 | return ERR_PTR(-EIO); | 98 | return ERR_PTR(-EIO); |
99 | } | 99 | } |
100 | 100 | ||
101 | static int bfs_write_inode(struct inode *inode, int unused) | 101 | static int bfs_write_inode(struct inode *inode, int wait) |
102 | { | 102 | { |
103 | struct bfs_sb_info *info = BFS_SB(inode->i_sb); | ||
103 | unsigned int ino = (u16)inode->i_ino; | 104 | unsigned int ino = (u16)inode->i_ino; |
104 | unsigned long i_sblock; | 105 | unsigned long i_sblock; |
105 | struct bfs_inode *di; | 106 | struct bfs_inode *di; |
106 | struct buffer_head *bh; | 107 | struct buffer_head *bh; |
107 | int block, off; | 108 | int block, off; |
108 | struct bfs_sb_info *info = BFS_SB(inode->i_sb); | 109 | int err = 0; |
109 | 110 | ||
110 | dprintf("ino=%08x\n", ino); | 111 | dprintf("ino=%08x\n", ino); |
111 | 112 | ||
@@ -146,9 +147,14 @@ static int bfs_write_inode(struct inode *inode, int unused) | |||
146 | di->i_eoffset = cpu_to_le32(i_sblock * BFS_BSIZE + inode->i_size - 1); | 147 | di->i_eoffset = cpu_to_le32(i_sblock * BFS_BSIZE + inode->i_size - 1); |
147 | 148 | ||
148 | mark_buffer_dirty(bh); | 149 | mark_buffer_dirty(bh); |
150 | if (wait) { | ||
151 | sync_dirty_buffer(bh); | ||
152 | if (buffer_req(bh) && !buffer_uptodate(bh)) | ||
153 | err = -EIO; | ||
154 | } | ||
149 | brelse(bh); | 155 | brelse(bh); |
150 | mutex_unlock(&info->bfs_lock); | 156 | mutex_unlock(&info->bfs_lock); |
151 | return 0; | 157 | return err; |
152 | } | 158 | } |
153 | 159 | ||
154 | static void bfs_delete_inode(struct inode *inode) | 160 | static void bfs_delete_inode(struct inode *inode) |