data.c 47 KB

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