f2fs: refactor ->page_mkwrite() flow
[linux-2.6-block.git] / fs / f2fs / data.c
CommitLineData
7c1a000d 1// SPDX-License-Identifier: GPL-2.0
0a8165d7 2/*
eb47b800
JK
3 * fs/f2fs/data.c
4 *
5 * Copyright (c) 2012 Samsung Electronics Co., Ltd.
6 * http://www.samsung.com/
eb47b800
JK
7 */
8#include <linux/fs.h>
9#include <linux/f2fs_fs.h>
10#include <linux/buffer_head.h>
11#include <linux/mpage.h>
12#include <linux/writeback.h>
13#include <linux/backing-dev.h>
8f46dcae 14#include <linux/pagevec.h>
eb47b800
JK
15#include <linux/blkdev.h>
16#include <linux/bio.h>
690e4a3e 17#include <linux/prefetch.h>
e2e40f2c 18#include <linux/uio.h>
f1e88660 19#include <linux/cleancache.h>
174cd4b1 20#include <linux/sched/signal.h>
eb47b800
JK
21
22#include "f2fs.h"
23#include "node.h"
24#include "segment.h"
db9f7c1a 25#include "trace.h"
848753aa 26#include <trace/events/f2fs.h>
eb47b800 27
6dbb1796
EB
28#define NUM_PREALLOC_POST_READ_CTXS 128
29
30static struct kmem_cache *bio_post_read_ctx_cache;
31static mempool_t *bio_post_read_ctx_pool;
32
36951b38
CY
33static bool __is_cp_guaranteed(struct page *page)
34{
35 struct address_space *mapping = page->mapping;
36 struct inode *inode;
37 struct f2fs_sb_info *sbi;
38
39 if (!mapping)
40 return false;
41
42 inode = mapping->host;
43 sbi = F2FS_I_SB(inode);
44
45 if (inode->i_ino == F2FS_META_INO(sbi) ||
46 inode->i_ino == F2FS_NODE_INO(sbi) ||
47 S_ISDIR(inode->i_mode) ||
e7a4feb0
CY
48 (S_ISREG(inode->i_mode) &&
49 is_inode_flag_set(inode, FI_ATOMIC_FILE)) ||
36951b38
CY
50 is_cold_data(page))
51 return true;
52 return false;
53}
54
6dbb1796
EB
55/* postprocessing steps for read bios */
56enum bio_post_read_step {
57 STEP_INITIAL = 0,
58 STEP_DECRYPT,
59};
60
61struct bio_post_read_ctx {
62 struct bio *bio;
63 struct work_struct work;
64 unsigned int cur_step;
65 unsigned int enabled_steps;
66};
67
68static void __read_end_io(struct bio *bio)
93dfe2ac 69{
6dbb1796
EB
70 struct page *page;
71 struct bio_vec *bv;
f568849e 72 int i;
93dfe2ac 73
6dbb1796
EB
74 bio_for_each_segment_all(bv, bio, i) {
75 page = bv->bv_page;
76
77 /* PG_error was set if any post_read step failed */
78 if (bio->bi_status || PageError(page)) {
79 ClearPageUptodate(page);
80 SetPageError(page);
81 } else {
82 SetPageUptodate(page);
83 }
84 unlock_page(page);
85 }
86 if (bio->bi_private)
87 mempool_free(bio->bi_private, bio_post_read_ctx_pool);
88 bio_put(bio);
89}
90
91static void bio_post_read_processing(struct bio_post_read_ctx *ctx);
92
93static void decrypt_work(struct work_struct *work)
94{
95 struct bio_post_read_ctx *ctx =
96 container_of(work, struct bio_post_read_ctx, work);
97
98 fscrypt_decrypt_bio(ctx->bio);
99
100 bio_post_read_processing(ctx);
101}
102
103static void bio_post_read_processing(struct bio_post_read_ctx *ctx)
104{
105 switch (++ctx->cur_step) {
106 case STEP_DECRYPT:
107 if (ctx->enabled_steps & (1 << STEP_DECRYPT)) {
108 INIT_WORK(&ctx->work, decrypt_work);
109 fscrypt_enqueue_decrypt_work(&ctx->work);
110 return;
111 }
112 ctx->cur_step++;
113 /* fall-through */
114 default:
115 __read_end_io(ctx->bio);
116 }
117}
118
119static bool f2fs_bio_post_read_required(struct bio *bio)
120{
121 return bio->bi_private && !bio->bi_status;
122}
123
124static void f2fs_read_end_io(struct bio *bio)
125{
6f5c2ed0
CY
126 if (time_to_inject(F2FS_P_SB(bio_first_page_all(bio)),
127 FAULT_READ_IO)) {
128 f2fs_show_injection_info(FAULT_READ_IO);
4e4cbee9 129 bio->bi_status = BLK_STS_IOERR;
55523519 130 }
8b038c70 131
6dbb1796
EB
132 if (f2fs_bio_post_read_required(bio)) {
133 struct bio_post_read_ctx *ctx = bio->bi_private;
f1e88660 134
6dbb1796
EB
135 ctx->cur_step = STEP_INITIAL;
136 bio_post_read_processing(ctx);
137 return;
f1e88660 138 }
6dbb1796
EB
139
140 __read_end_io(bio);
f1e88660
JK
141}
142
4246a0b6 143static void f2fs_write_end_io(struct bio *bio)
93dfe2ac 144{
1b1f559f 145 struct f2fs_sb_info *sbi = bio->bi_private;
f568849e
LT
146 struct bio_vec *bvec;
147 int i;
93dfe2ac 148
6f5c2ed0
CY
149 if (time_to_inject(sbi, FAULT_WRITE_IO)) {
150 f2fs_show_injection_info(FAULT_WRITE_IO);
151 bio->bi_status = BLK_STS_IOERR;
152 }
153
f568849e 154 bio_for_each_segment_all(bvec, bio, i) {
93dfe2ac 155 struct page *page = bvec->bv_page;
36951b38 156 enum count_type type = WB_DATA_TYPE(page);
93dfe2ac 157
0a595eba
JK
158 if (IS_DUMMY_WRITTEN_PAGE(page)) {
159 set_page_private(page, (unsigned long)NULL);
160 ClearPagePrivate(page);
161 unlock_page(page);
162 mempool_free(page, sbi->write_io_dummy);
163
4e4cbee9 164 if (unlikely(bio->bi_status))
0a595eba
JK
165 f2fs_stop_checkpoint(sbi, true);
166 continue;
167 }
168
0b81d077 169 fscrypt_pullback_bio_page(&page, true);
4375a336 170
4e4cbee9 171 if (unlikely(bio->bi_status)) {
5114a97a 172 mapping_set_error(page->mapping, -EIO);
b1ca321d
JK
173 if (type == F2FS_WB_CP_DATA)
174 f2fs_stop_checkpoint(sbi, true);
93dfe2ac 175 }
7dff55d2
YH
176
177 f2fs_bug_on(sbi, page->mapping == NODE_MAPPING(sbi) &&
178 page->index != nid_of_node(page));
179
36951b38 180 dec_page_count(sbi, type);
50fa53ec
CY
181 if (f2fs_in_warm_node_list(sbi, page))
182 f2fs_del_fsync_node_entry(sbi, page);
36951b38 183 clear_cold_data(page);
93dfe2ac 184 end_page_writeback(page);
f568849e 185 }
36951b38 186 if (!get_pages(sbi, F2FS_WB_CP_DATA) &&
f5730184 187 wq_has_sleeper(&sbi->cp_wait))
93dfe2ac
JK
188 wake_up(&sbi->cp_wait);
189
190 bio_put(bio);
191}
192
3c62be17
JK
193/*
194 * Return true, if pre_bio's bdev is same as its target device.
195 */
196struct block_device *f2fs_target_device(struct f2fs_sb_info *sbi,
197 block_t blk_addr, struct bio *bio)
198{
199 struct block_device *bdev = sbi->sb->s_bdev;
200 int i;
201
202 for (i = 0; i < sbi->s_ndevs; i++) {
203 if (FDEV(i).start_blk <= blk_addr &&
204 FDEV(i).end_blk >= blk_addr) {
205 blk_addr -= FDEV(i).start_blk;
206 bdev = FDEV(i).bdev;
207 break;
208 }
209 }
210 if (bio) {
74d46992 211 bio_set_dev(bio, bdev);
3c62be17
JK
212 bio->bi_iter.bi_sector = SECTOR_FROM_BLOCK(blk_addr);
213 }
214 return bdev;
215}
216
217int f2fs_target_device_index(struct f2fs_sb_info *sbi, block_t blkaddr)
218{
219 int i;
220
221 for (i = 0; i < sbi->s_ndevs; i++)
222 if (FDEV(i).start_blk <= blkaddr && FDEV(i).end_blk >= blkaddr)
223 return i;
224 return 0;
225}
226
227static bool __same_bdev(struct f2fs_sb_info *sbi,
228 block_t blk_addr, struct bio *bio)
229{
74d46992
CH
230 struct block_device *b = f2fs_target_device(sbi, blk_addr, NULL);
231 return bio->bi_disk == b->bd_disk && bio->bi_partno == b->bd_partno;
3c62be17
JK
232}
233
940a6d34
GZ
234/*
235 * Low-level block read/write IO operations.
236 */
237static struct bio *__bio_alloc(struct f2fs_sb_info *sbi, block_t blk_addr,
578c6478 238 struct writeback_control *wbc,
0cdd3195
HL
239 int npages, bool is_read,
240 enum page_type type, enum temp_type temp)
940a6d34
GZ
241{
242 struct bio *bio;
243
d62fe971 244 bio = f2fs_bio_alloc(sbi, npages, true);
940a6d34 245
3c62be17 246 f2fs_target_device(sbi, blk_addr, bio);
0cdd3195
HL
247 if (is_read) {
248 bio->bi_end_io = f2fs_read_end_io;
249 bio->bi_private = NULL;
250 } else {
251 bio->bi_end_io = f2fs_write_end_io;
252 bio->bi_private = sbi;
4d57b86d 253 bio->bi_write_hint = f2fs_io_type_to_rw_hint(sbi, type, temp);
0cdd3195 254 }
578c6478
YY
255 if (wbc)
256 wbc_init_bio(wbc, bio);
940a6d34
GZ
257
258 return bio;
259}
260
4fc29c1a
LT
261static inline void __submit_bio(struct f2fs_sb_info *sbi,
262 struct bio *bio, enum page_type type)
f5730184 263{
4fc29c1a 264 if (!is_read_io(bio_op(bio))) {
0a595eba
JK
265 unsigned int start;
266
0a595eba
JK
267 if (type != DATA && type != NODE)
268 goto submit_io;
269
66415cee 270 if (test_opt(sbi, LFS) && current->plug)
3bb09a0e
TY
271 blk_finish_plug(current->plug);
272
0a595eba
JK
273 start = bio->bi_iter.bi_size >> F2FS_BLKSIZE_BITS;
274 start %= F2FS_IO_SIZE(sbi);
275
276 if (start == 0)
277 goto submit_io;
278
279 /* fill dummy pages */
280 for (; start < F2FS_IO_SIZE(sbi); start++) {
281 struct page *page =
282 mempool_alloc(sbi->write_io_dummy,
283 GFP_NOIO | __GFP_ZERO | __GFP_NOFAIL);
284 f2fs_bug_on(sbi, !page);
285
286 SetPagePrivate(page);
287 set_page_private(page, (unsigned long)DUMMY_WRITTEN_PAGE);
288 lock_page(page);
289 if (bio_add_page(bio, page, PAGE_SIZE, 0) < PAGE_SIZE)
290 f2fs_bug_on(sbi, 1);
291 }
292 /*
293 * In the NODE case, we lose next block address chain. So, we
294 * need to do checkpoint in f2fs_sync_file.
295 */
296 if (type == NODE)
297 set_sbi_flag(sbi, SBI_NEED_CP);
19a5f5e2 298 }
0a595eba 299submit_io:
554b5125
JK
300 if (is_read_io(bio_op(bio)))
301 trace_f2fs_submit_read_bio(sbi->sb, type, bio);
302 else
303 trace_f2fs_submit_write_bio(sbi->sb, type, bio);
4e49ea4a 304 submit_bio(bio);
f5730184
JK
305}
306
458e6197 307static void __submit_merged_bio(struct f2fs_bio_info *io)
93dfe2ac 308{
458e6197 309 struct f2fs_io_info *fio = &io->fio;
93dfe2ac
JK
310
311 if (!io->bio)
312 return;
313
554b5125
JK
314 bio_set_op_attrs(io->bio, fio->op, fio->op_flags);
315
04d328de 316 if (is_read_io(fio->op))
554b5125 317 trace_f2fs_prepare_read_bio(io->sbi->sb, fio->type, io->bio);
6a8f8ca5 318 else
554b5125 319 trace_f2fs_prepare_write_bio(io->sbi->sb, fio->type, io->bio);
04d328de 320
4fc29c1a 321 __submit_bio(io->sbi, io->bio, fio->type);
93dfe2ac
JK
322 io->bio = NULL;
323}
324
bab475c5
CY
325static bool __has_merged_page(struct f2fs_bio_info *io, struct inode *inode,
326 struct page *page, nid_t ino)
0fd785eb 327{
0fd785eb
CY
328 struct bio_vec *bvec;
329 struct page *target;
330 int i;
331
0c3a5797 332 if (!io->bio)
0fd785eb 333 return false;
0c3a5797 334
bab475c5 335 if (!inode && !page && !ino)
0c3a5797 336 return true;
0fd785eb
CY
337
338 bio_for_each_segment_all(bvec, io->bio, i) {
339
0b81d077 340 if (bvec->bv_page->mapping)
0fd785eb 341 target = bvec->bv_page;
0b81d077
JK
342 else
343 target = fscrypt_control_page(bvec->bv_page);
0fd785eb 344
0c3a5797
CY
345 if (inode && inode == target->mapping->host)
346 return true;
bab475c5
CY
347 if (page && page == target)
348 return true;
0c3a5797 349 if (ino && ino == ino_of_node(target))
0fd785eb 350 return true;
0fd785eb
CY
351 }
352
0fd785eb
CY
353 return false;
354}
355
0c3a5797 356static bool has_merged_page(struct f2fs_sb_info *sbi, struct inode *inode,
bab475c5
CY
357 struct page *page, nid_t ino,
358 enum page_type type)
0c3a5797
CY
359{
360 enum page_type btype = PAGE_TYPE_OF_BIO(type);
a912b54d
JK
361 enum temp_type temp;
362 struct f2fs_bio_info *io;
363 bool ret = false;
0c3a5797 364
a912b54d
JK
365 for (temp = HOT; temp < NR_TEMP_TYPE; temp++) {
366 io = sbi->write_io[btype] + temp;
367
368 down_read(&io->io_rwsem);
bab475c5 369 ret = __has_merged_page(io, inode, page, ino);
a912b54d 370 up_read(&io->io_rwsem);
0c3a5797 371
a912b54d
JK
372 /* TODO: use HOT temp only for meta pages now. */
373 if (ret || btype == META)
374 break;
375 }
0c3a5797
CY
376 return ret;
377}
378
b9109b0e 379static void __f2fs_submit_merged_write(struct f2fs_sb_info *sbi,
a912b54d 380 enum page_type type, enum temp_type temp)
93dfe2ac
JK
381{
382 enum page_type btype = PAGE_TYPE_OF_BIO(type);
a912b54d 383 struct f2fs_bio_info *io = sbi->write_io[btype] + temp;
93dfe2ac 384
df0f8dc0 385 down_write(&io->io_rwsem);
458e6197
JK
386
387 /* change META to META_FLUSH in the checkpoint procedure */
388 if (type >= META_FLUSH) {
389 io->fio.type = META_FLUSH;
04d328de 390 io->fio.op = REQ_OP_WRITE;
3adc5fcb 391 io->fio.op_flags = REQ_META | REQ_PRIO | REQ_SYNC;
70fd7614 392 if (!test_opt(sbi, NOBARRIER))
7f54f51f 393 io->fio.op_flags |= REQ_PREFLUSH | REQ_FUA;
458e6197
JK
394 }
395 __submit_merged_bio(io);
df0f8dc0 396 up_write(&io->io_rwsem);
93dfe2ac
JK
397}
398
a912b54d 399static void __submit_merged_write_cond(struct f2fs_sb_info *sbi,
bab475c5
CY
400 struct inode *inode, struct page *page,
401 nid_t ino, enum page_type type, bool force)
0c3a5797 402{
a912b54d
JK
403 enum temp_type temp;
404
bab475c5 405 if (!force && !has_merged_page(sbi, inode, page, ino, type))
a912b54d
JK
406 return;
407
408 for (temp = HOT; temp < NR_TEMP_TYPE; temp++) {
409
410 __f2fs_submit_merged_write(sbi, type, temp);
411
412 /* TODO: use HOT temp only for meta pages now. */
413 if (type >= META)
414 break;
415 }
0c3a5797
CY
416}
417
b9109b0e 418void f2fs_submit_merged_write(struct f2fs_sb_info *sbi, enum page_type type)
0c3a5797 419{
a912b54d 420 __submit_merged_write_cond(sbi, NULL, 0, 0, type, true);
0c3a5797
CY
421}
422
b9109b0e 423void f2fs_submit_merged_write_cond(struct f2fs_sb_info *sbi,
bab475c5
CY
424 struct inode *inode, struct page *page,
425 nid_t ino, enum page_type type)
0c3a5797 426{
bab475c5 427 __submit_merged_write_cond(sbi, inode, page, ino, type, false);
0c3a5797
CY
428}
429
b9109b0e 430void f2fs_flush_merged_writes(struct f2fs_sb_info *sbi)
406657dd 431{
b9109b0e
JK
432 f2fs_submit_merged_write(sbi, DATA);
433 f2fs_submit_merged_write(sbi, NODE);
434 f2fs_submit_merged_write(sbi, META);
406657dd
CY
435}
436
93dfe2ac
JK
437/*
438 * Fill the locked page with data located in the block address.
771a9a71 439 * A caller needs to unlock the page on failure.
93dfe2ac 440 */
05ca3632 441int f2fs_submit_page_bio(struct f2fs_io_info *fio)
93dfe2ac 442{
93dfe2ac 443 struct bio *bio;
0b81d077
JK
444 struct page *page = fio->encrypted_page ?
445 fio->encrypted_page : fio->page;
93dfe2ac 446
c9b60788
CY
447 if (!f2fs_is_valid_blkaddr(fio->sbi, fio->new_blkaddr,
448 __is_meta_io(fio) ? META_GENERIC : DATA_GENERIC))
449 return -EFAULT;
450
2ace38e0 451 trace_f2fs_submit_page_bio(page, fio);
05ca3632 452 f2fs_trace_ios(fio, 0);
93dfe2ac
JK
453
454 /* Allocate a new bio */
578c6478 455 bio = __bio_alloc(fio->sbi, fio->new_blkaddr, fio->io_wbc,
0cdd3195 456 1, is_read_io(fio->op), fio->type, fio->temp);
93dfe2ac 457
09cbfeaf 458 if (bio_add_page(bio, page, PAGE_SIZE, 0) < PAGE_SIZE) {
93dfe2ac 459 bio_put(bio);
93dfe2ac
JK
460 return -EFAULT;
461 }
04d328de 462 bio_set_op_attrs(bio, fio->op, fio->op_flags);
93dfe2ac 463
4fc29c1a 464 __submit_bio(fio->sbi, bio, fio->type);
d1b3e72d
JK
465
466 if (!is_read_io(fio->op))
467 inc_page_count(fio->sbi, WB_DATA_TYPE(fio->page));
93dfe2ac
JK
468 return 0;
469}
470
fe16efe6 471void f2fs_submit_page_write(struct f2fs_io_info *fio)
93dfe2ac 472{
05ca3632 473 struct f2fs_sb_info *sbi = fio->sbi;
458e6197 474 enum page_type btype = PAGE_TYPE_OF_BIO(fio->type);
a912b54d 475 struct f2fs_bio_info *io = sbi->write_io[btype] + fio->temp;
4375a336 476 struct page *bio_page;
93dfe2ac 477
b9109b0e 478 f2fs_bug_on(sbi, is_read_io(fio->op));
93dfe2ac 479
fb830fc5
CY
480 down_write(&io->io_rwsem);
481next:
482 if (fio->in_list) {
483 spin_lock(&io->io_lock);
484 if (list_empty(&io->io_list)) {
485 spin_unlock(&io->io_lock);
fe16efe6 486 goto out;
fb830fc5
CY
487 }
488 fio = list_first_entry(&io->io_list,
489 struct f2fs_io_info, list);
490 list_del(&fio->list);
491 spin_unlock(&io->io_lock);
492 }
93dfe2ac 493
e1da7872 494 if (__is_valid_data_blkaddr(fio->old_blkaddr))
0833721e
YH
495 verify_block_addr(fio, fio->old_blkaddr);
496 verify_block_addr(fio, fio->new_blkaddr);
93dfe2ac 497
36951b38
CY
498 bio_page = fio->encrypted_page ? fio->encrypted_page : fio->page;
499
ebf7c522
TM
500 /* set submitted = true as a return value */
501 fio->submitted = true;
d68f735b 502
b9109b0e 503 inc_page_count(sbi, WB_DATA_TYPE(bio_page));
93dfe2ac 504
7a9d7548 505 if (io->bio && (io->last_block_in_bio != fio->new_blkaddr - 1 ||
3c62be17
JK
506 (io->fio.op != fio->op || io->fio.op_flags != fio->op_flags) ||
507 !__same_bdev(sbi, fio->new_blkaddr, io->bio)))
458e6197 508 __submit_merged_bio(io);
93dfe2ac
JK
509alloc_new:
510 if (io->bio == NULL) {
0a595eba
JK
511 if ((fio->type == DATA || fio->type == NODE) &&
512 fio->new_blkaddr & F2FS_IO_SIZE_MASK(sbi)) {
b9109b0e 513 dec_page_count(sbi, WB_DATA_TYPE(bio_page));
fe16efe6
CY
514 fio->retry = true;
515 goto skip;
0a595eba 516 }
578c6478 517 io->bio = __bio_alloc(sbi, fio->new_blkaddr, fio->io_wbc,
0cdd3195
HL
518 BIO_MAX_PAGES, false,
519 fio->type, fio->temp);
458e6197 520 io->fio = *fio;
93dfe2ac
JK
521 }
522
a912b54d 523 if (bio_add_page(io->bio, bio_page, PAGE_SIZE, 0) < PAGE_SIZE) {
458e6197 524 __submit_merged_bio(io);
93dfe2ac
JK
525 goto alloc_new;
526 }
527
578c6478
YY
528 if (fio->io_wbc)
529 wbc_account_io(fio->io_wbc, bio_page, PAGE_SIZE);
530
7a9d7548 531 io->last_block_in_bio = fio->new_blkaddr;
05ca3632 532 f2fs_trace_ios(fio, 0);
fb830fc5
CY
533
534 trace_f2fs_submit_page_write(fio->page, fio);
fe16efe6 535skip:
fb830fc5
CY
536 if (fio->in_list)
537 goto next;
fe16efe6 538out:
5ce80586
JK
539 if (is_sbi_flag_set(sbi, SBI_IS_SHUTDOWN))
540 __submit_merged_bio(io);
df0f8dc0 541 up_write(&io->io_rwsem);
93dfe2ac
JK
542}
543
13ba41e3 544static struct bio *f2fs_grab_read_bio(struct inode *inode, block_t blkaddr,
e2e59414 545 unsigned nr_pages, unsigned op_flag)
13ba41e3
JK
546{
547 struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
13ba41e3 548 struct bio *bio;
6dbb1796
EB
549 struct bio_post_read_ctx *ctx;
550 unsigned int post_read_steps = 0;
13ba41e3 551
91291e99
CY
552 if (!f2fs_is_valid_blkaddr(sbi, blkaddr, DATA_GENERIC))
553 return ERR_PTR(-EFAULT);
554
d62fe971 555 bio = f2fs_bio_alloc(sbi, min_t(int, nr_pages, BIO_MAX_PAGES), false);
6dbb1796 556 if (!bio)
13ba41e3 557 return ERR_PTR(-ENOMEM);
13ba41e3
JK
558 f2fs_target_device(sbi, blkaddr, bio);
559 bio->bi_end_io = f2fs_read_end_io;
e2e59414 560 bio_set_op_attrs(bio, REQ_OP_READ, op_flag);
13ba41e3 561
6dbb1796
EB
562 if (f2fs_encrypted_file(inode))
563 post_read_steps |= 1 << STEP_DECRYPT;
564 if (post_read_steps) {
565 ctx = mempool_alloc(bio_post_read_ctx_pool, GFP_NOFS);
566 if (!ctx) {
567 bio_put(bio);
568 return ERR_PTR(-ENOMEM);
569 }
570 ctx->bio = bio;
571 ctx->enabled_steps = post_read_steps;
572 bio->bi_private = ctx;
6dbb1796
EB
573 }
574
13ba41e3
JK
575 return bio;
576}
577
578/* This can handle encryption stuffs */
579static int f2fs_submit_page_read(struct inode *inode, struct page *page,
580 block_t blkaddr)
581{
e2e59414 582 struct bio *bio = f2fs_grab_read_bio(inode, blkaddr, 1, 0);
13ba41e3
JK
583
584 if (IS_ERR(bio))
585 return PTR_ERR(bio);
586
0ded69f6
JK
587 /* wait for GCed page writeback via META_MAPPING */
588 f2fs_wait_on_block_writeback(inode, blkaddr);
589
13ba41e3
JK
590 if (bio_add_page(bio, page, PAGE_SIZE, 0) < PAGE_SIZE) {
591 bio_put(bio);
592 return -EFAULT;
593 }
594 __submit_bio(F2FS_I_SB(inode), bio, DATA);
595 return 0;
596}
597
46008c6d
CY
598static void __set_data_blkaddr(struct dnode_of_data *dn)
599{
600 struct f2fs_node *rn = F2FS_NODE(dn->node_page);
601 __le32 *addr_array;
7a2af766
CY
602 int base = 0;
603
604 if (IS_INODE(dn->node_page) && f2fs_has_extra_attr(dn->inode))
605 base = get_extra_isize(dn->inode);
46008c6d
CY
606
607 /* Get physical address of data block */
608 addr_array = blkaddr_in_node(rn);
7a2af766 609 addr_array[base + dn->ofs_in_node] = cpu_to_le32(dn->data_blkaddr);
46008c6d
CY
610}
611
0a8165d7 612/*
eb47b800
JK
613 * Lock ordering for the change of data block address:
614 * ->data_page
615 * ->node_page
616 * update block addresses in the node page
617 */
4d57b86d 618void f2fs_set_data_blkaddr(struct dnode_of_data *dn)
eb47b800 619{
46008c6d
CY
620 f2fs_wait_on_page_writeback(dn->node_page, NODE, true);
621 __set_data_blkaddr(dn);
622 if (set_page_dirty(dn->node_page))
12719ae1 623 dn->node_changed = true;
eb47b800
JK
624}
625
f28b3434
CY
626void f2fs_update_data_blkaddr(struct dnode_of_data *dn, block_t blkaddr)
627{
628 dn->data_blkaddr = blkaddr;
4d57b86d 629 f2fs_set_data_blkaddr(dn);
f28b3434
CY
630 f2fs_update_extent_cache(dn);
631}
632
46008c6d 633/* dn->ofs_in_node will be returned with up-to-date last block pointer */
4d57b86d 634int f2fs_reserve_new_blocks(struct dnode_of_data *dn, blkcnt_t count)
eb47b800 635{
4081363f 636 struct f2fs_sb_info *sbi = F2FS_I_SB(dn->inode);
0abd675e 637 int err;
eb47b800 638
46008c6d
CY
639 if (!count)
640 return 0;
641
91942321 642 if (unlikely(is_inode_flag_set(dn->inode, FI_NO_ALLOC)))
eb47b800 643 return -EPERM;
0abd675e
CY
644 if (unlikely((err = inc_valid_block_count(sbi, dn->inode, &count))))
645 return err;
eb47b800 646
46008c6d
CY
647 trace_f2fs_reserve_new_blocks(dn->inode, dn->nid,
648 dn->ofs_in_node, count);
649
650 f2fs_wait_on_page_writeback(dn->node_page, NODE, true);
651
652 for (; count > 0; dn->ofs_in_node++) {
7a2af766
CY
653 block_t blkaddr = datablock_addr(dn->inode,
654 dn->node_page, dn->ofs_in_node);
46008c6d
CY
655 if (blkaddr == NULL_ADDR) {
656 dn->data_blkaddr = NEW_ADDR;
657 __set_data_blkaddr(dn);
658 count--;
659 }
660 }
661
662 if (set_page_dirty(dn->node_page))
663 dn->node_changed = true;
eb47b800
JK
664 return 0;
665}
666
46008c6d 667/* Should keep dn->ofs_in_node unchanged */
4d57b86d 668int f2fs_reserve_new_block(struct dnode_of_data *dn)
46008c6d
CY
669{
670 unsigned int ofs_in_node = dn->ofs_in_node;
671 int ret;
672
4d57b86d 673 ret = f2fs_reserve_new_blocks(dn, 1);
46008c6d
CY
674 dn->ofs_in_node = ofs_in_node;
675 return ret;
676}
677
b600965c
HL
678int f2fs_reserve_block(struct dnode_of_data *dn, pgoff_t index)
679{
680 bool need_put = dn->inode_page ? false : true;
681 int err;
682
4d57b86d 683 err = f2fs_get_dnode_of_data(dn, index, ALLOC_NODE);
b600965c
HL
684 if (err)
685 return err;
a8865372 686
b600965c 687 if (dn->data_blkaddr == NULL_ADDR)
4d57b86d 688 err = f2fs_reserve_new_block(dn);
a8865372 689 if (err || need_put)
b600965c
HL
690 f2fs_put_dnode(dn);
691 return err;
692}
693
759af1c9 694int f2fs_get_block(struct dnode_of_data *dn, pgoff_t index)
eb47b800 695{
e15882b6 696 struct extent_info ei = {0,0,0};
759af1c9 697 struct inode *inode = dn->inode;
028a41e8 698
759af1c9
FL
699 if (f2fs_lookup_extent_cache(inode, index, &ei)) {
700 dn->data_blkaddr = ei.blk + index - ei.fofs;
701 return 0;
429511cd 702 }
028a41e8 703
759af1c9 704 return f2fs_reserve_block(dn, index);
eb47b800
JK
705}
706
4d57b86d 707struct page *f2fs_get_read_data_page(struct inode *inode, pgoff_t index,
04d328de 708 int op_flags, bool for_write)
eb47b800 709{
eb47b800
JK
710 struct address_space *mapping = inode->i_mapping;
711 struct dnode_of_data dn;
712 struct page *page;
e15882b6 713 struct extent_info ei = {0,0,0};
eb47b800 714 int err;
4375a336 715
a56c7c6f 716 page = f2fs_grab_cache_page(mapping, index, for_write);
650495de
JK
717 if (!page)
718 return ERR_PTR(-ENOMEM);
719
cb3bc9ee
CY
720 if (f2fs_lookup_extent_cache(inode, index, &ei)) {
721 dn.data_blkaddr = ei.blk + index - ei.fofs;
722 goto got_it;
723 }
724
eb47b800 725 set_new_dnode(&dn, inode, NULL, NULL, 0);
4d57b86d 726 err = f2fs_get_dnode_of_data(&dn, index, LOOKUP_NODE);
86531d6b
JK
727 if (err)
728 goto put_err;
eb47b800
JK
729 f2fs_put_dnode(&dn);
730
6bacf52f 731 if (unlikely(dn.data_blkaddr == NULL_ADDR)) {
86531d6b
JK
732 err = -ENOENT;
733 goto put_err;
650495de 734 }
cb3bc9ee 735got_it:
43f3eae1
JK
736 if (PageUptodate(page)) {
737 unlock_page(page);
eb47b800 738 return page;
43f3eae1 739 }
eb47b800 740
d59ff4df
JK
741 /*
742 * A new dentry page is allocated but not able to be written, since its
743 * new inode page couldn't be allocated due to -ENOSPC.
744 * In such the case, its blkaddr can be remained as NEW_ADDR.
4d57b86d
CY
745 * see, f2fs_add_link -> f2fs_get_new_data_page ->
746 * f2fs_init_inode_metadata.
d59ff4df
JK
747 */
748 if (dn.data_blkaddr == NEW_ADDR) {
09cbfeaf 749 zero_user_segment(page, 0, PAGE_SIZE);
237c0790
JK
750 if (!PageUptodate(page))
751 SetPageUptodate(page);
43f3eae1 752 unlock_page(page);
d59ff4df
JK
753 return page;
754 }
eb47b800 755
13ba41e3 756 err = f2fs_submit_page_read(inode, page, dn.data_blkaddr);
393ff91f 757 if (err)
86531d6b 758 goto put_err;
43f3eae1 759 return page;
86531d6b
JK
760
761put_err:
762 f2fs_put_page(page, 1);
763 return ERR_PTR(err);
43f3eae1
JK
764}
765
4d57b86d 766struct page *f2fs_find_data_page(struct inode *inode, pgoff_t index)
43f3eae1
JK
767{
768 struct address_space *mapping = inode->i_mapping;
769 struct page *page;
770
771 page = find_get_page(mapping, index);
772 if (page && PageUptodate(page))
773 return page;
774 f2fs_put_page(page, 0);
775
4d57b86d 776 page = f2fs_get_read_data_page(inode, index, 0, false);
43f3eae1
JK
777 if (IS_ERR(page))
778 return page;
779
780 if (PageUptodate(page))
781 return page;
782
783 wait_on_page_locked(page);
784 if (unlikely(!PageUptodate(page))) {
785 f2fs_put_page(page, 0);
786 return ERR_PTR(-EIO);
787 }
788 return page;
789}
790
791/*
792 * If it tries to access a hole, return an error.
793 * Because, the callers, functions in dir.c and GC, should be able to know
794 * whether this page exists or not.
795 */
4d57b86d 796struct page *f2fs_get_lock_data_page(struct inode *inode, pgoff_t index,
a56c7c6f 797 bool for_write)
43f3eae1
JK
798{
799 struct address_space *mapping = inode->i_mapping;
800 struct page *page;
801repeat:
4d57b86d 802 page = f2fs_get_read_data_page(inode, index, 0, for_write);
43f3eae1
JK
803 if (IS_ERR(page))
804 return page;
393ff91f 805
43f3eae1 806 /* wait for read completion */
393ff91f 807 lock_page(page);
6bacf52f 808 if (unlikely(page->mapping != mapping)) {
afcb7ca0
JK
809 f2fs_put_page(page, 1);
810 goto repeat;
eb47b800 811 }
1563ac75
CY
812 if (unlikely(!PageUptodate(page))) {
813 f2fs_put_page(page, 1);
814 return ERR_PTR(-EIO);
815 }
eb47b800
JK
816 return page;
817}
818
0a8165d7 819/*
eb47b800
JK
820 * Caller ensures that this data page is never allocated.
821 * A new zero-filled data page is allocated in the page cache.
39936837 822 *
4f4124d0
CY
823 * Also, caller should grab and release a rwsem by calling f2fs_lock_op() and
824 * f2fs_unlock_op().
470f00e9
CY
825 * Note that, ipage is set only by make_empty_dir, and if any error occur,
826 * ipage should be released by this function.
eb47b800 827 */
4d57b86d 828struct page *f2fs_get_new_data_page(struct inode *inode,
a8865372 829 struct page *ipage, pgoff_t index, bool new_i_size)
eb47b800 830{
eb47b800
JK
831 struct address_space *mapping = inode->i_mapping;
832 struct page *page;
833 struct dnode_of_data dn;
834 int err;
7612118a 835
a56c7c6f 836 page = f2fs_grab_cache_page(mapping, index, true);
470f00e9
CY
837 if (!page) {
838 /*
839 * before exiting, we should make sure ipage will be released
840 * if any error occur.
841 */
842 f2fs_put_page(ipage, 1);
01f28610 843 return ERR_PTR(-ENOMEM);
470f00e9 844 }
eb47b800 845
a8865372 846 set_new_dnode(&dn, inode, ipage, NULL, 0);
b600965c 847 err = f2fs_reserve_block(&dn, index);
01f28610
JK
848 if (err) {
849 f2fs_put_page(page, 1);
eb47b800 850 return ERR_PTR(err);
a8865372 851 }
01f28610
JK
852 if (!ipage)
853 f2fs_put_dnode(&dn);
eb47b800
JK
854
855 if (PageUptodate(page))
01f28610 856 goto got_it;
eb47b800
JK
857
858 if (dn.data_blkaddr == NEW_ADDR) {
09cbfeaf 859 zero_user_segment(page, 0, PAGE_SIZE);
237c0790
JK
860 if (!PageUptodate(page))
861 SetPageUptodate(page);
eb47b800 862 } else {
4375a336 863 f2fs_put_page(page, 1);
a8865372 864
7612118a
JK
865 /* if ipage exists, blkaddr should be NEW_ADDR */
866 f2fs_bug_on(F2FS_I_SB(inode), ipage);
4d57b86d 867 page = f2fs_get_lock_data_page(inode, index, true);
4375a336 868 if (IS_ERR(page))
7612118a 869 return page;
eb47b800 870 }
01f28610 871got_it:
9edcdabf 872 if (new_i_size && i_size_read(inode) <
ee6d182f 873 ((loff_t)(index + 1) << PAGE_SHIFT))
fc9581c8 874 f2fs_i_size_write(inode, ((loff_t)(index + 1) << PAGE_SHIFT));
eb47b800
JK
875 return page;
876}
877
d5097be5 878static int __allocate_data_block(struct dnode_of_data *dn, int seg_type)
bfad7c2d 879{
4081363f 880 struct f2fs_sb_info *sbi = F2FS_I_SB(dn->inode);
bfad7c2d 881 struct f2fs_summary sum;
bfad7c2d 882 struct node_info ni;
6aa58d8a 883 block_t old_blkaddr;
46008c6d 884 blkcnt_t count = 1;
0abd675e 885 int err;
bfad7c2d 886
91942321 887 if (unlikely(is_inode_flag_set(dn->inode, FI_NO_ALLOC)))
bfad7c2d 888 return -EPERM;
df6136ef 889
7735730d
CY
890 err = f2fs_get_node_info(sbi, dn->nid, &ni);
891 if (err)
892 return err;
893
7a2af766
CY
894 dn->data_blkaddr = datablock_addr(dn->inode,
895 dn->node_page, dn->ofs_in_node);
df6136ef
CY
896 if (dn->data_blkaddr == NEW_ADDR)
897 goto alloc;
898
0abd675e
CY
899 if (unlikely((err = inc_valid_block_count(sbi, dn->inode, &count))))
900 return err;
bfad7c2d 901
df6136ef 902alloc:
bfad7c2d 903 set_summary(&sum, dn->nid, dn->ofs_in_node, ni.version);
6aa58d8a
CY
904 old_blkaddr = dn->data_blkaddr;
905 f2fs_allocate_data_block(sbi, NULL, old_blkaddr, &dn->data_blkaddr,
d5097be5 906 &sum, seg_type, NULL, false);
6aa58d8a
CY
907 if (GET_SEGNO(sbi, old_blkaddr) != NULL_SEGNO)
908 invalidate_mapping_pages(META_MAPPING(sbi),
909 old_blkaddr, old_blkaddr);
4d57b86d 910 f2fs_set_data_blkaddr(dn);
bfad7c2d 911
0a4daae5
JK
912 /*
913 * i_size will be updated by direct_IO. Otherwise, we'll get stale
914 * data from unwritten block via dio_read.
915 */
bfad7c2d
JK
916 return 0;
917}
918
a7de6086 919int f2fs_preallocate_blocks(struct kiocb *iocb, struct iov_iter *from)
59b802e5 920{
b439b103 921 struct inode *inode = file_inode(iocb->ki_filp);
5b8db7fa 922 struct f2fs_map_blocks map;
d6d478a1 923 int flag;
a7de6086 924 int err = 0;
d6d478a1 925 bool direct_io = iocb->ki_flags & IOCB_DIRECT;
59b802e5 926
71ad682c 927 /* convert inline data for Direct I/O*/
d6d478a1 928 if (direct_io) {
71ad682c
WG
929 err = f2fs_convert_inline_inode(inode);
930 if (err)
931 return err;
932 }
933
dc91de78
JK
934 if (is_inode_flag_set(inode, FI_NO_PREALLOC))
935 return 0;
936
0080c507 937 map.m_lblk = F2FS_BLK_ALIGN(iocb->ki_pos);
dfd02e4d
CY
938 map.m_len = F2FS_BYTES_TO_BLK(iocb->ki_pos + iov_iter_count(from));
939 if (map.m_len > map.m_lblk)
940 map.m_len -= map.m_lblk;
941 else
942 map.m_len = 0;
943
da85985c 944 map.m_next_pgofs = NULL;
c4020b2d 945 map.m_next_extent = NULL;
d5097be5 946 map.m_seg_type = NO_CHECK_TYPE;
2a340760 947
d6d478a1 948 if (direct_io) {
4d57b86d 949 map.m_seg_type = f2fs_rw_hint_to_seg_type(iocb->ki_hint);
b91050a8 950 flag = f2fs_force_buffered_io(inode, WRITE) ?
d6d478a1
CY
951 F2FS_GET_BLOCK_PRE_AIO :
952 F2FS_GET_BLOCK_PRE_DIO;
953 goto map_blocks;
d5097be5 954 }
f2470371 955 if (iocb->ki_pos + iov_iter_count(from) > MAX_INLINE_DATA(inode)) {
a7de6086
JK
956 err = f2fs_convert_inline_inode(inode);
957 if (err)
958 return err;
b439b103 959 }
d6d478a1 960 if (f2fs_has_inline_data(inode))
25006645 961 return err;
d6d478a1
CY
962
963 flag = F2FS_GET_BLOCK_PRE_AIO;
964
965map_blocks:
966 err = f2fs_map_blocks(inode, &map, 1, flag);
967 if (map.m_len > 0 && err == -ENOSPC) {
968 if (!direct_io)
969 set_inode_flag(inode, FI_NO_PREALLOC);
970 err = 0;
25006645 971 }
a7de6086 972 return err;
59b802e5
JK
973}
974
39a86958 975void __do_map_lock(struct f2fs_sb_info *sbi, int flag, bool lock)
59c9081b
YH
976{
977 if (flag == F2FS_GET_BLOCK_PRE_AIO) {
978 if (lock)
979 down_read(&sbi->node_change);
980 else
981 up_read(&sbi->node_change);
982 } else {
983 if (lock)
984 f2fs_lock_op(sbi);
985 else
986 f2fs_unlock_op(sbi);
987 }
988}
989
0a8165d7 990/*
003a3e1d
JK
991 * f2fs_map_blocks() now supported readahead/bmap/rw direct_IO with
992 * f2fs_map_blocks structure.
4f4124d0
CY
993 * If original data blocks are allocated, then give them to blockdev.
994 * Otherwise,
995 * a. preallocate requested block addresses
996 * b. do not use extent cache for better performance
997 * c. give the block addresses to blockdev
eb47b800 998 */
d323d005 999int f2fs_map_blocks(struct inode *inode, struct f2fs_map_blocks *map,
e2b4e2bc 1000 int create, int flag)
eb47b800 1001{
003a3e1d 1002 unsigned int maxblocks = map->m_len;
eb47b800 1003 struct dnode_of_data dn;
f9811703 1004 struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
ac6f1999 1005 int mode = create ? ALLOC_NODE : LOOKUP_NODE;
46008c6d 1006 pgoff_t pgofs, end_offset, end;
bfad7c2d 1007 int err = 0, ofs = 1;
46008c6d
CY
1008 unsigned int ofs_in_node, last_ofs_in_node;
1009 blkcnt_t prealloc;
e15882b6 1010 struct extent_info ei = {0,0,0};
7df3a431 1011 block_t blkaddr;
c4020b2d 1012 unsigned int start_pgofs;
eb47b800 1013
dfd02e4d
CY
1014 if (!maxblocks)
1015 return 0;
1016
003a3e1d
JK
1017 map->m_len = 0;
1018 map->m_flags = 0;
1019
1020 /* it only supports block size == page size */
1021 pgofs = (pgoff_t)map->m_lblk;
46008c6d 1022 end = pgofs + maxblocks;
eb47b800 1023
24b84912 1024 if (!create && f2fs_lookup_extent_cache(inode, pgofs, &ei)) {
003a3e1d
JK
1025 map->m_pblk = ei.blk + pgofs - ei.fofs;
1026 map->m_len = min((pgoff_t)maxblocks, ei.fofs + ei.len - pgofs);
1027 map->m_flags = F2FS_MAP_MAPPED;
c4020b2d
CY
1028 if (map->m_next_extent)
1029 *map->m_next_extent = pgofs + map->m_len;
bfad7c2d 1030 goto out;
a2e7d1bf 1031 }
bfad7c2d 1032
4fe71e88 1033next_dnode:
59b802e5 1034 if (create)
59c9081b 1035 __do_map_lock(sbi, flag, true);
eb47b800
JK
1036
1037 /* When reading holes, we need its node page */
1038 set_new_dnode(&dn, inode, NULL, NULL, 0);
4d57b86d 1039 err = f2fs_get_dnode_of_data(&dn, pgofs, mode);
1ec79083 1040 if (err) {
43473f96
CY
1041 if (flag == F2FS_GET_BLOCK_BMAP)
1042 map->m_pblk = 0;
da85985c 1043 if (err == -ENOENT) {
bfad7c2d 1044 err = 0;
da85985c
CY
1045 if (map->m_next_pgofs)
1046 *map->m_next_pgofs =
4d57b86d 1047 f2fs_get_next_page_offset(&dn, pgofs);
c4020b2d
CY
1048 if (map->m_next_extent)
1049 *map->m_next_extent =
4d57b86d 1050 f2fs_get_next_page_offset(&dn, pgofs);
da85985c 1051 }
bfad7c2d 1052 goto unlock_out;
848753aa 1053 }
973163fc 1054
c4020b2d 1055 start_pgofs = pgofs;
46008c6d 1056 prealloc = 0;
230436b3 1057 last_ofs_in_node = ofs_in_node = dn.ofs_in_node;
81ca7350 1058 end_offset = ADDRS_PER_PAGE(dn.node_page, inode);
4fe71e88
CY
1059
1060next_block:
7a2af766 1061 blkaddr = datablock_addr(dn.inode, dn.node_page, dn.ofs_in_node);
4fe71e88 1062
c9b60788
CY
1063 if (__is_valid_data_blkaddr(blkaddr) &&
1064 !f2fs_is_valid_blkaddr(sbi, blkaddr, DATA_GENERIC)) {
1065 err = -EFAULT;
1066 goto sync_out;
1067 }
1068
e1da7872 1069 if (!is_valid_data_blkaddr(sbi, blkaddr)) {
973163fc 1070 if (create) {
f9811703
CY
1071 if (unlikely(f2fs_cp_error(sbi))) {
1072 err = -EIO;
4fe71e88 1073 goto sync_out;
f9811703 1074 }
24b84912 1075 if (flag == F2FS_GET_BLOCK_PRE_AIO) {
46008c6d
CY
1076 if (blkaddr == NULL_ADDR) {
1077 prealloc++;
1078 last_ofs_in_node = dn.ofs_in_node;
1079 }
24b84912 1080 } else {
0a4daae5
JK
1081 WARN_ON(flag != F2FS_GET_BLOCK_PRE_DIO &&
1082 flag != F2FS_GET_BLOCK_DIO);
d5097be5
HL
1083 err = __allocate_data_block(&dn,
1084 map->m_seg_type);
6f2d8ed6 1085 if (!err)
91942321 1086 set_inode_flag(inode, FI_APPEND_WRITE);
24b84912 1087 }
973163fc 1088 if (err)
4fe71e88 1089 goto sync_out;
3f2be043 1090 map->m_flags |= F2FS_MAP_NEW;
4fe71e88 1091 blkaddr = dn.data_blkaddr;
973163fc 1092 } else {
43473f96
CY
1093 if (flag == F2FS_GET_BLOCK_BMAP) {
1094 map->m_pblk = 0;
1095 goto sync_out;
1096 }
c4020b2d
CY
1097 if (flag == F2FS_GET_BLOCK_PRECACHE)
1098 goto sync_out;
da85985c
CY
1099 if (flag == F2FS_GET_BLOCK_FIEMAP &&
1100 blkaddr == NULL_ADDR) {
1101 if (map->m_next_pgofs)
1102 *map->m_next_pgofs = pgofs + 1;
4c2ac6a8 1103 goto sync_out;
da85985c 1104 }
f3d98e74
CY
1105 if (flag != F2FS_GET_BLOCK_FIEMAP) {
1106 /* for defragment case */
1107 if (map->m_next_pgofs)
1108 *map->m_next_pgofs = pgofs + 1;
4fe71e88 1109 goto sync_out;
f3d98e74 1110 }
e2b4e2bc 1111 }
e2b4e2bc 1112 }
eb47b800 1113
46008c6d
CY
1114 if (flag == F2FS_GET_BLOCK_PRE_AIO)
1115 goto skip;
1116
4fe71e88
CY
1117 if (map->m_len == 0) {
1118 /* preallocated unwritten block should be mapped for fiemap. */
1119 if (blkaddr == NEW_ADDR)
1120 map->m_flags |= F2FS_MAP_UNWRITTEN;
1121 map->m_flags |= F2FS_MAP_MAPPED;
1122
1123 map->m_pblk = blkaddr;
1124 map->m_len = 1;
1125 } else if ((map->m_pblk != NEW_ADDR &&
1126 blkaddr == (map->m_pblk + ofs)) ||
b439b103 1127 (map->m_pblk == NEW_ADDR && blkaddr == NEW_ADDR) ||
46008c6d 1128 flag == F2FS_GET_BLOCK_PRE_DIO) {
4fe71e88
CY
1129 ofs++;
1130 map->m_len++;
1131 } else {
1132 goto sync_out;
1133 }
bfad7c2d 1134
46008c6d 1135skip:
bfad7c2d
JK
1136 dn.ofs_in_node++;
1137 pgofs++;
1138
46008c6d
CY
1139 /* preallocate blocks in batch for one dnode page */
1140 if (flag == F2FS_GET_BLOCK_PRE_AIO &&
1141 (pgofs == end || dn.ofs_in_node == end_offset)) {
7df3a431 1142
46008c6d 1143 dn.ofs_in_node = ofs_in_node;
4d57b86d 1144 err = f2fs_reserve_new_blocks(&dn, prealloc);
46008c6d
CY
1145 if (err)
1146 goto sync_out;
bfad7c2d 1147
46008c6d
CY
1148 map->m_len += dn.ofs_in_node - ofs_in_node;
1149 if (prealloc && dn.ofs_in_node != last_ofs_in_node + 1) {
1150 err = -ENOSPC;
1151 goto sync_out;
3104af35 1152 }
46008c6d
CY
1153 dn.ofs_in_node = end_offset;
1154 }
1155
1156 if (pgofs >= end)
1157 goto sync_out;
1158 else if (dn.ofs_in_node < end_offset)
1159 goto next_block;
1160
c4020b2d
CY
1161 if (flag == F2FS_GET_BLOCK_PRECACHE) {
1162 if (map->m_flags & F2FS_MAP_MAPPED) {
1163 unsigned int ofs = start_pgofs - map->m_lblk;
1164
1165 f2fs_update_extent_cache_range(&dn,
1166 start_pgofs, map->m_pblk + ofs,
1167 map->m_len - ofs);
1168 }
1169 }
1170
46008c6d
CY
1171 f2fs_put_dnode(&dn);
1172
1173 if (create) {
59c9081b 1174 __do_map_lock(sbi, flag, false);
6f2d8ed6 1175 f2fs_balance_fs(sbi, dn.node_changed);
eb47b800 1176 }
46008c6d 1177 goto next_dnode;
7df3a431 1178
bfad7c2d 1179sync_out:
c4020b2d
CY
1180 if (flag == F2FS_GET_BLOCK_PRECACHE) {
1181 if (map->m_flags & F2FS_MAP_MAPPED) {
1182 unsigned int ofs = start_pgofs - map->m_lblk;
1183
1184 f2fs_update_extent_cache_range(&dn,
1185 start_pgofs, map->m_pblk + ofs,
1186 map->m_len - ofs);
1187 }
1188 if (map->m_next_extent)
1189 *map->m_next_extent = pgofs + 1;
1190 }
eb47b800 1191 f2fs_put_dnode(&dn);
bfad7c2d 1192unlock_out:
2a340760 1193 if (create) {
59c9081b 1194 __do_map_lock(sbi, flag, false);
6f2d8ed6 1195 f2fs_balance_fs(sbi, dn.node_changed);
2a340760 1196 }
bfad7c2d 1197out:
003a3e1d 1198 trace_f2fs_map_blocks(inode, map, err);
bfad7c2d 1199 return err;
eb47b800
JK
1200}
1201
b91050a8
HL
1202bool f2fs_overwrite_io(struct inode *inode, loff_t pos, size_t len)
1203{
1204 struct f2fs_map_blocks map;
1205 block_t last_lblk;
1206 int err;
1207
1208 if (pos + len > i_size_read(inode))
1209 return false;
1210
1211 map.m_lblk = F2FS_BYTES_TO_BLK(pos);
1212 map.m_next_pgofs = NULL;
1213 map.m_next_extent = NULL;
1214 map.m_seg_type = NO_CHECK_TYPE;
1215 last_lblk = F2FS_BLK_ALIGN(pos + len);
1216
1217 while (map.m_lblk < last_lblk) {
1218 map.m_len = last_lblk - map.m_lblk;
1219 err = f2fs_map_blocks(inode, &map, 0, F2FS_GET_BLOCK_DEFAULT);
1220 if (err || map.m_len == 0)
1221 return false;
1222 map.m_lblk += map.m_len;
1223 }
1224 return true;
1225}
1226
003a3e1d 1227static int __get_data_block(struct inode *inode, sector_t iblock,
da85985c 1228 struct buffer_head *bh, int create, int flag,
d5097be5 1229 pgoff_t *next_pgofs, int seg_type)
003a3e1d
JK
1230{
1231 struct f2fs_map_blocks map;
a7de6086 1232 int err;
003a3e1d
JK
1233
1234 map.m_lblk = iblock;
1235 map.m_len = bh->b_size >> inode->i_blkbits;
da85985c 1236 map.m_next_pgofs = next_pgofs;
c4020b2d 1237 map.m_next_extent = NULL;
d5097be5 1238 map.m_seg_type = seg_type;
003a3e1d 1239
a7de6086
JK
1240 err = f2fs_map_blocks(inode, &map, create, flag);
1241 if (!err) {
003a3e1d
JK
1242 map_bh(bh, inode->i_sb, map.m_pblk);
1243 bh->b_state = (bh->b_state & ~F2FS_MAP_FLAGS) | map.m_flags;
b86e3307 1244 bh->b_size = (u64)map.m_len << inode->i_blkbits;
003a3e1d 1245 }
a7de6086 1246 return err;
003a3e1d
JK
1247}
1248
ccfb3000 1249static int get_data_block(struct inode *inode, sector_t iblock,
da85985c
CY
1250 struct buffer_head *bh_result, int create, int flag,
1251 pgoff_t *next_pgofs)
e2b4e2bc 1252{
da85985c 1253 return __get_data_block(inode, iblock, bh_result, create,
d5097be5
HL
1254 flag, next_pgofs,
1255 NO_CHECK_TYPE);
e2b4e2bc
CY
1256}
1257
1258static int get_data_block_dio(struct inode *inode, sector_t iblock,
ccfb3000
JK
1259 struct buffer_head *bh_result, int create)
1260{
e2b4e2bc 1261 return __get_data_block(inode, iblock, bh_result, create,
0a4daae5 1262 F2FS_GET_BLOCK_DIO, NULL,
4d57b86d 1263 f2fs_rw_hint_to_seg_type(
d5097be5 1264 inode->i_write_hint));
ccfb3000
JK
1265}
1266
e2b4e2bc 1267static int get_data_block_bmap(struct inode *inode, sector_t iblock,
ccfb3000
JK
1268 struct buffer_head *bh_result, int create)
1269{
179448bf 1270 /* Block number less than F2FS MAX BLOCKS */
e0afc4d6 1271 if (unlikely(iblock >= F2FS_I_SB(inode)->max_file_blocks))
179448bf
YH
1272 return -EFBIG;
1273
e2b4e2bc 1274 return __get_data_block(inode, iblock, bh_result, create,
d5097be5
HL
1275 F2FS_GET_BLOCK_BMAP, NULL,
1276 NO_CHECK_TYPE);
ccfb3000
JK
1277}
1278
7f63eb77
JK
1279static inline sector_t logical_to_blk(struct inode *inode, loff_t offset)
1280{
1281 return (offset >> inode->i_blkbits);
1282}
1283
1284static inline loff_t blk_to_logical(struct inode *inode, sector_t blk)
1285{
1286 return (blk << inode->i_blkbits);
1287}
1288
442a9dbd
CY
1289static int f2fs_xattr_fiemap(struct inode *inode,
1290 struct fiemap_extent_info *fieinfo)
1291{
1292 struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
1293 struct page *page;
1294 struct node_info ni;
1295 __u64 phys = 0, len;
1296 __u32 flags;
1297 nid_t xnid = F2FS_I(inode)->i_xattr_nid;
1298 int err = 0;
1299
1300 if (f2fs_has_inline_xattr(inode)) {
1301 int offset;
1302
1303 page = f2fs_grab_cache_page(NODE_MAPPING(sbi),
1304 inode->i_ino, false);
1305 if (!page)
1306 return -ENOMEM;
1307
7735730d
CY
1308 err = f2fs_get_node_info(sbi, inode->i_ino, &ni);
1309 if (err) {
1310 f2fs_put_page(page, 1);
1311 return err;
1312 }
442a9dbd
CY
1313
1314 phys = (__u64)blk_to_logical(inode, ni.blk_addr);
1315 offset = offsetof(struct f2fs_inode, i_addr) +
1316 sizeof(__le32) * (DEF_ADDRS_PER_INODE -
b323fd28 1317 get_inline_xattr_addrs(inode));
442a9dbd
CY
1318
1319 phys += offset;
1320 len = inline_xattr_size(inode);
1321
1322 f2fs_put_page(page, 1);
1323
1324 flags = FIEMAP_EXTENT_DATA_INLINE | FIEMAP_EXTENT_NOT_ALIGNED;
1325
1326 if (!xnid)
1327 flags |= FIEMAP_EXTENT_LAST;
1328
1329 err = fiemap_fill_next_extent(fieinfo, 0, phys, len, flags);
1330 if (err || err == 1)
1331 return err;
1332 }
1333
1334 if (xnid) {
1335 page = f2fs_grab_cache_page(NODE_MAPPING(sbi), xnid, false);
1336 if (!page)
1337 return -ENOMEM;
1338
7735730d
CY
1339 err = f2fs_get_node_info(sbi, xnid, &ni);
1340 if (err) {
1341 f2fs_put_page(page, 1);
1342 return err;
1343 }
442a9dbd
CY
1344
1345 phys = (__u64)blk_to_logical(inode, ni.blk_addr);
1346 len = inode->i_sb->s_blocksize;
1347
1348 f2fs_put_page(page, 1);
1349
1350 flags = FIEMAP_EXTENT_LAST;
1351 }
1352
1353 if (phys)
1354 err = fiemap_fill_next_extent(fieinfo, 0, phys, len, flags);
1355
1356 return (err < 0 ? err : 0);
1357}
1358
9ab70134
JK
1359int f2fs_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
1360 u64 start, u64 len)
1361{
7f63eb77
JK
1362 struct buffer_head map_bh;
1363 sector_t start_blk, last_blk;
da85985c 1364 pgoff_t next_pgofs;
7f63eb77
JK
1365 u64 logical = 0, phys = 0, size = 0;
1366 u32 flags = 0;
7f63eb77
JK
1367 int ret = 0;
1368
c4020b2d
CY
1369 if (fieinfo->fi_flags & FIEMAP_FLAG_CACHE) {
1370 ret = f2fs_precache_extents(inode);
1371 if (ret)
1372 return ret;
1373 }
1374
442a9dbd 1375 ret = fiemap_check_flags(fieinfo, FIEMAP_FLAG_SYNC | FIEMAP_FLAG_XATTR);
7f63eb77
JK
1376 if (ret)
1377 return ret;
1378
f1b43d4c
CY
1379 inode_lock(inode);
1380
442a9dbd
CY
1381 if (fieinfo->fi_flags & FIEMAP_FLAG_XATTR) {
1382 ret = f2fs_xattr_fiemap(inode, fieinfo);
1383 goto out;
1384 }
1385
67f8cf3c
JK
1386 if (f2fs_has_inline_data(inode)) {
1387 ret = f2fs_inline_data_fiemap(inode, fieinfo, start, len);
1388 if (ret != -EAGAIN)
f1b43d4c 1389 goto out;
67f8cf3c
JK
1390 }
1391
7f63eb77
JK
1392 if (logical_to_blk(inode, len) == 0)
1393 len = blk_to_logical(inode, 1);
1394
1395 start_blk = logical_to_blk(inode, start);
1396 last_blk = logical_to_blk(inode, start + len - 1);
9a950d52 1397
7f63eb77
JK
1398next:
1399 memset(&map_bh, 0, sizeof(struct buffer_head));
1400 map_bh.b_size = len;
1401
e2b4e2bc 1402 ret = get_data_block(inode, start_blk, &map_bh, 0,
da85985c 1403 F2FS_GET_BLOCK_FIEMAP, &next_pgofs);
7f63eb77
JK
1404 if (ret)
1405 goto out;
1406
1407 /* HOLE */
1408 if (!buffer_mapped(&map_bh)) {
da85985c 1409 start_blk = next_pgofs;
58736fa6
CY
1410
1411 if (blk_to_logical(inode, start_blk) < blk_to_logical(inode,
1412 F2FS_I_SB(inode)->max_file_blocks))
9a950d52 1413 goto prep_next;
58736fa6 1414
9a950d52
FL
1415 flags |= FIEMAP_EXTENT_LAST;
1416 }
7f63eb77 1417
da5af127
CY
1418 if (size) {
1419 if (f2fs_encrypted_inode(inode))
1420 flags |= FIEMAP_EXTENT_DATA_ENCRYPTED;
1421
9a950d52
FL
1422 ret = fiemap_fill_next_extent(fieinfo, logical,
1423 phys, size, flags);
da5af127 1424 }
7f63eb77 1425
9a950d52
FL
1426 if (start_blk > last_blk || ret)
1427 goto out;
7f63eb77 1428
9a950d52
FL
1429 logical = blk_to_logical(inode, start_blk);
1430 phys = blk_to_logical(inode, map_bh.b_blocknr);
1431 size = map_bh.b_size;
1432 flags = 0;
1433 if (buffer_unwritten(&map_bh))
1434 flags = FIEMAP_EXTENT_UNWRITTEN;
7f63eb77 1435
9a950d52 1436 start_blk += logical_to_blk(inode, size);
7f63eb77 1437
9a950d52 1438prep_next:
7f63eb77
JK
1439 cond_resched();
1440 if (fatal_signal_pending(current))
1441 ret = -EINTR;
1442 else
1443 goto next;
1444out:
1445 if (ret == 1)
1446 ret = 0;
1447
5955102c 1448 inode_unlock(inode);
7f63eb77 1449 return ret;
9ab70134
JK
1450}
1451
f1e88660
JK
1452/*
1453 * This function was originally taken from fs/mpage.c, and customized for f2fs.
1454 * Major change was from block_size == page_size in f2fs by default.
e2e59414
JK
1455 *
1456 * Note that the aops->readpages() function is ONLY used for read-ahead. If
1457 * this function ever deviates from doing just read-ahead, it should either
1458 * use ->readpage() or do the necessary surgery to decouple ->readpages()
1459 * from read-ahead.
f1e88660
JK
1460 */
1461static int f2fs_mpage_readpages(struct address_space *mapping,
1462 struct list_head *pages, struct page *page,
e2e59414 1463 unsigned nr_pages, bool is_readahead)
f1e88660
JK
1464{
1465 struct bio *bio = NULL;
f1e88660
JK
1466 sector_t last_block_in_bio = 0;
1467 struct inode *inode = mapping->host;
1468 const unsigned blkbits = inode->i_blkbits;
1469 const unsigned blocksize = 1 << blkbits;
1470 sector_t block_in_file;
1471 sector_t last_block;
1472 sector_t last_block_in_file;
1473 sector_t block_nr;
f1e88660
JK
1474 struct f2fs_map_blocks map;
1475
1476 map.m_pblk = 0;
1477 map.m_lblk = 0;
1478 map.m_len = 0;
1479 map.m_flags = 0;
da85985c 1480 map.m_next_pgofs = NULL;
c4020b2d 1481 map.m_next_extent = NULL;
d5097be5 1482 map.m_seg_type = NO_CHECK_TYPE;
f1e88660 1483
736c0a74 1484 for (; nr_pages; nr_pages--) {
f1e88660 1485 if (pages) {
939afa94 1486 page = list_last_entry(pages, struct page, lru);
a83d50bc
KM
1487
1488 prefetchw(&page->flags);
f1e88660
JK
1489 list_del(&page->lru);
1490 if (add_to_page_cache_lru(page, mapping,
8a5c743e
MH
1491 page->index,
1492 readahead_gfp_mask(mapping)))
f1e88660
JK
1493 goto next_page;
1494 }
1495
1496 block_in_file = (sector_t)page->index;
1497 last_block = block_in_file + nr_pages;
1498 last_block_in_file = (i_size_read(inode) + blocksize - 1) >>
1499 blkbits;
1500 if (last_block > last_block_in_file)
1501 last_block = last_block_in_file;
1502
1503 /*
1504 * Map blocks using the previous result first.
1505 */
1506 if ((map.m_flags & F2FS_MAP_MAPPED) &&
1507 block_in_file > map.m_lblk &&
1508 block_in_file < (map.m_lblk + map.m_len))
1509 goto got_it;
1510
1511 /*
1512 * Then do more f2fs_map_blocks() calls until we are
1513 * done with this page.
1514 */
1515 map.m_flags = 0;
1516
1517 if (block_in_file < last_block) {
1518 map.m_lblk = block_in_file;
1519 map.m_len = last_block - block_in_file;
1520
46c9e141 1521 if (f2fs_map_blocks(inode, &map, 0,
f2220c7f 1522 F2FS_GET_BLOCK_DEFAULT))
f1e88660
JK
1523 goto set_error_page;
1524 }
1525got_it:
1526 if ((map.m_flags & F2FS_MAP_MAPPED)) {
1527 block_nr = map.m_pblk + block_in_file - map.m_lblk;
1528 SetPageMappedToDisk(page);
1529
1530 if (!PageUptodate(page) && !cleancache_get_page(page)) {
1531 SetPageUptodate(page);
1532 goto confused;
1533 }
c9b60788
CY
1534
1535 if (!f2fs_is_valid_blkaddr(F2FS_I_SB(inode), block_nr,
1536 DATA_GENERIC))
1537 goto set_error_page;
f1e88660 1538 } else {
09cbfeaf 1539 zero_user_segment(page, 0, PAGE_SIZE);
237c0790
JK
1540 if (!PageUptodate(page))
1541 SetPageUptodate(page);
f1e88660
JK
1542 unlock_page(page);
1543 goto next_page;
1544 }
1545
1546 /*
1547 * This page will go to BIO. Do we need to send this
1548 * BIO off first?
1549 */
3c62be17
JK
1550 if (bio && (last_block_in_bio != block_nr - 1 ||
1551 !__same_bdev(F2FS_I_SB(inode), block_nr, bio))) {
f1e88660 1552submit_and_realloc:
4fc29c1a 1553 __submit_bio(F2FS_I_SB(inode), bio, DATA);
f1e88660
JK
1554 bio = NULL;
1555 }
1556 if (bio == NULL) {
e2e59414
JK
1557 bio = f2fs_grab_read_bio(inode, block_nr, nr_pages,
1558 is_readahead ? REQ_RAHEAD : 0);
1d353eb7
JK
1559 if (IS_ERR(bio)) {
1560 bio = NULL;
f1e88660 1561 goto set_error_page;
4375a336 1562 }
f1e88660
JK
1563 }
1564
0ded69f6
JK
1565 /*
1566 * If the page is under writeback, we need to wait for
1567 * its completion to see the correct decrypted data.
1568 */
1569 f2fs_wait_on_block_writeback(inode, block_nr);
1570
f1e88660
JK
1571 if (bio_add_page(bio, page, blocksize, 0) < blocksize)
1572 goto submit_and_realloc;
1573
1574 last_block_in_bio = block_nr;
1575 goto next_page;
1576set_error_page:
1577 SetPageError(page);
09cbfeaf 1578 zero_user_segment(page, 0, PAGE_SIZE);
f1e88660
JK
1579 unlock_page(page);
1580 goto next_page;
1581confused:
1582 if (bio) {
4fc29c1a 1583 __submit_bio(F2FS_I_SB(inode), bio, DATA);
f1e88660
JK
1584 bio = NULL;
1585 }
1586 unlock_page(page);
1587next_page:
1588 if (pages)
09cbfeaf 1589 put_page(page);
f1e88660
JK
1590 }
1591 BUG_ON(pages && !list_empty(pages));
1592 if (bio)
4fc29c1a 1593 __submit_bio(F2FS_I_SB(inode), bio, DATA);
f1e88660
JK
1594 return 0;
1595}
1596
eb47b800
JK
1597static int f2fs_read_data_page(struct file *file, struct page *page)
1598{
9ffe0fb5 1599 struct inode *inode = page->mapping->host;
b3d208f9 1600 int ret = -EAGAIN;
9ffe0fb5 1601
c20e89cd
CY
1602 trace_f2fs_readpage(page, DATA);
1603
e1c42045 1604 /* If the file has inline data, try to read it directly */
9ffe0fb5
HL
1605 if (f2fs_has_inline_data(inode))
1606 ret = f2fs_read_inline_data(inode, page);
b3d208f9 1607 if (ret == -EAGAIN)
e2e59414 1608 ret = f2fs_mpage_readpages(page->mapping, NULL, page, 1, false);
9ffe0fb5 1609 return ret;
eb47b800
JK
1610}
1611
1612static int f2fs_read_data_pages(struct file *file,
1613 struct address_space *mapping,
1614 struct list_head *pages, unsigned nr_pages)
1615{
71cb4aff 1616 struct inode *inode = mapping->host;
939afa94 1617 struct page *page = list_last_entry(pages, struct page, lru);
b8c29400
CY
1618
1619 trace_f2fs_readpages(inode, page, nr_pages);
9ffe0fb5
HL
1620
1621 /* If the file has inline data, skip readpages */
1622 if (f2fs_has_inline_data(inode))
1623 return 0;
1624
e2e59414 1625 return f2fs_mpage_readpages(mapping, pages, NULL, nr_pages, true);
eb47b800
JK
1626}
1627
7eab0c0d
HP
1628static int encrypt_one_page(struct f2fs_io_info *fio)
1629{
1630 struct inode *inode = fio->page->mapping->host;
6aa58d8a 1631 struct page *mpage;
7eab0c0d
HP
1632 gfp_t gfp_flags = GFP_NOFS;
1633
1958593e 1634 if (!f2fs_encrypted_file(inode))
7eab0c0d
HP
1635 return 0;
1636
6dbb1796 1637 /* wait for GCed page writeback via META_MAPPING */
0ded69f6 1638 f2fs_wait_on_block_writeback(inode, fio->old_blkaddr);
7eab0c0d
HP
1639
1640retry_encrypt:
1641 fio->encrypted_page = fscrypt_encrypt_page(inode, fio->page,
1642 PAGE_SIZE, 0, fio->page->index, gfp_flags);
6aa58d8a
CY
1643 if (IS_ERR(fio->encrypted_page)) {
1644 /* flush pending IOs and wait for a while in the ENOMEM case */
1645 if (PTR_ERR(fio->encrypted_page) == -ENOMEM) {
1646 f2fs_flush_merged_writes(fio->sbi);
1647 congestion_wait(BLK_RW_ASYNC, HZ/50);
1648 gfp_flags |= __GFP_NOFAIL;
1649 goto retry_encrypt;
1650 }
1651 return PTR_ERR(fio->encrypted_page);
1652 }
7eab0c0d 1653
6aa58d8a
CY
1654 mpage = find_lock_page(META_MAPPING(fio->sbi), fio->old_blkaddr);
1655 if (mpage) {
1656 if (PageUptodate(mpage))
1657 memcpy(page_address(mpage),
1658 page_address(fio->encrypted_page), PAGE_SIZE);
1659 f2fs_put_page(mpage, 1);
7eab0c0d 1660 }
6aa58d8a 1661 return 0;
7eab0c0d
HP
1662}
1663
bb9e3bb8
CY
1664static inline bool check_inplace_update_policy(struct inode *inode,
1665 struct f2fs_io_info *fio)
7eab0c0d 1666{
bb9e3bb8
CY
1667 struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
1668 unsigned int policy = SM_I(sbi)->ipu_policy;
7eab0c0d 1669
bb9e3bb8
CY
1670 if (policy & (0x1 << F2FS_IPU_FORCE))
1671 return true;
4d57b86d 1672 if (policy & (0x1 << F2FS_IPU_SSR) && f2fs_need_SSR(sbi))
bb9e3bb8
CY
1673 return true;
1674 if (policy & (0x1 << F2FS_IPU_UTIL) &&
1675 utilization(sbi) > SM_I(sbi)->min_ipu_util)
1676 return true;
4d57b86d 1677 if (policy & (0x1 << F2FS_IPU_SSR_UTIL) && f2fs_need_SSR(sbi) &&
bb9e3bb8
CY
1678 utilization(sbi) > SM_I(sbi)->min_ipu_util)
1679 return true;
1680
1681 /*
1682 * IPU for rewrite async pages
1683 */
1684 if (policy & (0x1 << F2FS_IPU_ASYNC) &&
1685 fio && fio->op == REQ_OP_WRITE &&
1686 !(fio->op_flags & REQ_SYNC) &&
1687 !f2fs_encrypted_inode(inode))
1688 return true;
1689
1690 /* this is only set during fdatasync */
1691 if (policy & (0x1 << F2FS_IPU_FSYNC) &&
1692 is_inode_flag_set(inode, FI_NEED_IPU))
1693 return true;
1694
1695 return false;
1696}
1697
4d57b86d 1698bool f2fs_should_update_inplace(struct inode *inode, struct f2fs_io_info *fio)
bb9e3bb8 1699{
1ad71a27
JK
1700 if (f2fs_is_pinned_file(inode))
1701 return true;
bb9e3bb8
CY
1702
1703 /* if this is cold file, we should overwrite to avoid fragmentation */
1704 if (file_is_cold(inode))
1705 return true;
1706
1707 return check_inplace_update_policy(inode, fio);
1708}
1709
4d57b86d 1710bool f2fs_should_update_outplace(struct inode *inode, struct f2fs_io_info *fio)
bb9e3bb8
CY
1711{
1712 struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
1713
1714 if (test_opt(sbi, LFS))
1715 return true;
1716 if (S_ISDIR(inode->i_mode))
1717 return true;
1718 if (f2fs_is_atomic_file(inode))
1719 return true;
1720 if (fio) {
1721 if (is_cold_data(fio->page))
1722 return true;
1723 if (IS_ATOMIC_WRITTEN_PAGE(fio->page))
1724 return true;
1725 }
1726 return false;
1727}
1728
7eab0c0d
HP
1729static inline bool need_inplace_update(struct f2fs_io_info *fio)
1730{
1731 struct inode *inode = fio->page->mapping->host;
1732
4d57b86d 1733 if (f2fs_should_update_outplace(inode, fio))
7eab0c0d
HP
1734 return false;
1735
4d57b86d 1736 return f2fs_should_update_inplace(inode, fio);
7eab0c0d
HP
1737}
1738
4d57b86d 1739int f2fs_do_write_data_page(struct f2fs_io_info *fio)
eb47b800 1740{
05ca3632 1741 struct page *page = fio->page;
eb47b800 1742 struct inode *inode = page->mapping->host;
eb47b800 1743 struct dnode_of_data dn;
e959c8f5 1744 struct extent_info ei = {0,0,0};
7735730d 1745 struct node_info ni;
e959c8f5 1746 bool ipu_force = false;
eb47b800
JK
1747 int err = 0;
1748
1749 set_new_dnode(&dn, inode, NULL, NULL, 0);
e959c8f5
HP
1750 if (need_inplace_update(fio) &&
1751 f2fs_lookup_extent_cache(inode, page->index, &ei)) {
1752 fio->old_blkaddr = ei.blk + page->index - ei.fofs;
a817737e 1753
c9b60788
CY
1754 if (!f2fs_is_valid_blkaddr(fio->sbi, fio->old_blkaddr,
1755 DATA_GENERIC))
1756 return -EFAULT;
1757
1758 ipu_force = true;
1759 fio->need_lock = LOCK_DONE;
1760 goto got_it;
e959c8f5 1761 }
279d6df2 1762
d29460e5
JK
1763 /* Deadlock due to between page->lock and f2fs_lock_op */
1764 if (fio->need_lock == LOCK_REQ && !f2fs_trylock_op(fio->sbi))
1765 return -EAGAIN;
279d6df2 1766
4d57b86d 1767 err = f2fs_get_dnode_of_data(&dn, page->index, LOOKUP_NODE);
eb47b800 1768 if (err)
279d6df2 1769 goto out;
eb47b800 1770
28bc106b 1771 fio->old_blkaddr = dn.data_blkaddr;
eb47b800
JK
1772
1773 /* This page is already truncated */
7a9d7548 1774 if (fio->old_blkaddr == NULL_ADDR) {
2bca1e23 1775 ClearPageUptodate(page);
eb47b800 1776 goto out_writepage;
2bca1e23 1777 }
e959c8f5 1778got_it:
c9b60788
CY
1779 if (__is_valid_data_blkaddr(fio->old_blkaddr) &&
1780 !f2fs_is_valid_blkaddr(fio->sbi, fio->old_blkaddr,
1781 DATA_GENERIC)) {
1782 err = -EFAULT;
1783 goto out_writepage;
1784 }
eb47b800
JK
1785 /*
1786 * If current allocation needs SSR,
1787 * it had better in-place writes for updated data.
1788 */
e1da7872 1789 if (ipu_force || (is_valid_data_blkaddr(fio->sbi, fio->old_blkaddr) &&
7b525dd0 1790 need_inplace_update(fio))) {
cc15620b
JK
1791 err = encrypt_one_page(fio);
1792 if (err)
1793 goto out_writepage;
1794
1795 set_page_writeback(page);
17c50035 1796 ClearPageError(page);
279d6df2 1797 f2fs_put_dnode(&dn);
cc15620b 1798 if (fio->need_lock == LOCK_REQ)
279d6df2 1799 f2fs_unlock_op(fio->sbi);
4d57b86d 1800 err = f2fs_inplace_write_data(fio);
7eab0c0d 1801 trace_f2fs_do_write_data_page(fio->page, IPU);
91942321 1802 set_inode_flag(inode, FI_UPDATE_WRITE);
279d6df2 1803 return err;
eb47b800 1804 }
279d6df2 1805
cc15620b
JK
1806 if (fio->need_lock == LOCK_RETRY) {
1807 if (!f2fs_trylock_op(fio->sbi)) {
1808 err = -EAGAIN;
1809 goto out_writepage;
1810 }
1811 fio->need_lock = LOCK_REQ;
1812 }
1813
7735730d
CY
1814 err = f2fs_get_node_info(fio->sbi, dn.nid, &ni);
1815 if (err)
1816 goto out_writepage;
1817
1818 fio->version = ni.version;
1819
cc15620b
JK
1820 err = encrypt_one_page(fio);
1821 if (err)
1822 goto out_writepage;
1823
1824 set_page_writeback(page);
17c50035 1825 ClearPageError(page);
cc15620b 1826
279d6df2 1827 /* LFS mode write path */
4d57b86d 1828 f2fs_outplace_write_data(&dn, fio);
279d6df2
HP
1829 trace_f2fs_do_write_data_page(page, OPU);
1830 set_inode_flag(inode, FI_APPEND_WRITE);
1831 if (page->index == 0)
1832 set_inode_flag(inode, FI_FIRST_BLOCK_WRITTEN);
eb47b800
JK
1833out_writepage:
1834 f2fs_put_dnode(&dn);
279d6df2 1835out:
cc15620b 1836 if (fio->need_lock == LOCK_REQ)
279d6df2 1837 f2fs_unlock_op(fio->sbi);
eb47b800
JK
1838 return err;
1839}
1840
d68f735b 1841static int __write_data_page(struct page *page, bool *submitted,
b0af6d49
CY
1842 struct writeback_control *wbc,
1843 enum iostat_type io_type)
eb47b800
JK
1844{
1845 struct inode *inode = page->mapping->host;
4081363f 1846 struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
eb47b800
JK
1847 loff_t i_size = i_size_read(inode);
1848 const pgoff_t end_index = ((unsigned long long) i_size)
09cbfeaf 1849 >> PAGE_SHIFT;
26de9b11 1850 loff_t psize = (page->index + 1) << PAGE_SHIFT;
9ffe0fb5 1851 unsigned offset = 0;
39936837 1852 bool need_balance_fs = false;
eb47b800 1853 int err = 0;
458e6197 1854 struct f2fs_io_info fio = {
05ca3632 1855 .sbi = sbi,
39d787be 1856 .ino = inode->i_ino,
458e6197 1857 .type = DATA,
04d328de 1858 .op = REQ_OP_WRITE,
7637241e 1859 .op_flags = wbc_to_write_flags(wbc),
e959c8f5 1860 .old_blkaddr = NULL_ADDR,
05ca3632 1861 .page = page,
4375a336 1862 .encrypted_page = NULL,
d68f735b 1863 .submitted = false,
cc15620b 1864 .need_lock = LOCK_RETRY,
b0af6d49 1865 .io_type = io_type,
578c6478 1866 .io_wbc = wbc,
458e6197 1867 };
eb47b800 1868
ecda0de3
CY
1869 trace_f2fs_writepage(page, DATA);
1870
db198ae0
CY
1871 /* we should bypass data pages to proceed the kworkder jobs */
1872 if (unlikely(f2fs_cp_error(sbi))) {
1873 mapping_set_error(page->mapping, -EIO);
1174abfd
CY
1874 /*
1875 * don't drop any dirty dentry pages for keeping lastest
1876 * directory structure.
1877 */
1878 if (S_ISDIR(inode->i_mode))
1879 goto redirty_out;
db198ae0
CY
1880 goto out;
1881 }
1882
0771fcc7
CY
1883 if (unlikely(is_sbi_flag_set(sbi, SBI_POR_DOING)))
1884 goto redirty_out;
1885
eb47b800 1886 if (page->index < end_index)
39936837 1887 goto write;
eb47b800
JK
1888
1889 /*
1890 * If the offset is out-of-range of file size,
1891 * this page does not have to be written to disk.
1892 */
09cbfeaf 1893 offset = i_size & (PAGE_SIZE - 1);
76f60268 1894 if ((page->index >= end_index + 1) || !offset)
39936837 1895 goto out;
eb47b800 1896
09cbfeaf 1897 zero_user_segment(page, offset, PAGE_SIZE);
39936837 1898write:
1e84371f
JK
1899 if (f2fs_is_drop_cache(inode))
1900 goto out;
e6e5f561
JK
1901 /* we should not write 0'th page having journal header */
1902 if (f2fs_is_volatile_file(inode) && (!page->index ||
1903 (!wbc->for_reclaim &&
4d57b86d 1904 f2fs_available_free_memory(sbi, BASE_CHECK))))
1e84371f 1905 goto redirty_out;
eb47b800 1906
39936837 1907 /* Dentry blocks are controlled by checkpoint */
eb47b800 1908 if (S_ISDIR(inode->i_mode)) {
cc15620b 1909 fio.need_lock = LOCK_DONE;
4d57b86d 1910 err = f2fs_do_write_data_page(&fio);
8618b881
JK
1911 goto done;
1912 }
9ffe0fb5 1913
8618b881 1914 if (!wbc->for_reclaim)
39936837 1915 need_balance_fs = true;
7f3037a5 1916 else if (has_not_enough_free_secs(sbi, 0, 0))
39936837 1917 goto redirty_out;
ef095d19
JK
1918 else
1919 set_inode_flag(inode, FI_HOT_DATA);
eb47b800 1920
b3d208f9 1921 err = -EAGAIN;
dd7b2333 1922 if (f2fs_has_inline_data(inode)) {
b3d208f9 1923 err = f2fs_write_inline_data(inode, page);
dd7b2333
YH
1924 if (!err)
1925 goto out;
1926 }
279d6df2 1927
cc15620b 1928 if (err == -EAGAIN) {
4d57b86d 1929 err = f2fs_do_write_data_page(&fio);
cc15620b
JK
1930 if (err == -EAGAIN) {
1931 fio.need_lock = LOCK_REQ;
4d57b86d 1932 err = f2fs_do_write_data_page(&fio);
cc15620b
JK
1933 }
1934 }
a0d00fad 1935
eb449797
CY
1936 if (err) {
1937 file_set_keep_isize(inode);
1938 } else {
1939 down_write(&F2FS_I(inode)->i_sem);
1940 if (F2FS_I(inode)->last_disk_size < psize)
1941 F2FS_I(inode)->last_disk_size = psize;
1942 up_write(&F2FS_I(inode)->i_sem);
1943 }
279d6df2 1944
8618b881
JK
1945done:
1946 if (err && err != -ENOENT)
1947 goto redirty_out;
eb47b800 1948
39936837 1949out:
a7ffdbe2 1950 inode_dec_dirty_pages(inode);
2bca1e23
JK
1951 if (err)
1952 ClearPageUptodate(page);
0c3a5797
CY
1953
1954 if (wbc->for_reclaim) {
bab475c5 1955 f2fs_submit_merged_write_cond(sbi, NULL, page, 0, DATA);
ef095d19 1956 clear_inode_flag(inode, FI_HOT_DATA);
4d57b86d 1957 f2fs_remove_dirty_inode(inode);
d68f735b 1958 submitted = NULL;
0c3a5797
CY
1959 }
1960
eb47b800 1961 unlock_page(page);
a7881893
JK
1962 if (!S_ISDIR(inode->i_mode))
1963 f2fs_balance_fs(sbi, need_balance_fs);
0c3a5797 1964
d68f735b 1965 if (unlikely(f2fs_cp_error(sbi))) {
b9109b0e 1966 f2fs_submit_merged_write(sbi, DATA);
d68f735b
JK
1967 submitted = NULL;
1968 }
1969
1970 if (submitted)
1971 *submitted = fio.submitted;
0c3a5797 1972
eb47b800
JK
1973 return 0;
1974
eb47b800 1975redirty_out:
76f60268 1976 redirty_page_for_writepage(wbc, page);
5b19d284
JK
1977 /*
1978 * pageout() in MM traslates EAGAIN, so calls handle_write_error()
1979 * -> mapping_set_error() -> set_bit(AS_EIO, ...).
1980 * file_write_and_wait_range() will see EIO error, which is critical
1981 * to return value of fsync() followed by atomic_write failure to user.
1982 */
1983 if (!err || wbc->for_reclaim)
0002b61b 1984 return AOP_WRITEPAGE_ACTIVATE;
b230e6ca
JK
1985 unlock_page(page);
1986 return err;
fa9150a8
NJ
1987}
1988
f566bae8
JK
1989static int f2fs_write_data_page(struct page *page,
1990 struct writeback_control *wbc)
1991{
b0af6d49 1992 return __write_data_page(page, NULL, wbc, FS_DATA_IO);
f566bae8
JK
1993}
1994
8f46dcae
CY
1995/*
1996 * This function was copied from write_cche_pages from mm/page-writeback.c.
1997 * The major change is making write step of cold data page separately from
1998 * warm/hot data page.
1999 */
2000static int f2fs_write_cache_pages(struct address_space *mapping,
b0af6d49
CY
2001 struct writeback_control *wbc,
2002 enum iostat_type io_type)
8f46dcae
CY
2003{
2004 int ret = 0;
2005 int done = 0;
2006 struct pagevec pvec;
c29fd0c0 2007 struct f2fs_sb_info *sbi = F2FS_M_SB(mapping);
8f46dcae
CY
2008 int nr_pages;
2009 pgoff_t uninitialized_var(writeback_index);
2010 pgoff_t index;
2011 pgoff_t end; /* Inclusive */
2012 pgoff_t done_index;
2013 int cycled;
2014 int range_whole = 0;
2015 int tag;
bab475c5 2016 int nwritten = 0;
8f46dcae 2017
86679820 2018 pagevec_init(&pvec);
46ae957f 2019
ef095d19
JK
2020 if (get_dirty_pages(mapping->host) <=
2021 SM_I(F2FS_M_SB(mapping))->min_hot_blocks)
2022 set_inode_flag(mapping->host, FI_HOT_DATA);
2023 else
2024 clear_inode_flag(mapping->host, FI_HOT_DATA);
2025
8f46dcae
CY
2026 if (wbc->range_cyclic) {
2027 writeback_index = mapping->writeback_index; /* prev offset */
2028 index = writeback_index;
2029 if (index == 0)
2030 cycled = 1;
2031 else
2032 cycled = 0;
2033 end = -1;
2034 } else {
09cbfeaf
KS
2035 index = wbc->range_start >> PAGE_SHIFT;
2036 end = wbc->range_end >> PAGE_SHIFT;
8f46dcae
CY
2037 if (wbc->range_start == 0 && wbc->range_end == LLONG_MAX)
2038 range_whole = 1;
2039 cycled = 1; /* ignore range_cyclic tests */
2040 }
2041 if (wbc->sync_mode == WB_SYNC_ALL || wbc->tagged_writepages)
2042 tag = PAGECACHE_TAG_TOWRITE;
2043 else
2044 tag = PAGECACHE_TAG_DIRTY;
2045retry:
2046 if (wbc->sync_mode == WB_SYNC_ALL || wbc->tagged_writepages)
2047 tag_pages_for_writeback(mapping, index, end);
2048 done_index = index;
2049 while (!done && (index <= end)) {
2050 int i;
2051
69c4f35d 2052 nr_pages = pagevec_lookup_range_tag(&pvec, mapping, &index, end,
67fd707f 2053 tag);
8f46dcae
CY
2054 if (nr_pages == 0)
2055 break;
2056
2057 for (i = 0; i < nr_pages; i++) {
2058 struct page *page = pvec.pages[i];
d68f735b 2059 bool submitted = false;
8f46dcae 2060
f8de4331 2061 /* give a priority to WB_SYNC threads */
c29fd0c0 2062 if (atomic_read(&sbi->wb_sync_req[DATA]) &&
f8de4331
CY
2063 wbc->sync_mode == WB_SYNC_NONE) {
2064 done = 1;
2065 break;
2066 }
2067
8f46dcae 2068 done_index = page->index;
d29460e5 2069retry_write:
8f46dcae
CY
2070 lock_page(page);
2071
2072 if (unlikely(page->mapping != mapping)) {
2073continue_unlock:
2074 unlock_page(page);
2075 continue;
2076 }
2077
2078 if (!PageDirty(page)) {
2079 /* someone wrote it for us */
2080 goto continue_unlock;
2081 }
2082
8f46dcae
CY
2083 if (PageWriteback(page)) {
2084 if (wbc->sync_mode != WB_SYNC_NONE)
fec1d657
JK
2085 f2fs_wait_on_page_writeback(page,
2086 DATA, true);
8f46dcae
CY
2087 else
2088 goto continue_unlock;
2089 }
2090
2091 BUG_ON(PageWriteback(page));
2092 if (!clear_page_dirty_for_io(page))
2093 goto continue_unlock;
2094
b0af6d49 2095 ret = __write_data_page(page, &submitted, wbc, io_type);
8f46dcae 2096 if (unlikely(ret)) {
0002b61b
CY
2097 /*
2098 * keep nr_to_write, since vfs uses this to
2099 * get # of written pages.
2100 */
2101 if (ret == AOP_WRITEPAGE_ACTIVATE) {
2102 unlock_page(page);
2103 ret = 0;
2104 continue;
d29460e5
JK
2105 } else if (ret == -EAGAIN) {
2106 ret = 0;
2107 if (wbc->sync_mode == WB_SYNC_ALL) {
2108 cond_resched();
2109 congestion_wait(BLK_RW_ASYNC,
2110 HZ/50);
2111 goto retry_write;
2112 }
2113 continue;
0002b61b 2114 }
b230e6ca
JK
2115 done_index = page->index + 1;
2116 done = 1;
2117 break;
d68f735b 2118 } else if (submitted) {
bab475c5 2119 nwritten++;
8f46dcae
CY
2120 }
2121
f8de4331 2122 if (--wbc->nr_to_write <= 0 &&
687de7f1 2123 wbc->sync_mode == WB_SYNC_NONE) {
8f46dcae
CY
2124 done = 1;
2125 break;
2126 }
2127 }
2128 pagevec_release(&pvec);
2129 cond_resched();
2130 }
2131
8f46dcae
CY
2132 if (!cycled && !done) {
2133 cycled = 1;
2134 index = 0;
2135 end = writeback_index - 1;
2136 goto retry;
2137 }
2138 if (wbc->range_cyclic || (range_whole && wbc->nr_to_write > 0))
2139 mapping->writeback_index = done_index;
2140
bab475c5 2141 if (nwritten)
b9109b0e 2142 f2fs_submit_merged_write_cond(F2FS_M_SB(mapping), mapping->host,
bab475c5 2143 NULL, 0, DATA);
6ca56ca4 2144
8f46dcae
CY
2145 return ret;
2146}
2147
853137ce
JK
2148static inline bool __should_serialize_io(struct inode *inode,
2149 struct writeback_control *wbc)
2150{
2151 if (!S_ISREG(inode->i_mode))
2152 return false;
2153 if (wbc->sync_mode != WB_SYNC_ALL)
2154 return true;
2155 if (get_dirty_pages(inode) >= SM_I(F2FS_I_SB(inode))->min_seq_blocks)
2156 return true;
2157 return false;
2158}
2159
fc99fe27 2160static int __f2fs_write_data_pages(struct address_space *mapping,
b0af6d49
CY
2161 struct writeback_control *wbc,
2162 enum iostat_type io_type)
eb47b800
JK
2163{
2164 struct inode *inode = mapping->host;
4081363f 2165 struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
9dfa1baf 2166 struct blk_plug plug;
eb47b800 2167 int ret;
853137ce 2168 bool locked = false;
eb47b800 2169
cfb185a1 2170 /* deal with chardevs and other special file */
2171 if (!mapping->a_ops->writepage)
2172 return 0;
2173
6a290544
CY
2174 /* skip writing if there is no dirty page in this inode */
2175 if (!get_dirty_pages(inode) && wbc->sync_mode == WB_SYNC_NONE)
2176 return 0;
2177
0771fcc7
CY
2178 /* during POR, we don't need to trigger writepage at all. */
2179 if (unlikely(is_sbi_flag_set(sbi, SBI_POR_DOING)))
2180 goto skip_write;
2181
a1257023
JK
2182 if (S_ISDIR(inode->i_mode) && wbc->sync_mode == WB_SYNC_NONE &&
2183 get_dirty_pages(inode) < nr_pages_to_skip(sbi, DATA) &&
4d57b86d 2184 f2fs_available_free_memory(sbi, DIRTY_DENTS))
a1257023
JK
2185 goto skip_write;
2186
d323d005 2187 /* skip writing during file defragment */
91942321 2188 if (is_inode_flag_set(inode, FI_DO_DEFRAG))
d323d005
CY
2189 goto skip_write;
2190
d31c7c3f
YH
2191 trace_f2fs_writepages(mapping->host, wbc, DATA);
2192
687de7f1
JK
2193 /* to avoid spliting IOs due to mixed WB_SYNC_ALL and WB_SYNC_NONE */
2194 if (wbc->sync_mode == WB_SYNC_ALL)
c29fd0c0
CY
2195 atomic_inc(&sbi->wb_sync_req[DATA]);
2196 else if (atomic_read(&sbi->wb_sync_req[DATA]))
687de7f1
JK
2197 goto skip_write;
2198
853137ce
JK
2199 if (__should_serialize_io(inode, wbc)) {
2200 mutex_lock(&sbi->writepages);
2201 locked = true;
2202 }
2203
9dfa1baf 2204 blk_start_plug(&plug);
b0af6d49 2205 ret = f2fs_write_cache_pages(mapping, wbc, io_type);
9dfa1baf 2206 blk_finish_plug(&plug);
687de7f1 2207
853137ce
JK
2208 if (locked)
2209 mutex_unlock(&sbi->writepages);
2210
687de7f1 2211 if (wbc->sync_mode == WB_SYNC_ALL)
c29fd0c0 2212 atomic_dec(&sbi->wb_sync_req[DATA]);
28ea6162
JK
2213 /*
2214 * if some pages were truncated, we cannot guarantee its mapping->host
2215 * to detect pending bios.
2216 */
458e6197 2217
4d57b86d 2218 f2fs_remove_dirty_inode(inode);
eb47b800 2219 return ret;
d3baf95d
JK
2220
2221skip_write:
a7ffdbe2 2222 wbc->pages_skipped += get_dirty_pages(inode);
d31c7c3f 2223 trace_f2fs_writepages(mapping->host, wbc, DATA);
d3baf95d 2224 return 0;
eb47b800
JK
2225}
2226
b0af6d49
CY
2227static int f2fs_write_data_pages(struct address_space *mapping,
2228 struct writeback_control *wbc)
2229{
2230 struct inode *inode = mapping->host;
2231
2232 return __f2fs_write_data_pages(mapping, wbc,
2233 F2FS_I(inode)->cp_task == current ?
2234 FS_CP_DATA_IO : FS_DATA_IO);
2235}
2236
3aab8f82
CY
2237static void f2fs_write_failed(struct address_space *mapping, loff_t to)
2238{
2239 struct inode *inode = mapping->host;
819d9153 2240 loff_t i_size = i_size_read(inode);
3aab8f82 2241
819d9153 2242 if (to > i_size) {
a33c1502 2243 down_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
6f8d4455 2244 down_write(&F2FS_I(inode)->i_mmap_sem);
a33c1502 2245
819d9153 2246 truncate_pagecache(inode, i_size);
4d57b86d 2247 f2fs_truncate_blocks(inode, i_size, true);
a33c1502 2248
5a3a2d83 2249 up_write(&F2FS_I(inode)->i_mmap_sem);
6f8d4455 2250 up_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
3aab8f82
CY
2251 }
2252}
2253
2aadac08
JK
2254static int prepare_write_begin(struct f2fs_sb_info *sbi,
2255 struct page *page, loff_t pos, unsigned len,
2256 block_t *blk_addr, bool *node_changed)
2257{
2258 struct inode *inode = page->mapping->host;
2259 pgoff_t index = page->index;
2260 struct dnode_of_data dn;
2261 struct page *ipage;
b4d07a3e 2262 bool locked = false;
e15882b6 2263 struct extent_info ei = {0,0,0};
2aadac08
JK
2264 int err = 0;
2265
24b84912
JK
2266 /*
2267 * we already allocated all the blocks, so we don't need to get
2268 * the block addresses when there is no need to fill the page.
2269 */
dc91de78
JK
2270 if (!f2fs_has_inline_data(inode) && len == PAGE_SIZE &&
2271 !is_inode_flag_set(inode, FI_NO_PREALLOC))
24b84912
JK
2272 return 0;
2273
b4d07a3e 2274 if (f2fs_has_inline_data(inode) ||
09cbfeaf 2275 (pos & PAGE_MASK) >= i_size_read(inode)) {
59c9081b 2276 __do_map_lock(sbi, F2FS_GET_BLOCK_PRE_AIO, true);
b4d07a3e
JK
2277 locked = true;
2278 }
2279restart:
2aadac08 2280 /* check inline_data */
4d57b86d 2281 ipage = f2fs_get_node_page(sbi, inode->i_ino);
2aadac08
JK
2282 if (IS_ERR(ipage)) {
2283 err = PTR_ERR(ipage);
2284 goto unlock_out;
2285 }
2286
2287 set_new_dnode(&dn, inode, ipage, ipage, 0);
2288
2289 if (f2fs_has_inline_data(inode)) {
f2470371 2290 if (pos + len <= MAX_INLINE_DATA(inode)) {
4d57b86d 2291 f2fs_do_read_inline_data(page, ipage);
91942321 2292 set_inode_flag(inode, FI_DATA_EXIST);
ab47036d
CY
2293 if (inode->i_nlink)
2294 set_inline_node(ipage);
2aadac08
JK
2295 } else {
2296 err = f2fs_convert_inline_page(&dn, page);
2297 if (err)
b4d07a3e
JK
2298 goto out;
2299 if (dn.data_blkaddr == NULL_ADDR)
2300 err = f2fs_get_block(&dn, index);
2301 }
2302 } else if (locked) {
2303 err = f2fs_get_block(&dn, index);
2304 } else {
2305 if (f2fs_lookup_extent_cache(inode, index, &ei)) {
2306 dn.data_blkaddr = ei.blk + index - ei.fofs;
2307 } else {
b4d07a3e 2308 /* hole case */
4d57b86d 2309 err = f2fs_get_dnode_of_data(&dn, index, LOOKUP_NODE);
4da7bf5a 2310 if (err || dn.data_blkaddr == NULL_ADDR) {
b4d07a3e 2311 f2fs_put_dnode(&dn);
59c9081b
YH
2312 __do_map_lock(sbi, F2FS_GET_BLOCK_PRE_AIO,
2313 true);
b4d07a3e
JK
2314 locked = true;
2315 goto restart;
2316 }
2aadac08
JK
2317 }
2318 }
b4d07a3e 2319
2aadac08
JK
2320 /* convert_inline_page can make node_changed */
2321 *blk_addr = dn.data_blkaddr;
2322 *node_changed = dn.node_changed;
b4d07a3e 2323out:
2aadac08
JK
2324 f2fs_put_dnode(&dn);
2325unlock_out:
b4d07a3e 2326 if (locked)
59c9081b 2327 __do_map_lock(sbi, F2FS_GET_BLOCK_PRE_AIO, false);
2aadac08
JK
2328 return err;
2329}
2330
eb47b800
JK
2331static int f2fs_write_begin(struct file *file, struct address_space *mapping,
2332 loff_t pos, unsigned len, unsigned flags,
2333 struct page **pagep, void **fsdata)
2334{
2335 struct inode *inode = mapping->host;
4081363f 2336 struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
86531d6b 2337 struct page *page = NULL;
09cbfeaf 2338 pgoff_t index = ((unsigned long long) pos) >> PAGE_SHIFT;
a2e2e76b 2339 bool need_balance = false, drop_atomic = false;
2aadac08 2340 block_t blkaddr = NULL_ADDR;
eb47b800
JK
2341 int err = 0;
2342
62aed044
CY
2343 trace_f2fs_write_begin(inode, pos, len, flags);
2344
455e3a58
JK
2345 if ((f2fs_is_atomic_file(inode) &&
2346 !f2fs_available_free_memory(sbi, INMEM_PAGES)) ||
2347 is_inode_flag_set(inode, FI_ATOMIC_REVOKE_REQUEST)) {
57864ae5 2348 err = -ENOMEM;
a2e2e76b 2349 drop_atomic = true;
57864ae5
JK
2350 goto fail;
2351 }
2352
5f727395
JK
2353 /*
2354 * We should check this at this moment to avoid deadlock on inode page
2355 * and #0 page. The locking rule for inline_data conversion should be:
2356 * lock_page(page #0) -> lock_page(inode_page)
2357 */
2358 if (index != 0) {
2359 err = f2fs_convert_inline_inode(inode);
2360 if (err)
2361 goto fail;
2362 }
afcb7ca0 2363repeat:
86d54795
JK
2364 /*
2365 * Do not use grab_cache_page_write_begin() to avoid deadlock due to
2366 * wait_for_stable_page. Will wait that below with our IO control.
2367 */
01eccef7 2368 page = f2fs_pagecache_get_page(mapping, index,
86d54795 2369 FGP_LOCK | FGP_WRITE | FGP_CREAT, GFP_NOFS);
3aab8f82
CY
2370 if (!page) {
2371 err = -ENOMEM;
2372 goto fail;
2373 }
d5f66990 2374
eb47b800
JK
2375 *pagep = page;
2376
2aadac08
JK
2377 err = prepare_write_begin(sbi, page, pos, len,
2378 &blkaddr, &need_balance);
9ba69cf9 2379 if (err)
2aadac08 2380 goto fail;
9ba69cf9 2381
7f3037a5 2382 if (need_balance && has_not_enough_free_secs(sbi, 0, 0)) {
2a340760 2383 unlock_page(page);
2c4db1a6 2384 f2fs_balance_fs(sbi, true);
2a340760
JK
2385 lock_page(page);
2386 if (page->mapping != mapping) {
2387 /* The page got truncated from under us */
2388 f2fs_put_page(page, 1);
2389 goto repeat;
2390 }
2391 }
2392
fec1d657 2393 f2fs_wait_on_page_writeback(page, DATA, false);
b3d208f9 2394
649d7df2
JK
2395 if (len == PAGE_SIZE || PageUptodate(page))
2396 return 0;
eb47b800 2397
746e2403
YH
2398 if (!(pos & (PAGE_SIZE - 1)) && (pos + len) >= i_size_read(inode)) {
2399 zero_user_segment(page, len, PAGE_SIZE);
2400 return 0;
2401 }
2402
2aadac08 2403 if (blkaddr == NEW_ADDR) {
09cbfeaf 2404 zero_user_segment(page, 0, PAGE_SIZE);
649d7df2 2405 SetPageUptodate(page);
eb47b800 2406 } else {
13ba41e3
JK
2407 err = f2fs_submit_page_read(inode, page, blkaddr);
2408 if (err)
78682f79 2409 goto fail;
d54c795b 2410
393ff91f 2411 lock_page(page);
6bacf52f 2412 if (unlikely(page->mapping != mapping)) {
afcb7ca0
JK
2413 f2fs_put_page(page, 1);
2414 goto repeat;
eb47b800 2415 }
1563ac75
CY
2416 if (unlikely(!PageUptodate(page))) {
2417 err = -EIO;
2418 goto fail;
4375a336 2419 }
eb47b800 2420 }
eb47b800 2421 return 0;
9ba69cf9 2422
3aab8f82 2423fail:
86531d6b 2424 f2fs_put_page(page, 1);
3aab8f82 2425 f2fs_write_failed(mapping, pos + len);
a2e2e76b 2426 if (drop_atomic)
4d57b86d 2427 f2fs_drop_inmem_pages_all(sbi, false);
3aab8f82 2428 return err;
eb47b800
JK
2429}
2430
a1dd3c13
JK
2431static int f2fs_write_end(struct file *file,
2432 struct address_space *mapping,
2433 loff_t pos, unsigned len, unsigned copied,
2434 struct page *page, void *fsdata)
2435{
2436 struct inode *inode = page->mapping->host;
2437
dfb2bf38
CY
2438 trace_f2fs_write_end(inode, pos, len, copied);
2439
649d7df2
JK
2440 /*
2441 * This should be come from len == PAGE_SIZE, and we expect copied
2442 * should be PAGE_SIZE. Otherwise, we treat it with zero copied and
2443 * let generic_perform_write() try to copy data again through copied=0.
2444 */
2445 if (!PageUptodate(page)) {
746e2403 2446 if (unlikely(copied != len))
649d7df2
JK
2447 copied = 0;
2448 else
2449 SetPageUptodate(page);
2450 }
2451 if (!copied)
2452 goto unlock_out;
2453
34ba94ba 2454 set_page_dirty(page);
a1dd3c13 2455
fc9581c8
JK
2456 if (pos + copied > i_size_read(inode))
2457 f2fs_i_size_write(inode, pos + copied);
649d7df2 2458unlock_out:
3024c9a1 2459 f2fs_put_page(page, 1);
d0239e1b 2460 f2fs_update_time(F2FS_I_SB(inode), REQ_TIME);
a1dd3c13
JK
2461 return copied;
2462}
2463
6f673763
OS
2464static int check_direct_IO(struct inode *inode, struct iov_iter *iter,
2465 loff_t offset)
944fcfc1 2466{
8a56dd96
JK
2467 unsigned i_blkbits = READ_ONCE(inode->i_blkbits);
2468 unsigned blkbits = i_blkbits;
2469 unsigned blocksize_mask = (1 << blkbits) - 1;
2470 unsigned long align = offset | iov_iter_alignment(iter);
2471 struct block_device *bdev = inode->i_sb->s_bdev;
2472
2473 if (align & blocksize_mask) {
2474 if (bdev)
2475 blkbits = blksize_bits(bdev_logical_block_size(bdev));
2476 blocksize_mask = (1 << blkbits) - 1;
2477 if (align & blocksize_mask)
2478 return -EINVAL;
2479 return 1;
2480 }
944fcfc1
JK
2481 return 0;
2482}
2483
c8b8e32d 2484static ssize_t f2fs_direct_IO(struct kiocb *iocb, struct iov_iter *iter)
eb47b800 2485{
b439b103 2486 struct address_space *mapping = iocb->ki_filp->f_mapping;
3aab8f82 2487 struct inode *inode = mapping->host;
0cdd3195 2488 struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
3aab8f82 2489 size_t count = iov_iter_count(iter);
c8b8e32d 2490 loff_t offset = iocb->ki_pos;
82e0a5aa 2491 int rw = iov_iter_rw(iter);
3aab8f82 2492 int err;
0cdd3195 2493 enum rw_hint hint = iocb->ki_hint;
63189b78 2494 int whint_mode = F2FS_OPTION(sbi).whint_mode;
944fcfc1 2495
b439b103 2496 err = check_direct_IO(inode, iter, offset);
b9d777b8 2497 if (err)
8a56dd96 2498 return err < 0 ? err : 0;
9ffe0fb5 2499
b91050a8 2500 if (f2fs_force_buffered_io(inode, rw))
36abef4e 2501 return 0;
fcc85a4d 2502
5302fb00 2503 trace_f2fs_direct_IO_enter(inode, offset, count, rw);
70407fad 2504
0cdd3195
HL
2505 if (rw == WRITE && whint_mode == WHINT_MODE_OFF)
2506 iocb->ki_hint = WRITE_LIFE_NOT_SET;
2507
b2532c69 2508 if (!down_read_trylock(&F2FS_I(inode)->i_gc_rwsem[rw])) {
b91050a8
HL
2509 if (iocb->ki_flags & IOCB_NOWAIT) {
2510 iocb->ki_hint = hint;
2511 err = -EAGAIN;
2512 goto out;
2513 }
b2532c69 2514 down_read(&F2FS_I(inode)->i_gc_rwsem[rw]);
b91050a8
HL
2515 }
2516
c8b8e32d 2517 err = blockdev_direct_IO(iocb, inode, iter, get_data_block_dio);
b2532c69 2518 up_read(&F2FS_I(inode)->i_gc_rwsem[rw]);
82e0a5aa
CY
2519
2520 if (rw == WRITE) {
0cdd3195
HL
2521 if (whint_mode == WHINT_MODE_OFF)
2522 iocb->ki_hint = hint;
b0af6d49
CY
2523 if (err > 0) {
2524 f2fs_update_iostat(F2FS_I_SB(inode), APP_DIRECT_IO,
2525 err);
91942321 2526 set_inode_flag(inode, FI_UPDATE_WRITE);
b0af6d49 2527 } else if (err < 0) {
6bfc4919 2528 f2fs_write_failed(mapping, offset + count);
b0af6d49 2529 }
6bfc4919 2530 }
70407fad 2531
b91050a8 2532out:
5302fb00 2533 trace_f2fs_direct_IO_exit(inode, offset, count, rw, err);
70407fad 2534
3aab8f82 2535 return err;
eb47b800
JK
2536}
2537
487261f3
CY
2538void f2fs_invalidate_page(struct page *page, unsigned int offset,
2539 unsigned int length)
eb47b800
JK
2540{
2541 struct inode *inode = page->mapping->host;
487261f3 2542 struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
a7ffdbe2 2543
487261f3 2544 if (inode->i_ino >= F2FS_ROOT_INO(sbi) &&
09cbfeaf 2545 (offset % PAGE_SIZE || length != PAGE_SIZE))
a7ffdbe2
JK
2546 return;
2547
487261f3 2548 if (PageDirty(page)) {
933439c8 2549 if (inode->i_ino == F2FS_META_INO(sbi)) {
487261f3 2550 dec_page_count(sbi, F2FS_DIRTY_META);
933439c8 2551 } else if (inode->i_ino == F2FS_NODE_INO(sbi)) {
487261f3 2552 dec_page_count(sbi, F2FS_DIRTY_NODES);
933439c8 2553 } else {
487261f3 2554 inode_dec_dirty_pages(inode);
4d57b86d 2555 f2fs_remove_dirty_inode(inode);
933439c8 2556 }
487261f3 2557 }
decd36b6
CY
2558
2559 /* This is atomic written page, keep Private */
2560 if (IS_ATOMIC_WRITTEN_PAGE(page))
4d57b86d 2561 return f2fs_drop_inmem_page(inode, page);
decd36b6 2562
23dc974e 2563 set_page_private(page, 0);
eb47b800
JK
2564 ClearPagePrivate(page);
2565}
2566
487261f3 2567int f2fs_release_page(struct page *page, gfp_t wait)
eb47b800 2568{
f68daeeb
JK
2569 /* If this is dirty page, keep PagePrivate */
2570 if (PageDirty(page))
2571 return 0;
2572
decd36b6
CY
2573 /* This is atomic written page, keep Private */
2574 if (IS_ATOMIC_WRITTEN_PAGE(page))
2575 return 0;
2576
23dc974e 2577 set_page_private(page, 0);
eb47b800 2578 ClearPagePrivate(page);
c3850aa1 2579 return 1;
eb47b800
JK
2580}
2581
2582static int f2fs_set_data_page_dirty(struct page *page)
2583{
2584 struct address_space *mapping = page->mapping;
2585 struct inode *inode = mapping->host;
2586
26c6b887
JK
2587 trace_f2fs_set_page_dirty(page, DATA);
2588
237c0790
JK
2589 if (!PageUptodate(page))
2590 SetPageUptodate(page);
34ba94ba 2591
66110abc
CY
2592 /* don't remain PG_checked flag which was set during GC */
2593 if (is_cold_data(page))
2594 clear_cold_data(page);
2595
5fe45743 2596 if (f2fs_is_atomic_file(inode) && !f2fs_is_commit_atomic_write(inode)) {
decd36b6 2597 if (!IS_ATOMIC_WRITTEN_PAGE(page)) {
4d57b86d 2598 f2fs_register_inmem_page(inode, page);
decd36b6
CY
2599 return 1;
2600 }
2601 /*
2602 * Previously, this page has been registered, we just
2603 * return here.
2604 */
2605 return 0;
34ba94ba
JK
2606 }
2607
eb47b800 2608 if (!PageDirty(page)) {
b87078ad 2609 __set_page_dirty_nobuffers(page);
4d57b86d 2610 f2fs_update_dirty_page(inode, page);
eb47b800
JK
2611 return 1;
2612 }
2613 return 0;
2614}
2615
c01e54b7
JK
2616static sector_t f2fs_bmap(struct address_space *mapping, sector_t block)
2617{
454ae7e5
CY
2618 struct inode *inode = mapping->host;
2619
1d373a0e
JK
2620 if (f2fs_has_inline_data(inode))
2621 return 0;
2622
2623 /* make sure allocating whole blocks */
2624 if (mapping_tagged(mapping, PAGECACHE_TAG_DIRTY))
2625 filemap_write_and_wait(mapping);
2626
e2b4e2bc 2627 return generic_block_bmap(mapping, block, get_data_block_bmap);
429511cd
CY
2628}
2629
5b7a487c
WG
2630#ifdef CONFIG_MIGRATION
2631#include <linux/migrate.h>
2632
2633int f2fs_migrate_page(struct address_space *mapping,
2634 struct page *newpage, struct page *page, enum migrate_mode mode)
2635{
2636 int rc, extra_count;
2637 struct f2fs_inode_info *fi = F2FS_I(mapping->host);
2638 bool atomic_written = IS_ATOMIC_WRITTEN_PAGE(page);
2639
2640 BUG_ON(PageWriteback(page));
2641
2642 /* migrating an atomic written page is safe with the inmem_lock hold */
ff1048e7
JK
2643 if (atomic_written) {
2644 if (mode != MIGRATE_SYNC)
2645 return -EBUSY;
2646 if (!mutex_trylock(&fi->inmem_lock))
2647 return -EAGAIN;
2648 }
5b7a487c
WG
2649
2650 /*
2651 * A reference is expected if PagePrivate set when move mapping,
2652 * however F2FS breaks this for maintaining dirty page counts when
2653 * truncating pages. So here adjusting the 'extra_count' make it work.
2654 */
2655 extra_count = (atomic_written ? 1 : 0) - page_has_private(page);
2656 rc = migrate_page_move_mapping(mapping, newpage,
2657 page, NULL, mode, extra_count);
2658 if (rc != MIGRATEPAGE_SUCCESS) {
2659 if (atomic_written)
2660 mutex_unlock(&fi->inmem_lock);
2661 return rc;
2662 }
2663
2664 if (atomic_written) {
2665 struct inmem_pages *cur;
2666 list_for_each_entry(cur, &fi->inmem_pages, list)
2667 if (cur->page == page) {
2668 cur->page = newpage;
2669 break;
2670 }
2671 mutex_unlock(&fi->inmem_lock);
2672 put_page(page);
2673 get_page(newpage);
2674 }
2675
2676 if (PagePrivate(page))
2677 SetPagePrivate(newpage);
2678 set_page_private(newpage, page_private(page));
2679
2916ecc0
JG
2680 if (mode != MIGRATE_SYNC_NO_COPY)
2681 migrate_page_copy(newpage, page);
2682 else
2683 migrate_page_states(newpage, page);
5b7a487c
WG
2684
2685 return MIGRATEPAGE_SUCCESS;
2686}
2687#endif
2688
eb47b800
JK
2689const struct address_space_operations f2fs_dblock_aops = {
2690 .readpage = f2fs_read_data_page,
2691 .readpages = f2fs_read_data_pages,
2692 .writepage = f2fs_write_data_page,
2693 .writepages = f2fs_write_data_pages,
2694 .write_begin = f2fs_write_begin,
a1dd3c13 2695 .write_end = f2fs_write_end,
eb47b800 2696 .set_page_dirty = f2fs_set_data_page_dirty,
487261f3
CY
2697 .invalidatepage = f2fs_invalidate_page,
2698 .releasepage = f2fs_release_page,
eb47b800 2699 .direct_IO = f2fs_direct_IO,
c01e54b7 2700 .bmap = f2fs_bmap,
5b7a487c
WG
2701#ifdef CONFIG_MIGRATION
2702 .migratepage = f2fs_migrate_page,
2703#endif
eb47b800 2704};
6dbb1796 2705
4d57b86d 2706void f2fs_clear_radix_tree_dirty_tag(struct page *page)
aec2f729
CY
2707{
2708 struct address_space *mapping = page_mapping(page);
2709 unsigned long flags;
2710
2711 xa_lock_irqsave(&mapping->i_pages, flags);
2712 radix_tree_tag_clear(&mapping->i_pages, page_index(page),
2713 PAGECACHE_TAG_DIRTY);
2714 xa_unlock_irqrestore(&mapping->i_pages, flags);
2715}
2716
6dbb1796
EB
2717int __init f2fs_init_post_read_processing(void)
2718{
2719 bio_post_read_ctx_cache = KMEM_CACHE(bio_post_read_ctx, 0);
2720 if (!bio_post_read_ctx_cache)
2721 goto fail;
2722 bio_post_read_ctx_pool =
2723 mempool_create_slab_pool(NUM_PREALLOC_POST_READ_CTXS,
2724 bio_post_read_ctx_cache);
2725 if (!bio_post_read_ctx_pool)
2726 goto fail_free_cache;
2727 return 0;
2728
2729fail_free_cache:
2730 kmem_cache_destroy(bio_post_read_ctx_cache);
2731fail:
2732 return -ENOMEM;
2733}
2734
2735void __exit f2fs_destroy_post_read_processing(void)
2736{
2737 mempool_destroy(bio_post_read_ctx_pool);
2738 kmem_cache_destroy(bio_post_read_ctx_cache);
2739}