data.c 39 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698
  1. /*
  2. * fs/f2fs/data.c
  3. *
  4. * Copyright (c) 2012 Samsung Electronics Co., Ltd.
  5. * http://www.samsung.com/
  6. *
  7. * This program is free software; you can redistribute it and/or modify
  8. * it under the terms of the GNU General Public License version 2 as
  9. * published by the Free Software Foundation.
  10. */
  11. #include <linux/fs.h>
  12. #include <linux/f2fs_fs.h>
  13. #include <linux/buffer_head.h>
  14. #include <linux/mpage.h>
  15. #include <linux/writeback.h>
  16. #include <linux/backing-dev.h>
  17. #include <linux/pagevec.h>
  18. #include <linux/blkdev.h>
  19. #include <linux/bio.h>
  20. #include <linux/prefetch.h>
  21. #include <linux/uio.h>
  22. #include <linux/cleancache.h>
  23. #include "f2fs.h"
  24. #include "node.h"
  25. #include "segment.h"
  26. #include "trace.h"
  27. #include <trace/events/f2fs.h>
  28. static void f2fs_read_end_io(struct bio *bio)
  29. {
  30. struct bio_vec *bvec;
  31. int i;
  32. if (f2fs_bio_encrypted(bio)) {
  33. if (bio->bi_error) {
  34. f2fs_release_crypto_ctx(bio->bi_private);
  35. } else {
  36. f2fs_end_io_crypto_work(bio->bi_private, bio);
  37. return;
  38. }
  39. }
  40. bio_for_each_segment_all(bvec, bio, i) {
  41. struct page *page = bvec->bv_page;
  42. if (!bio->bi_error) {
  43. SetPageUptodate(page);
  44. } else {
  45. ClearPageUptodate(page);
  46. SetPageError(page);
  47. }
  48. unlock_page(page);
  49. }
  50. bio_put(bio);
  51. }
  52. static void f2fs_write_end_io(struct bio *bio)
  53. {
  54. struct f2fs_sb_info *sbi = bio->bi_private;
  55. struct bio_vec *bvec;
  56. int i;
  57. bio_for_each_segment_all(bvec, bio, i) {
  58. struct page *page = bvec->bv_page;
  59. f2fs_restore_and_release_control_page(&page);
  60. if (unlikely(bio->bi_error)) {
  61. set_page_dirty(page);
  62. set_bit(AS_EIO, &page->mapping->flags);
  63. f2fs_stop_checkpoint(sbi);
  64. }
  65. end_page_writeback(page);
  66. dec_page_count(sbi, F2FS_WRITEBACK);
  67. }
  68. if (!get_pages(sbi, F2FS_WRITEBACK) &&
  69. !list_empty(&sbi->cp_wait.task_list))
  70. wake_up(&sbi->cp_wait);
  71. bio_put(bio);
  72. }
  73. /*
  74. * Low-level block read/write IO operations.
  75. */
  76. static struct bio *__bio_alloc(struct f2fs_sb_info *sbi, block_t blk_addr,
  77. int npages, bool is_read)
  78. {
  79. struct bio *bio;
  80. bio = f2fs_bio_alloc(npages);
  81. bio->bi_bdev = sbi->sb->s_bdev;
  82. bio->bi_iter.bi_sector = SECTOR_FROM_BLOCK(blk_addr);
  83. bio->bi_end_io = is_read ? f2fs_read_end_io : f2fs_write_end_io;
  84. bio->bi_private = is_read ? NULL : sbi;
  85. return bio;
  86. }
  87. static void __submit_merged_bio(struct f2fs_bio_info *io)
  88. {
  89. struct f2fs_io_info *fio = &io->fio;
  90. if (!io->bio)
  91. return;
  92. if (is_read_io(fio->rw))
  93. trace_f2fs_submit_read_bio(io->sbi->sb, fio, io->bio);
  94. else
  95. trace_f2fs_submit_write_bio(io->sbi->sb, fio, io->bio);
  96. submit_bio(fio->rw, io->bio);
  97. io->bio = NULL;
  98. }
  99. void f2fs_submit_merged_bio(struct f2fs_sb_info *sbi,
  100. enum page_type type, int rw)
  101. {
  102. enum page_type btype = PAGE_TYPE_OF_BIO(type);
  103. struct f2fs_bio_info *io;
  104. io = is_read_io(rw) ? &sbi->read_io : &sbi->write_io[btype];
  105. down_write(&io->io_rwsem);
  106. /* change META to META_FLUSH in the checkpoint procedure */
  107. if (type >= META_FLUSH) {
  108. io->fio.type = META_FLUSH;
  109. if (test_opt(sbi, NOBARRIER))
  110. io->fio.rw = WRITE_FLUSH | REQ_META | REQ_PRIO;
  111. else
  112. io->fio.rw = WRITE_FLUSH_FUA | REQ_META | REQ_PRIO;
  113. }
  114. __submit_merged_bio(io);
  115. up_write(&io->io_rwsem);
  116. }
  117. /*
  118. * Fill the locked page with data located in the block address.
  119. * Return unlocked page.
  120. */
  121. int f2fs_submit_page_bio(struct f2fs_io_info *fio)
  122. {
  123. struct bio *bio;
  124. struct page *page = fio->encrypted_page ? fio->encrypted_page : fio->page;
  125. trace_f2fs_submit_page_bio(page, fio);
  126. f2fs_trace_ios(fio, 0);
  127. /* Allocate a new bio */
  128. bio = __bio_alloc(fio->sbi, fio->blk_addr, 1, is_read_io(fio->rw));
  129. if (bio_add_page(bio, page, PAGE_CACHE_SIZE, 0) < PAGE_CACHE_SIZE) {
  130. bio_put(bio);
  131. return -EFAULT;
  132. }
  133. submit_bio(fio->rw, bio);
  134. return 0;
  135. }
  136. void f2fs_submit_page_mbio(struct f2fs_io_info *fio)
  137. {
  138. struct f2fs_sb_info *sbi = fio->sbi;
  139. enum page_type btype = PAGE_TYPE_OF_BIO(fio->type);
  140. struct f2fs_bio_info *io;
  141. bool is_read = is_read_io(fio->rw);
  142. struct page *bio_page;
  143. io = is_read ? &sbi->read_io : &sbi->write_io[btype];
  144. verify_block_addr(sbi, fio->blk_addr);
  145. down_write(&io->io_rwsem);
  146. if (!is_read)
  147. inc_page_count(sbi, F2FS_WRITEBACK);
  148. if (io->bio && (io->last_block_in_bio != fio->blk_addr - 1 ||
  149. io->fio.rw != fio->rw))
  150. __submit_merged_bio(io);
  151. alloc_new:
  152. if (io->bio == NULL) {
  153. int bio_blocks = MAX_BIO_BLOCKS(sbi);
  154. io->bio = __bio_alloc(sbi, fio->blk_addr, bio_blocks, is_read);
  155. io->fio = *fio;
  156. }
  157. bio_page = fio->encrypted_page ? fio->encrypted_page : fio->page;
  158. if (bio_add_page(io->bio, bio_page, PAGE_CACHE_SIZE, 0) <
  159. PAGE_CACHE_SIZE) {
  160. __submit_merged_bio(io);
  161. goto alloc_new;
  162. }
  163. io->last_block_in_bio = fio->blk_addr;
  164. f2fs_trace_ios(fio, 0);
  165. up_write(&io->io_rwsem);
  166. trace_f2fs_submit_page_mbio(fio->page, fio);
  167. }
  168. /*
  169. * Lock ordering for the change of data block address:
  170. * ->data_page
  171. * ->node_page
  172. * update block addresses in the node page
  173. */
  174. void set_data_blkaddr(struct dnode_of_data *dn)
  175. {
  176. struct f2fs_node *rn;
  177. __le32 *addr_array;
  178. struct page *node_page = dn->node_page;
  179. unsigned int ofs_in_node = dn->ofs_in_node;
  180. f2fs_wait_on_page_writeback(node_page, NODE);
  181. rn = F2FS_NODE(node_page);
  182. /* Get physical address of data block */
  183. addr_array = blkaddr_in_node(rn);
  184. addr_array[ofs_in_node] = cpu_to_le32(dn->data_blkaddr);
  185. set_page_dirty(node_page);
  186. }
  187. int reserve_new_block(struct dnode_of_data *dn)
  188. {
  189. struct f2fs_sb_info *sbi = F2FS_I_SB(dn->inode);
  190. if (unlikely(is_inode_flag_set(F2FS_I(dn->inode), FI_NO_ALLOC)))
  191. return -EPERM;
  192. if (unlikely(!inc_valid_block_count(sbi, dn->inode, 1)))
  193. return -ENOSPC;
  194. trace_f2fs_reserve_new_block(dn->inode, dn->nid, dn->ofs_in_node);
  195. dn->data_blkaddr = NEW_ADDR;
  196. set_data_blkaddr(dn);
  197. mark_inode_dirty(dn->inode);
  198. sync_inode_page(dn);
  199. return 0;
  200. }
  201. int f2fs_reserve_block(struct dnode_of_data *dn, pgoff_t index)
  202. {
  203. bool need_put = dn->inode_page ? false : true;
  204. int err;
  205. err = get_dnode_of_data(dn, index, ALLOC_NODE);
  206. if (err)
  207. return err;
  208. if (dn->data_blkaddr == NULL_ADDR)
  209. err = reserve_new_block(dn);
  210. if (err || need_put)
  211. f2fs_put_dnode(dn);
  212. return err;
  213. }
  214. int f2fs_get_block(struct dnode_of_data *dn, pgoff_t index)
  215. {
  216. struct extent_info ei;
  217. struct inode *inode = dn->inode;
  218. if (f2fs_lookup_extent_cache(inode, index, &ei)) {
  219. dn->data_blkaddr = ei.blk + index - ei.fofs;
  220. return 0;
  221. }
  222. return f2fs_reserve_block(dn, index);
  223. }
  224. struct page *get_read_data_page(struct inode *inode, pgoff_t index,
  225. int rw, bool for_write)
  226. {
  227. struct address_space *mapping = inode->i_mapping;
  228. struct dnode_of_data dn;
  229. struct page *page;
  230. struct extent_info ei;
  231. int err;
  232. struct f2fs_io_info fio = {
  233. .sbi = F2FS_I_SB(inode),
  234. .type = DATA,
  235. .rw = rw,
  236. .encrypted_page = NULL,
  237. };
  238. if (f2fs_encrypted_inode(inode) && S_ISREG(inode->i_mode))
  239. return read_mapping_page(mapping, index, NULL);
  240. page = f2fs_grab_cache_page(mapping, index, for_write);
  241. if (!page)
  242. return ERR_PTR(-ENOMEM);
  243. if (f2fs_lookup_extent_cache(inode, index, &ei)) {
  244. dn.data_blkaddr = ei.blk + index - ei.fofs;
  245. goto got_it;
  246. }
  247. set_new_dnode(&dn, inode, NULL, NULL, 0);
  248. err = get_dnode_of_data(&dn, index, LOOKUP_NODE);
  249. if (err)
  250. goto put_err;
  251. f2fs_put_dnode(&dn);
  252. if (unlikely(dn.data_blkaddr == NULL_ADDR)) {
  253. err = -ENOENT;
  254. goto put_err;
  255. }
  256. got_it:
  257. if (PageUptodate(page)) {
  258. unlock_page(page);
  259. return page;
  260. }
  261. /*
  262. * A new dentry page is allocated but not able to be written, since its
  263. * new inode page couldn't be allocated due to -ENOSPC.
  264. * In such the case, its blkaddr can be remained as NEW_ADDR.
  265. * see, f2fs_add_link -> get_new_data_page -> init_inode_metadata.
  266. */
  267. if (dn.data_blkaddr == NEW_ADDR) {
  268. zero_user_segment(page, 0, PAGE_CACHE_SIZE);
  269. SetPageUptodate(page);
  270. unlock_page(page);
  271. return page;
  272. }
  273. fio.blk_addr = dn.data_blkaddr;
  274. fio.page = page;
  275. err = f2fs_submit_page_bio(&fio);
  276. if (err)
  277. goto put_err;
  278. return page;
  279. put_err:
  280. f2fs_put_page(page, 1);
  281. return ERR_PTR(err);
  282. }
  283. struct page *find_data_page(struct inode *inode, pgoff_t index)
  284. {
  285. struct address_space *mapping = inode->i_mapping;
  286. struct page *page;
  287. page = find_get_page(mapping, index);
  288. if (page && PageUptodate(page))
  289. return page;
  290. f2fs_put_page(page, 0);
  291. page = get_read_data_page(inode, index, READ_SYNC, false);
  292. if (IS_ERR(page))
  293. return page;
  294. if (PageUptodate(page))
  295. return page;
  296. wait_on_page_locked(page);
  297. if (unlikely(!PageUptodate(page))) {
  298. f2fs_put_page(page, 0);
  299. return ERR_PTR(-EIO);
  300. }
  301. return page;
  302. }
  303. /*
  304. * If it tries to access a hole, return an error.
  305. * Because, the callers, functions in dir.c and GC, should be able to know
  306. * whether this page exists or not.
  307. */
  308. struct page *get_lock_data_page(struct inode *inode, pgoff_t index,
  309. bool for_write)
  310. {
  311. struct address_space *mapping = inode->i_mapping;
  312. struct page *page;
  313. repeat:
  314. page = get_read_data_page(inode, index, READ_SYNC, for_write);
  315. if (IS_ERR(page))
  316. return page;
  317. /* wait for read completion */
  318. lock_page(page);
  319. if (unlikely(!PageUptodate(page))) {
  320. f2fs_put_page(page, 1);
  321. return ERR_PTR(-EIO);
  322. }
  323. if (unlikely(page->mapping != mapping)) {
  324. f2fs_put_page(page, 1);
  325. goto repeat;
  326. }
  327. return page;
  328. }
  329. /*
  330. * Caller ensures that this data page is never allocated.
  331. * A new zero-filled data page is allocated in the page cache.
  332. *
  333. * Also, caller should grab and release a rwsem by calling f2fs_lock_op() and
  334. * f2fs_unlock_op().
  335. * Note that, ipage is set only by make_empty_dir, and if any error occur,
  336. * ipage should be released by this function.
  337. */
  338. struct page *get_new_data_page(struct inode *inode,
  339. struct page *ipage, pgoff_t index, bool new_i_size)
  340. {
  341. struct address_space *mapping = inode->i_mapping;
  342. struct page *page;
  343. struct dnode_of_data dn;
  344. int err;
  345. repeat:
  346. page = f2fs_grab_cache_page(mapping, index, true);
  347. if (!page) {
  348. /*
  349. * before exiting, we should make sure ipage will be released
  350. * if any error occur.
  351. */
  352. f2fs_put_page(ipage, 1);
  353. return ERR_PTR(-ENOMEM);
  354. }
  355. set_new_dnode(&dn, inode, ipage, NULL, 0);
  356. err = f2fs_reserve_block(&dn, index);
  357. if (err) {
  358. f2fs_put_page(page, 1);
  359. return ERR_PTR(err);
  360. }
  361. if (!ipage)
  362. f2fs_put_dnode(&dn);
  363. if (PageUptodate(page))
  364. goto got_it;
  365. if (dn.data_blkaddr == NEW_ADDR) {
  366. zero_user_segment(page, 0, PAGE_CACHE_SIZE);
  367. SetPageUptodate(page);
  368. } else {
  369. f2fs_put_page(page, 1);
  370. page = get_read_data_page(inode, index, READ_SYNC, true);
  371. if (IS_ERR(page))
  372. goto repeat;
  373. /* wait for read completion */
  374. lock_page(page);
  375. }
  376. got_it:
  377. if (new_i_size && i_size_read(inode) <
  378. ((loff_t)(index + 1) << PAGE_CACHE_SHIFT)) {
  379. i_size_write(inode, ((loff_t)(index + 1) << PAGE_CACHE_SHIFT));
  380. /* Only the directory inode sets new_i_size */
  381. set_inode_flag(F2FS_I(inode), FI_UPDATE_DIR);
  382. }
  383. return page;
  384. }
  385. static int __allocate_data_block(struct dnode_of_data *dn)
  386. {
  387. struct f2fs_sb_info *sbi = F2FS_I_SB(dn->inode);
  388. struct f2fs_inode_info *fi = F2FS_I(dn->inode);
  389. struct f2fs_summary sum;
  390. struct node_info ni;
  391. int seg = CURSEG_WARM_DATA;
  392. pgoff_t fofs;
  393. if (unlikely(is_inode_flag_set(F2FS_I(dn->inode), FI_NO_ALLOC)))
  394. return -EPERM;
  395. dn->data_blkaddr = datablock_addr(dn->node_page, dn->ofs_in_node);
  396. if (dn->data_blkaddr == NEW_ADDR)
  397. goto alloc;
  398. if (unlikely(!inc_valid_block_count(sbi, dn->inode, 1)))
  399. return -ENOSPC;
  400. alloc:
  401. get_node_info(sbi, dn->nid, &ni);
  402. set_summary(&sum, dn->nid, dn->ofs_in_node, ni.version);
  403. if (dn->ofs_in_node == 0 && dn->inode_page == dn->node_page)
  404. seg = CURSEG_DIRECT_IO;
  405. allocate_data_block(sbi, NULL, dn->data_blkaddr, &dn->data_blkaddr,
  406. &sum, seg);
  407. set_data_blkaddr(dn);
  408. /* update i_size */
  409. fofs = start_bidx_of_node(ofs_of_node(dn->node_page), fi) +
  410. dn->ofs_in_node;
  411. if (i_size_read(dn->inode) < ((loff_t)(fofs + 1) << PAGE_CACHE_SHIFT))
  412. i_size_write(dn->inode,
  413. ((loff_t)(fofs + 1) << PAGE_CACHE_SHIFT));
  414. /* direct IO doesn't use extent cache to maximize the performance */
  415. f2fs_drop_largest_extent(dn->inode, fofs);
  416. return 0;
  417. }
  418. static void __allocate_data_blocks(struct inode *inode, loff_t offset,
  419. size_t count)
  420. {
  421. struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
  422. struct dnode_of_data dn;
  423. u64 start = F2FS_BYTES_TO_BLK(offset);
  424. u64 len = F2FS_BYTES_TO_BLK(count);
  425. bool allocated;
  426. u64 end_offset;
  427. while (len) {
  428. f2fs_balance_fs(sbi);
  429. f2fs_lock_op(sbi);
  430. /* When reading holes, we need its node page */
  431. set_new_dnode(&dn, inode, NULL, NULL, 0);
  432. if (get_dnode_of_data(&dn, start, ALLOC_NODE))
  433. goto out;
  434. allocated = false;
  435. end_offset = ADDRS_PER_PAGE(dn.node_page, F2FS_I(inode));
  436. while (dn.ofs_in_node < end_offset && len) {
  437. block_t blkaddr;
  438. if (unlikely(f2fs_cp_error(sbi)))
  439. goto sync_out;
  440. blkaddr = datablock_addr(dn.node_page, dn.ofs_in_node);
  441. if (blkaddr == NULL_ADDR || blkaddr == NEW_ADDR) {
  442. if (__allocate_data_block(&dn))
  443. goto sync_out;
  444. allocated = true;
  445. }
  446. len--;
  447. start++;
  448. dn.ofs_in_node++;
  449. }
  450. if (allocated)
  451. sync_inode_page(&dn);
  452. f2fs_put_dnode(&dn);
  453. f2fs_unlock_op(sbi);
  454. }
  455. return;
  456. sync_out:
  457. if (allocated)
  458. sync_inode_page(&dn);
  459. f2fs_put_dnode(&dn);
  460. out:
  461. f2fs_unlock_op(sbi);
  462. return;
  463. }
  464. /*
  465. * f2fs_map_blocks() now supported readahead/bmap/rw direct_IO with
  466. * f2fs_map_blocks structure.
  467. * If original data blocks are allocated, then give them to blockdev.
  468. * Otherwise,
  469. * a. preallocate requested block addresses
  470. * b. do not use extent cache for better performance
  471. * c. give the block addresses to blockdev
  472. */
  473. static int f2fs_map_blocks(struct inode *inode, struct f2fs_map_blocks *map,
  474. int create, int flag)
  475. {
  476. unsigned int maxblocks = map->m_len;
  477. struct dnode_of_data dn;
  478. struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
  479. int mode = create ? ALLOC_NODE : LOOKUP_NODE_RA;
  480. pgoff_t pgofs, end_offset;
  481. int err = 0, ofs = 1;
  482. struct extent_info ei;
  483. bool allocated = false;
  484. map->m_len = 0;
  485. map->m_flags = 0;
  486. /* it only supports block size == page size */
  487. pgofs = (pgoff_t)map->m_lblk;
  488. if (f2fs_lookup_extent_cache(inode, pgofs, &ei)) {
  489. map->m_pblk = ei.blk + pgofs - ei.fofs;
  490. map->m_len = min((pgoff_t)maxblocks, ei.fofs + ei.len - pgofs);
  491. map->m_flags = F2FS_MAP_MAPPED;
  492. goto out;
  493. }
  494. if (create)
  495. f2fs_lock_op(F2FS_I_SB(inode));
  496. /* When reading holes, we need its node page */
  497. set_new_dnode(&dn, inode, NULL, NULL, 0);
  498. err = get_dnode_of_data(&dn, pgofs, mode);
  499. if (err) {
  500. if (err == -ENOENT)
  501. err = 0;
  502. goto unlock_out;
  503. }
  504. if (dn.data_blkaddr == NEW_ADDR || dn.data_blkaddr == NULL_ADDR) {
  505. if (create) {
  506. if (unlikely(f2fs_cp_error(sbi))) {
  507. err = -EIO;
  508. goto put_out;
  509. }
  510. err = __allocate_data_block(&dn);
  511. if (err)
  512. goto put_out;
  513. allocated = true;
  514. map->m_flags = F2FS_MAP_NEW;
  515. } else {
  516. if (flag != F2FS_GET_BLOCK_FIEMAP ||
  517. dn.data_blkaddr != NEW_ADDR) {
  518. if (flag == F2FS_GET_BLOCK_BMAP)
  519. err = -ENOENT;
  520. goto put_out;
  521. }
  522. /*
  523. * preallocated unwritten block should be mapped
  524. * for fiemap.
  525. */
  526. if (dn.data_blkaddr == NEW_ADDR)
  527. map->m_flags = F2FS_MAP_UNWRITTEN;
  528. }
  529. }
  530. map->m_flags |= F2FS_MAP_MAPPED;
  531. map->m_pblk = dn.data_blkaddr;
  532. map->m_len = 1;
  533. end_offset = ADDRS_PER_PAGE(dn.node_page, F2FS_I(inode));
  534. dn.ofs_in_node++;
  535. pgofs++;
  536. get_next:
  537. if (dn.ofs_in_node >= end_offset) {
  538. if (allocated)
  539. sync_inode_page(&dn);
  540. allocated = false;
  541. f2fs_put_dnode(&dn);
  542. set_new_dnode(&dn, inode, NULL, NULL, 0);
  543. err = get_dnode_of_data(&dn, pgofs, mode);
  544. if (err) {
  545. if (err == -ENOENT)
  546. err = 0;
  547. goto unlock_out;
  548. }
  549. end_offset = ADDRS_PER_PAGE(dn.node_page, F2FS_I(inode));
  550. }
  551. if (maxblocks > map->m_len) {
  552. block_t blkaddr = datablock_addr(dn.node_page, dn.ofs_in_node);
  553. if (blkaddr == NEW_ADDR || blkaddr == NULL_ADDR) {
  554. if (create) {
  555. if (unlikely(f2fs_cp_error(sbi))) {
  556. err = -EIO;
  557. goto sync_out;
  558. }
  559. err = __allocate_data_block(&dn);
  560. if (err)
  561. goto sync_out;
  562. allocated = true;
  563. map->m_flags |= F2FS_MAP_NEW;
  564. blkaddr = dn.data_blkaddr;
  565. } else {
  566. /*
  567. * we only merge preallocated unwritten blocks
  568. * for fiemap.
  569. */
  570. if (flag != F2FS_GET_BLOCK_FIEMAP ||
  571. blkaddr != NEW_ADDR)
  572. goto sync_out;
  573. }
  574. }
  575. /* Give more consecutive addresses for the readahead */
  576. if ((map->m_pblk != NEW_ADDR &&
  577. blkaddr == (map->m_pblk + ofs)) ||
  578. (map->m_pblk == NEW_ADDR &&
  579. blkaddr == NEW_ADDR)) {
  580. ofs++;
  581. dn.ofs_in_node++;
  582. pgofs++;
  583. map->m_len++;
  584. goto get_next;
  585. }
  586. }
  587. sync_out:
  588. if (allocated)
  589. sync_inode_page(&dn);
  590. put_out:
  591. f2fs_put_dnode(&dn);
  592. unlock_out:
  593. if (create)
  594. f2fs_unlock_op(F2FS_I_SB(inode));
  595. out:
  596. trace_f2fs_map_blocks(inode, map, err);
  597. return err;
  598. }
  599. static int __get_data_block(struct inode *inode, sector_t iblock,
  600. struct buffer_head *bh, int create, int flag)
  601. {
  602. struct f2fs_map_blocks map;
  603. int ret;
  604. map.m_lblk = iblock;
  605. map.m_len = bh->b_size >> inode->i_blkbits;
  606. ret = f2fs_map_blocks(inode, &map, create, flag);
  607. if (!ret) {
  608. map_bh(bh, inode->i_sb, map.m_pblk);
  609. bh->b_state = (bh->b_state & ~F2FS_MAP_FLAGS) | map.m_flags;
  610. bh->b_size = map.m_len << inode->i_blkbits;
  611. }
  612. return ret;
  613. }
  614. static int get_data_block(struct inode *inode, sector_t iblock,
  615. struct buffer_head *bh_result, int create, int flag)
  616. {
  617. return __get_data_block(inode, iblock, bh_result, create, flag);
  618. }
  619. static int get_data_block_dio(struct inode *inode, sector_t iblock,
  620. struct buffer_head *bh_result, int create)
  621. {
  622. return __get_data_block(inode, iblock, bh_result, create,
  623. F2FS_GET_BLOCK_DIO);
  624. }
  625. static int get_data_block_bmap(struct inode *inode, sector_t iblock,
  626. struct buffer_head *bh_result, int create)
  627. {
  628. return __get_data_block(inode, iblock, bh_result, create,
  629. F2FS_GET_BLOCK_BMAP);
  630. }
  631. static inline sector_t logical_to_blk(struct inode *inode, loff_t offset)
  632. {
  633. return (offset >> inode->i_blkbits);
  634. }
  635. static inline loff_t blk_to_logical(struct inode *inode, sector_t blk)
  636. {
  637. return (blk << inode->i_blkbits);
  638. }
  639. int f2fs_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
  640. u64 start, u64 len)
  641. {
  642. struct buffer_head map_bh;
  643. sector_t start_blk, last_blk;
  644. loff_t isize = i_size_read(inode);
  645. u64 logical = 0, phys = 0, size = 0;
  646. u32 flags = 0;
  647. bool past_eof = false, whole_file = false;
  648. int ret = 0;
  649. ret = fiemap_check_flags(fieinfo, FIEMAP_FLAG_SYNC);
  650. if (ret)
  651. return ret;
  652. if (f2fs_has_inline_data(inode)) {
  653. ret = f2fs_inline_data_fiemap(inode, fieinfo, start, len);
  654. if (ret != -EAGAIN)
  655. return ret;
  656. }
  657. mutex_lock(&inode->i_mutex);
  658. if (len >= isize) {
  659. whole_file = true;
  660. len = isize;
  661. }
  662. if (logical_to_blk(inode, len) == 0)
  663. len = blk_to_logical(inode, 1);
  664. start_blk = logical_to_blk(inode, start);
  665. last_blk = logical_to_blk(inode, start + len - 1);
  666. next:
  667. memset(&map_bh, 0, sizeof(struct buffer_head));
  668. map_bh.b_size = len;
  669. ret = get_data_block(inode, start_blk, &map_bh, 0,
  670. F2FS_GET_BLOCK_FIEMAP);
  671. if (ret)
  672. goto out;
  673. /* HOLE */
  674. if (!buffer_mapped(&map_bh)) {
  675. start_blk++;
  676. if (!past_eof && blk_to_logical(inode, start_blk) >= isize)
  677. past_eof = 1;
  678. if (past_eof && size) {
  679. flags |= FIEMAP_EXTENT_LAST;
  680. ret = fiemap_fill_next_extent(fieinfo, logical,
  681. phys, size, flags);
  682. } else if (size) {
  683. ret = fiemap_fill_next_extent(fieinfo, logical,
  684. phys, size, flags);
  685. size = 0;
  686. }
  687. /* if we have holes up to/past EOF then we're done */
  688. if (start_blk > last_blk || past_eof || ret)
  689. goto out;
  690. } else {
  691. if (start_blk > last_blk && !whole_file) {
  692. ret = fiemap_fill_next_extent(fieinfo, logical,
  693. phys, size, flags);
  694. goto out;
  695. }
  696. /*
  697. * if size != 0 then we know we already have an extent
  698. * to add, so add it.
  699. */
  700. if (size) {
  701. ret = fiemap_fill_next_extent(fieinfo, logical,
  702. phys, size, flags);
  703. if (ret)
  704. goto out;
  705. }
  706. logical = blk_to_logical(inode, start_blk);
  707. phys = blk_to_logical(inode, map_bh.b_blocknr);
  708. size = map_bh.b_size;
  709. flags = 0;
  710. if (buffer_unwritten(&map_bh))
  711. flags = FIEMAP_EXTENT_UNWRITTEN;
  712. start_blk += logical_to_blk(inode, size);
  713. /*
  714. * If we are past the EOF, then we need to make sure as
  715. * soon as we find a hole that the last extent we found
  716. * is marked with FIEMAP_EXTENT_LAST
  717. */
  718. if (!past_eof && logical + size >= isize)
  719. past_eof = true;
  720. }
  721. cond_resched();
  722. if (fatal_signal_pending(current))
  723. ret = -EINTR;
  724. else
  725. goto next;
  726. out:
  727. if (ret == 1)
  728. ret = 0;
  729. mutex_unlock(&inode->i_mutex);
  730. return ret;
  731. }
  732. /*
  733. * This function was originally taken from fs/mpage.c, and customized for f2fs.
  734. * Major change was from block_size == page_size in f2fs by default.
  735. */
  736. static int f2fs_mpage_readpages(struct address_space *mapping,
  737. struct list_head *pages, struct page *page,
  738. unsigned nr_pages)
  739. {
  740. struct bio *bio = NULL;
  741. unsigned page_idx;
  742. sector_t last_block_in_bio = 0;
  743. struct inode *inode = mapping->host;
  744. const unsigned blkbits = inode->i_blkbits;
  745. const unsigned blocksize = 1 << blkbits;
  746. sector_t block_in_file;
  747. sector_t last_block;
  748. sector_t last_block_in_file;
  749. sector_t block_nr;
  750. struct block_device *bdev = inode->i_sb->s_bdev;
  751. struct f2fs_map_blocks map;
  752. map.m_pblk = 0;
  753. map.m_lblk = 0;
  754. map.m_len = 0;
  755. map.m_flags = 0;
  756. for (page_idx = 0; nr_pages; page_idx++, nr_pages--) {
  757. prefetchw(&page->flags);
  758. if (pages) {
  759. page = list_entry(pages->prev, struct page, lru);
  760. list_del(&page->lru);
  761. if (add_to_page_cache_lru(page, mapping,
  762. page->index, GFP_KERNEL))
  763. goto next_page;
  764. }
  765. block_in_file = (sector_t)page->index;
  766. last_block = block_in_file + nr_pages;
  767. last_block_in_file = (i_size_read(inode) + blocksize - 1) >>
  768. blkbits;
  769. if (last_block > last_block_in_file)
  770. last_block = last_block_in_file;
  771. /*
  772. * Map blocks using the previous result first.
  773. */
  774. if ((map.m_flags & F2FS_MAP_MAPPED) &&
  775. block_in_file > map.m_lblk &&
  776. block_in_file < (map.m_lblk + map.m_len))
  777. goto got_it;
  778. /*
  779. * Then do more f2fs_map_blocks() calls until we are
  780. * done with this page.
  781. */
  782. map.m_flags = 0;
  783. if (block_in_file < last_block) {
  784. map.m_lblk = block_in_file;
  785. map.m_len = last_block - block_in_file;
  786. if (f2fs_map_blocks(inode, &map, 0,
  787. F2FS_GET_BLOCK_READ))
  788. goto set_error_page;
  789. }
  790. got_it:
  791. if ((map.m_flags & F2FS_MAP_MAPPED)) {
  792. block_nr = map.m_pblk + block_in_file - map.m_lblk;
  793. SetPageMappedToDisk(page);
  794. if (!PageUptodate(page) && !cleancache_get_page(page)) {
  795. SetPageUptodate(page);
  796. goto confused;
  797. }
  798. } else {
  799. zero_user_segment(page, 0, PAGE_CACHE_SIZE);
  800. SetPageUptodate(page);
  801. unlock_page(page);
  802. goto next_page;
  803. }
  804. /*
  805. * This page will go to BIO. Do we need to send this
  806. * BIO off first?
  807. */
  808. if (bio && (last_block_in_bio != block_nr - 1)) {
  809. submit_and_realloc:
  810. submit_bio(READ, bio);
  811. bio = NULL;
  812. }
  813. if (bio == NULL) {
  814. struct f2fs_crypto_ctx *ctx = NULL;
  815. if (f2fs_encrypted_inode(inode) &&
  816. S_ISREG(inode->i_mode)) {
  817. ctx = f2fs_get_crypto_ctx(inode);
  818. if (IS_ERR(ctx))
  819. goto set_error_page;
  820. /* wait the page to be moved by cleaning */
  821. f2fs_wait_on_encrypted_page_writeback(
  822. F2FS_I_SB(inode), block_nr);
  823. }
  824. bio = bio_alloc(GFP_KERNEL,
  825. min_t(int, nr_pages, BIO_MAX_PAGES));
  826. if (!bio) {
  827. if (ctx)
  828. f2fs_release_crypto_ctx(ctx);
  829. goto set_error_page;
  830. }
  831. bio->bi_bdev = bdev;
  832. bio->bi_iter.bi_sector = SECTOR_FROM_BLOCK(block_nr);
  833. bio->bi_end_io = f2fs_read_end_io;
  834. bio->bi_private = ctx;
  835. }
  836. if (bio_add_page(bio, page, blocksize, 0) < blocksize)
  837. goto submit_and_realloc;
  838. last_block_in_bio = block_nr;
  839. goto next_page;
  840. set_error_page:
  841. SetPageError(page);
  842. zero_user_segment(page, 0, PAGE_CACHE_SIZE);
  843. unlock_page(page);
  844. goto next_page;
  845. confused:
  846. if (bio) {
  847. submit_bio(READ, bio);
  848. bio = NULL;
  849. }
  850. unlock_page(page);
  851. next_page:
  852. if (pages)
  853. page_cache_release(page);
  854. }
  855. BUG_ON(pages && !list_empty(pages));
  856. if (bio)
  857. submit_bio(READ, bio);
  858. return 0;
  859. }
  860. static int f2fs_read_data_page(struct file *file, struct page *page)
  861. {
  862. struct inode *inode = page->mapping->host;
  863. int ret = -EAGAIN;
  864. trace_f2fs_readpage(page, DATA);
  865. /* If the file has inline data, try to read it directly */
  866. if (f2fs_has_inline_data(inode))
  867. ret = f2fs_read_inline_data(inode, page);
  868. if (ret == -EAGAIN)
  869. ret = f2fs_mpage_readpages(page->mapping, NULL, page, 1);
  870. return ret;
  871. }
  872. static int f2fs_read_data_pages(struct file *file,
  873. struct address_space *mapping,
  874. struct list_head *pages, unsigned nr_pages)
  875. {
  876. struct inode *inode = file->f_mapping->host;
  877. struct page *page = list_entry(pages->prev, struct page, lru);
  878. trace_f2fs_readpages(inode, page, nr_pages);
  879. /* If the file has inline data, skip readpages */
  880. if (f2fs_has_inline_data(inode))
  881. return 0;
  882. return f2fs_mpage_readpages(mapping, pages, NULL, nr_pages);
  883. }
  884. int do_write_data_page(struct f2fs_io_info *fio)
  885. {
  886. struct page *page = fio->page;
  887. struct inode *inode = page->mapping->host;
  888. struct dnode_of_data dn;
  889. int err = 0;
  890. set_new_dnode(&dn, inode, NULL, NULL, 0);
  891. err = get_dnode_of_data(&dn, page->index, LOOKUP_NODE);
  892. if (err)
  893. return err;
  894. fio->blk_addr = dn.data_blkaddr;
  895. /* This page is already truncated */
  896. if (fio->blk_addr == NULL_ADDR) {
  897. ClearPageUptodate(page);
  898. goto out_writepage;
  899. }
  900. if (f2fs_encrypted_inode(inode) && S_ISREG(inode->i_mode)) {
  901. /* wait for GCed encrypted page writeback */
  902. f2fs_wait_on_encrypted_page_writeback(F2FS_I_SB(inode),
  903. fio->blk_addr);
  904. fio->encrypted_page = f2fs_encrypt(inode, fio->page);
  905. if (IS_ERR(fio->encrypted_page)) {
  906. err = PTR_ERR(fio->encrypted_page);
  907. goto out_writepage;
  908. }
  909. }
  910. set_page_writeback(page);
  911. /*
  912. * If current allocation needs SSR,
  913. * it had better in-place writes for updated data.
  914. */
  915. if (unlikely(fio->blk_addr != NEW_ADDR &&
  916. !is_cold_data(page) &&
  917. need_inplace_update(inode))) {
  918. rewrite_data_page(fio);
  919. set_inode_flag(F2FS_I(inode), FI_UPDATE_WRITE);
  920. trace_f2fs_do_write_data_page(page, IPU);
  921. } else {
  922. write_data_page(&dn, fio);
  923. set_data_blkaddr(&dn);
  924. f2fs_update_extent_cache(&dn);
  925. trace_f2fs_do_write_data_page(page, OPU);
  926. set_inode_flag(F2FS_I(inode), FI_APPEND_WRITE);
  927. if (page->index == 0)
  928. set_inode_flag(F2FS_I(inode), FI_FIRST_BLOCK_WRITTEN);
  929. }
  930. out_writepage:
  931. f2fs_put_dnode(&dn);
  932. return err;
  933. }
  934. static int f2fs_write_data_page(struct page *page,
  935. struct writeback_control *wbc)
  936. {
  937. struct inode *inode = page->mapping->host;
  938. struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
  939. loff_t i_size = i_size_read(inode);
  940. const pgoff_t end_index = ((unsigned long long) i_size)
  941. >> PAGE_CACHE_SHIFT;
  942. unsigned offset = 0;
  943. bool need_balance_fs = false;
  944. int err = 0;
  945. struct f2fs_io_info fio = {
  946. .sbi = sbi,
  947. .type = DATA,
  948. .rw = (wbc->sync_mode == WB_SYNC_ALL) ? WRITE_SYNC : WRITE,
  949. .page = page,
  950. .encrypted_page = NULL,
  951. };
  952. trace_f2fs_writepage(page, DATA);
  953. if (page->index < end_index)
  954. goto write;
  955. /*
  956. * If the offset is out-of-range of file size,
  957. * this page does not have to be written to disk.
  958. */
  959. offset = i_size & (PAGE_CACHE_SIZE - 1);
  960. if ((page->index >= end_index + 1) || !offset)
  961. goto out;
  962. zero_user_segment(page, offset, PAGE_CACHE_SIZE);
  963. write:
  964. if (unlikely(is_sbi_flag_set(sbi, SBI_POR_DOING)))
  965. goto redirty_out;
  966. if (f2fs_is_drop_cache(inode))
  967. goto out;
  968. if (f2fs_is_volatile_file(inode) && !wbc->for_reclaim &&
  969. available_free_memory(sbi, BASE_CHECK))
  970. goto redirty_out;
  971. /* Dentry blocks are controlled by checkpoint */
  972. if (S_ISDIR(inode->i_mode)) {
  973. if (unlikely(f2fs_cp_error(sbi)))
  974. goto redirty_out;
  975. err = do_write_data_page(&fio);
  976. goto done;
  977. }
  978. /* we should bypass data pages to proceed the kworkder jobs */
  979. if (unlikely(f2fs_cp_error(sbi))) {
  980. SetPageError(page);
  981. goto out;
  982. }
  983. if (!wbc->for_reclaim)
  984. need_balance_fs = true;
  985. else if (has_not_enough_free_secs(sbi, 0))
  986. goto redirty_out;
  987. err = -EAGAIN;
  988. f2fs_lock_op(sbi);
  989. if (f2fs_has_inline_data(inode))
  990. err = f2fs_write_inline_data(inode, page);
  991. if (err == -EAGAIN)
  992. err = do_write_data_page(&fio);
  993. f2fs_unlock_op(sbi);
  994. done:
  995. if (err && err != -ENOENT)
  996. goto redirty_out;
  997. clear_cold_data(page);
  998. out:
  999. inode_dec_dirty_pages(inode);
  1000. if (err)
  1001. ClearPageUptodate(page);
  1002. unlock_page(page);
  1003. if (need_balance_fs)
  1004. f2fs_balance_fs(sbi);
  1005. if (wbc->for_reclaim)
  1006. f2fs_submit_merged_bio(sbi, DATA, WRITE);
  1007. return 0;
  1008. redirty_out:
  1009. redirty_page_for_writepage(wbc, page);
  1010. return AOP_WRITEPAGE_ACTIVATE;
  1011. }
  1012. static int __f2fs_writepage(struct page *page, struct writeback_control *wbc,
  1013. void *data)
  1014. {
  1015. struct address_space *mapping = data;
  1016. int ret = mapping->a_ops->writepage(page, wbc);
  1017. mapping_set_error(mapping, ret);
  1018. return ret;
  1019. }
  1020. /*
  1021. * This function was copied from write_cche_pages from mm/page-writeback.c.
  1022. * The major change is making write step of cold data page separately from
  1023. * warm/hot data page.
  1024. */
  1025. static int f2fs_write_cache_pages(struct address_space *mapping,
  1026. struct writeback_control *wbc, writepage_t writepage,
  1027. void *data)
  1028. {
  1029. int ret = 0;
  1030. int done = 0;
  1031. struct pagevec pvec;
  1032. int nr_pages;
  1033. pgoff_t uninitialized_var(writeback_index);
  1034. pgoff_t index;
  1035. pgoff_t end; /* Inclusive */
  1036. pgoff_t done_index;
  1037. int cycled;
  1038. int range_whole = 0;
  1039. int tag;
  1040. int step = 0;
  1041. pagevec_init(&pvec, 0);
  1042. next:
  1043. if (wbc->range_cyclic) {
  1044. writeback_index = mapping->writeback_index; /* prev offset */
  1045. index = writeback_index;
  1046. if (index == 0)
  1047. cycled = 1;
  1048. else
  1049. cycled = 0;
  1050. end = -1;
  1051. } else {
  1052. index = wbc->range_start >> PAGE_CACHE_SHIFT;
  1053. end = wbc->range_end >> PAGE_CACHE_SHIFT;
  1054. if (wbc->range_start == 0 && wbc->range_end == LLONG_MAX)
  1055. range_whole = 1;
  1056. cycled = 1; /* ignore range_cyclic tests */
  1057. }
  1058. if (wbc->sync_mode == WB_SYNC_ALL || wbc->tagged_writepages)
  1059. tag = PAGECACHE_TAG_TOWRITE;
  1060. else
  1061. tag = PAGECACHE_TAG_DIRTY;
  1062. retry:
  1063. if (wbc->sync_mode == WB_SYNC_ALL || wbc->tagged_writepages)
  1064. tag_pages_for_writeback(mapping, index, end);
  1065. done_index = index;
  1066. while (!done && (index <= end)) {
  1067. int i;
  1068. nr_pages = pagevec_lookup_tag(&pvec, mapping, &index, tag,
  1069. min(end - index, (pgoff_t)PAGEVEC_SIZE - 1) + 1);
  1070. if (nr_pages == 0)
  1071. break;
  1072. for (i = 0; i < nr_pages; i++) {
  1073. struct page *page = pvec.pages[i];
  1074. if (page->index > end) {
  1075. done = 1;
  1076. break;
  1077. }
  1078. done_index = page->index;
  1079. lock_page(page);
  1080. if (unlikely(page->mapping != mapping)) {
  1081. continue_unlock:
  1082. unlock_page(page);
  1083. continue;
  1084. }
  1085. if (!PageDirty(page)) {
  1086. /* someone wrote it for us */
  1087. goto continue_unlock;
  1088. }
  1089. if (step == is_cold_data(page))
  1090. goto continue_unlock;
  1091. if (PageWriteback(page)) {
  1092. if (wbc->sync_mode != WB_SYNC_NONE)
  1093. f2fs_wait_on_page_writeback(page, DATA);
  1094. else
  1095. goto continue_unlock;
  1096. }
  1097. BUG_ON(PageWriteback(page));
  1098. if (!clear_page_dirty_for_io(page))
  1099. goto continue_unlock;
  1100. ret = (*writepage)(page, wbc, data);
  1101. if (unlikely(ret)) {
  1102. if (ret == AOP_WRITEPAGE_ACTIVATE) {
  1103. unlock_page(page);
  1104. ret = 0;
  1105. } else {
  1106. done_index = page->index + 1;
  1107. done = 1;
  1108. break;
  1109. }
  1110. }
  1111. if (--wbc->nr_to_write <= 0 &&
  1112. wbc->sync_mode == WB_SYNC_NONE) {
  1113. done = 1;
  1114. break;
  1115. }
  1116. }
  1117. pagevec_release(&pvec);
  1118. cond_resched();
  1119. }
  1120. if (step < 1) {
  1121. step++;
  1122. goto next;
  1123. }
  1124. if (!cycled && !done) {
  1125. cycled = 1;
  1126. index = 0;
  1127. end = writeback_index - 1;
  1128. goto retry;
  1129. }
  1130. if (wbc->range_cyclic || (range_whole && wbc->nr_to_write > 0))
  1131. mapping->writeback_index = done_index;
  1132. return ret;
  1133. }
  1134. static int f2fs_write_data_pages(struct address_space *mapping,
  1135. struct writeback_control *wbc)
  1136. {
  1137. struct inode *inode = mapping->host;
  1138. struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
  1139. bool locked = false;
  1140. int ret;
  1141. long diff;
  1142. trace_f2fs_writepages(mapping->host, wbc, DATA);
  1143. /* deal with chardevs and other special file */
  1144. if (!mapping->a_ops->writepage)
  1145. return 0;
  1146. /* skip writing if there is no dirty page in this inode */
  1147. if (!get_dirty_pages(inode) && wbc->sync_mode == WB_SYNC_NONE)
  1148. return 0;
  1149. if (S_ISDIR(inode->i_mode) && wbc->sync_mode == WB_SYNC_NONE &&
  1150. get_dirty_pages(inode) < nr_pages_to_skip(sbi, DATA) &&
  1151. available_free_memory(sbi, DIRTY_DENTS))
  1152. goto skip_write;
  1153. /* during POR, we don't need to trigger writepage at all. */
  1154. if (unlikely(is_sbi_flag_set(sbi, SBI_POR_DOING)))
  1155. goto skip_write;
  1156. diff = nr_pages_to_write(sbi, DATA, wbc);
  1157. if (!S_ISDIR(inode->i_mode)) {
  1158. mutex_lock(&sbi->writepages);
  1159. locked = true;
  1160. }
  1161. ret = f2fs_write_cache_pages(mapping, wbc, __f2fs_writepage, mapping);
  1162. f2fs_submit_merged_bio(sbi, DATA, WRITE);
  1163. if (locked)
  1164. mutex_unlock(&sbi->writepages);
  1165. remove_dirty_dir_inode(inode);
  1166. wbc->nr_to_write = max((long)0, wbc->nr_to_write - diff);
  1167. return ret;
  1168. skip_write:
  1169. wbc->pages_skipped += get_dirty_pages(inode);
  1170. return 0;
  1171. }
  1172. static void f2fs_write_failed(struct address_space *mapping, loff_t to)
  1173. {
  1174. struct inode *inode = mapping->host;
  1175. if (to > inode->i_size) {
  1176. truncate_pagecache(inode, inode->i_size);
  1177. truncate_blocks(inode, inode->i_size, true);
  1178. }
  1179. }
  1180. static int f2fs_write_begin(struct file *file, struct address_space *mapping,
  1181. loff_t pos, unsigned len, unsigned flags,
  1182. struct page **pagep, void **fsdata)
  1183. {
  1184. struct inode *inode = mapping->host;
  1185. struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
  1186. struct page *page = NULL;
  1187. struct page *ipage;
  1188. pgoff_t index = ((unsigned long long) pos) >> PAGE_CACHE_SHIFT;
  1189. struct dnode_of_data dn;
  1190. int err = 0;
  1191. trace_f2fs_write_begin(inode, pos, len, flags);
  1192. f2fs_balance_fs(sbi);
  1193. /*
  1194. * We should check this at this moment to avoid deadlock on inode page
  1195. * and #0 page. The locking rule for inline_data conversion should be:
  1196. * lock_page(page #0) -> lock_page(inode_page)
  1197. */
  1198. if (index != 0) {
  1199. err = f2fs_convert_inline_inode(inode);
  1200. if (err)
  1201. goto fail;
  1202. }
  1203. repeat:
  1204. page = grab_cache_page_write_begin(mapping, index, flags);
  1205. if (!page) {
  1206. err = -ENOMEM;
  1207. goto fail;
  1208. }
  1209. *pagep = page;
  1210. f2fs_lock_op(sbi);
  1211. /* check inline_data */
  1212. ipage = get_node_page(sbi, inode->i_ino);
  1213. if (IS_ERR(ipage)) {
  1214. err = PTR_ERR(ipage);
  1215. goto unlock_fail;
  1216. }
  1217. set_new_dnode(&dn, inode, ipage, ipage, 0);
  1218. if (f2fs_has_inline_data(inode)) {
  1219. if (pos + len <= MAX_INLINE_DATA) {
  1220. read_inline_data(page, ipage);
  1221. set_inode_flag(F2FS_I(inode), FI_DATA_EXIST);
  1222. sync_inode_page(&dn);
  1223. goto put_next;
  1224. }
  1225. err = f2fs_convert_inline_page(&dn, page);
  1226. if (err)
  1227. goto put_fail;
  1228. }
  1229. err = f2fs_get_block(&dn, index);
  1230. if (err)
  1231. goto put_fail;
  1232. put_next:
  1233. f2fs_put_dnode(&dn);
  1234. f2fs_unlock_op(sbi);
  1235. f2fs_wait_on_page_writeback(page, DATA);
  1236. /* wait for GCed encrypted page writeback */
  1237. if (f2fs_encrypted_inode(inode) && S_ISREG(inode->i_mode))
  1238. f2fs_wait_on_encrypted_page_writeback(sbi, dn.data_blkaddr);
  1239. if (len == PAGE_CACHE_SIZE)
  1240. goto out_update;
  1241. if (PageUptodate(page))
  1242. goto out_clear;
  1243. if ((pos & PAGE_CACHE_MASK) >= i_size_read(inode)) {
  1244. unsigned start = pos & (PAGE_CACHE_SIZE - 1);
  1245. unsigned end = start + len;
  1246. /* Reading beyond i_size is simple: memset to zero */
  1247. zero_user_segments(page, 0, start, end, PAGE_CACHE_SIZE);
  1248. goto out_update;
  1249. }
  1250. if (dn.data_blkaddr == NEW_ADDR) {
  1251. zero_user_segment(page, 0, PAGE_CACHE_SIZE);
  1252. } else {
  1253. struct f2fs_io_info fio = {
  1254. .sbi = sbi,
  1255. .type = DATA,
  1256. .rw = READ_SYNC,
  1257. .blk_addr = dn.data_blkaddr,
  1258. .page = page,
  1259. .encrypted_page = NULL,
  1260. };
  1261. err = f2fs_submit_page_bio(&fio);
  1262. if (err)
  1263. goto fail;
  1264. lock_page(page);
  1265. if (unlikely(!PageUptodate(page))) {
  1266. err = -EIO;
  1267. goto fail;
  1268. }
  1269. if (unlikely(page->mapping != mapping)) {
  1270. f2fs_put_page(page, 1);
  1271. goto repeat;
  1272. }
  1273. /* avoid symlink page */
  1274. if (f2fs_encrypted_inode(inode) && S_ISREG(inode->i_mode)) {
  1275. err = f2fs_decrypt_one(inode, page);
  1276. if (err)
  1277. goto fail;
  1278. }
  1279. }
  1280. out_update:
  1281. SetPageUptodate(page);
  1282. out_clear:
  1283. clear_cold_data(page);
  1284. return 0;
  1285. put_fail:
  1286. f2fs_put_dnode(&dn);
  1287. unlock_fail:
  1288. f2fs_unlock_op(sbi);
  1289. fail:
  1290. f2fs_put_page(page, 1);
  1291. f2fs_write_failed(mapping, pos + len);
  1292. return err;
  1293. }
  1294. static int f2fs_write_end(struct file *file,
  1295. struct address_space *mapping,
  1296. loff_t pos, unsigned len, unsigned copied,
  1297. struct page *page, void *fsdata)
  1298. {
  1299. struct inode *inode = page->mapping->host;
  1300. trace_f2fs_write_end(inode, pos, len, copied);
  1301. set_page_dirty(page);
  1302. if (pos + copied > i_size_read(inode)) {
  1303. i_size_write(inode, pos + copied);
  1304. mark_inode_dirty(inode);
  1305. update_inode_page(inode);
  1306. }
  1307. f2fs_put_page(page, 1);
  1308. return copied;
  1309. }
  1310. static int check_direct_IO(struct inode *inode, struct iov_iter *iter,
  1311. loff_t offset)
  1312. {
  1313. unsigned blocksize_mask = inode->i_sb->s_blocksize - 1;
  1314. if (offset & blocksize_mask)
  1315. return -EINVAL;
  1316. if (iov_iter_alignment(iter) & blocksize_mask)
  1317. return -EINVAL;
  1318. return 0;
  1319. }
  1320. static ssize_t f2fs_direct_IO(struct kiocb *iocb, struct iov_iter *iter,
  1321. loff_t offset)
  1322. {
  1323. struct file *file = iocb->ki_filp;
  1324. struct address_space *mapping = file->f_mapping;
  1325. struct inode *inode = mapping->host;
  1326. size_t count = iov_iter_count(iter);
  1327. int err;
  1328. /* we don't need to use inline_data strictly */
  1329. if (f2fs_has_inline_data(inode)) {
  1330. err = f2fs_convert_inline_inode(inode);
  1331. if (err)
  1332. return err;
  1333. }
  1334. if (f2fs_encrypted_inode(inode) && S_ISREG(inode->i_mode))
  1335. return 0;
  1336. err = check_direct_IO(inode, iter, offset);
  1337. if (err)
  1338. return err;
  1339. trace_f2fs_direct_IO_enter(inode, offset, count, iov_iter_rw(iter));
  1340. if (iov_iter_rw(iter) == WRITE) {
  1341. __allocate_data_blocks(inode, offset, count);
  1342. if (unlikely(f2fs_cp_error(F2FS_I_SB(inode)))) {
  1343. err = -EIO;
  1344. goto out;
  1345. }
  1346. }
  1347. err = blockdev_direct_IO(iocb, inode, iter, offset, get_data_block_dio);
  1348. out:
  1349. if (err < 0 && iov_iter_rw(iter) == WRITE)
  1350. f2fs_write_failed(mapping, offset + count);
  1351. trace_f2fs_direct_IO_exit(inode, offset, count, iov_iter_rw(iter), err);
  1352. return err;
  1353. }
  1354. void f2fs_invalidate_page(struct page *page, unsigned int offset,
  1355. unsigned int length)
  1356. {
  1357. struct inode *inode = page->mapping->host;
  1358. struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
  1359. if (inode->i_ino >= F2FS_ROOT_INO(sbi) &&
  1360. (offset % PAGE_CACHE_SIZE || length != PAGE_CACHE_SIZE))
  1361. return;
  1362. if (PageDirty(page)) {
  1363. if (inode->i_ino == F2FS_META_INO(sbi))
  1364. dec_page_count(sbi, F2FS_DIRTY_META);
  1365. else if (inode->i_ino == F2FS_NODE_INO(sbi))
  1366. dec_page_count(sbi, F2FS_DIRTY_NODES);
  1367. else
  1368. inode_dec_dirty_pages(inode);
  1369. }
  1370. /* This is atomic written page, keep Private */
  1371. if (IS_ATOMIC_WRITTEN_PAGE(page))
  1372. return;
  1373. ClearPagePrivate(page);
  1374. }
  1375. int f2fs_release_page(struct page *page, gfp_t wait)
  1376. {
  1377. /* If this is dirty page, keep PagePrivate */
  1378. if (PageDirty(page))
  1379. return 0;
  1380. /* This is atomic written page, keep Private */
  1381. if (IS_ATOMIC_WRITTEN_PAGE(page))
  1382. return 0;
  1383. ClearPagePrivate(page);
  1384. return 1;
  1385. }
  1386. static int f2fs_set_data_page_dirty(struct page *page)
  1387. {
  1388. struct address_space *mapping = page->mapping;
  1389. struct inode *inode = mapping->host;
  1390. trace_f2fs_set_page_dirty(page, DATA);
  1391. SetPageUptodate(page);
  1392. if (f2fs_is_atomic_file(inode)) {
  1393. if (!IS_ATOMIC_WRITTEN_PAGE(page)) {
  1394. register_inmem_page(inode, page);
  1395. return 1;
  1396. }
  1397. /*
  1398. * Previously, this page has been registered, we just
  1399. * return here.
  1400. */
  1401. return 0;
  1402. }
  1403. if (!PageDirty(page)) {
  1404. __set_page_dirty_nobuffers(page);
  1405. update_dirty_page(inode, page);
  1406. return 1;
  1407. }
  1408. return 0;
  1409. }
  1410. static sector_t f2fs_bmap(struct address_space *mapping, sector_t block)
  1411. {
  1412. struct inode *inode = mapping->host;
  1413. if (f2fs_has_inline_data(inode))
  1414. return 0;
  1415. /* make sure allocating whole blocks */
  1416. if (mapping_tagged(mapping, PAGECACHE_TAG_DIRTY))
  1417. filemap_write_and_wait(mapping);
  1418. return generic_block_bmap(mapping, block, get_data_block_bmap);
  1419. }
  1420. const struct address_space_operations f2fs_dblock_aops = {
  1421. .readpage = f2fs_read_data_page,
  1422. .readpages = f2fs_read_data_pages,
  1423. .writepage = f2fs_write_data_page,
  1424. .writepages = f2fs_write_data_pages,
  1425. .write_begin = f2fs_write_begin,
  1426. .write_end = f2fs_write_end,
  1427. .set_page_dirty = f2fs_set_data_page_dirty,
  1428. .invalidatepage = f2fs_invalidate_page,
  1429. .releasepage = f2fs_release_page,
  1430. .direct_IO = f2fs_direct_IO,
  1431. .bmap = f2fs_bmap,
  1432. };