]> git.karo-electronics.de Git - linux-beck.git/blob - fs/f2fs/data.c
f2fs: adds a tracepoint for submit_read_page
[linux-beck.git] / fs / f2fs / data.c
1 /*
2  * fs/f2fs/data.c
3  *
4  * Copyright (c) 2012 Samsung Electronics Co., Ltd.
5  *             http://www.samsung.com/
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License version 2 as
9  * published by the Free Software Foundation.
10  */
11 #include <linux/fs.h>
12 #include <linux/f2fs_fs.h>
13 #include <linux/buffer_head.h>
14 #include <linux/mpage.h>
15 #include <linux/aio.h>
16 #include <linux/writeback.h>
17 #include <linux/backing-dev.h>
18 #include <linux/blkdev.h>
19 #include <linux/bio.h>
20 #include <linux/prefetch.h>
21
22 #include "f2fs.h"
23 #include "node.h"
24 #include "segment.h"
25 #include <trace/events/f2fs.h>
26
27 /*
28  * Lock ordering for the change of data block address:
29  * ->data_page
30  *  ->node_page
31  *    update block addresses in the node page
32  */
33 static void __set_data_blkaddr(struct dnode_of_data *dn, block_t new_addr)
34 {
35         struct f2fs_node *rn;
36         __le32 *addr_array;
37         struct page *node_page = dn->node_page;
38         unsigned int ofs_in_node = dn->ofs_in_node;
39
40         f2fs_wait_on_page_writeback(node_page, NODE, false);
41
42         rn = F2FS_NODE(node_page);
43
44         /* Get physical address of data block */
45         addr_array = blkaddr_in_node(rn);
46         addr_array[ofs_in_node] = cpu_to_le32(new_addr);
47         set_page_dirty(node_page);
48 }
49
50 int reserve_new_block(struct dnode_of_data *dn)
51 {
52         struct f2fs_sb_info *sbi = F2FS_SB(dn->inode->i_sb);
53
54         if (is_inode_flag_set(F2FS_I(dn->inode), FI_NO_ALLOC))
55                 return -EPERM;
56         if (!inc_valid_block_count(sbi, dn->inode, 1))
57                 return -ENOSPC;
58
59         trace_f2fs_reserve_new_block(dn->inode, dn->nid, dn->ofs_in_node);
60
61         __set_data_blkaddr(dn, NEW_ADDR);
62         dn->data_blkaddr = NEW_ADDR;
63         sync_inode_page(dn);
64         return 0;
65 }
66
67 static int check_extent_cache(struct inode *inode, pgoff_t pgofs,
68                                         struct buffer_head *bh_result)
69 {
70         struct f2fs_inode_info *fi = F2FS_I(inode);
71         pgoff_t start_fofs, end_fofs;
72         block_t start_blkaddr;
73
74         if (is_inode_flag_set(fi, FI_NO_EXTENT))
75                 return 0;
76
77         read_lock(&fi->ext.ext_lock);
78         if (fi->ext.len == 0) {
79                 read_unlock(&fi->ext.ext_lock);
80                 return 0;
81         }
82
83         stat_inc_total_hit(inode->i_sb);
84
85         start_fofs = fi->ext.fofs;
86         end_fofs = fi->ext.fofs + fi->ext.len - 1;
87         start_blkaddr = fi->ext.blk_addr;
88
89         if (pgofs >= start_fofs && pgofs <= end_fofs) {
90                 unsigned int blkbits = inode->i_sb->s_blocksize_bits;
91                 size_t count;
92
93                 clear_buffer_new(bh_result);
94                 map_bh(bh_result, inode->i_sb,
95                                 start_blkaddr + pgofs - start_fofs);
96                 count = end_fofs - pgofs + 1;
97                 if (count < (UINT_MAX >> blkbits))
98                         bh_result->b_size = (count << blkbits);
99                 else
100                         bh_result->b_size = UINT_MAX;
101
102                 stat_inc_read_hit(inode->i_sb);
103                 read_unlock(&fi->ext.ext_lock);
104                 return 1;
105         }
106         read_unlock(&fi->ext.ext_lock);
107         return 0;
108 }
109
110 void update_extent_cache(block_t blk_addr, struct dnode_of_data *dn)
111 {
112         struct f2fs_inode_info *fi = F2FS_I(dn->inode);
113         pgoff_t fofs, start_fofs, end_fofs;
114         block_t start_blkaddr, end_blkaddr;
115         int need_update = true;
116
117         f2fs_bug_on(blk_addr == NEW_ADDR);
118         fofs = start_bidx_of_node(ofs_of_node(dn->node_page), fi) +
119                                                         dn->ofs_in_node;
120
121         /* Update the page address in the parent node */
122         __set_data_blkaddr(dn, blk_addr);
123
124         if (is_inode_flag_set(fi, FI_NO_EXTENT))
125                 return;
126
127         write_lock(&fi->ext.ext_lock);
128
129         start_fofs = fi->ext.fofs;
130         end_fofs = fi->ext.fofs + fi->ext.len - 1;
131         start_blkaddr = fi->ext.blk_addr;
132         end_blkaddr = fi->ext.blk_addr + fi->ext.len - 1;
133
134         /* Drop and initialize the matched extent */
135         if (fi->ext.len == 1 && fofs == start_fofs)
136                 fi->ext.len = 0;
137
138         /* Initial extent */
139         if (fi->ext.len == 0) {
140                 if (blk_addr != NULL_ADDR) {
141                         fi->ext.fofs = fofs;
142                         fi->ext.blk_addr = blk_addr;
143                         fi->ext.len = 1;
144                 }
145                 goto end_update;
146         }
147
148         /* Front merge */
149         if (fofs == start_fofs - 1 && blk_addr == start_blkaddr - 1) {
150                 fi->ext.fofs--;
151                 fi->ext.blk_addr--;
152                 fi->ext.len++;
153                 goto end_update;
154         }
155
156         /* Back merge */
157         if (fofs == end_fofs + 1 && blk_addr == end_blkaddr + 1) {
158                 fi->ext.len++;
159                 goto end_update;
160         }
161
162         /* Split the existing extent */
163         if (fi->ext.len > 1 &&
164                 fofs >= start_fofs && fofs <= end_fofs) {
165                 if ((end_fofs - fofs) < (fi->ext.len >> 1)) {
166                         fi->ext.len = fofs - start_fofs;
167                 } else {
168                         fi->ext.fofs = fofs + 1;
169                         fi->ext.blk_addr = start_blkaddr +
170                                         fofs - start_fofs + 1;
171                         fi->ext.len -= fofs - start_fofs + 1;
172                 }
173         } else {
174                 need_update = false;
175         }
176
177         /* Finally, if the extent is very fragmented, let's drop the cache. */
178         if (fi->ext.len < F2FS_MIN_EXTENT_LEN) {
179                 fi->ext.len = 0;
180                 set_inode_flag(fi, FI_NO_EXTENT);
181                 need_update = true;
182         }
183 end_update:
184         write_unlock(&fi->ext.ext_lock);
185         if (need_update)
186                 sync_inode_page(dn);
187         return;
188 }
189
190 struct page *find_data_page(struct inode *inode, pgoff_t index, bool sync)
191 {
192         struct f2fs_sb_info *sbi = F2FS_SB(inode->i_sb);
193         struct address_space *mapping = inode->i_mapping;
194         struct dnode_of_data dn;
195         struct page *page;
196         int err;
197
198         page = find_get_page(mapping, index);
199         if (page && PageUptodate(page))
200                 return page;
201         f2fs_put_page(page, 0);
202
203         set_new_dnode(&dn, inode, NULL, NULL, 0);
204         err = get_dnode_of_data(&dn, index, LOOKUP_NODE);
205         if (err)
206                 return ERR_PTR(err);
207         f2fs_put_dnode(&dn);
208
209         if (dn.data_blkaddr == NULL_ADDR)
210                 return ERR_PTR(-ENOENT);
211
212         /* By fallocate(), there is no cached page, but with NEW_ADDR */
213         if (dn.data_blkaddr == NEW_ADDR)
214                 return ERR_PTR(-EINVAL);
215
216         page = grab_cache_page_write_begin(mapping, index, AOP_FLAG_NOFS);
217         if (!page)
218                 return ERR_PTR(-ENOMEM);
219
220         if (PageUptodate(page)) {
221                 unlock_page(page);
222                 return page;
223         }
224
225         err = f2fs_readpage(sbi, page, dn.data_blkaddr,
226                                         sync ? READ_SYNC : READA);
227         if (sync) {
228                 wait_on_page_locked(page);
229                 if (!PageUptodate(page)) {
230                         f2fs_put_page(page, 0);
231                         return ERR_PTR(-EIO);
232                 }
233         }
234         return page;
235 }
236
237 /*
238  * If it tries to access a hole, return an error.
239  * Because, the callers, functions in dir.c and GC, should be able to know
240  * whether this page exists or not.
241  */
242 struct page *get_lock_data_page(struct inode *inode, pgoff_t index)
243 {
244         struct f2fs_sb_info *sbi = F2FS_SB(inode->i_sb);
245         struct address_space *mapping = inode->i_mapping;
246         struct dnode_of_data dn;
247         struct page *page;
248         int err;
249
250 repeat:
251         page = grab_cache_page_write_begin(mapping, index, AOP_FLAG_NOFS);
252         if (!page)
253                 return ERR_PTR(-ENOMEM);
254
255         set_new_dnode(&dn, inode, NULL, NULL, 0);
256         err = get_dnode_of_data(&dn, index, LOOKUP_NODE);
257         if (err) {
258                 f2fs_put_page(page, 1);
259                 return ERR_PTR(err);
260         }
261         f2fs_put_dnode(&dn);
262
263         if (dn.data_blkaddr == NULL_ADDR) {
264                 f2fs_put_page(page, 1);
265                 return ERR_PTR(-ENOENT);
266         }
267
268         if (PageUptodate(page))
269                 return page;
270
271         /*
272          * A new dentry page is allocated but not able to be written, since its
273          * new inode page couldn't be allocated due to -ENOSPC.
274          * In such the case, its blkaddr can be remained as NEW_ADDR.
275          * see, f2fs_add_link -> get_new_data_page -> init_inode_metadata.
276          */
277         if (dn.data_blkaddr == NEW_ADDR) {
278                 zero_user_segment(page, 0, PAGE_CACHE_SIZE);
279                 SetPageUptodate(page);
280                 return page;
281         }
282
283         err = f2fs_readpage(sbi, page, dn.data_blkaddr, READ_SYNC);
284         if (err)
285                 return ERR_PTR(err);
286
287         lock_page(page);
288         if (!PageUptodate(page)) {
289                 f2fs_put_page(page, 1);
290                 return ERR_PTR(-EIO);
291         }
292         if (page->mapping != mapping) {
293                 f2fs_put_page(page, 1);
294                 goto repeat;
295         }
296         return page;
297 }
298
299 /*
300  * Caller ensures that this data page is never allocated.
301  * A new zero-filled data page is allocated in the page cache.
302  *
303  * Also, caller should grab and release a mutex by calling mutex_lock_op() and
304  * mutex_unlock_op().
305  * Note that, npage is set only by make_empty_dir.
306  */
307 struct page *get_new_data_page(struct inode *inode,
308                 struct page *npage, pgoff_t index, bool new_i_size)
309 {
310         struct f2fs_sb_info *sbi = F2FS_SB(inode->i_sb);
311         struct address_space *mapping = inode->i_mapping;
312         struct page *page;
313         struct dnode_of_data dn;
314         int err;
315
316         set_new_dnode(&dn, inode, npage, npage, 0);
317         err = get_dnode_of_data(&dn, index, ALLOC_NODE);
318         if (err)
319                 return ERR_PTR(err);
320
321         if (dn.data_blkaddr == NULL_ADDR) {
322                 if (reserve_new_block(&dn)) {
323                         if (!npage)
324                                 f2fs_put_dnode(&dn);
325                         return ERR_PTR(-ENOSPC);
326                 }
327         }
328         if (!npage)
329                 f2fs_put_dnode(&dn);
330 repeat:
331         page = grab_cache_page(mapping, index);
332         if (!page)
333                 return ERR_PTR(-ENOMEM);
334
335         if (PageUptodate(page))
336                 return page;
337
338         if (dn.data_blkaddr == NEW_ADDR) {
339                 zero_user_segment(page, 0, PAGE_CACHE_SIZE);
340                 SetPageUptodate(page);
341         } else {
342                 err = f2fs_readpage(sbi, page, dn.data_blkaddr, READ_SYNC);
343                 if (err)
344                         return ERR_PTR(err);
345                 lock_page(page);
346                 if (!PageUptodate(page)) {
347                         f2fs_put_page(page, 1);
348                         return ERR_PTR(-EIO);
349                 }
350                 if (page->mapping != mapping) {
351                         f2fs_put_page(page, 1);
352                         goto repeat;
353                 }
354         }
355
356         if (new_i_size &&
357                 i_size_read(inode) < ((index + 1) << PAGE_CACHE_SHIFT)) {
358                 i_size_write(inode, ((index + 1) << PAGE_CACHE_SHIFT));
359                 /* Only the directory inode sets new_i_size */
360                 set_inode_flag(F2FS_I(inode), FI_UPDATE_DIR);
361                 mark_inode_dirty_sync(inode);
362         }
363         return page;
364 }
365
366 static void read_end_io(struct bio *bio, int err)
367 {
368         const int uptodate = test_bit(BIO_UPTODATE, &bio->bi_flags);
369         struct bio_vec *bvec = bio->bi_io_vec + bio->bi_vcnt - 1;
370
371         do {
372                 struct page *page = bvec->bv_page;
373
374                 if (--bvec >= bio->bi_io_vec)
375                         prefetchw(&bvec->bv_page->flags);
376
377                 if (uptodate) {
378                         SetPageUptodate(page);
379                 } else {
380                         ClearPageUptodate(page);
381                         SetPageError(page);
382                 }
383                 unlock_page(page);
384         } while (bvec >= bio->bi_io_vec);
385         bio_put(bio);
386 }
387
388 /*
389  * Fill the locked page with data located in the block address.
390  * Return unlocked page.
391  */
392 int f2fs_readpage(struct f2fs_sb_info *sbi, struct page *page,
393                                         block_t blk_addr, int type)
394 {
395         struct block_device *bdev = sbi->sb->s_bdev;
396         struct bio *bio;
397
398         trace_f2fs_readpage(page, blk_addr, type);
399
400         /* Allocate a new bio */
401         bio = f2fs_bio_alloc(bdev, 1);
402
403         /* Initialize the bio */
404         bio->bi_sector = SECTOR_FROM_BLOCK(sbi, blk_addr);
405         bio->bi_end_io = read_end_io;
406
407         if (bio_add_page(bio, page, PAGE_CACHE_SIZE, 0) < PAGE_CACHE_SIZE) {
408                 bio_put(bio);
409                 f2fs_put_page(page, 1);
410                 return -EFAULT;
411         }
412
413         submit_bio(type, bio);
414         return 0;
415 }
416
417 void f2fs_submit_read_bio(struct f2fs_sb_info *sbi, int rw)
418 {
419         struct f2fs_bio_info *io = &sbi->read_io;
420
421         if (!io->bio)
422                 return;
423
424         mutex_lock(&io->io_mutex);
425         if (io->bio) {
426                 submit_bio(rw, io->bio);
427                 io->bio = NULL;
428         }
429         mutex_unlock(&io->io_mutex);
430 }
431
432 void submit_read_page(struct f2fs_sb_info *sbi, struct page *page,
433                                         block_t blk_addr, int rw)
434 {
435         struct block_device *bdev = sbi->sb->s_bdev;
436         struct f2fs_bio_info *io = &sbi->read_io;
437         int bio_blocks;
438
439         verify_block_addr(sbi, blk_addr);
440
441         mutex_lock(&io->io_mutex);
442
443         if (io->bio && io->last_block_in_bio != blk_addr - 1) {
444                 submit_bio(rw, io->bio);
445                 io->bio = NULL;
446         }
447 alloc_new:
448         if (io->bio == NULL) {
449                 bio_blocks = MAX_BIO_BLOCKS(max_hw_blocks(sbi));
450                 io->bio = f2fs_bio_alloc(bdev, bio_blocks);
451                 io->bio->bi_sector = SECTOR_FROM_BLOCK(sbi, blk_addr);
452                 io->bio->bi_end_io = read_end_io;
453         }
454
455         if (bio_add_page(io->bio, page, PAGE_CACHE_SIZE, 0) <
456                                                         PAGE_CACHE_SIZE) {
457                 submit_bio(rw, io->bio);
458                 io->bio = NULL;
459                 goto alloc_new;
460         }
461
462         io->last_block_in_bio = blk_addr;
463
464         mutex_unlock(&io->io_mutex);
465         trace_f2fs_submit_read_page(page, rw, META, blk_addr);
466 }
467
468 /*
469  * This function should be used by the data read flow only where it
470  * does not check the "create" flag that indicates block allocation.
471  * The reason for this special functionality is to exploit VFS readahead
472  * mechanism.
473  */
474 static int get_data_block_ro(struct inode *inode, sector_t iblock,
475                         struct buffer_head *bh_result, int create)
476 {
477         unsigned int blkbits = inode->i_sb->s_blocksize_bits;
478         unsigned maxblocks = bh_result->b_size >> blkbits;
479         struct dnode_of_data dn;
480         pgoff_t pgofs;
481         int err;
482
483         /* Get the page offset from the block offset(iblock) */
484         pgofs = (pgoff_t)(iblock >> (PAGE_CACHE_SHIFT - blkbits));
485
486         if (check_extent_cache(inode, pgofs, bh_result)) {
487                 trace_f2fs_get_data_block(inode, iblock, bh_result, 0);
488                 return 0;
489         }
490
491         /* When reading holes, we need its node page */
492         set_new_dnode(&dn, inode, NULL, NULL, 0);
493         err = get_dnode_of_data(&dn, pgofs, LOOKUP_NODE_RA);
494         if (err) {
495                 trace_f2fs_get_data_block(inode, iblock, bh_result, err);
496                 return (err == -ENOENT) ? 0 : err;
497         }
498
499         /* It does not support data allocation */
500         f2fs_bug_on(create);
501
502         if (dn.data_blkaddr != NEW_ADDR && dn.data_blkaddr != NULL_ADDR) {
503                 int i;
504                 unsigned int end_offset;
505
506                 end_offset = IS_INODE(dn.node_page) ?
507                                 ADDRS_PER_INODE(F2FS_I(inode)) :
508                                 ADDRS_PER_BLOCK;
509
510                 clear_buffer_new(bh_result);
511
512                 /* Give more consecutive addresses for the read ahead */
513                 for (i = 0; i < end_offset - dn.ofs_in_node; i++)
514                         if (((datablock_addr(dn.node_page,
515                                                         dn.ofs_in_node + i))
516                                 != (dn.data_blkaddr + i)) || maxblocks == i)
517                                 break;
518                 map_bh(bh_result, inode->i_sb, dn.data_blkaddr);
519                 bh_result->b_size = (i << blkbits);
520         }
521         f2fs_put_dnode(&dn);
522         trace_f2fs_get_data_block(inode, iblock, bh_result, 0);
523         return 0;
524 }
525
526 static int f2fs_read_data_page(struct file *file, struct page *page)
527 {
528         return mpage_readpage(page, get_data_block_ro);
529 }
530
531 static int f2fs_read_data_pages(struct file *file,
532                         struct address_space *mapping,
533                         struct list_head *pages, unsigned nr_pages)
534 {
535         return mpage_readpages(mapping, pages, nr_pages, get_data_block_ro);
536 }
537
538 int do_write_data_page(struct page *page)
539 {
540         struct inode *inode = page->mapping->host;
541         block_t old_blk_addr, new_blk_addr;
542         struct dnode_of_data dn;
543         int err = 0;
544
545         set_new_dnode(&dn, inode, NULL, NULL, 0);
546         err = get_dnode_of_data(&dn, page->index, LOOKUP_NODE);
547         if (err)
548                 return err;
549
550         old_blk_addr = dn.data_blkaddr;
551
552         /* This page is already truncated */
553         if (old_blk_addr == NULL_ADDR)
554                 goto out_writepage;
555
556         set_page_writeback(page);
557
558         /*
559          * If current allocation needs SSR,
560          * it had better in-place writes for updated data.
561          */
562         if (unlikely(old_blk_addr != NEW_ADDR &&
563                         !is_cold_data(page) &&
564                         need_inplace_update(inode))) {
565                 rewrite_data_page(F2FS_SB(inode->i_sb), page,
566                                                 old_blk_addr);
567         } else {
568                 write_data_page(inode, page, &dn,
569                                 old_blk_addr, &new_blk_addr);
570                 update_extent_cache(new_blk_addr, &dn);
571         }
572 out_writepage:
573         f2fs_put_dnode(&dn);
574         return err;
575 }
576
577 static int f2fs_write_data_page(struct page *page,
578                                         struct writeback_control *wbc)
579 {
580         struct inode *inode = page->mapping->host;
581         struct f2fs_sb_info *sbi = F2FS_SB(inode->i_sb);
582         loff_t i_size = i_size_read(inode);
583         const pgoff_t end_index = ((unsigned long long) i_size)
584                                                         >> PAGE_CACHE_SHIFT;
585         unsigned offset;
586         bool need_balance_fs = false;
587         int err = 0;
588
589         if (page->index < end_index)
590                 goto write;
591
592         /*
593          * If the offset is out-of-range of file size,
594          * this page does not have to be written to disk.
595          */
596         offset = i_size & (PAGE_CACHE_SIZE - 1);
597         if ((page->index >= end_index + 1) || !offset) {
598                 if (S_ISDIR(inode->i_mode)) {
599                         dec_page_count(sbi, F2FS_DIRTY_DENTS);
600                         inode_dec_dirty_dents(inode);
601                 }
602                 goto out;
603         }
604
605         zero_user_segment(page, offset, PAGE_CACHE_SIZE);
606 write:
607         if (sbi->por_doing) {
608                 err = AOP_WRITEPAGE_ACTIVATE;
609                 goto redirty_out;
610         }
611
612         /* Dentry blocks are controlled by checkpoint */
613         if (S_ISDIR(inode->i_mode)) {
614                 dec_page_count(sbi, F2FS_DIRTY_DENTS);
615                 inode_dec_dirty_dents(inode);
616                 err = do_write_data_page(page);
617         } else {
618                 f2fs_lock_op(sbi);
619                 err = do_write_data_page(page);
620                 f2fs_unlock_op(sbi);
621                 need_balance_fs = true;
622         }
623         if (err == -ENOENT)
624                 goto out;
625         else if (err)
626                 goto redirty_out;
627
628         if (wbc->for_reclaim)
629                 f2fs_submit_bio(sbi, DATA, true);
630
631         clear_cold_data(page);
632 out:
633         unlock_page(page);
634         if (need_balance_fs)
635                 f2fs_balance_fs(sbi);
636         return 0;
637
638 redirty_out:
639         wbc->pages_skipped++;
640         set_page_dirty(page);
641         return err;
642 }
643
644 #define MAX_DESIRED_PAGES_WP    4096
645
646 static int __f2fs_writepage(struct page *page, struct writeback_control *wbc,
647                         void *data)
648 {
649         struct address_space *mapping = data;
650         int ret = mapping->a_ops->writepage(page, wbc);
651         mapping_set_error(mapping, ret);
652         return ret;
653 }
654
655 static int f2fs_write_data_pages(struct address_space *mapping,
656                             struct writeback_control *wbc)
657 {
658         struct inode *inode = mapping->host;
659         struct f2fs_sb_info *sbi = F2FS_SB(inode->i_sb);
660         bool locked = false;
661         int ret;
662         long excess_nrtw = 0, desired_nrtw;
663
664         /* deal with chardevs and other special file */
665         if (!mapping->a_ops->writepage)
666                 return 0;
667
668         if (wbc->nr_to_write < MAX_DESIRED_PAGES_WP) {
669                 desired_nrtw = MAX_DESIRED_PAGES_WP;
670                 excess_nrtw = desired_nrtw - wbc->nr_to_write;
671                 wbc->nr_to_write = desired_nrtw;
672         }
673
674         if (!S_ISDIR(inode->i_mode)) {
675                 mutex_lock(&sbi->writepages);
676                 locked = true;
677         }
678         ret = write_cache_pages(mapping, wbc, __f2fs_writepage, mapping);
679         if (locked)
680                 mutex_unlock(&sbi->writepages);
681         f2fs_submit_bio(sbi, DATA, (wbc->sync_mode == WB_SYNC_ALL));
682
683         remove_dirty_dir_inode(inode);
684
685         wbc->nr_to_write -= excess_nrtw;
686         return ret;
687 }
688
689 static int f2fs_write_begin(struct file *file, struct address_space *mapping,
690                 loff_t pos, unsigned len, unsigned flags,
691                 struct page **pagep, void **fsdata)
692 {
693         struct inode *inode = mapping->host;
694         struct f2fs_sb_info *sbi = F2FS_SB(inode->i_sb);
695         struct page *page;
696         pgoff_t index = ((unsigned long long) pos) >> PAGE_CACHE_SHIFT;
697         struct dnode_of_data dn;
698         int err = 0;
699
700         f2fs_balance_fs(sbi);
701 repeat:
702         page = grab_cache_page_write_begin(mapping, index, flags);
703         if (!page)
704                 return -ENOMEM;
705         *pagep = page;
706
707         f2fs_lock_op(sbi);
708
709         set_new_dnode(&dn, inode, NULL, NULL, 0);
710         err = get_dnode_of_data(&dn, index, ALLOC_NODE);
711         if (err)
712                 goto err;
713
714         if (dn.data_blkaddr == NULL_ADDR)
715                 err = reserve_new_block(&dn);
716
717         f2fs_put_dnode(&dn);
718         if (err)
719                 goto err;
720
721         f2fs_unlock_op(sbi);
722
723         if ((len == PAGE_CACHE_SIZE) || PageUptodate(page))
724                 return 0;
725
726         if ((pos & PAGE_CACHE_MASK) >= i_size_read(inode)) {
727                 unsigned start = pos & (PAGE_CACHE_SIZE - 1);
728                 unsigned end = start + len;
729
730                 /* Reading beyond i_size is simple: memset to zero */
731                 zero_user_segments(page, 0, start, end, PAGE_CACHE_SIZE);
732                 goto out;
733         }
734
735         if (dn.data_blkaddr == NEW_ADDR) {
736                 zero_user_segment(page, 0, PAGE_CACHE_SIZE);
737         } else {
738                 err = f2fs_readpage(sbi, page, dn.data_blkaddr, READ_SYNC);
739                 if (err)
740                         return err;
741                 lock_page(page);
742                 if (!PageUptodate(page)) {
743                         f2fs_put_page(page, 1);
744                         return -EIO;
745                 }
746                 if (page->mapping != mapping) {
747                         f2fs_put_page(page, 1);
748                         goto repeat;
749                 }
750         }
751 out:
752         SetPageUptodate(page);
753         clear_cold_data(page);
754         return 0;
755
756 err:
757         f2fs_unlock_op(sbi);
758         f2fs_put_page(page, 1);
759         return err;
760 }
761
762 static int f2fs_write_end(struct file *file,
763                         struct address_space *mapping,
764                         loff_t pos, unsigned len, unsigned copied,
765                         struct page *page, void *fsdata)
766 {
767         struct inode *inode = page->mapping->host;
768
769         SetPageUptodate(page);
770         set_page_dirty(page);
771
772         if (pos + copied > i_size_read(inode)) {
773                 i_size_write(inode, pos + copied);
774                 mark_inode_dirty(inode);
775                 update_inode_page(inode);
776         }
777
778         f2fs_put_page(page, 1);
779         return copied;
780 }
781
782 static ssize_t f2fs_direct_IO(int rw, struct kiocb *iocb,
783                 const struct iovec *iov, loff_t offset, unsigned long nr_segs)
784 {
785         struct file *file = iocb->ki_filp;
786         struct inode *inode = file->f_mapping->host;
787
788         if (rw == WRITE)
789                 return 0;
790
791         /* Needs synchronization with the cleaner */
792         return blockdev_direct_IO(rw, iocb, inode, iov, offset, nr_segs,
793                                                   get_data_block_ro);
794 }
795
796 static void f2fs_invalidate_data_page(struct page *page, unsigned int offset,
797                                       unsigned int length)
798 {
799         struct inode *inode = page->mapping->host;
800         struct f2fs_sb_info *sbi = F2FS_SB(inode->i_sb);
801         if (S_ISDIR(inode->i_mode) && PageDirty(page)) {
802                 dec_page_count(sbi, F2FS_DIRTY_DENTS);
803                 inode_dec_dirty_dents(inode);
804         }
805         ClearPagePrivate(page);
806 }
807
808 static int f2fs_release_data_page(struct page *page, gfp_t wait)
809 {
810         ClearPagePrivate(page);
811         return 1;
812 }
813
814 static int f2fs_set_data_page_dirty(struct page *page)
815 {
816         struct address_space *mapping = page->mapping;
817         struct inode *inode = mapping->host;
818
819         trace_f2fs_set_page_dirty(page, DATA);
820
821         SetPageUptodate(page);
822         if (!PageDirty(page)) {
823                 __set_page_dirty_nobuffers(page);
824                 set_dirty_dir_page(inode, page);
825                 return 1;
826         }
827         return 0;
828 }
829
830 static sector_t f2fs_bmap(struct address_space *mapping, sector_t block)
831 {
832         return generic_block_bmap(mapping, block, get_data_block_ro);
833 }
834
835 const struct address_space_operations f2fs_dblock_aops = {
836         .readpage       = f2fs_read_data_page,
837         .readpages      = f2fs_read_data_pages,
838         .writepage      = f2fs_write_data_page,
839         .writepages     = f2fs_write_data_pages,
840         .write_begin    = f2fs_write_begin,
841         .write_end      = f2fs_write_end,
842         .set_page_dirty = f2fs_set_data_page_dirty,
843         .invalidatepage = f2fs_invalidate_data_page,
844         .releasepage    = f2fs_release_data_page,
845         .direct_IO      = f2fs_direct_IO,
846         .bmap           = f2fs_bmap,
847 };