file.c 24 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051
  1. /*
  2. * fs/f2fs/file.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/stat.h>
  14. #include <linux/buffer_head.h>
  15. #include <linux/writeback.h>
  16. #include <linux/blkdev.h>
  17. #include <linux/falloc.h>
  18. #include <linux/types.h>
  19. #include <linux/compat.h>
  20. #include <linux/uaccess.h>
  21. #include <linux/mount.h>
  22. #include <linux/pagevec.h>
  23. #include "f2fs.h"
  24. #include "node.h"
  25. #include "segment.h"
  26. #include "xattr.h"
  27. #include "acl.h"
  28. #include <trace/events/f2fs.h>
  29. static int f2fs_vm_page_mkwrite(struct vm_area_struct *vma,
  30. struct vm_fault *vmf)
  31. {
  32. struct page *page = vmf->page;
  33. struct inode *inode = file_inode(vma->vm_file);
  34. struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
  35. struct dnode_of_data dn;
  36. int err;
  37. f2fs_balance_fs(sbi);
  38. sb_start_pagefault(inode->i_sb);
  39. f2fs_bug_on(sbi, f2fs_has_inline_data(inode));
  40. /* block allocation */
  41. f2fs_lock_op(sbi);
  42. set_new_dnode(&dn, inode, NULL, NULL, 0);
  43. err = f2fs_reserve_block(&dn, page->index);
  44. if (err) {
  45. f2fs_unlock_op(sbi);
  46. goto out;
  47. }
  48. f2fs_put_dnode(&dn);
  49. f2fs_unlock_op(sbi);
  50. file_update_time(vma->vm_file);
  51. lock_page(page);
  52. if (unlikely(page->mapping != inode->i_mapping ||
  53. page_offset(page) > i_size_read(inode) ||
  54. !PageUptodate(page))) {
  55. unlock_page(page);
  56. err = -EFAULT;
  57. goto out;
  58. }
  59. /*
  60. * check to see if the page is mapped already (no holes)
  61. */
  62. if (PageMappedToDisk(page))
  63. goto mapped;
  64. /* page is wholly or partially inside EOF */
  65. if (((page->index + 1) << PAGE_CACHE_SHIFT) > i_size_read(inode)) {
  66. unsigned offset;
  67. offset = i_size_read(inode) & ~PAGE_CACHE_MASK;
  68. zero_user_segment(page, offset, PAGE_CACHE_SIZE);
  69. }
  70. set_page_dirty(page);
  71. SetPageUptodate(page);
  72. trace_f2fs_vm_page_mkwrite(page, DATA);
  73. mapped:
  74. /* fill the page */
  75. f2fs_wait_on_page_writeback(page, DATA);
  76. out:
  77. sb_end_pagefault(inode->i_sb);
  78. return block_page_mkwrite_return(err);
  79. }
  80. static const struct vm_operations_struct f2fs_file_vm_ops = {
  81. .fault = filemap_fault,
  82. .map_pages = filemap_map_pages,
  83. .page_mkwrite = f2fs_vm_page_mkwrite,
  84. .remap_pages = generic_file_remap_pages,
  85. };
  86. static int get_parent_ino(struct inode *inode, nid_t *pino)
  87. {
  88. struct dentry *dentry;
  89. inode = igrab(inode);
  90. dentry = d_find_any_alias(inode);
  91. iput(inode);
  92. if (!dentry)
  93. return 0;
  94. if (update_dent_inode(inode, &dentry->d_name)) {
  95. dput(dentry);
  96. return 0;
  97. }
  98. *pino = parent_ino(dentry);
  99. dput(dentry);
  100. return 1;
  101. }
  102. static inline bool need_do_checkpoint(struct inode *inode)
  103. {
  104. struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
  105. bool need_cp = false;
  106. if (!S_ISREG(inode->i_mode) || inode->i_nlink != 1)
  107. need_cp = true;
  108. else if (file_wrong_pino(inode))
  109. need_cp = true;
  110. else if (!space_for_roll_forward(sbi))
  111. need_cp = true;
  112. else if (!is_checkpointed_node(sbi, F2FS_I(inode)->i_pino))
  113. need_cp = true;
  114. else if (F2FS_I(inode)->xattr_ver == cur_cp_version(F2FS_CKPT(sbi)))
  115. need_cp = true;
  116. else if (test_opt(sbi, FASTBOOT))
  117. need_cp = true;
  118. else if (sbi->active_logs == 2)
  119. need_cp = true;
  120. return need_cp;
  121. }
  122. static bool need_inode_page_update(struct f2fs_sb_info *sbi, nid_t ino)
  123. {
  124. struct page *i = find_get_page(NODE_MAPPING(sbi), ino);
  125. bool ret = false;
  126. /* But we need to avoid that there are some inode updates */
  127. if ((i && PageDirty(i)) || need_inode_block_update(sbi, ino))
  128. ret = true;
  129. f2fs_put_page(i, 0);
  130. return ret;
  131. }
  132. static void try_to_fix_pino(struct inode *inode)
  133. {
  134. struct f2fs_inode_info *fi = F2FS_I(inode);
  135. nid_t pino;
  136. down_write(&fi->i_sem);
  137. fi->xattr_ver = 0;
  138. if (file_wrong_pino(inode) && inode->i_nlink == 1 &&
  139. get_parent_ino(inode, &pino)) {
  140. fi->i_pino = pino;
  141. file_got_pino(inode);
  142. up_write(&fi->i_sem);
  143. mark_inode_dirty_sync(inode);
  144. f2fs_write_inode(inode, NULL);
  145. } else {
  146. up_write(&fi->i_sem);
  147. }
  148. }
  149. int f2fs_sync_file(struct file *file, loff_t start, loff_t end, int datasync)
  150. {
  151. struct inode *inode = file->f_mapping->host;
  152. struct f2fs_inode_info *fi = F2FS_I(inode);
  153. struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
  154. nid_t ino = inode->i_ino;
  155. int ret = 0;
  156. bool need_cp = false;
  157. struct writeback_control wbc = {
  158. .sync_mode = WB_SYNC_ALL,
  159. .nr_to_write = LONG_MAX,
  160. .for_reclaim = 0,
  161. };
  162. if (unlikely(f2fs_readonly(inode->i_sb)))
  163. return 0;
  164. trace_f2fs_sync_file_enter(inode);
  165. /* if fdatasync is triggered, let's do in-place-update */
  166. if (get_dirty_pages(inode) <= SM_I(sbi)->min_fsync_blocks)
  167. set_inode_flag(fi, FI_NEED_IPU);
  168. ret = filemap_write_and_wait_range(inode->i_mapping, start, end);
  169. clear_inode_flag(fi, FI_NEED_IPU);
  170. if (ret) {
  171. trace_f2fs_sync_file_exit(inode, need_cp, datasync, ret);
  172. return ret;
  173. }
  174. /* if the inode is dirty, let's recover all the time */
  175. if (!datasync && is_inode_flag_set(fi, FI_DIRTY_INODE)) {
  176. update_inode_page(inode);
  177. goto go_write;
  178. }
  179. /*
  180. * if there is no written data, don't waste time to write recovery info.
  181. */
  182. if (!is_inode_flag_set(fi, FI_APPEND_WRITE) &&
  183. !exist_written_data(sbi, ino, APPEND_INO)) {
  184. /* it may call write_inode just prior to fsync */
  185. if (need_inode_page_update(sbi, ino))
  186. goto go_write;
  187. if (is_inode_flag_set(fi, FI_UPDATE_WRITE) ||
  188. exist_written_data(sbi, ino, UPDATE_INO))
  189. goto flush_out;
  190. goto out;
  191. }
  192. go_write:
  193. /* guarantee free sections for fsync */
  194. f2fs_balance_fs(sbi);
  195. /*
  196. * Both of fdatasync() and fsync() are able to be recovered from
  197. * sudden-power-off.
  198. */
  199. down_read(&fi->i_sem);
  200. need_cp = need_do_checkpoint(inode);
  201. up_read(&fi->i_sem);
  202. if (need_cp) {
  203. /* all the dirty node pages should be flushed for POR */
  204. ret = f2fs_sync_fs(inode->i_sb, 1);
  205. /*
  206. * We've secured consistency through sync_fs. Following pino
  207. * will be used only for fsynced inodes after checkpoint.
  208. */
  209. try_to_fix_pino(inode);
  210. goto out;
  211. }
  212. sync_nodes:
  213. sync_node_pages(sbi, ino, &wbc);
  214. if (need_inode_block_update(sbi, ino)) {
  215. mark_inode_dirty_sync(inode);
  216. f2fs_write_inode(inode, NULL);
  217. goto sync_nodes;
  218. }
  219. ret = wait_on_node_pages_writeback(sbi, ino);
  220. if (ret)
  221. goto out;
  222. /* once recovery info is written, don't need to tack this */
  223. remove_dirty_inode(sbi, ino, APPEND_INO);
  224. clear_inode_flag(fi, FI_APPEND_WRITE);
  225. flush_out:
  226. remove_dirty_inode(sbi, ino, UPDATE_INO);
  227. clear_inode_flag(fi, FI_UPDATE_WRITE);
  228. ret = f2fs_issue_flush(sbi);
  229. out:
  230. trace_f2fs_sync_file_exit(inode, need_cp, datasync, ret);
  231. return ret;
  232. }
  233. static pgoff_t __get_first_dirty_index(struct address_space *mapping,
  234. pgoff_t pgofs, int whence)
  235. {
  236. struct pagevec pvec;
  237. int nr_pages;
  238. if (whence != SEEK_DATA)
  239. return 0;
  240. /* find first dirty page index */
  241. pagevec_init(&pvec, 0);
  242. nr_pages = pagevec_lookup_tag(&pvec, mapping, &pgofs,
  243. PAGECACHE_TAG_DIRTY, 1);
  244. pgofs = nr_pages ? pvec.pages[0]->index : LONG_MAX;
  245. pagevec_release(&pvec);
  246. return pgofs;
  247. }
  248. static bool __found_offset(block_t blkaddr, pgoff_t dirty, pgoff_t pgofs,
  249. int whence)
  250. {
  251. switch (whence) {
  252. case SEEK_DATA:
  253. if ((blkaddr == NEW_ADDR && dirty == pgofs) ||
  254. (blkaddr != NEW_ADDR && blkaddr != NULL_ADDR))
  255. return true;
  256. break;
  257. case SEEK_HOLE:
  258. if (blkaddr == NULL_ADDR)
  259. return true;
  260. break;
  261. }
  262. return false;
  263. }
  264. static loff_t f2fs_seek_block(struct file *file, loff_t offset, int whence)
  265. {
  266. struct inode *inode = file->f_mapping->host;
  267. loff_t maxbytes = inode->i_sb->s_maxbytes;
  268. struct dnode_of_data dn;
  269. pgoff_t pgofs, end_offset, dirty;
  270. loff_t data_ofs = offset;
  271. loff_t isize;
  272. int err = 0;
  273. mutex_lock(&inode->i_mutex);
  274. isize = i_size_read(inode);
  275. if (offset >= isize)
  276. goto fail;
  277. /* handle inline data case */
  278. if (f2fs_has_inline_data(inode) || f2fs_has_inline_dentry(inode)) {
  279. if (whence == SEEK_HOLE)
  280. data_ofs = isize;
  281. goto found;
  282. }
  283. pgofs = (pgoff_t)(offset >> PAGE_CACHE_SHIFT);
  284. dirty = __get_first_dirty_index(inode->i_mapping, pgofs, whence);
  285. for (; data_ofs < isize; data_ofs = pgofs << PAGE_CACHE_SHIFT) {
  286. set_new_dnode(&dn, inode, NULL, NULL, 0);
  287. err = get_dnode_of_data(&dn, pgofs, LOOKUP_NODE_RA);
  288. if (err && err != -ENOENT) {
  289. goto fail;
  290. } else if (err == -ENOENT) {
  291. /* direct node does not exists */
  292. if (whence == SEEK_DATA) {
  293. pgofs = PGOFS_OF_NEXT_DNODE(pgofs,
  294. F2FS_I(inode));
  295. continue;
  296. } else {
  297. goto found;
  298. }
  299. }
  300. end_offset = ADDRS_PER_PAGE(dn.node_page, F2FS_I(inode));
  301. /* find data/hole in dnode block */
  302. for (; dn.ofs_in_node < end_offset;
  303. dn.ofs_in_node++, pgofs++,
  304. data_ofs = pgofs << PAGE_CACHE_SHIFT) {
  305. block_t blkaddr;
  306. blkaddr = datablock_addr(dn.node_page, dn.ofs_in_node);
  307. if (__found_offset(blkaddr, dirty, pgofs, whence)) {
  308. f2fs_put_dnode(&dn);
  309. goto found;
  310. }
  311. }
  312. f2fs_put_dnode(&dn);
  313. }
  314. if (whence == SEEK_DATA)
  315. goto fail;
  316. found:
  317. if (whence == SEEK_HOLE && data_ofs > isize)
  318. data_ofs = isize;
  319. mutex_unlock(&inode->i_mutex);
  320. return vfs_setpos(file, data_ofs, maxbytes);
  321. fail:
  322. mutex_unlock(&inode->i_mutex);
  323. return -ENXIO;
  324. }
  325. static loff_t f2fs_llseek(struct file *file, loff_t offset, int whence)
  326. {
  327. struct inode *inode = file->f_mapping->host;
  328. loff_t maxbytes = inode->i_sb->s_maxbytes;
  329. switch (whence) {
  330. case SEEK_SET:
  331. case SEEK_CUR:
  332. case SEEK_END:
  333. return generic_file_llseek_size(file, offset, whence,
  334. maxbytes, i_size_read(inode));
  335. case SEEK_DATA:
  336. case SEEK_HOLE:
  337. if (offset < 0)
  338. return -ENXIO;
  339. return f2fs_seek_block(file, offset, whence);
  340. }
  341. return -EINVAL;
  342. }
  343. static int f2fs_file_mmap(struct file *file, struct vm_area_struct *vma)
  344. {
  345. struct inode *inode = file_inode(file);
  346. /* we don't need to use inline_data strictly */
  347. if (f2fs_has_inline_data(inode)) {
  348. int err = f2fs_convert_inline_inode(inode);
  349. if (err)
  350. return err;
  351. }
  352. file_accessed(file);
  353. vma->vm_ops = &f2fs_file_vm_ops;
  354. return 0;
  355. }
  356. int truncate_data_blocks_range(struct dnode_of_data *dn, int count)
  357. {
  358. int nr_free = 0, ofs = dn->ofs_in_node;
  359. struct f2fs_sb_info *sbi = F2FS_I_SB(dn->inode);
  360. struct f2fs_node *raw_node;
  361. __le32 *addr;
  362. raw_node = F2FS_NODE(dn->node_page);
  363. addr = blkaddr_in_node(raw_node) + ofs;
  364. for (; count > 0; count--, addr++, dn->ofs_in_node++) {
  365. block_t blkaddr = le32_to_cpu(*addr);
  366. if (blkaddr == NULL_ADDR)
  367. continue;
  368. update_extent_cache(NULL_ADDR, dn);
  369. invalidate_blocks(sbi, blkaddr);
  370. nr_free++;
  371. }
  372. if (nr_free) {
  373. dec_valid_block_count(sbi, dn->inode, nr_free);
  374. set_page_dirty(dn->node_page);
  375. sync_inode_page(dn);
  376. }
  377. dn->ofs_in_node = ofs;
  378. trace_f2fs_truncate_data_blocks_range(dn->inode, dn->nid,
  379. dn->ofs_in_node, nr_free);
  380. return nr_free;
  381. }
  382. void truncate_data_blocks(struct dnode_of_data *dn)
  383. {
  384. truncate_data_blocks_range(dn, ADDRS_PER_BLOCK);
  385. }
  386. static int truncate_partial_data_page(struct inode *inode, u64 from)
  387. {
  388. unsigned offset = from & (PAGE_CACHE_SIZE - 1);
  389. struct page *page;
  390. if (!offset)
  391. return 0;
  392. page = find_data_page(inode, from >> PAGE_CACHE_SHIFT, false);
  393. if (IS_ERR(page))
  394. return 0;
  395. lock_page(page);
  396. if (unlikely(!PageUptodate(page) ||
  397. page->mapping != inode->i_mapping))
  398. goto out;
  399. f2fs_wait_on_page_writeback(page, DATA);
  400. zero_user(page, offset, PAGE_CACHE_SIZE - offset);
  401. set_page_dirty(page);
  402. out:
  403. f2fs_put_page(page, 1);
  404. return 0;
  405. }
  406. int truncate_blocks(struct inode *inode, u64 from, bool lock)
  407. {
  408. struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
  409. unsigned int blocksize = inode->i_sb->s_blocksize;
  410. struct dnode_of_data dn;
  411. pgoff_t free_from;
  412. int count = 0, err = 0;
  413. struct page *ipage;
  414. trace_f2fs_truncate_blocks_enter(inode, from);
  415. free_from = (pgoff_t)
  416. ((from + blocksize - 1) >> (sbi->log_blocksize));
  417. if (lock)
  418. f2fs_lock_op(sbi);
  419. ipage = get_node_page(sbi, inode->i_ino);
  420. if (IS_ERR(ipage)) {
  421. err = PTR_ERR(ipage);
  422. goto out;
  423. }
  424. if (f2fs_has_inline_data(inode)) {
  425. f2fs_put_page(ipage, 1);
  426. goto out;
  427. }
  428. set_new_dnode(&dn, inode, ipage, NULL, 0);
  429. err = get_dnode_of_data(&dn, free_from, LOOKUP_NODE);
  430. if (err) {
  431. if (err == -ENOENT)
  432. goto free_next;
  433. goto out;
  434. }
  435. count = ADDRS_PER_PAGE(dn.node_page, F2FS_I(inode));
  436. count -= dn.ofs_in_node;
  437. f2fs_bug_on(sbi, count < 0);
  438. if (dn.ofs_in_node || IS_INODE(dn.node_page)) {
  439. truncate_data_blocks_range(&dn, count);
  440. free_from += count;
  441. }
  442. f2fs_put_dnode(&dn);
  443. free_next:
  444. err = truncate_inode_blocks(inode, free_from);
  445. out:
  446. if (lock)
  447. f2fs_unlock_op(sbi);
  448. /* lastly zero out the first data page */
  449. if (!err)
  450. err = truncate_partial_data_page(inode, from);
  451. trace_f2fs_truncate_blocks_exit(inode, err);
  452. return err;
  453. }
  454. void f2fs_truncate(struct inode *inode)
  455. {
  456. if (!(S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) ||
  457. S_ISLNK(inode->i_mode)))
  458. return;
  459. trace_f2fs_truncate(inode);
  460. /* we should check inline_data size */
  461. if (f2fs_has_inline_data(inode) && !f2fs_may_inline(inode)) {
  462. if (f2fs_convert_inline_inode(inode))
  463. return;
  464. }
  465. if (!truncate_blocks(inode, i_size_read(inode), true)) {
  466. inode->i_mtime = inode->i_ctime = CURRENT_TIME;
  467. mark_inode_dirty(inode);
  468. }
  469. }
  470. int f2fs_getattr(struct vfsmount *mnt,
  471. struct dentry *dentry, struct kstat *stat)
  472. {
  473. struct inode *inode = dentry->d_inode;
  474. generic_fillattr(inode, stat);
  475. stat->blocks <<= 3;
  476. return 0;
  477. }
  478. #ifdef CONFIG_F2FS_FS_POSIX_ACL
  479. static void __setattr_copy(struct inode *inode, const struct iattr *attr)
  480. {
  481. struct f2fs_inode_info *fi = F2FS_I(inode);
  482. unsigned int ia_valid = attr->ia_valid;
  483. if (ia_valid & ATTR_UID)
  484. inode->i_uid = attr->ia_uid;
  485. if (ia_valid & ATTR_GID)
  486. inode->i_gid = attr->ia_gid;
  487. if (ia_valid & ATTR_ATIME)
  488. inode->i_atime = timespec_trunc(attr->ia_atime,
  489. inode->i_sb->s_time_gran);
  490. if (ia_valid & ATTR_MTIME)
  491. inode->i_mtime = timespec_trunc(attr->ia_mtime,
  492. inode->i_sb->s_time_gran);
  493. if (ia_valid & ATTR_CTIME)
  494. inode->i_ctime = timespec_trunc(attr->ia_ctime,
  495. inode->i_sb->s_time_gran);
  496. if (ia_valid & ATTR_MODE) {
  497. umode_t mode = attr->ia_mode;
  498. if (!in_group_p(inode->i_gid) && !capable(CAP_FSETID))
  499. mode &= ~S_ISGID;
  500. set_acl_inode(fi, mode);
  501. }
  502. }
  503. #else
  504. #define __setattr_copy setattr_copy
  505. #endif
  506. int f2fs_setattr(struct dentry *dentry, struct iattr *attr)
  507. {
  508. struct inode *inode = dentry->d_inode;
  509. struct f2fs_inode_info *fi = F2FS_I(inode);
  510. int err;
  511. err = inode_change_ok(inode, attr);
  512. if (err)
  513. return err;
  514. if (attr->ia_valid & ATTR_SIZE) {
  515. if (attr->ia_size != i_size_read(inode)) {
  516. truncate_setsize(inode, attr->ia_size);
  517. f2fs_truncate(inode);
  518. f2fs_balance_fs(F2FS_I_SB(inode));
  519. } else {
  520. /*
  521. * giving a chance to truncate blocks past EOF which
  522. * are fallocated with FALLOC_FL_KEEP_SIZE.
  523. */
  524. f2fs_truncate(inode);
  525. }
  526. }
  527. __setattr_copy(inode, attr);
  528. if (attr->ia_valid & ATTR_MODE) {
  529. err = posix_acl_chmod(inode, get_inode_mode(inode));
  530. if (err || is_inode_flag_set(fi, FI_ACL_MODE)) {
  531. inode->i_mode = fi->i_acl_mode;
  532. clear_inode_flag(fi, FI_ACL_MODE);
  533. }
  534. }
  535. mark_inode_dirty(inode);
  536. return err;
  537. }
  538. const struct inode_operations f2fs_file_inode_operations = {
  539. .getattr = f2fs_getattr,
  540. .setattr = f2fs_setattr,
  541. .get_acl = f2fs_get_acl,
  542. .set_acl = f2fs_set_acl,
  543. #ifdef CONFIG_F2FS_FS_XATTR
  544. .setxattr = generic_setxattr,
  545. .getxattr = generic_getxattr,
  546. .listxattr = f2fs_listxattr,
  547. .removexattr = generic_removexattr,
  548. #endif
  549. .fiemap = f2fs_fiemap,
  550. };
  551. static void fill_zero(struct inode *inode, pgoff_t index,
  552. loff_t start, loff_t len)
  553. {
  554. struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
  555. struct page *page;
  556. if (!len)
  557. return;
  558. f2fs_balance_fs(sbi);
  559. f2fs_lock_op(sbi);
  560. page = get_new_data_page(inode, NULL, index, false);
  561. f2fs_unlock_op(sbi);
  562. if (!IS_ERR(page)) {
  563. f2fs_wait_on_page_writeback(page, DATA);
  564. zero_user(page, start, len);
  565. set_page_dirty(page);
  566. f2fs_put_page(page, 1);
  567. }
  568. }
  569. int truncate_hole(struct inode *inode, pgoff_t pg_start, pgoff_t pg_end)
  570. {
  571. pgoff_t index;
  572. int err;
  573. for (index = pg_start; index < pg_end; index++) {
  574. struct dnode_of_data dn;
  575. set_new_dnode(&dn, inode, NULL, NULL, 0);
  576. err = get_dnode_of_data(&dn, index, LOOKUP_NODE);
  577. if (err) {
  578. if (err == -ENOENT)
  579. continue;
  580. return err;
  581. }
  582. if (dn.data_blkaddr != NULL_ADDR)
  583. truncate_data_blocks_range(&dn, 1);
  584. f2fs_put_dnode(&dn);
  585. }
  586. return 0;
  587. }
  588. static int punch_hole(struct inode *inode, loff_t offset, loff_t len)
  589. {
  590. pgoff_t pg_start, pg_end;
  591. loff_t off_start, off_end;
  592. int ret = 0;
  593. if (!S_ISREG(inode->i_mode))
  594. return -EOPNOTSUPP;
  595. /* skip punching hole beyond i_size */
  596. if (offset >= inode->i_size)
  597. return ret;
  598. if (f2fs_has_inline_data(inode)) {
  599. ret = f2fs_convert_inline_inode(inode);
  600. if (ret)
  601. return ret;
  602. }
  603. pg_start = ((unsigned long long) offset) >> PAGE_CACHE_SHIFT;
  604. pg_end = ((unsigned long long) offset + len) >> PAGE_CACHE_SHIFT;
  605. off_start = offset & (PAGE_CACHE_SIZE - 1);
  606. off_end = (offset + len) & (PAGE_CACHE_SIZE - 1);
  607. if (pg_start == pg_end) {
  608. fill_zero(inode, pg_start, off_start,
  609. off_end - off_start);
  610. } else {
  611. if (off_start)
  612. fill_zero(inode, pg_start++, off_start,
  613. PAGE_CACHE_SIZE - off_start);
  614. if (off_end)
  615. fill_zero(inode, pg_end, 0, off_end);
  616. if (pg_start < pg_end) {
  617. struct address_space *mapping = inode->i_mapping;
  618. loff_t blk_start, blk_end;
  619. struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
  620. f2fs_balance_fs(sbi);
  621. blk_start = pg_start << PAGE_CACHE_SHIFT;
  622. blk_end = pg_end << PAGE_CACHE_SHIFT;
  623. truncate_inode_pages_range(mapping, blk_start,
  624. blk_end - 1);
  625. f2fs_lock_op(sbi);
  626. ret = truncate_hole(inode, pg_start, pg_end);
  627. f2fs_unlock_op(sbi);
  628. }
  629. }
  630. return ret;
  631. }
  632. static int expand_inode_data(struct inode *inode, loff_t offset,
  633. loff_t len, int mode)
  634. {
  635. struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
  636. pgoff_t index, pg_start, pg_end;
  637. loff_t new_size = i_size_read(inode);
  638. loff_t off_start, off_end;
  639. int ret = 0;
  640. f2fs_balance_fs(sbi);
  641. ret = inode_newsize_ok(inode, (len + offset));
  642. if (ret)
  643. return ret;
  644. if (f2fs_has_inline_data(inode)) {
  645. ret = f2fs_convert_inline_inode(inode);
  646. if (ret)
  647. return ret;
  648. }
  649. pg_start = ((unsigned long long) offset) >> PAGE_CACHE_SHIFT;
  650. pg_end = ((unsigned long long) offset + len) >> PAGE_CACHE_SHIFT;
  651. off_start = offset & (PAGE_CACHE_SIZE - 1);
  652. off_end = (offset + len) & (PAGE_CACHE_SIZE - 1);
  653. f2fs_lock_op(sbi);
  654. for (index = pg_start; index <= pg_end; index++) {
  655. struct dnode_of_data dn;
  656. if (index == pg_end && !off_end)
  657. goto noalloc;
  658. set_new_dnode(&dn, inode, NULL, NULL, 0);
  659. ret = f2fs_reserve_block(&dn, index);
  660. if (ret)
  661. break;
  662. noalloc:
  663. if (pg_start == pg_end)
  664. new_size = offset + len;
  665. else if (index == pg_start && off_start)
  666. new_size = (index + 1) << PAGE_CACHE_SHIFT;
  667. else if (index == pg_end)
  668. new_size = (index << PAGE_CACHE_SHIFT) + off_end;
  669. else
  670. new_size += PAGE_CACHE_SIZE;
  671. }
  672. if (!(mode & FALLOC_FL_KEEP_SIZE) &&
  673. i_size_read(inode) < new_size) {
  674. i_size_write(inode, new_size);
  675. mark_inode_dirty(inode);
  676. update_inode_page(inode);
  677. }
  678. f2fs_unlock_op(sbi);
  679. return ret;
  680. }
  681. static long f2fs_fallocate(struct file *file, int mode,
  682. loff_t offset, loff_t len)
  683. {
  684. struct inode *inode = file_inode(file);
  685. long ret;
  686. if (mode & ~(FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE))
  687. return -EOPNOTSUPP;
  688. mutex_lock(&inode->i_mutex);
  689. if (mode & FALLOC_FL_PUNCH_HOLE)
  690. ret = punch_hole(inode, offset, len);
  691. else
  692. ret = expand_inode_data(inode, offset, len, mode);
  693. if (!ret) {
  694. inode->i_mtime = inode->i_ctime = CURRENT_TIME;
  695. mark_inode_dirty(inode);
  696. }
  697. mutex_unlock(&inode->i_mutex);
  698. trace_f2fs_fallocate(inode, mode, offset, len, ret);
  699. return ret;
  700. }
  701. #define F2FS_REG_FLMASK (~(FS_DIRSYNC_FL | FS_TOPDIR_FL))
  702. #define F2FS_OTHER_FLMASK (FS_NODUMP_FL | FS_NOATIME_FL)
  703. static inline __u32 f2fs_mask_flags(umode_t mode, __u32 flags)
  704. {
  705. if (S_ISDIR(mode))
  706. return flags;
  707. else if (S_ISREG(mode))
  708. return flags & F2FS_REG_FLMASK;
  709. else
  710. return flags & F2FS_OTHER_FLMASK;
  711. }
  712. static int f2fs_ioc_getflags(struct file *filp, unsigned long arg)
  713. {
  714. struct inode *inode = file_inode(filp);
  715. struct f2fs_inode_info *fi = F2FS_I(inode);
  716. unsigned int flags = fi->i_flags & FS_FL_USER_VISIBLE;
  717. return put_user(flags, (int __user *)arg);
  718. }
  719. static int f2fs_ioc_setflags(struct file *filp, unsigned long arg)
  720. {
  721. struct inode *inode = file_inode(filp);
  722. struct f2fs_inode_info *fi = F2FS_I(inode);
  723. unsigned int flags = fi->i_flags & FS_FL_USER_VISIBLE;
  724. unsigned int oldflags;
  725. int ret;
  726. ret = mnt_want_write_file(filp);
  727. if (ret)
  728. return ret;
  729. if (!inode_owner_or_capable(inode)) {
  730. ret = -EACCES;
  731. goto out;
  732. }
  733. if (get_user(flags, (int __user *)arg)) {
  734. ret = -EFAULT;
  735. goto out;
  736. }
  737. flags = f2fs_mask_flags(inode->i_mode, flags);
  738. mutex_lock(&inode->i_mutex);
  739. oldflags = fi->i_flags;
  740. if ((flags ^ oldflags) & (FS_APPEND_FL | FS_IMMUTABLE_FL)) {
  741. if (!capable(CAP_LINUX_IMMUTABLE)) {
  742. mutex_unlock(&inode->i_mutex);
  743. ret = -EPERM;
  744. goto out;
  745. }
  746. }
  747. flags = flags & FS_FL_USER_MODIFIABLE;
  748. flags |= oldflags & ~FS_FL_USER_MODIFIABLE;
  749. fi->i_flags = flags;
  750. mutex_unlock(&inode->i_mutex);
  751. f2fs_set_inode_flags(inode);
  752. inode->i_ctime = CURRENT_TIME;
  753. mark_inode_dirty(inode);
  754. out:
  755. mnt_drop_write_file(filp);
  756. return ret;
  757. }
  758. static int f2fs_ioc_start_atomic_write(struct file *filp)
  759. {
  760. struct inode *inode = file_inode(filp);
  761. struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
  762. if (!inode_owner_or_capable(inode))
  763. return -EACCES;
  764. f2fs_balance_fs(sbi);
  765. set_inode_flag(F2FS_I(inode), FI_ATOMIC_FILE);
  766. return f2fs_convert_inline_inode(inode);
  767. }
  768. static int f2fs_release_file(struct inode *inode, struct file *filp)
  769. {
  770. /* some remained atomic pages should discarded */
  771. if (f2fs_is_atomic_file(inode) || f2fs_is_volatile_file(inode))
  772. commit_inmem_pages(inode, true);
  773. return 0;
  774. }
  775. static int f2fs_ioc_commit_atomic_write(struct file *filp)
  776. {
  777. struct inode *inode = file_inode(filp);
  778. int ret;
  779. if (!inode_owner_or_capable(inode))
  780. return -EACCES;
  781. if (f2fs_is_volatile_file(inode))
  782. return 0;
  783. ret = mnt_want_write_file(filp);
  784. if (ret)
  785. return ret;
  786. if (f2fs_is_atomic_file(inode))
  787. commit_inmem_pages(inode, false);
  788. ret = f2fs_sync_file(filp, 0, LONG_MAX, 0);
  789. mnt_drop_write_file(filp);
  790. return ret;
  791. }
  792. static int f2fs_ioc_start_volatile_write(struct file *filp)
  793. {
  794. struct inode *inode = file_inode(filp);
  795. if (!inode_owner_or_capable(inode))
  796. return -EACCES;
  797. set_inode_flag(F2FS_I(inode), FI_VOLATILE_FILE);
  798. return f2fs_convert_inline_inode(inode);
  799. }
  800. static int f2fs_ioc_fitrim(struct file *filp, unsigned long arg)
  801. {
  802. struct inode *inode = file_inode(filp);
  803. struct super_block *sb = inode->i_sb;
  804. struct request_queue *q = bdev_get_queue(sb->s_bdev);
  805. struct fstrim_range range;
  806. int ret;
  807. if (!capable(CAP_SYS_ADMIN))
  808. return -EPERM;
  809. if (!blk_queue_discard(q))
  810. return -EOPNOTSUPP;
  811. if (copy_from_user(&range, (struct fstrim_range __user *)arg,
  812. sizeof(range)))
  813. return -EFAULT;
  814. range.minlen = max((unsigned int)range.minlen,
  815. q->limits.discard_granularity);
  816. ret = f2fs_trim_fs(F2FS_SB(sb), &range);
  817. if (ret < 0)
  818. return ret;
  819. if (copy_to_user((struct fstrim_range __user *)arg, &range,
  820. sizeof(range)))
  821. return -EFAULT;
  822. return 0;
  823. }
  824. long f2fs_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
  825. {
  826. switch (cmd) {
  827. case F2FS_IOC_GETFLAGS:
  828. return f2fs_ioc_getflags(filp, arg);
  829. case F2FS_IOC_SETFLAGS:
  830. return f2fs_ioc_setflags(filp, arg);
  831. case F2FS_IOC_START_ATOMIC_WRITE:
  832. return f2fs_ioc_start_atomic_write(filp);
  833. case F2FS_IOC_COMMIT_ATOMIC_WRITE:
  834. return f2fs_ioc_commit_atomic_write(filp);
  835. case F2FS_IOC_START_VOLATILE_WRITE:
  836. return f2fs_ioc_start_volatile_write(filp);
  837. case FITRIM:
  838. return f2fs_ioc_fitrim(filp, arg);
  839. default:
  840. return -ENOTTY;
  841. }
  842. }
  843. #ifdef CONFIG_COMPAT
  844. long f2fs_compat_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
  845. {
  846. switch (cmd) {
  847. case F2FS_IOC32_GETFLAGS:
  848. cmd = F2FS_IOC_GETFLAGS;
  849. break;
  850. case F2FS_IOC32_SETFLAGS:
  851. cmd = F2FS_IOC_SETFLAGS;
  852. break;
  853. default:
  854. return -ENOIOCTLCMD;
  855. }
  856. return f2fs_ioctl(file, cmd, (unsigned long) compat_ptr(arg));
  857. }
  858. #endif
  859. const struct file_operations f2fs_file_operations = {
  860. .llseek = f2fs_llseek,
  861. .read = new_sync_read,
  862. .write = new_sync_write,
  863. .read_iter = generic_file_read_iter,
  864. .write_iter = generic_file_write_iter,
  865. .open = generic_file_open,
  866. .release = f2fs_release_file,
  867. .mmap = f2fs_file_mmap,
  868. .fsync = f2fs_sync_file,
  869. .fallocate = f2fs_fallocate,
  870. .unlocked_ioctl = f2fs_ioctl,
  871. #ifdef CONFIG_COMPAT
  872. .compat_ioctl = f2fs_compat_ioctl,
  873. #endif
  874. .splice_read = generic_file_splice_read,
  875. .splice_write = iter_file_splice_write,
  876. };