diff options
Diffstat (limited to 'fs/minix/dir.c')
-rw-r--r-- | fs/minix/dir.c | 32 |
1 files changed, 9 insertions, 23 deletions
diff --git a/fs/minix/dir.c b/fs/minix/dir.c index 6198731d7fcd..085a9262c692 100644 --- a/fs/minix/dir.c +++ b/fs/minix/dir.c | |||
@@ -22,7 +22,7 @@ const struct file_operations minix_dir_operations = { | |||
22 | .llseek = generic_file_llseek, | 22 | .llseek = generic_file_llseek, |
23 | .read = generic_read_dir, | 23 | .read = generic_read_dir, |
24 | .readdir = minix_readdir, | 24 | .readdir = minix_readdir, |
25 | .fsync = simple_fsync, | 25 | .fsync = generic_file_fsync, |
26 | }; | 26 | }; |
27 | 27 | ||
28 | static inline void dir_put_page(struct page *page) | 28 | static inline void dir_put_page(struct page *page) |
@@ -72,16 +72,9 @@ static struct page * dir_get_page(struct inode *dir, unsigned long n) | |||
72 | { | 72 | { |
73 | struct address_space *mapping = dir->i_mapping; | 73 | struct address_space *mapping = dir->i_mapping; |
74 | struct page *page = read_mapping_page(mapping, n, NULL); | 74 | struct page *page = read_mapping_page(mapping, n, NULL); |
75 | if (!IS_ERR(page)) { | 75 | if (!IS_ERR(page)) |
76 | kmap(page); | 76 | kmap(page); |
77 | if (!PageUptodate(page)) | ||
78 | goto fail; | ||
79 | } | ||
80 | return page; | 77 | return page; |
81 | |||
82 | fail: | ||
83 | dir_put_page(page); | ||
84 | return ERR_PTR(-EIO); | ||
85 | } | 78 | } |
86 | 79 | ||
87 | static inline void *minix_next_entry(void *de, struct minix_sb_info *sbi) | 80 | static inline void *minix_next_entry(void *de, struct minix_sb_info *sbi) |
@@ -278,8 +271,7 @@ int minix_add_link(struct dentry *dentry, struct inode *inode) | |||
278 | 271 | ||
279 | got_it: | 272 | got_it: |
280 | pos = page_offset(page) + p - (char *)page_address(page); | 273 | pos = page_offset(page) + p - (char *)page_address(page); |
281 | err = __minix_write_begin(NULL, page->mapping, pos, sbi->s_dirsize, | 274 | err = minix_prepare_chunk(page, pos, sbi->s_dirsize); |
282 | AOP_FLAG_UNINTERRUPTIBLE, &page, NULL); | ||
283 | if (err) | 275 | if (err) |
284 | goto out_unlock; | 276 | goto out_unlock; |
285 | memcpy (namx, name, namelen); | 277 | memcpy (namx, name, namelen); |
@@ -304,8 +296,7 @@ out_unlock: | |||
304 | 296 | ||
305 | int minix_delete_entry(struct minix_dir_entry *de, struct page *page) | 297 | int minix_delete_entry(struct minix_dir_entry *de, struct page *page) |
306 | { | 298 | { |
307 | struct address_space *mapping = page->mapping; | 299 | struct inode *inode = page->mapping->host; |
308 | struct inode *inode = (struct inode*)mapping->host; | ||
309 | char *kaddr = page_address(page); | 300 | char *kaddr = page_address(page); |
310 | loff_t pos = page_offset(page) + (char*)de - kaddr; | 301 | loff_t pos = page_offset(page) + (char*)de - kaddr; |
311 | struct minix_sb_info *sbi = minix_sb(inode->i_sb); | 302 | struct minix_sb_info *sbi = minix_sb(inode->i_sb); |
@@ -313,8 +304,7 @@ int minix_delete_entry(struct minix_dir_entry *de, struct page *page) | |||
313 | int err; | 304 | int err; |
314 | 305 | ||
315 | lock_page(page); | 306 | lock_page(page); |
316 | err = __minix_write_begin(NULL, mapping, pos, len, | 307 | err = minix_prepare_chunk(page, pos, len); |
317 | AOP_FLAG_UNINTERRUPTIBLE, &page, NULL); | ||
318 | if (err == 0) { | 308 | if (err == 0) { |
319 | if (sbi->s_version == MINIX_V3) | 309 | if (sbi->s_version == MINIX_V3) |
320 | ((minix3_dirent *) de)->inode = 0; | 310 | ((minix3_dirent *) de)->inode = 0; |
@@ -332,16 +322,14 @@ int minix_delete_entry(struct minix_dir_entry *de, struct page *page) | |||
332 | 322 | ||
333 | int minix_make_empty(struct inode *inode, struct inode *dir) | 323 | int minix_make_empty(struct inode *inode, struct inode *dir) |
334 | { | 324 | { |
335 | struct address_space *mapping = inode->i_mapping; | 325 | struct page *page = grab_cache_page(inode->i_mapping, 0); |
336 | struct page *page = grab_cache_page(mapping, 0); | ||
337 | struct minix_sb_info *sbi = minix_sb(inode->i_sb); | 326 | struct minix_sb_info *sbi = minix_sb(inode->i_sb); |
338 | char *kaddr; | 327 | char *kaddr; |
339 | int err; | 328 | int err; |
340 | 329 | ||
341 | if (!page) | 330 | if (!page) |
342 | return -ENOMEM; | 331 | return -ENOMEM; |
343 | err = __minix_write_begin(NULL, mapping, 0, 2 * sbi->s_dirsize, | 332 | err = minix_prepare_chunk(page, 0, 2 * sbi->s_dirsize); |
344 | AOP_FLAG_UNINTERRUPTIBLE, &page, NULL); | ||
345 | if (err) { | 333 | if (err) { |
346 | unlock_page(page); | 334 | unlock_page(page); |
347 | goto fail; | 335 | goto fail; |
@@ -432,8 +420,7 @@ not_empty: | |||
432 | void minix_set_link(struct minix_dir_entry *de, struct page *page, | 420 | void minix_set_link(struct minix_dir_entry *de, struct page *page, |
433 | struct inode *inode) | 421 | struct inode *inode) |
434 | { | 422 | { |
435 | struct address_space *mapping = page->mapping; | 423 | struct inode *dir = page->mapping->host; |
436 | struct inode *dir = mapping->host; | ||
437 | struct minix_sb_info *sbi = minix_sb(dir->i_sb); | 424 | struct minix_sb_info *sbi = minix_sb(dir->i_sb); |
438 | loff_t pos = page_offset(page) + | 425 | loff_t pos = page_offset(page) + |
439 | (char *)de-(char*)page_address(page); | 426 | (char *)de-(char*)page_address(page); |
@@ -441,8 +428,7 @@ void minix_set_link(struct minix_dir_entry *de, struct page *page, | |||
441 | 428 | ||
442 | lock_page(page); | 429 | lock_page(page); |
443 | 430 | ||
444 | err = __minix_write_begin(NULL, mapping, pos, sbi->s_dirsize, | 431 | err = minix_prepare_chunk(page, pos, sbi->s_dirsize); |
445 | AOP_FLAG_UNINTERRUPTIBLE, &page, NULL); | ||
446 | if (err == 0) { | 432 | if (err == 0) { |
447 | if (sbi->s_version == MINIX_V3) | 433 | if (sbi->s_version == MINIX_V3) |
448 | ((minix3_dirent *) de)->inode = inode->i_ino; | 434 | ((minix3_dirent *) de)->inode = inode->i_ino; |