]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blame - fs/f2fs/data.c
f2fs: fix missing skip pages info
[mirror_ubuntu-artful-kernel.git] / fs / f2fs / data.c
CommitLineData
0a8165d7 1/*
eb47b800
JK
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/writeback.h>
16#include <linux/backing-dev.h>
8f46dcae 17#include <linux/pagevec.h>
eb47b800
JK
18#include <linux/blkdev.h>
19#include <linux/bio.h>
690e4a3e 20#include <linux/prefetch.h>
e2e40f2c 21#include <linux/uio.h>
f1e88660 22#include <linux/cleancache.h>
eb47b800
JK
23
24#include "f2fs.h"
25#include "node.h"
26#include "segment.h"
db9f7c1a 27#include "trace.h"
848753aa 28#include <trace/events/f2fs.h>
eb47b800 29
4246a0b6 30static void f2fs_read_end_io(struct bio *bio)
93dfe2ac 31{
f568849e
LT
32 struct bio_vec *bvec;
33 int i;
93dfe2ac 34
4375a336 35 if (f2fs_bio_encrypted(bio)) {
4246a0b6 36 if (bio->bi_error) {
4375a336
JK
37 f2fs_release_crypto_ctx(bio->bi_private);
38 } else {
39 f2fs_end_io_crypto_work(bio->bi_private, bio);
40 return;
41 }
42 }
43
12377024
CY
44 bio_for_each_segment_all(bvec, bio, i) {
45 struct page *page = bvec->bv_page;
f1e88660 46
4246a0b6 47 if (!bio->bi_error) {
f1e88660
JK
48 SetPageUptodate(page);
49 } else {
50 ClearPageUptodate(page);
51 SetPageError(page);
52 }
53 unlock_page(page);
54 }
f1e88660
JK
55 bio_put(bio);
56}
57
4246a0b6 58static void f2fs_write_end_io(struct bio *bio)
93dfe2ac 59{
1b1f559f 60 struct f2fs_sb_info *sbi = bio->bi_private;
f568849e
LT
61 struct bio_vec *bvec;
62 int i;
93dfe2ac 63
f568849e 64 bio_for_each_segment_all(bvec, bio, i) {
93dfe2ac
JK
65 struct page *page = bvec->bv_page;
66
4375a336
JK
67 f2fs_restore_and_release_control_page(&page);
68
4246a0b6 69 if (unlikely(bio->bi_error)) {
93dfe2ac 70 set_bit(AS_EIO, &page->mapping->flags);
744602cf 71 f2fs_stop_checkpoint(sbi);
93dfe2ac
JK
72 }
73 end_page_writeback(page);
74 dec_page_count(sbi, F2FS_WRITEBACK);
f568849e 75 }
93dfe2ac 76
7c506896 77 if (!get_pages(sbi, F2FS_WRITEBACK) && wq_has_sleeper(&sbi->cp_wait))
93dfe2ac
JK
78 wake_up(&sbi->cp_wait);
79
80 bio_put(bio);
81}
82
940a6d34
GZ
83/*
84 * Low-level block read/write IO operations.
85 */
86static struct bio *__bio_alloc(struct f2fs_sb_info *sbi, block_t blk_addr,
87 int npages, bool is_read)
88{
89 struct bio *bio;
90
740432f8 91 bio = f2fs_bio_alloc(npages);
940a6d34
GZ
92
93 bio->bi_bdev = sbi->sb->s_bdev;
55cf9cb6 94 bio->bi_iter.bi_sector = SECTOR_FROM_BLOCK(blk_addr);
940a6d34 95 bio->bi_end_io = is_read ? f2fs_read_end_io : f2fs_write_end_io;
12377024 96 bio->bi_private = is_read ? NULL : sbi;
940a6d34
GZ
97
98 return bio;
99}
100
458e6197 101static void __submit_merged_bio(struct f2fs_bio_info *io)
93dfe2ac 102{
458e6197 103 struct f2fs_io_info *fio = &io->fio;
93dfe2ac
JK
104
105 if (!io->bio)
106 return;
107
6a8f8ca5 108 if (is_read_io(fio->rw))
2ace38e0 109 trace_f2fs_submit_read_bio(io->sbi->sb, fio, io->bio);
6a8f8ca5 110 else
2ace38e0 111 trace_f2fs_submit_write_bio(io->sbi->sb, fio, io->bio);
940a6d34 112
6a8f8ca5 113 submit_bio(fio->rw, io->bio);
93dfe2ac
JK
114 io->bio = NULL;
115}
116
0c3a5797
CY
117static bool __has_merged_page(struct f2fs_bio_info *io, struct inode *inode,
118 struct page *page, nid_t ino)
0fd785eb 119{
0fd785eb
CY
120 struct bio_vec *bvec;
121 struct page *target;
122 int i;
123
0c3a5797 124 if (!io->bio)
0fd785eb 125 return false;
0c3a5797
CY
126
127 if (!inode && !page && !ino)
128 return true;
0fd785eb
CY
129
130 bio_for_each_segment_all(bvec, io->bio, i) {
131
132 if (bvec->bv_page->mapping) {
133 target = bvec->bv_page;
134 } else {
135 struct f2fs_crypto_ctx *ctx;
136
137 /* encrypted page */
138 ctx = (struct f2fs_crypto_ctx *)page_private(
139 bvec->bv_page);
140 target = ctx->w.control_page;
141 }
142
0c3a5797
CY
143 if (inode && inode == target->mapping->host)
144 return true;
145 if (page && page == target)
146 return true;
147 if (ino && ino == ino_of_node(target))
0fd785eb 148 return true;
0fd785eb
CY
149 }
150
0fd785eb
CY
151 return false;
152}
153
0c3a5797
CY
154static bool has_merged_page(struct f2fs_sb_info *sbi, struct inode *inode,
155 struct page *page, nid_t ino,
156 enum page_type type)
157{
158 enum page_type btype = PAGE_TYPE_OF_BIO(type);
159 struct f2fs_bio_info *io = &sbi->write_io[btype];
160 bool ret;
161
162 down_read(&io->io_rwsem);
163 ret = __has_merged_page(io, inode, page, ino);
164 up_read(&io->io_rwsem);
165 return ret;
166}
167
168static void __f2fs_submit_merged_bio(struct f2fs_sb_info *sbi,
169 struct inode *inode, struct page *page,
170 nid_t ino, enum page_type type, int rw)
93dfe2ac
JK
171{
172 enum page_type btype = PAGE_TYPE_OF_BIO(type);
173 struct f2fs_bio_info *io;
174
175 io = is_read_io(rw) ? &sbi->read_io : &sbi->write_io[btype];
176
df0f8dc0 177 down_write(&io->io_rwsem);
458e6197 178
0c3a5797
CY
179 if (!__has_merged_page(io, inode, page, ino))
180 goto out;
181
458e6197
JK
182 /* change META to META_FLUSH in the checkpoint procedure */
183 if (type >= META_FLUSH) {
184 io->fio.type = META_FLUSH;
0f7b2abd
JK
185 if (test_opt(sbi, NOBARRIER))
186 io->fio.rw = WRITE_FLUSH | REQ_META | REQ_PRIO;
187 else
188 io->fio.rw = WRITE_FLUSH_FUA | REQ_META | REQ_PRIO;
458e6197
JK
189 }
190 __submit_merged_bio(io);
0c3a5797 191out:
df0f8dc0 192 up_write(&io->io_rwsem);
93dfe2ac
JK
193}
194
0c3a5797
CY
195void f2fs_submit_merged_bio(struct f2fs_sb_info *sbi, enum page_type type,
196 int rw)
197{
198 __f2fs_submit_merged_bio(sbi, NULL, NULL, 0, type, rw);
199}
200
201void f2fs_submit_merged_bio_cond(struct f2fs_sb_info *sbi,
202 struct inode *inode, struct page *page,
203 nid_t ino, enum page_type type, int rw)
204{
205 if (has_merged_page(sbi, inode, page, ino, type))
206 __f2fs_submit_merged_bio(sbi, inode, page, ino, type, rw);
207}
208
93dfe2ac
JK
209/*
210 * Fill the locked page with data located in the block address.
211 * Return unlocked page.
212 */
05ca3632 213int f2fs_submit_page_bio(struct f2fs_io_info *fio)
93dfe2ac 214{
93dfe2ac 215 struct bio *bio;
4375a336 216 struct page *page = fio->encrypted_page ? fio->encrypted_page : fio->page;
93dfe2ac 217
2ace38e0 218 trace_f2fs_submit_page_bio(page, fio);
05ca3632 219 f2fs_trace_ios(fio, 0);
93dfe2ac
JK
220
221 /* Allocate a new bio */
05ca3632 222 bio = __bio_alloc(fio->sbi, fio->blk_addr, 1, is_read_io(fio->rw));
93dfe2ac
JK
223
224 if (bio_add_page(bio, page, PAGE_CACHE_SIZE, 0) < PAGE_CACHE_SIZE) {
225 bio_put(bio);
93dfe2ac
JK
226 return -EFAULT;
227 }
228
cf04e8eb 229 submit_bio(fio->rw, bio);
93dfe2ac
JK
230 return 0;
231}
232
05ca3632 233void f2fs_submit_page_mbio(struct f2fs_io_info *fio)
93dfe2ac 234{
05ca3632 235 struct f2fs_sb_info *sbi = fio->sbi;
458e6197 236 enum page_type btype = PAGE_TYPE_OF_BIO(fio->type);
93dfe2ac 237 struct f2fs_bio_info *io;
940a6d34 238 bool is_read = is_read_io(fio->rw);
4375a336 239 struct page *bio_page;
93dfe2ac 240
940a6d34 241 io = is_read ? &sbi->read_io : &sbi->write_io[btype];
93dfe2ac 242
cf04e8eb 243 verify_block_addr(sbi, fio->blk_addr);
93dfe2ac 244
df0f8dc0 245 down_write(&io->io_rwsem);
93dfe2ac 246
940a6d34 247 if (!is_read)
93dfe2ac
JK
248 inc_page_count(sbi, F2FS_WRITEBACK);
249
cf04e8eb 250 if (io->bio && (io->last_block_in_bio != fio->blk_addr - 1 ||
458e6197
JK
251 io->fio.rw != fio->rw))
252 __submit_merged_bio(io);
93dfe2ac
JK
253alloc_new:
254 if (io->bio == NULL) {
90a893c7 255 int bio_blocks = MAX_BIO_BLOCKS(sbi);
940a6d34 256
cf04e8eb 257 io->bio = __bio_alloc(sbi, fio->blk_addr, bio_blocks, is_read);
458e6197 258 io->fio = *fio;
93dfe2ac
JK
259 }
260
4375a336
JK
261 bio_page = fio->encrypted_page ? fio->encrypted_page : fio->page;
262
263 if (bio_add_page(io->bio, bio_page, PAGE_CACHE_SIZE, 0) <
93dfe2ac 264 PAGE_CACHE_SIZE) {
458e6197 265 __submit_merged_bio(io);
93dfe2ac
JK
266 goto alloc_new;
267 }
268
cf04e8eb 269 io->last_block_in_bio = fio->blk_addr;
05ca3632 270 f2fs_trace_ios(fio, 0);
93dfe2ac 271
df0f8dc0 272 up_write(&io->io_rwsem);
05ca3632 273 trace_f2fs_submit_page_mbio(fio->page, fio);
93dfe2ac
JK
274}
275
0a8165d7 276/*
eb47b800
JK
277 * Lock ordering for the change of data block address:
278 * ->data_page
279 * ->node_page
280 * update block addresses in the node page
281 */
216a620a 282void set_data_blkaddr(struct dnode_of_data *dn)
eb47b800
JK
283{
284 struct f2fs_node *rn;
285 __le32 *addr_array;
286 struct page *node_page = dn->node_page;
287 unsigned int ofs_in_node = dn->ofs_in_node;
288
fec1d657 289 f2fs_wait_on_page_writeback(node_page, NODE, true);
eb47b800 290
45590710 291 rn = F2FS_NODE(node_page);
eb47b800
JK
292
293 /* Get physical address of data block */
294 addr_array = blkaddr_in_node(rn);
e1509cf2 295 addr_array[ofs_in_node] = cpu_to_le32(dn->data_blkaddr);
12719ae1
JK
296 if (set_page_dirty(node_page))
297 dn->node_changed = true;
eb47b800
JK
298}
299
300int reserve_new_block(struct dnode_of_data *dn)
301{
4081363f 302 struct f2fs_sb_info *sbi = F2FS_I_SB(dn->inode);
eb47b800 303
6bacf52f 304 if (unlikely(is_inode_flag_set(F2FS_I(dn->inode), FI_NO_ALLOC)))
eb47b800 305 return -EPERM;
cfb271d4 306 if (unlikely(!inc_valid_block_count(sbi, dn->inode, 1)))
eb47b800
JK
307 return -ENOSPC;
308
c01e2853
NJ
309 trace_f2fs_reserve_new_block(dn->inode, dn->nid, dn->ofs_in_node);
310
eb47b800 311 dn->data_blkaddr = NEW_ADDR;
216a620a 312 set_data_blkaddr(dn);
a18ff063 313 mark_inode_dirty(dn->inode);
eb47b800
JK
314 sync_inode_page(dn);
315 return 0;
316}
317
b600965c
HL
318int f2fs_reserve_block(struct dnode_of_data *dn, pgoff_t index)
319{
320 bool need_put = dn->inode_page ? false : true;
321 int err;
322
323 err = get_dnode_of_data(dn, index, ALLOC_NODE);
324 if (err)
325 return err;
a8865372 326
b600965c
HL
327 if (dn->data_blkaddr == NULL_ADDR)
328 err = reserve_new_block(dn);
a8865372 329 if (err || need_put)
b600965c
HL
330 f2fs_put_dnode(dn);
331 return err;
332}
333
759af1c9 334int f2fs_get_block(struct dnode_of_data *dn, pgoff_t index)
eb47b800 335{
028a41e8 336 struct extent_info ei;
759af1c9 337 struct inode *inode = dn->inode;
028a41e8 338
759af1c9
FL
339 if (f2fs_lookup_extent_cache(inode, index, &ei)) {
340 dn->data_blkaddr = ei.blk + index - ei.fofs;
341 return 0;
429511cd 342 }
028a41e8 343
759af1c9 344 return f2fs_reserve_block(dn, index);
eb47b800
JK
345}
346
a56c7c6f
JK
347struct page *get_read_data_page(struct inode *inode, pgoff_t index,
348 int rw, bool for_write)
eb47b800 349{
eb47b800
JK
350 struct address_space *mapping = inode->i_mapping;
351 struct dnode_of_data dn;
352 struct page *page;
cb3bc9ee 353 struct extent_info ei;
eb47b800 354 int err;
cf04e8eb 355 struct f2fs_io_info fio = {
05ca3632 356 .sbi = F2FS_I_SB(inode),
cf04e8eb 357 .type = DATA,
43f3eae1 358 .rw = rw,
4375a336 359 .encrypted_page = NULL,
cf04e8eb 360 };
eb47b800 361
4375a336
JK
362 if (f2fs_encrypted_inode(inode) && S_ISREG(inode->i_mode))
363 return read_mapping_page(mapping, index, NULL);
364
a56c7c6f 365 page = f2fs_grab_cache_page(mapping, index, for_write);
650495de
JK
366 if (!page)
367 return ERR_PTR(-ENOMEM);
368
cb3bc9ee
CY
369 if (f2fs_lookup_extent_cache(inode, index, &ei)) {
370 dn.data_blkaddr = ei.blk + index - ei.fofs;
371 goto got_it;
372 }
373
eb47b800 374 set_new_dnode(&dn, inode, NULL, NULL, 0);
266e97a8 375 err = get_dnode_of_data(&dn, index, LOOKUP_NODE);
86531d6b
JK
376 if (err)
377 goto put_err;
eb47b800
JK
378 f2fs_put_dnode(&dn);
379
6bacf52f 380 if (unlikely(dn.data_blkaddr == NULL_ADDR)) {
86531d6b
JK
381 err = -ENOENT;
382 goto put_err;
650495de 383 }
cb3bc9ee 384got_it:
43f3eae1
JK
385 if (PageUptodate(page)) {
386 unlock_page(page);
eb47b800 387 return page;
43f3eae1 388 }
eb47b800 389
d59ff4df
JK
390 /*
391 * A new dentry page is allocated but not able to be written, since its
392 * new inode page couldn't be allocated due to -ENOSPC.
393 * In such the case, its blkaddr can be remained as NEW_ADDR.
394 * see, f2fs_add_link -> get_new_data_page -> init_inode_metadata.
395 */
396 if (dn.data_blkaddr == NEW_ADDR) {
397 zero_user_segment(page, 0, PAGE_CACHE_SIZE);
398 SetPageUptodate(page);
43f3eae1 399 unlock_page(page);
d59ff4df
JK
400 return page;
401 }
eb47b800 402
cf04e8eb 403 fio.blk_addr = dn.data_blkaddr;
05ca3632
JK
404 fio.page = page;
405 err = f2fs_submit_page_bio(&fio);
393ff91f 406 if (err)
86531d6b 407 goto put_err;
43f3eae1 408 return page;
86531d6b
JK
409
410put_err:
411 f2fs_put_page(page, 1);
412 return ERR_PTR(err);
43f3eae1
JK
413}
414
415struct page *find_data_page(struct inode *inode, pgoff_t index)
416{
417 struct address_space *mapping = inode->i_mapping;
418 struct page *page;
419
420 page = find_get_page(mapping, index);
421 if (page && PageUptodate(page))
422 return page;
423 f2fs_put_page(page, 0);
424
a56c7c6f 425 page = get_read_data_page(inode, index, READ_SYNC, false);
43f3eae1
JK
426 if (IS_ERR(page))
427 return page;
428
429 if (PageUptodate(page))
430 return page;
431
432 wait_on_page_locked(page);
433 if (unlikely(!PageUptodate(page))) {
434 f2fs_put_page(page, 0);
435 return ERR_PTR(-EIO);
436 }
437 return page;
438}
439
440/*
441 * If it tries to access a hole, return an error.
442 * Because, the callers, functions in dir.c and GC, should be able to know
443 * whether this page exists or not.
444 */
a56c7c6f
JK
445struct page *get_lock_data_page(struct inode *inode, pgoff_t index,
446 bool for_write)
43f3eae1
JK
447{
448 struct address_space *mapping = inode->i_mapping;
449 struct page *page;
450repeat:
a56c7c6f 451 page = get_read_data_page(inode, index, READ_SYNC, for_write);
43f3eae1
JK
452 if (IS_ERR(page))
453 return page;
393ff91f 454
43f3eae1 455 /* wait for read completion */
393ff91f 456 lock_page(page);
6bacf52f 457 if (unlikely(!PageUptodate(page))) {
393ff91f
JK
458 f2fs_put_page(page, 1);
459 return ERR_PTR(-EIO);
eb47b800 460 }
6bacf52f 461 if (unlikely(page->mapping != mapping)) {
afcb7ca0
JK
462 f2fs_put_page(page, 1);
463 goto repeat;
eb47b800
JK
464 }
465 return page;
466}
467
0a8165d7 468/*
eb47b800
JK
469 * Caller ensures that this data page is never allocated.
470 * A new zero-filled data page is allocated in the page cache.
39936837 471 *
4f4124d0
CY
472 * Also, caller should grab and release a rwsem by calling f2fs_lock_op() and
473 * f2fs_unlock_op().
470f00e9
CY
474 * Note that, ipage is set only by make_empty_dir, and if any error occur,
475 * ipage should be released by this function.
eb47b800 476 */
64aa7ed9 477struct page *get_new_data_page(struct inode *inode,
a8865372 478 struct page *ipage, pgoff_t index, bool new_i_size)
eb47b800 479{
eb47b800
JK
480 struct address_space *mapping = inode->i_mapping;
481 struct page *page;
482 struct dnode_of_data dn;
483 int err;
7612118a 484
a56c7c6f 485 page = f2fs_grab_cache_page(mapping, index, true);
470f00e9
CY
486 if (!page) {
487 /*
488 * before exiting, we should make sure ipage will be released
489 * if any error occur.
490 */
491 f2fs_put_page(ipage, 1);
01f28610 492 return ERR_PTR(-ENOMEM);
470f00e9 493 }
eb47b800 494
a8865372 495 set_new_dnode(&dn, inode, ipage, NULL, 0);
b600965c 496 err = f2fs_reserve_block(&dn, index);
01f28610
JK
497 if (err) {
498 f2fs_put_page(page, 1);
eb47b800 499 return ERR_PTR(err);
a8865372 500 }
01f28610
JK
501 if (!ipage)
502 f2fs_put_dnode(&dn);
eb47b800
JK
503
504 if (PageUptodate(page))
01f28610 505 goto got_it;
eb47b800
JK
506
507 if (dn.data_blkaddr == NEW_ADDR) {
508 zero_user_segment(page, 0, PAGE_CACHE_SIZE);
393ff91f 509 SetPageUptodate(page);
eb47b800 510 } else {
4375a336 511 f2fs_put_page(page, 1);
a8865372 512
7612118a
JK
513 /* if ipage exists, blkaddr should be NEW_ADDR */
514 f2fs_bug_on(F2FS_I_SB(inode), ipage);
515 page = get_lock_data_page(inode, index, true);
4375a336 516 if (IS_ERR(page))
7612118a 517 return page;
eb47b800 518 }
01f28610 519got_it:
9edcdabf
CY
520 if (new_i_size && i_size_read(inode) <
521 ((loff_t)(index + 1) << PAGE_CACHE_SHIFT)) {
522 i_size_write(inode, ((loff_t)(index + 1) << PAGE_CACHE_SHIFT));
699489bb
JK
523 /* Only the directory inode sets new_i_size */
524 set_inode_flag(F2FS_I(inode), FI_UPDATE_DIR);
eb47b800
JK
525 }
526 return page;
527}
528
bfad7c2d
JK
529static int __allocate_data_block(struct dnode_of_data *dn)
530{
4081363f 531 struct f2fs_sb_info *sbi = F2FS_I_SB(dn->inode);
bfad7c2d 532 struct f2fs_summary sum;
bfad7c2d 533 struct node_info ni;
38aa0889 534 int seg = CURSEG_WARM_DATA;
976e4c50 535 pgoff_t fofs;
bfad7c2d
JK
536
537 if (unlikely(is_inode_flag_set(F2FS_I(dn->inode), FI_NO_ALLOC)))
538 return -EPERM;
df6136ef
CY
539
540 dn->data_blkaddr = datablock_addr(dn->node_page, dn->ofs_in_node);
541 if (dn->data_blkaddr == NEW_ADDR)
542 goto alloc;
543
bfad7c2d
JK
544 if (unlikely(!inc_valid_block_count(sbi, dn->inode, 1)))
545 return -ENOSPC;
546
df6136ef 547alloc:
bfad7c2d
JK
548 get_node_info(sbi, dn->nid, &ni);
549 set_summary(&sum, dn->nid, dn->ofs_in_node, ni.version);
550
38aa0889
JK
551 if (dn->ofs_in_node == 0 && dn->inode_page == dn->node_page)
552 seg = CURSEG_DIRECT_IO;
553
df6136ef
CY
554 allocate_data_block(sbi, NULL, dn->data_blkaddr, &dn->data_blkaddr,
555 &sum, seg);
216a620a 556 set_data_blkaddr(dn);
bfad7c2d 557
976e4c50 558 /* update i_size */
81ca7350 559 fofs = start_bidx_of_node(ofs_of_node(dn->node_page), dn->inode) +
976e4c50 560 dn->ofs_in_node;
9edcdabf
CY
561 if (i_size_read(dn->inode) < ((loff_t)(fofs + 1) << PAGE_CACHE_SHIFT))
562 i_size_write(dn->inode,
563 ((loff_t)(fofs + 1) << PAGE_CACHE_SHIFT));
bfad7c2d
JK
564 return 0;
565}
566
6d5a1495 567static int __allocate_data_blocks(struct inode *inode, loff_t offset,
59b802e5
JK
568 size_t count)
569{
5b8db7fa 570 struct f2fs_map_blocks map;
59b802e5 571
5b8db7fa
CY
572 map.m_lblk = F2FS_BYTES_TO_BLK(offset);
573 map.m_len = F2FS_BYTES_TO_BLK(count);
da85985c 574 map.m_next_pgofs = NULL;
2a340760 575
5b8db7fa 576 return f2fs_map_blocks(inode, &map, 1, F2FS_GET_BLOCK_DIO);
59b802e5
JK
577}
578
0a8165d7 579/*
003a3e1d
JK
580 * f2fs_map_blocks() now supported readahead/bmap/rw direct_IO with
581 * f2fs_map_blocks structure.
4f4124d0
CY
582 * If original data blocks are allocated, then give them to blockdev.
583 * Otherwise,
584 * a. preallocate requested block addresses
585 * b. do not use extent cache for better performance
586 * c. give the block addresses to blockdev
eb47b800 587 */
d323d005 588int f2fs_map_blocks(struct inode *inode, struct f2fs_map_blocks *map,
e2b4e2bc 589 int create, int flag)
eb47b800 590{
003a3e1d 591 unsigned int maxblocks = map->m_len;
eb47b800 592 struct dnode_of_data dn;
f9811703 593 struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
bfad7c2d
JK
594 int mode = create ? ALLOC_NODE : LOOKUP_NODE_RA;
595 pgoff_t pgofs, end_offset;
596 int err = 0, ofs = 1;
a2e7d1bf 597 struct extent_info ei;
bfad7c2d 598 bool allocated = false;
7df3a431 599 block_t blkaddr;
eb47b800 600
003a3e1d
JK
601 map->m_len = 0;
602 map->m_flags = 0;
603
604 /* it only supports block size == page size */
605 pgofs = (pgoff_t)map->m_lblk;
eb47b800 606
7e4dde79 607 if (f2fs_lookup_extent_cache(inode, pgofs, &ei)) {
003a3e1d
JK
608 map->m_pblk = ei.blk + pgofs - ei.fofs;
609 map->m_len = min((pgoff_t)maxblocks, ei.fofs + ei.len - pgofs);
610 map->m_flags = F2FS_MAP_MAPPED;
bfad7c2d 611 goto out;
a2e7d1bf 612 }
bfad7c2d 613
4fe71e88 614next_dnode:
59b802e5 615 if (create)
3104af35 616 f2fs_lock_op(sbi);
eb47b800
JK
617
618 /* When reading holes, we need its node page */
619 set_new_dnode(&dn, inode, NULL, NULL, 0);
bfad7c2d 620 err = get_dnode_of_data(&dn, pgofs, mode);
1ec79083 621 if (err) {
da85985c 622 if (err == -ENOENT) {
bfad7c2d 623 err = 0;
da85985c
CY
624 if (map->m_next_pgofs)
625 *map->m_next_pgofs =
626 get_next_page_offset(&dn, pgofs);
627 }
bfad7c2d 628 goto unlock_out;
848753aa 629 }
973163fc 630
81ca7350 631 end_offset = ADDRS_PER_PAGE(dn.node_page, inode);
4fe71e88
CY
632
633next_block:
634 blkaddr = datablock_addr(dn.node_page, dn.ofs_in_node);
635
636 if (blkaddr == NEW_ADDR || blkaddr == NULL_ADDR) {
973163fc 637 if (create) {
f9811703
CY
638 if (unlikely(f2fs_cp_error(sbi))) {
639 err = -EIO;
4fe71e88 640 goto sync_out;
f9811703 641 }
973163fc
CY
642 err = __allocate_data_block(&dn);
643 if (err)
4fe71e88 644 goto sync_out;
973163fc
CY
645 allocated = true;
646 map->m_flags = F2FS_MAP_NEW;
4fe71e88 647 blkaddr = dn.data_blkaddr;
973163fc 648 } else {
da85985c
CY
649 if (flag == F2FS_GET_BLOCK_FIEMAP &&
650 blkaddr == NULL_ADDR) {
651 if (map->m_next_pgofs)
652 *map->m_next_pgofs = pgofs + 1;
653 }
973163fc 654 if (flag != F2FS_GET_BLOCK_FIEMAP ||
4fe71e88 655 blkaddr != NEW_ADDR) {
973163fc
CY
656 if (flag == F2FS_GET_BLOCK_BMAP)
657 err = -ENOENT;
4fe71e88 658 goto sync_out;
973163fc 659 }
e2b4e2bc 660 }
e2b4e2bc 661 }
eb47b800 662
4fe71e88
CY
663 if (map->m_len == 0) {
664 /* preallocated unwritten block should be mapped for fiemap. */
665 if (blkaddr == NEW_ADDR)
666 map->m_flags |= F2FS_MAP_UNWRITTEN;
667 map->m_flags |= F2FS_MAP_MAPPED;
668
669 map->m_pblk = blkaddr;
670 map->m_len = 1;
671 } else if ((map->m_pblk != NEW_ADDR &&
672 blkaddr == (map->m_pblk + ofs)) ||
673 (map->m_pblk == NEW_ADDR && blkaddr == NEW_ADDR)) {
674 ofs++;
675 map->m_len++;
676 } else {
677 goto sync_out;
678 }
bfad7c2d 679
bfad7c2d
JK
680 dn.ofs_in_node++;
681 pgofs++;
682
4fe71e88
CY
683 if (map->m_len < maxblocks) {
684 if (dn.ofs_in_node < end_offset)
685 goto next_block;
7df3a431 686
bfad7c2d
JK
687 if (allocated)
688 sync_inode_page(&dn);
bfad7c2d
JK
689 f2fs_put_dnode(&dn);
690
3104af35
CY
691 if (create) {
692 f2fs_unlock_op(sbi);
3c082b7b 693 f2fs_balance_fs(sbi, allocated);
3104af35 694 }
3c082b7b 695 allocated = false;
4fe71e88 696 goto next_dnode;
eb47b800 697 }
7df3a431 698
bfad7c2d
JK
699sync_out:
700 if (allocated)
701 sync_inode_page(&dn);
eb47b800 702 f2fs_put_dnode(&dn);
bfad7c2d 703unlock_out:
2a340760 704 if (create) {
3104af35 705 f2fs_unlock_op(sbi);
3c082b7b 706 f2fs_balance_fs(sbi, allocated);
2a340760 707 }
bfad7c2d 708out:
003a3e1d 709 trace_f2fs_map_blocks(inode, map, err);
bfad7c2d 710 return err;
eb47b800
JK
711}
712
003a3e1d 713static int __get_data_block(struct inode *inode, sector_t iblock,
da85985c
CY
714 struct buffer_head *bh, int create, int flag,
715 pgoff_t *next_pgofs)
003a3e1d
JK
716{
717 struct f2fs_map_blocks map;
718 int ret;
719
720 map.m_lblk = iblock;
721 map.m_len = bh->b_size >> inode->i_blkbits;
da85985c 722 map.m_next_pgofs = next_pgofs;
003a3e1d 723
e2b4e2bc 724 ret = f2fs_map_blocks(inode, &map, create, flag);
003a3e1d
JK
725 if (!ret) {
726 map_bh(bh, inode->i_sb, map.m_pblk);
727 bh->b_state = (bh->b_state & ~F2FS_MAP_FLAGS) | map.m_flags;
728 bh->b_size = map.m_len << inode->i_blkbits;
729 }
730 return ret;
731}
732
ccfb3000 733static int get_data_block(struct inode *inode, sector_t iblock,
da85985c
CY
734 struct buffer_head *bh_result, int create, int flag,
735 pgoff_t *next_pgofs)
e2b4e2bc 736{
da85985c
CY
737 return __get_data_block(inode, iblock, bh_result, create,
738 flag, next_pgofs);
e2b4e2bc
CY
739}
740
741static int get_data_block_dio(struct inode *inode, sector_t iblock,
ccfb3000
JK
742 struct buffer_head *bh_result, int create)
743{
e2b4e2bc 744 return __get_data_block(inode, iblock, bh_result, create,
da85985c 745 F2FS_GET_BLOCK_DIO, NULL);
ccfb3000
JK
746}
747
e2b4e2bc 748static int get_data_block_bmap(struct inode *inode, sector_t iblock,
ccfb3000
JK
749 struct buffer_head *bh_result, int create)
750{
179448bf 751 /* Block number less than F2FS MAX BLOCKS */
e0afc4d6 752 if (unlikely(iblock >= F2FS_I_SB(inode)->max_file_blocks))
179448bf
YH
753 return -EFBIG;
754
e2b4e2bc 755 return __get_data_block(inode, iblock, bh_result, create,
da85985c 756 F2FS_GET_BLOCK_BMAP, NULL);
ccfb3000
JK
757}
758
7f63eb77
JK
759static inline sector_t logical_to_blk(struct inode *inode, loff_t offset)
760{
761 return (offset >> inode->i_blkbits);
762}
763
764static inline loff_t blk_to_logical(struct inode *inode, sector_t blk)
765{
766 return (blk << inode->i_blkbits);
767}
768
9ab70134
JK
769int f2fs_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
770 u64 start, u64 len)
771{
7f63eb77
JK
772 struct buffer_head map_bh;
773 sector_t start_blk, last_blk;
da85985c 774 pgoff_t next_pgofs;
de1475cc 775 loff_t isize;
7f63eb77
JK
776 u64 logical = 0, phys = 0, size = 0;
777 u32 flags = 0;
7f63eb77
JK
778 int ret = 0;
779
780 ret = fiemap_check_flags(fieinfo, FIEMAP_FLAG_SYNC);
781 if (ret)
782 return ret;
783
67f8cf3c
JK
784 if (f2fs_has_inline_data(inode)) {
785 ret = f2fs_inline_data_fiemap(inode, fieinfo, start, len);
786 if (ret != -EAGAIN)
787 return ret;
788 }
789
5955102c 790 inode_lock(inode);
de1475cc
FL
791
792 isize = i_size_read(inode);
9a950d52
FL
793 if (start >= isize)
794 goto out;
7f63eb77 795
9a950d52
FL
796 if (start + len > isize)
797 len = isize - start;
7f63eb77
JK
798
799 if (logical_to_blk(inode, len) == 0)
800 len = blk_to_logical(inode, 1);
801
802 start_blk = logical_to_blk(inode, start);
803 last_blk = logical_to_blk(inode, start + len - 1);
9a950d52 804
7f63eb77
JK
805next:
806 memset(&map_bh, 0, sizeof(struct buffer_head));
807 map_bh.b_size = len;
808
e2b4e2bc 809 ret = get_data_block(inode, start_blk, &map_bh, 0,
da85985c 810 F2FS_GET_BLOCK_FIEMAP, &next_pgofs);
7f63eb77
JK
811 if (ret)
812 goto out;
813
814 /* HOLE */
815 if (!buffer_mapped(&map_bh)) {
da85985c 816 start_blk = next_pgofs;
9a950d52 817 /* Go through holes util pass the EOF */
da85985c 818 if (blk_to_logical(inode, start_blk) < isize)
9a950d52
FL
819 goto prep_next;
820 /* Found a hole beyond isize means no more extents.
821 * Note that the premise is that filesystems don't
822 * punch holes beyond isize and keep size unchanged.
823 */
824 flags |= FIEMAP_EXTENT_LAST;
825 }
7f63eb77 826
da5af127
CY
827 if (size) {
828 if (f2fs_encrypted_inode(inode))
829 flags |= FIEMAP_EXTENT_DATA_ENCRYPTED;
830
9a950d52
FL
831 ret = fiemap_fill_next_extent(fieinfo, logical,
832 phys, size, flags);
da5af127 833 }
7f63eb77 834
9a950d52
FL
835 if (start_blk > last_blk || ret)
836 goto out;
7f63eb77 837
9a950d52
FL
838 logical = blk_to_logical(inode, start_blk);
839 phys = blk_to_logical(inode, map_bh.b_blocknr);
840 size = map_bh.b_size;
841 flags = 0;
842 if (buffer_unwritten(&map_bh))
843 flags = FIEMAP_EXTENT_UNWRITTEN;
7f63eb77 844
9a950d52 845 start_blk += logical_to_blk(inode, size);
7f63eb77 846
9a950d52 847prep_next:
7f63eb77
JK
848 cond_resched();
849 if (fatal_signal_pending(current))
850 ret = -EINTR;
851 else
852 goto next;
853out:
854 if (ret == 1)
855 ret = 0;
856
5955102c 857 inode_unlock(inode);
7f63eb77 858 return ret;
9ab70134
JK
859}
860
f1e88660
JK
861/*
862 * This function was originally taken from fs/mpage.c, and customized for f2fs.
863 * Major change was from block_size == page_size in f2fs by default.
864 */
865static int f2fs_mpage_readpages(struct address_space *mapping,
866 struct list_head *pages, struct page *page,
867 unsigned nr_pages)
868{
869 struct bio *bio = NULL;
870 unsigned page_idx;
871 sector_t last_block_in_bio = 0;
872 struct inode *inode = mapping->host;
873 const unsigned blkbits = inode->i_blkbits;
874 const unsigned blocksize = 1 << blkbits;
875 sector_t block_in_file;
876 sector_t last_block;
877 sector_t last_block_in_file;
878 sector_t block_nr;
879 struct block_device *bdev = inode->i_sb->s_bdev;
880 struct f2fs_map_blocks map;
881
882 map.m_pblk = 0;
883 map.m_lblk = 0;
884 map.m_len = 0;
885 map.m_flags = 0;
da85985c 886 map.m_next_pgofs = NULL;
f1e88660
JK
887
888 for (page_idx = 0; nr_pages; page_idx++, nr_pages--) {
889
890 prefetchw(&page->flags);
891 if (pages) {
892 page = list_entry(pages->prev, struct page, lru);
893 list_del(&page->lru);
894 if (add_to_page_cache_lru(page, mapping,
895 page->index, GFP_KERNEL))
896 goto next_page;
897 }
898
899 block_in_file = (sector_t)page->index;
900 last_block = block_in_file + nr_pages;
901 last_block_in_file = (i_size_read(inode) + blocksize - 1) >>
902 blkbits;
903 if (last_block > last_block_in_file)
904 last_block = last_block_in_file;
905
906 /*
907 * Map blocks using the previous result first.
908 */
909 if ((map.m_flags & F2FS_MAP_MAPPED) &&
910 block_in_file > map.m_lblk &&
911 block_in_file < (map.m_lblk + map.m_len))
912 goto got_it;
913
914 /*
915 * Then do more f2fs_map_blocks() calls until we are
916 * done with this page.
917 */
918 map.m_flags = 0;
919
920 if (block_in_file < last_block) {
921 map.m_lblk = block_in_file;
922 map.m_len = last_block - block_in_file;
923
46c9e141 924 if (f2fs_map_blocks(inode, &map, 0,
da85985c 925 F2FS_GET_BLOCK_READ))
f1e88660
JK
926 goto set_error_page;
927 }
928got_it:
929 if ((map.m_flags & F2FS_MAP_MAPPED)) {
930 block_nr = map.m_pblk + block_in_file - map.m_lblk;
931 SetPageMappedToDisk(page);
932
933 if (!PageUptodate(page) && !cleancache_get_page(page)) {
934 SetPageUptodate(page);
935 goto confused;
936 }
937 } else {
938 zero_user_segment(page, 0, PAGE_CACHE_SIZE);
939 SetPageUptodate(page);
940 unlock_page(page);
941 goto next_page;
942 }
943
944 /*
945 * This page will go to BIO. Do we need to send this
946 * BIO off first?
947 */
948 if (bio && (last_block_in_bio != block_nr - 1)) {
949submit_and_realloc:
950 submit_bio(READ, bio);
951 bio = NULL;
952 }
953 if (bio == NULL) {
4375a336
JK
954 struct f2fs_crypto_ctx *ctx = NULL;
955
956 if (f2fs_encrypted_inode(inode) &&
957 S_ISREG(inode->i_mode)) {
4375a336
JK
958
959 ctx = f2fs_get_crypto_ctx(inode);
960 if (IS_ERR(ctx))
961 goto set_error_page;
962
963 /* wait the page to be moved by cleaning */
08b39fbd
CY
964 f2fs_wait_on_encrypted_page_writeback(
965 F2FS_I_SB(inode), block_nr);
4375a336
JK
966 }
967
f1e88660 968 bio = bio_alloc(GFP_KERNEL,
b54ffb73 969 min_t(int, nr_pages, BIO_MAX_PAGES));
4375a336
JK
970 if (!bio) {
971 if (ctx)
972 f2fs_release_crypto_ctx(ctx);
f1e88660 973 goto set_error_page;
4375a336 974 }
f1e88660
JK
975 bio->bi_bdev = bdev;
976 bio->bi_iter.bi_sector = SECTOR_FROM_BLOCK(block_nr);
12377024 977 bio->bi_end_io = f2fs_read_end_io;
4375a336 978 bio->bi_private = ctx;
f1e88660
JK
979 }
980
981 if (bio_add_page(bio, page, blocksize, 0) < blocksize)
982 goto submit_and_realloc;
983
984 last_block_in_bio = block_nr;
985 goto next_page;
986set_error_page:
987 SetPageError(page);
988 zero_user_segment(page, 0, PAGE_CACHE_SIZE);
989 unlock_page(page);
990 goto next_page;
991confused:
992 if (bio) {
993 submit_bio(READ, bio);
994 bio = NULL;
995 }
996 unlock_page(page);
997next_page:
998 if (pages)
999 page_cache_release(page);
1000 }
1001 BUG_ON(pages && !list_empty(pages));
1002 if (bio)
1003 submit_bio(READ, bio);
1004 return 0;
1005}
1006
eb47b800
JK
1007static int f2fs_read_data_page(struct file *file, struct page *page)
1008{
9ffe0fb5 1009 struct inode *inode = page->mapping->host;
b3d208f9 1010 int ret = -EAGAIN;
9ffe0fb5 1011
c20e89cd
CY
1012 trace_f2fs_readpage(page, DATA);
1013
e1c42045 1014 /* If the file has inline data, try to read it directly */
9ffe0fb5
HL
1015 if (f2fs_has_inline_data(inode))
1016 ret = f2fs_read_inline_data(inode, page);
b3d208f9 1017 if (ret == -EAGAIN)
f1e88660 1018 ret = f2fs_mpage_readpages(page->mapping, NULL, page, 1);
9ffe0fb5 1019 return ret;
eb47b800
JK
1020}
1021
1022static int f2fs_read_data_pages(struct file *file,
1023 struct address_space *mapping,
1024 struct list_head *pages, unsigned nr_pages)
1025{
9ffe0fb5 1026 struct inode *inode = file->f_mapping->host;
b8c29400
CY
1027 struct page *page = list_entry(pages->prev, struct page, lru);
1028
1029 trace_f2fs_readpages(inode, page, nr_pages);
9ffe0fb5
HL
1030
1031 /* If the file has inline data, skip readpages */
1032 if (f2fs_has_inline_data(inode))
1033 return 0;
1034
f1e88660 1035 return f2fs_mpage_readpages(mapping, pages, NULL, nr_pages);
eb47b800
JK
1036}
1037
05ca3632 1038int do_write_data_page(struct f2fs_io_info *fio)
eb47b800 1039{
05ca3632 1040 struct page *page = fio->page;
eb47b800 1041 struct inode *inode = page->mapping->host;
eb47b800
JK
1042 struct dnode_of_data dn;
1043 int err = 0;
1044
1045 set_new_dnode(&dn, inode, NULL, NULL, 0);
266e97a8 1046 err = get_dnode_of_data(&dn, page->index, LOOKUP_NODE);
eb47b800
JK
1047 if (err)
1048 return err;
1049
cf04e8eb 1050 fio->blk_addr = dn.data_blkaddr;
eb47b800
JK
1051
1052 /* This page is already truncated */
2bca1e23
JK
1053 if (fio->blk_addr == NULL_ADDR) {
1054 ClearPageUptodate(page);
eb47b800 1055 goto out_writepage;
2bca1e23 1056 }
eb47b800 1057
4375a336 1058 if (f2fs_encrypted_inode(inode) && S_ISREG(inode->i_mode)) {
08b39fbd
CY
1059
1060 /* wait for GCed encrypted page writeback */
1061 f2fs_wait_on_encrypted_page_writeback(F2FS_I_SB(inode),
1062 fio->blk_addr);
1063
4375a336
JK
1064 fio->encrypted_page = f2fs_encrypt(inode, fio->page);
1065 if (IS_ERR(fio->encrypted_page)) {
1066 err = PTR_ERR(fio->encrypted_page);
1067 goto out_writepage;
1068 }
1069 }
1070
eb47b800
JK
1071 set_page_writeback(page);
1072
1073 /*
1074 * If current allocation needs SSR,
1075 * it had better in-place writes for updated data.
1076 */
cf04e8eb 1077 if (unlikely(fio->blk_addr != NEW_ADDR &&
b25958b6 1078 !is_cold_data(page) &&
2da3e027 1079 !IS_ATOMIC_WRITTEN_PAGE(page) &&
b25958b6 1080 need_inplace_update(inode))) {
05ca3632 1081 rewrite_data_page(fio);
fff04f90 1082 set_inode_flag(F2FS_I(inode), FI_UPDATE_WRITE);
8ce67cb0 1083 trace_f2fs_do_write_data_page(page, IPU);
eb47b800 1084 } else {
05ca3632 1085 write_data_page(&dn, fio);
216a620a 1086 set_data_blkaddr(&dn);
7e4dde79 1087 f2fs_update_extent_cache(&dn);
8ce67cb0 1088 trace_f2fs_do_write_data_page(page, OPU);
fff04f90 1089 set_inode_flag(F2FS_I(inode), FI_APPEND_WRITE);
3c6c2beb
JK
1090 if (page->index == 0)
1091 set_inode_flag(F2FS_I(inode), FI_FIRST_BLOCK_WRITTEN);
eb47b800
JK
1092 }
1093out_writepage:
1094 f2fs_put_dnode(&dn);
1095 return err;
1096}
1097
1098static int f2fs_write_data_page(struct page *page,
1099 struct writeback_control *wbc)
1100{
1101 struct inode *inode = page->mapping->host;
4081363f 1102 struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
eb47b800
JK
1103 loff_t i_size = i_size_read(inode);
1104 const pgoff_t end_index = ((unsigned long long) i_size)
1105 >> PAGE_CACHE_SHIFT;
9ffe0fb5 1106 unsigned offset = 0;
39936837 1107 bool need_balance_fs = false;
eb47b800 1108 int err = 0;
458e6197 1109 struct f2fs_io_info fio = {
05ca3632 1110 .sbi = sbi,
458e6197 1111 .type = DATA,
6c311ec6 1112 .rw = (wbc->sync_mode == WB_SYNC_ALL) ? WRITE_SYNC : WRITE,
05ca3632 1113 .page = page,
4375a336 1114 .encrypted_page = NULL,
458e6197 1115 };
eb47b800 1116
ecda0de3
CY
1117 trace_f2fs_writepage(page, DATA);
1118
eb47b800 1119 if (page->index < end_index)
39936837 1120 goto write;
eb47b800
JK
1121
1122 /*
1123 * If the offset is out-of-range of file size,
1124 * this page does not have to be written to disk.
1125 */
1126 offset = i_size & (PAGE_CACHE_SIZE - 1);
76f60268 1127 if ((page->index >= end_index + 1) || !offset)
39936837 1128 goto out;
eb47b800
JK
1129
1130 zero_user_segment(page, offset, PAGE_CACHE_SIZE);
39936837 1131write:
caf0047e 1132 if (unlikely(is_sbi_flag_set(sbi, SBI_POR_DOING)))
eb47b800 1133 goto redirty_out;
1e84371f
JK
1134 if (f2fs_is_drop_cache(inode))
1135 goto out;
1136 if (f2fs_is_volatile_file(inode) && !wbc->for_reclaim &&
1137 available_free_memory(sbi, BASE_CHECK))
1138 goto redirty_out;
eb47b800 1139
39936837 1140 /* Dentry blocks are controlled by checkpoint */
eb47b800 1141 if (S_ISDIR(inode->i_mode)) {
cf779cab
JK
1142 if (unlikely(f2fs_cp_error(sbi)))
1143 goto redirty_out;
05ca3632 1144 err = do_write_data_page(&fio);
8618b881
JK
1145 goto done;
1146 }
9ffe0fb5 1147
cf779cab
JK
1148 /* we should bypass data pages to proceed the kworkder jobs */
1149 if (unlikely(f2fs_cp_error(sbi))) {
1150 SetPageError(page);
a7ffdbe2 1151 goto out;
cf779cab
JK
1152 }
1153
8618b881 1154 if (!wbc->for_reclaim)
39936837 1155 need_balance_fs = true;
8618b881 1156 else if (has_not_enough_free_secs(sbi, 0))
39936837 1157 goto redirty_out;
eb47b800 1158
b3d208f9 1159 err = -EAGAIN;
8618b881 1160 f2fs_lock_op(sbi);
b3d208f9
JK
1161 if (f2fs_has_inline_data(inode))
1162 err = f2fs_write_inline_data(inode, page);
1163 if (err == -EAGAIN)
05ca3632 1164 err = do_write_data_page(&fio);
8618b881
JK
1165 f2fs_unlock_op(sbi);
1166done:
1167 if (err && err != -ENOENT)
1168 goto redirty_out;
eb47b800 1169
eb47b800 1170 clear_cold_data(page);
39936837 1171out:
a7ffdbe2 1172 inode_dec_dirty_pages(inode);
2bca1e23
JK
1173 if (err)
1174 ClearPageUptodate(page);
0c3a5797
CY
1175
1176 if (wbc->for_reclaim) {
1177 f2fs_submit_merged_bio_cond(sbi, NULL, page, 0, DATA, WRITE);
1178 remove_dirty_inode(inode);
1179 }
1180
eb47b800 1181 unlock_page(page);
2c4db1a6 1182 f2fs_balance_fs(sbi, need_balance_fs);
0c3a5797
CY
1183
1184 if (unlikely(f2fs_cp_error(sbi)))
2aea39ec 1185 f2fs_submit_merged_bio(sbi, DATA, WRITE);
0c3a5797 1186
eb47b800
JK
1187 return 0;
1188
eb47b800 1189redirty_out:
76f60268 1190 redirty_page_for_writepage(wbc, page);
8618b881 1191 return AOP_WRITEPAGE_ACTIVATE;
eb47b800
JK
1192}
1193
fa9150a8
NJ
1194static int __f2fs_writepage(struct page *page, struct writeback_control *wbc,
1195 void *data)
1196{
1197 struct address_space *mapping = data;
1198 int ret = mapping->a_ops->writepage(page, wbc);
1199 mapping_set_error(mapping, ret);
1200 return ret;
1201}
1202
8f46dcae
CY
1203/*
1204 * This function was copied from write_cche_pages from mm/page-writeback.c.
1205 * The major change is making write step of cold data page separately from
1206 * warm/hot data page.
1207 */
1208static int f2fs_write_cache_pages(struct address_space *mapping,
1209 struct writeback_control *wbc, writepage_t writepage,
1210 void *data)
1211{
1212 int ret = 0;
1213 int done = 0;
1214 struct pagevec pvec;
1215 int nr_pages;
1216 pgoff_t uninitialized_var(writeback_index);
1217 pgoff_t index;
1218 pgoff_t end; /* Inclusive */
1219 pgoff_t done_index;
1220 int cycled;
1221 int range_whole = 0;
1222 int tag;
1223 int step = 0;
1224
1225 pagevec_init(&pvec, 0);
1226next:
1227 if (wbc->range_cyclic) {
1228 writeback_index = mapping->writeback_index; /* prev offset */
1229 index = writeback_index;
1230 if (index == 0)
1231 cycled = 1;
1232 else
1233 cycled = 0;
1234 end = -1;
1235 } else {
1236 index = wbc->range_start >> PAGE_CACHE_SHIFT;
1237 end = wbc->range_end >> PAGE_CACHE_SHIFT;
1238 if (wbc->range_start == 0 && wbc->range_end == LLONG_MAX)
1239 range_whole = 1;
1240 cycled = 1; /* ignore range_cyclic tests */
1241 }
1242 if (wbc->sync_mode == WB_SYNC_ALL || wbc->tagged_writepages)
1243 tag = PAGECACHE_TAG_TOWRITE;
1244 else
1245 tag = PAGECACHE_TAG_DIRTY;
1246retry:
1247 if (wbc->sync_mode == WB_SYNC_ALL || wbc->tagged_writepages)
1248 tag_pages_for_writeback(mapping, index, end);
1249 done_index = index;
1250 while (!done && (index <= end)) {
1251 int i;
1252
1253 nr_pages = pagevec_lookup_tag(&pvec, mapping, &index, tag,
1254 min(end - index, (pgoff_t)PAGEVEC_SIZE - 1) + 1);
1255 if (nr_pages == 0)
1256 break;
1257
1258 for (i = 0; i < nr_pages; i++) {
1259 struct page *page = pvec.pages[i];
1260
1261 if (page->index > end) {
1262 done = 1;
1263 break;
1264 }
1265
1266 done_index = page->index;
1267
1268 lock_page(page);
1269
1270 if (unlikely(page->mapping != mapping)) {
1271continue_unlock:
1272 unlock_page(page);
1273 continue;
1274 }
1275
1276 if (!PageDirty(page)) {
1277 /* someone wrote it for us */
1278 goto continue_unlock;
1279 }
1280
737f1899 1281 if (step == is_cold_data(page))
8f46dcae
CY
1282 goto continue_unlock;
1283
1284 if (PageWriteback(page)) {
1285 if (wbc->sync_mode != WB_SYNC_NONE)
fec1d657
JK
1286 f2fs_wait_on_page_writeback(page,
1287 DATA, true);
8f46dcae
CY
1288 else
1289 goto continue_unlock;
1290 }
1291
1292 BUG_ON(PageWriteback(page));
1293 if (!clear_page_dirty_for_io(page))
1294 goto continue_unlock;
1295
1296 ret = (*writepage)(page, wbc, data);
1297 if (unlikely(ret)) {
1298 if (ret == AOP_WRITEPAGE_ACTIVATE) {
1299 unlock_page(page);
1300 ret = 0;
1301 } else {
1302 done_index = page->index + 1;
1303 done = 1;
1304 break;
1305 }
1306 }
1307
1308 if (--wbc->nr_to_write <= 0 &&
1309 wbc->sync_mode == WB_SYNC_NONE) {
1310 done = 1;
1311 break;
1312 }
1313 }
1314 pagevec_release(&pvec);
1315 cond_resched();
1316 }
1317
1318 if (step < 1) {
1319 step++;
1320 goto next;
1321 }
1322
1323 if (!cycled && !done) {
1324 cycled = 1;
1325 index = 0;
1326 end = writeback_index - 1;
1327 goto retry;
1328 }
1329 if (wbc->range_cyclic || (range_whole && wbc->nr_to_write > 0))
1330 mapping->writeback_index = done_index;
1331
1332 return ret;
1333}
1334
25ca923b 1335static int f2fs_write_data_pages(struct address_space *mapping,
eb47b800
JK
1336 struct writeback_control *wbc)
1337{
1338 struct inode *inode = mapping->host;
4081363f 1339 struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
5463e7c1 1340 bool locked = false;
eb47b800 1341 int ret;
50c8cdb3 1342 long diff;
eb47b800 1343
cfb185a1 1344 /* deal with chardevs and other special file */
1345 if (!mapping->a_ops->writepage)
1346 return 0;
1347
6a290544
CY
1348 /* skip writing if there is no dirty page in this inode */
1349 if (!get_dirty_pages(inode) && wbc->sync_mode == WB_SYNC_NONE)
1350 return 0;
1351
a1257023
JK
1352 if (S_ISDIR(inode->i_mode) && wbc->sync_mode == WB_SYNC_NONE &&
1353 get_dirty_pages(inode) < nr_pages_to_skip(sbi, DATA) &&
1354 available_free_memory(sbi, DIRTY_DENTS))
1355 goto skip_write;
1356
d323d005
CY
1357 /* skip writing during file defragment */
1358 if (is_inode_flag_set(F2FS_I(inode), FI_DO_DEFRAG))
1359 goto skip_write;
1360
d5669f7b
JK
1361 /* during POR, we don't need to trigger writepage at all. */
1362 if (unlikely(is_sbi_flag_set(sbi, SBI_POR_DOING)))
1363 goto skip_write;
1364
d31c7c3f
YH
1365 trace_f2fs_writepages(mapping->host, wbc, DATA);
1366
50c8cdb3 1367 diff = nr_pages_to_write(sbi, DATA, wbc);
eb47b800 1368
25c13551 1369 if (!S_ISDIR(inode->i_mode) && wbc->sync_mode == WB_SYNC_ALL) {
5463e7c1
JK
1370 mutex_lock(&sbi->writepages);
1371 locked = true;
1372 }
8f46dcae 1373 ret = f2fs_write_cache_pages(mapping, wbc, __f2fs_writepage, mapping);
0c3a5797 1374 f2fs_submit_merged_bio_cond(sbi, inode, NULL, 0, DATA, WRITE);
5463e7c1
JK
1375 if (locked)
1376 mutex_unlock(&sbi->writepages);
458e6197 1377
c227f912 1378 remove_dirty_inode(inode);
eb47b800 1379
50c8cdb3 1380 wbc->nr_to_write = max((long)0, wbc->nr_to_write - diff);
eb47b800 1381 return ret;
d3baf95d
JK
1382
1383skip_write:
a7ffdbe2 1384 wbc->pages_skipped += get_dirty_pages(inode);
d31c7c3f 1385 trace_f2fs_writepages(mapping->host, wbc, DATA);
d3baf95d 1386 return 0;
eb47b800
JK
1387}
1388
3aab8f82
CY
1389static void f2fs_write_failed(struct address_space *mapping, loff_t to)
1390{
1391 struct inode *inode = mapping->host;
819d9153 1392 loff_t i_size = i_size_read(inode);
3aab8f82 1393
819d9153
JK
1394 if (to > i_size) {
1395 truncate_pagecache(inode, i_size);
1396 truncate_blocks(inode, i_size, true);
3aab8f82
CY
1397 }
1398}
1399
2aadac08
JK
1400static int prepare_write_begin(struct f2fs_sb_info *sbi,
1401 struct page *page, loff_t pos, unsigned len,
1402 block_t *blk_addr, bool *node_changed)
1403{
1404 struct inode *inode = page->mapping->host;
1405 pgoff_t index = page->index;
1406 struct dnode_of_data dn;
1407 struct page *ipage;
b4d07a3e
JK
1408 bool locked = false;
1409 struct extent_info ei;
2aadac08
JK
1410 int err = 0;
1411
b4d07a3e
JK
1412 if (f2fs_has_inline_data(inode) ||
1413 (pos & PAGE_CACHE_MASK) >= i_size_read(inode)) {
1414 f2fs_lock_op(sbi);
1415 locked = true;
1416 }
1417restart:
2aadac08
JK
1418 /* check inline_data */
1419 ipage = get_node_page(sbi, inode->i_ino);
1420 if (IS_ERR(ipage)) {
1421 err = PTR_ERR(ipage);
1422 goto unlock_out;
1423 }
1424
1425 set_new_dnode(&dn, inode, ipage, ipage, 0);
1426
1427 if (f2fs_has_inline_data(inode)) {
1428 if (pos + len <= MAX_INLINE_DATA) {
1429 read_inline_data(page, ipage);
1430 set_inode_flag(F2FS_I(inode), FI_DATA_EXIST);
2049d4fc 1431 set_inline_node(ipage);
2aadac08
JK
1432 } else {
1433 err = f2fs_convert_inline_page(&dn, page);
1434 if (err)
b4d07a3e
JK
1435 goto out;
1436 if (dn.data_blkaddr == NULL_ADDR)
1437 err = f2fs_get_block(&dn, index);
1438 }
1439 } else if (locked) {
1440 err = f2fs_get_block(&dn, index);
1441 } else {
1442 if (f2fs_lookup_extent_cache(inode, index, &ei)) {
1443 dn.data_blkaddr = ei.blk + index - ei.fofs;
1444 } else {
b4d07a3e
JK
1445 /* hole case */
1446 err = get_dnode_of_data(&dn, index, LOOKUP_NODE);
b483fadf 1447 if (err || (!err && dn.data_blkaddr == NULL_ADDR)) {
b4d07a3e
JK
1448 f2fs_put_dnode(&dn);
1449 f2fs_lock_op(sbi);
1450 locked = true;
1451 goto restart;
1452 }
2aadac08
JK
1453 }
1454 }
b4d07a3e 1455
2aadac08
JK
1456 /* convert_inline_page can make node_changed */
1457 *blk_addr = dn.data_blkaddr;
1458 *node_changed = dn.node_changed;
b4d07a3e 1459out:
2aadac08
JK
1460 f2fs_put_dnode(&dn);
1461unlock_out:
b4d07a3e
JK
1462 if (locked)
1463 f2fs_unlock_op(sbi);
2aadac08
JK
1464 return err;
1465}
1466
eb47b800
JK
1467static int f2fs_write_begin(struct file *file, struct address_space *mapping,
1468 loff_t pos, unsigned len, unsigned flags,
1469 struct page **pagep, void **fsdata)
1470{
1471 struct inode *inode = mapping->host;
4081363f 1472 struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
86531d6b 1473 struct page *page = NULL;
eb47b800 1474 pgoff_t index = ((unsigned long long) pos) >> PAGE_CACHE_SHIFT;
2aadac08
JK
1475 bool need_balance = false;
1476 block_t blkaddr = NULL_ADDR;
eb47b800
JK
1477 int err = 0;
1478
62aed044
CY
1479 trace_f2fs_write_begin(inode, pos, len, flags);
1480
5f727395
JK
1481 /*
1482 * We should check this at this moment to avoid deadlock on inode page
1483 * and #0 page. The locking rule for inline_data conversion should be:
1484 * lock_page(page #0) -> lock_page(inode_page)
1485 */
1486 if (index != 0) {
1487 err = f2fs_convert_inline_inode(inode);
1488 if (err)
1489 goto fail;
1490 }
afcb7ca0 1491repeat:
eb47b800 1492 page = grab_cache_page_write_begin(mapping, index, flags);
3aab8f82
CY
1493 if (!page) {
1494 err = -ENOMEM;
1495 goto fail;
1496 }
d5f66990 1497
eb47b800
JK
1498 *pagep = page;
1499
2aadac08
JK
1500 err = prepare_write_begin(sbi, page, pos, len,
1501 &blkaddr, &need_balance);
9ba69cf9 1502 if (err)
2aadac08 1503 goto fail;
9ba69cf9 1504
2aadac08 1505 if (need_balance && has_not_enough_free_secs(sbi, 0)) {
2a340760 1506 unlock_page(page);
2c4db1a6 1507 f2fs_balance_fs(sbi, true);
2a340760
JK
1508 lock_page(page);
1509 if (page->mapping != mapping) {
1510 /* The page got truncated from under us */
1511 f2fs_put_page(page, 1);
1512 goto repeat;
1513 }
1514 }
1515
fec1d657 1516 f2fs_wait_on_page_writeback(page, DATA, false);
b3d208f9 1517
08b39fbd
CY
1518 /* wait for GCed encrypted page writeback */
1519 if (f2fs_encrypted_inode(inode) && S_ISREG(inode->i_mode))
2aadac08 1520 f2fs_wait_on_encrypted_page_writeback(sbi, blkaddr);
08b39fbd 1521
90d4388a
CY
1522 if (len == PAGE_CACHE_SIZE)
1523 goto out_update;
1524 if (PageUptodate(page))
1525 goto out_clear;
eb47b800
JK
1526
1527 if ((pos & PAGE_CACHE_MASK) >= i_size_read(inode)) {
1528 unsigned start = pos & (PAGE_CACHE_SIZE - 1);
1529 unsigned end = start + len;
1530
1531 /* Reading beyond i_size is simple: memset to zero */
1532 zero_user_segments(page, 0, start, end, PAGE_CACHE_SIZE);
90d4388a 1533 goto out_update;
eb47b800
JK
1534 }
1535
2aadac08 1536 if (blkaddr == NEW_ADDR) {
eb47b800
JK
1537 zero_user_segment(page, 0, PAGE_CACHE_SIZE);
1538 } else {
cf04e8eb 1539 struct f2fs_io_info fio = {
05ca3632 1540 .sbi = sbi,
cf04e8eb
JK
1541 .type = DATA,
1542 .rw = READ_SYNC,
2aadac08 1543 .blk_addr = blkaddr,
05ca3632 1544 .page = page,
4375a336 1545 .encrypted_page = NULL,
cf04e8eb 1546 };
05ca3632 1547 err = f2fs_submit_page_bio(&fio);
9234f319
JK
1548 if (err)
1549 goto fail;
d54c795b 1550
393ff91f 1551 lock_page(page);
6bacf52f 1552 if (unlikely(!PageUptodate(page))) {
3aab8f82
CY
1553 err = -EIO;
1554 goto fail;
eb47b800 1555 }
6bacf52f 1556 if (unlikely(page->mapping != mapping)) {
afcb7ca0
JK
1557 f2fs_put_page(page, 1);
1558 goto repeat;
eb47b800 1559 }
4375a336
JK
1560
1561 /* avoid symlink page */
1562 if (f2fs_encrypted_inode(inode) && S_ISREG(inode->i_mode)) {
1563 err = f2fs_decrypt_one(inode, page);
86531d6b 1564 if (err)
4375a336 1565 goto fail;
4375a336 1566 }
eb47b800 1567 }
90d4388a 1568out_update:
eb47b800 1569 SetPageUptodate(page);
90d4388a 1570out_clear:
eb47b800
JK
1571 clear_cold_data(page);
1572 return 0;
9ba69cf9 1573
3aab8f82 1574fail:
86531d6b 1575 f2fs_put_page(page, 1);
3aab8f82
CY
1576 f2fs_write_failed(mapping, pos + len);
1577 return err;
eb47b800
JK
1578}
1579
a1dd3c13
JK
1580static int f2fs_write_end(struct file *file,
1581 struct address_space *mapping,
1582 loff_t pos, unsigned len, unsigned copied,
1583 struct page *page, void *fsdata)
1584{
1585 struct inode *inode = page->mapping->host;
1586
dfb2bf38
CY
1587 trace_f2fs_write_end(inode, pos, len, copied);
1588
34ba94ba 1589 set_page_dirty(page);
a1dd3c13
JK
1590
1591 if (pos + copied > i_size_read(inode)) {
1592 i_size_write(inode, pos + copied);
1593 mark_inode_dirty(inode);
a1dd3c13
JK
1594 }
1595
75c3c8bc 1596 f2fs_put_page(page, 1);
d0239e1b 1597 f2fs_update_time(F2FS_I_SB(inode), REQ_TIME);
a1dd3c13
JK
1598 return copied;
1599}
1600
6f673763
OS
1601static int check_direct_IO(struct inode *inode, struct iov_iter *iter,
1602 loff_t offset)
944fcfc1
JK
1603{
1604 unsigned blocksize_mask = inode->i_sb->s_blocksize - 1;
944fcfc1 1605
944fcfc1
JK
1606 if (offset & blocksize_mask)
1607 return -EINVAL;
1608
5b46f25d
AV
1609 if (iov_iter_alignment(iter) & blocksize_mask)
1610 return -EINVAL;
1611
944fcfc1
JK
1612 return 0;
1613}
1614
22c6186e
OS
1615static ssize_t f2fs_direct_IO(struct kiocb *iocb, struct iov_iter *iter,
1616 loff_t offset)
eb47b800
JK
1617{
1618 struct file *file = iocb->ki_filp;
3aab8f82
CY
1619 struct address_space *mapping = file->f_mapping;
1620 struct inode *inode = mapping->host;
1621 size_t count = iov_iter_count(iter);
1622 int err;
944fcfc1 1623
b3d208f9 1624 /* we don't need to use inline_data strictly */
b9d777b8
JK
1625 err = f2fs_convert_inline_inode(inode);
1626 if (err)
1627 return err;
9ffe0fb5 1628
fcc85a4d
JK
1629 if (f2fs_encrypted_inode(inode) && S_ISREG(inode->i_mode))
1630 return 0;
1631
c15e8599
CY
1632 err = check_direct_IO(inode, iter, offset);
1633 if (err)
1634 return err;
944fcfc1 1635
6f673763 1636 trace_f2fs_direct_IO_enter(inode, offset, count, iov_iter_rw(iter));
70407fad 1637
f9811703 1638 if (iov_iter_rw(iter) == WRITE) {
6d5a1495
CY
1639 err = __allocate_data_blocks(inode, offset, count);
1640 if (err)
f9811703 1641 goto out;
f9811703 1642 }
59b802e5 1643
e2b4e2bc 1644 err = blockdev_direct_IO(iocb, inode, iter, offset, get_data_block_dio);
f9811703 1645out:
6f673763 1646 if (err < 0 && iov_iter_rw(iter) == WRITE)
3aab8f82 1647 f2fs_write_failed(mapping, offset + count);
70407fad 1648
6f673763 1649 trace_f2fs_direct_IO_exit(inode, offset, count, iov_iter_rw(iter), err);
70407fad 1650
3aab8f82 1651 return err;
eb47b800
JK
1652}
1653
487261f3
CY
1654void f2fs_invalidate_page(struct page *page, unsigned int offset,
1655 unsigned int length)
eb47b800
JK
1656{
1657 struct inode *inode = page->mapping->host;
487261f3 1658 struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
a7ffdbe2 1659
487261f3
CY
1660 if (inode->i_ino >= F2FS_ROOT_INO(sbi) &&
1661 (offset % PAGE_CACHE_SIZE || length != PAGE_CACHE_SIZE))
a7ffdbe2
JK
1662 return;
1663
487261f3
CY
1664 if (PageDirty(page)) {
1665 if (inode->i_ino == F2FS_META_INO(sbi))
1666 dec_page_count(sbi, F2FS_DIRTY_META);
1667 else if (inode->i_ino == F2FS_NODE_INO(sbi))
1668 dec_page_count(sbi, F2FS_DIRTY_NODES);
1669 else
1670 inode_dec_dirty_pages(inode);
1671 }
decd36b6
CY
1672
1673 /* This is atomic written page, keep Private */
1674 if (IS_ATOMIC_WRITTEN_PAGE(page))
1675 return;
1676
eb47b800
JK
1677 ClearPagePrivate(page);
1678}
1679
487261f3 1680int f2fs_release_page(struct page *page, gfp_t wait)
eb47b800 1681{
f68daeeb
JK
1682 /* If this is dirty page, keep PagePrivate */
1683 if (PageDirty(page))
1684 return 0;
1685
decd36b6
CY
1686 /* This is atomic written page, keep Private */
1687 if (IS_ATOMIC_WRITTEN_PAGE(page))
1688 return 0;
1689
eb47b800 1690 ClearPagePrivate(page);
c3850aa1 1691 return 1;
eb47b800
JK
1692}
1693
1694static int f2fs_set_data_page_dirty(struct page *page)
1695{
1696 struct address_space *mapping = page->mapping;
1697 struct inode *inode = mapping->host;
1698
26c6b887
JK
1699 trace_f2fs_set_page_dirty(page, DATA);
1700
eb47b800 1701 SetPageUptodate(page);
34ba94ba 1702
1e84371f 1703 if (f2fs_is_atomic_file(inode)) {
decd36b6
CY
1704 if (!IS_ATOMIC_WRITTEN_PAGE(page)) {
1705 register_inmem_page(inode, page);
1706 return 1;
1707 }
1708 /*
1709 * Previously, this page has been registered, we just
1710 * return here.
1711 */
1712 return 0;
34ba94ba
JK
1713 }
1714
eb47b800
JK
1715 if (!PageDirty(page)) {
1716 __set_page_dirty_nobuffers(page);
a7ffdbe2 1717 update_dirty_page(inode, page);
eb47b800
JK
1718 return 1;
1719 }
1720 return 0;
1721}
1722
c01e54b7
JK
1723static sector_t f2fs_bmap(struct address_space *mapping, sector_t block)
1724{
454ae7e5
CY
1725 struct inode *inode = mapping->host;
1726
1d373a0e
JK
1727 if (f2fs_has_inline_data(inode))
1728 return 0;
1729
1730 /* make sure allocating whole blocks */
1731 if (mapping_tagged(mapping, PAGECACHE_TAG_DIRTY))
1732 filemap_write_and_wait(mapping);
1733
e2b4e2bc 1734 return generic_block_bmap(mapping, block, get_data_block_bmap);
429511cd
CY
1735}
1736
eb47b800
JK
1737const struct address_space_operations f2fs_dblock_aops = {
1738 .readpage = f2fs_read_data_page,
1739 .readpages = f2fs_read_data_pages,
1740 .writepage = f2fs_write_data_page,
1741 .writepages = f2fs_write_data_pages,
1742 .write_begin = f2fs_write_begin,
a1dd3c13 1743 .write_end = f2fs_write_end,
eb47b800 1744 .set_page_dirty = f2fs_set_data_page_dirty,
487261f3
CY
1745 .invalidatepage = f2fs_invalidate_page,
1746 .releasepage = f2fs_release_page,
eb47b800 1747 .direct_IO = f2fs_direct_IO,
c01e54b7 1748 .bmap = f2fs_bmap,
eb47b800 1749};