namei.c 29 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268
  1. /*
  2. * fs/f2fs/namei.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/pagemap.h>
  14. #include <linux/sched.h>
  15. #include <linux/ctype.h>
  16. #include <linux/dcache.h>
  17. #include <linux/namei.h>
  18. #include <linux/quotaops.h>
  19. #include "f2fs.h"
  20. #include "node.h"
  21. #include "xattr.h"
  22. #include "acl.h"
  23. #include <trace/events/f2fs.h>
  24. static struct inode *f2fs_new_inode(struct inode *dir, umode_t mode)
  25. {
  26. struct f2fs_sb_info *sbi = F2FS_I_SB(dir);
  27. nid_t ino;
  28. struct inode *inode;
  29. bool nid_free = false;
  30. int xattr_size = 0;
  31. int err;
  32. inode = new_inode(dir->i_sb);
  33. if (!inode)
  34. return ERR_PTR(-ENOMEM);
  35. f2fs_lock_op(sbi);
  36. if (!f2fs_alloc_nid(sbi, &ino)) {
  37. f2fs_unlock_op(sbi);
  38. err = -ENOSPC;
  39. goto fail;
  40. }
  41. f2fs_unlock_op(sbi);
  42. nid_free = true;
  43. inode_init_owner(inode, dir, mode);
  44. inode->i_ino = ino;
  45. inode->i_blocks = 0;
  46. inode->i_mtime = inode->i_atime = inode->i_ctime = current_time(inode);
  47. F2FS_I(inode)->i_crtime = inode->i_mtime;
  48. inode->i_generation = sbi->s_next_generation++;
  49. if (S_ISDIR(inode->i_mode))
  50. F2FS_I(inode)->i_current_depth = 1;
  51. err = insert_inode_locked(inode);
  52. if (err) {
  53. err = -EINVAL;
  54. goto fail;
  55. }
  56. if (f2fs_sb_has_project_quota(sbi->sb) &&
  57. (F2FS_I(dir)->i_flags & F2FS_PROJINHERIT_FL))
  58. F2FS_I(inode)->i_projid = F2FS_I(dir)->i_projid;
  59. else
  60. F2FS_I(inode)->i_projid = make_kprojid(&init_user_ns,
  61. F2FS_DEF_PROJID);
  62. err = dquot_initialize(inode);
  63. if (err)
  64. goto fail_drop;
  65. err = dquot_alloc_inode(inode);
  66. if (err)
  67. goto fail_drop;
  68. set_inode_flag(inode, FI_NEW_INODE);
  69. /* If the directory encrypted, then we should encrypt the inode. */
  70. if ((f2fs_encrypted_inode(dir) || DUMMY_ENCRYPTION_ENABLED(sbi)) &&
  71. f2fs_may_encrypt(inode))
  72. f2fs_set_encrypted_inode(inode);
  73. if (f2fs_sb_has_extra_attr(sbi->sb)) {
  74. set_inode_flag(inode, FI_EXTRA_ATTR);
  75. F2FS_I(inode)->i_extra_isize = F2FS_TOTAL_EXTRA_ATTR_SIZE;
  76. }
  77. if (test_opt(sbi, INLINE_XATTR))
  78. set_inode_flag(inode, FI_INLINE_XATTR);
  79. if (test_opt(sbi, INLINE_DATA) && f2fs_may_inline_data(inode))
  80. set_inode_flag(inode, FI_INLINE_DATA);
  81. if (f2fs_may_inline_dentry(inode))
  82. set_inode_flag(inode, FI_INLINE_DENTRY);
  83. if (f2fs_sb_has_flexible_inline_xattr(sbi->sb)) {
  84. f2fs_bug_on(sbi, !f2fs_has_extra_attr(inode));
  85. if (f2fs_has_inline_xattr(inode))
  86. xattr_size = F2FS_OPTION(sbi).inline_xattr_size;
  87. /* Otherwise, will be 0 */
  88. } else if (f2fs_has_inline_xattr(inode) ||
  89. f2fs_has_inline_dentry(inode)) {
  90. xattr_size = DEFAULT_INLINE_XATTR_ADDRS;
  91. }
  92. F2FS_I(inode)->i_inline_xattr_size = xattr_size;
  93. f2fs_init_extent_tree(inode, NULL);
  94. stat_inc_inline_xattr(inode);
  95. stat_inc_inline_inode(inode);
  96. stat_inc_inline_dir(inode);
  97. F2FS_I(inode)->i_flags =
  98. f2fs_mask_flags(mode, F2FS_I(dir)->i_flags & F2FS_FL_INHERITED);
  99. if (S_ISDIR(inode->i_mode))
  100. F2FS_I(inode)->i_flags |= F2FS_INDEX_FL;
  101. if (F2FS_I(inode)->i_flags & F2FS_PROJINHERIT_FL)
  102. set_inode_flag(inode, FI_PROJ_INHERIT);
  103. f2fs_set_inode_flags(inode);
  104. trace_f2fs_new_inode(inode, 0);
  105. return inode;
  106. fail:
  107. trace_f2fs_new_inode(inode, err);
  108. make_bad_inode(inode);
  109. if (nid_free)
  110. set_inode_flag(inode, FI_FREE_NID);
  111. iput(inode);
  112. return ERR_PTR(err);
  113. fail_drop:
  114. trace_f2fs_new_inode(inode, err);
  115. dquot_drop(inode);
  116. inode->i_flags |= S_NOQUOTA;
  117. if (nid_free)
  118. set_inode_flag(inode, FI_FREE_NID);
  119. clear_nlink(inode);
  120. unlock_new_inode(inode);
  121. iput(inode);
  122. return ERR_PTR(err);
  123. }
  124. static int is_extension_exist(const unsigned char *s, const char *sub)
  125. {
  126. size_t slen = strlen(s);
  127. size_t sublen = strlen(sub);
  128. int i;
  129. /*
  130. * filename format of multimedia file should be defined as:
  131. * "filename + '.' + extension + (optional: '.' + temp extension)".
  132. */
  133. if (slen < sublen + 2)
  134. return 0;
  135. for (i = 1; i < slen - sublen; i++) {
  136. if (s[i] != '.')
  137. continue;
  138. if (!strncasecmp(s + i + 1, sub, sublen))
  139. return 1;
  140. }
  141. return 0;
  142. }
  143. /*
  144. * Set multimedia files as cold files for hot/cold data separation
  145. */
  146. static inline void set_file_temperature(struct f2fs_sb_info *sbi, struct inode *inode,
  147. const unsigned char *name)
  148. {
  149. __u8 (*extlist)[F2FS_EXTENSION_LEN] = sbi->raw_super->extension_list;
  150. int i, cold_count, hot_count;
  151. down_read(&sbi->sb_lock);
  152. cold_count = le32_to_cpu(sbi->raw_super->extension_count);
  153. hot_count = sbi->raw_super->hot_ext_count;
  154. for (i = 0; i < cold_count + hot_count; i++) {
  155. if (!is_extension_exist(name, extlist[i]))
  156. continue;
  157. if (i < cold_count)
  158. file_set_cold(inode);
  159. else
  160. file_set_hot(inode);
  161. break;
  162. }
  163. up_read(&sbi->sb_lock);
  164. }
  165. int f2fs_update_extension_list(struct f2fs_sb_info *sbi, const char *name,
  166. bool hot, bool set)
  167. {
  168. __u8 (*extlist)[F2FS_EXTENSION_LEN] = sbi->raw_super->extension_list;
  169. int cold_count = le32_to_cpu(sbi->raw_super->extension_count);
  170. int hot_count = sbi->raw_super->hot_ext_count;
  171. int total_count = cold_count + hot_count;
  172. int start, count;
  173. int i;
  174. if (set) {
  175. if (total_count == F2FS_MAX_EXTENSION)
  176. return -EINVAL;
  177. } else {
  178. if (!hot && !cold_count)
  179. return -EINVAL;
  180. if (hot && !hot_count)
  181. return -EINVAL;
  182. }
  183. if (hot) {
  184. start = cold_count;
  185. count = total_count;
  186. } else {
  187. start = 0;
  188. count = cold_count;
  189. }
  190. for (i = start; i < count; i++) {
  191. if (strcmp(name, extlist[i]))
  192. continue;
  193. if (set)
  194. return -EINVAL;
  195. memcpy(extlist[i], extlist[i + 1],
  196. F2FS_EXTENSION_LEN * (total_count - i - 1));
  197. memset(extlist[total_count - 1], 0, F2FS_EXTENSION_LEN);
  198. if (hot)
  199. sbi->raw_super->hot_ext_count = hot_count - 1;
  200. else
  201. sbi->raw_super->extension_count =
  202. cpu_to_le32(cold_count - 1);
  203. return 0;
  204. }
  205. if (!set)
  206. return -EINVAL;
  207. if (hot) {
  208. memcpy(extlist[count], name, strlen(name));
  209. sbi->raw_super->hot_ext_count = hot_count + 1;
  210. } else {
  211. char buf[F2FS_MAX_EXTENSION][F2FS_EXTENSION_LEN];
  212. memcpy(buf, &extlist[cold_count],
  213. F2FS_EXTENSION_LEN * hot_count);
  214. memset(extlist[cold_count], 0, F2FS_EXTENSION_LEN);
  215. memcpy(extlist[cold_count], name, strlen(name));
  216. memcpy(&extlist[cold_count + 1], buf,
  217. F2FS_EXTENSION_LEN * hot_count);
  218. sbi->raw_super->extension_count = cpu_to_le32(cold_count + 1);
  219. }
  220. return 0;
  221. }
  222. static int f2fs_create(struct inode *dir, struct dentry *dentry, umode_t mode,
  223. bool excl)
  224. {
  225. struct f2fs_sb_info *sbi = F2FS_I_SB(dir);
  226. struct inode *inode;
  227. nid_t ino = 0;
  228. int err;
  229. if (unlikely(f2fs_cp_error(sbi)))
  230. return -EIO;
  231. err = dquot_initialize(dir);
  232. if (err)
  233. return err;
  234. inode = f2fs_new_inode(dir, mode);
  235. if (IS_ERR(inode))
  236. return PTR_ERR(inode);
  237. if (!test_opt(sbi, DISABLE_EXT_IDENTIFY))
  238. set_file_temperature(sbi, inode, dentry->d_name.name);
  239. inode->i_op = &f2fs_file_inode_operations;
  240. inode->i_fop = &f2fs_file_operations;
  241. inode->i_mapping->a_ops = &f2fs_dblock_aops;
  242. ino = inode->i_ino;
  243. f2fs_lock_op(sbi);
  244. err = f2fs_add_link(dentry, inode);
  245. if (err)
  246. goto out;
  247. f2fs_unlock_op(sbi);
  248. f2fs_alloc_nid_done(sbi, ino);
  249. d_instantiate_new(dentry, inode);
  250. if (IS_DIRSYNC(dir))
  251. f2fs_sync_fs(sbi->sb, 1);
  252. f2fs_balance_fs(sbi, true);
  253. return 0;
  254. out:
  255. f2fs_handle_failed_inode(inode);
  256. return err;
  257. }
  258. static int f2fs_link(struct dentry *old_dentry, struct inode *dir,
  259. struct dentry *dentry)
  260. {
  261. struct inode *inode = d_inode(old_dentry);
  262. struct f2fs_sb_info *sbi = F2FS_I_SB(dir);
  263. int err;
  264. if (unlikely(f2fs_cp_error(sbi)))
  265. return -EIO;
  266. err = fscrypt_prepare_link(old_dentry, dir, dentry);
  267. if (err)
  268. return err;
  269. if (is_inode_flag_set(dir, FI_PROJ_INHERIT) &&
  270. (!projid_eq(F2FS_I(dir)->i_projid,
  271. F2FS_I(old_dentry->d_inode)->i_projid)))
  272. return -EXDEV;
  273. err = dquot_initialize(dir);
  274. if (err)
  275. return err;
  276. f2fs_balance_fs(sbi, true);
  277. inode->i_ctime = current_time(inode);
  278. ihold(inode);
  279. set_inode_flag(inode, FI_INC_LINK);
  280. f2fs_lock_op(sbi);
  281. err = f2fs_add_link(dentry, inode);
  282. if (err)
  283. goto out;
  284. f2fs_unlock_op(sbi);
  285. d_instantiate(dentry, inode);
  286. if (IS_DIRSYNC(dir))
  287. f2fs_sync_fs(sbi->sb, 1);
  288. return 0;
  289. out:
  290. clear_inode_flag(inode, FI_INC_LINK);
  291. iput(inode);
  292. f2fs_unlock_op(sbi);
  293. return err;
  294. }
  295. struct dentry *f2fs_get_parent(struct dentry *child)
  296. {
  297. struct qstr dotdot = QSTR_INIT("..", 2);
  298. struct page *page;
  299. unsigned long ino = f2fs_inode_by_name(d_inode(child), &dotdot, &page);
  300. if (!ino) {
  301. if (IS_ERR(page))
  302. return ERR_CAST(page);
  303. return ERR_PTR(-ENOENT);
  304. }
  305. return d_obtain_alias(f2fs_iget(child->d_sb, ino));
  306. }
  307. static int __recover_dot_dentries(struct inode *dir, nid_t pino)
  308. {
  309. struct f2fs_sb_info *sbi = F2FS_I_SB(dir);
  310. struct qstr dot = QSTR_INIT(".", 1);
  311. struct qstr dotdot = QSTR_INIT("..", 2);
  312. struct f2fs_dir_entry *de;
  313. struct page *page;
  314. int err = 0;
  315. if (f2fs_readonly(sbi->sb)) {
  316. f2fs_msg(sbi->sb, KERN_INFO,
  317. "skip recovering inline_dots inode (ino:%lu, pino:%u) "
  318. "in readonly mountpoint", dir->i_ino, pino);
  319. return 0;
  320. }
  321. err = dquot_initialize(dir);
  322. if (err)
  323. return err;
  324. f2fs_balance_fs(sbi, true);
  325. f2fs_lock_op(sbi);
  326. de = f2fs_find_entry(dir, &dot, &page);
  327. if (de) {
  328. f2fs_put_page(page, 0);
  329. } else if (IS_ERR(page)) {
  330. err = PTR_ERR(page);
  331. goto out;
  332. } else {
  333. err = f2fs_do_add_link(dir, &dot, NULL, dir->i_ino, S_IFDIR);
  334. if (err)
  335. goto out;
  336. }
  337. de = f2fs_find_entry(dir, &dotdot, &page);
  338. if (de)
  339. f2fs_put_page(page, 0);
  340. else if (IS_ERR(page))
  341. err = PTR_ERR(page);
  342. else
  343. err = f2fs_do_add_link(dir, &dotdot, NULL, pino, S_IFDIR);
  344. out:
  345. if (!err)
  346. clear_inode_flag(dir, FI_INLINE_DOTS);
  347. f2fs_unlock_op(sbi);
  348. return err;
  349. }
  350. static struct dentry *f2fs_lookup(struct inode *dir, struct dentry *dentry,
  351. unsigned int flags)
  352. {
  353. struct inode *inode = NULL;
  354. struct f2fs_dir_entry *de;
  355. struct page *page;
  356. struct dentry *new;
  357. nid_t ino = -1;
  358. int err = 0;
  359. unsigned int root_ino = F2FS_ROOT_INO(F2FS_I_SB(dir));
  360. struct fscrypt_name fname;
  361. trace_f2fs_lookup_start(dir, dentry, flags);
  362. if (dentry->d_name.len > F2FS_NAME_LEN) {
  363. err = -ENAMETOOLONG;
  364. goto out;
  365. }
  366. err = fscrypt_prepare_lookup(dir, dentry, &fname);
  367. if (err == -ENOENT)
  368. goto out_splice;
  369. if (err)
  370. goto out;
  371. de = __f2fs_find_entry(dir, &fname, &page);
  372. fscrypt_free_filename(&fname);
  373. if (!de) {
  374. if (IS_ERR(page)) {
  375. err = PTR_ERR(page);
  376. goto out;
  377. }
  378. goto out_splice;
  379. }
  380. ino = le32_to_cpu(de->ino);
  381. f2fs_put_page(page, 0);
  382. inode = f2fs_iget(dir->i_sb, ino);
  383. if (IS_ERR(inode)) {
  384. err = PTR_ERR(inode);
  385. goto out;
  386. }
  387. if ((dir->i_ino == root_ino) && f2fs_has_inline_dots(dir)) {
  388. err = __recover_dot_dentries(dir, root_ino);
  389. if (err)
  390. goto out_iput;
  391. }
  392. if (f2fs_has_inline_dots(inode)) {
  393. err = __recover_dot_dentries(inode, dir->i_ino);
  394. if (err)
  395. goto out_iput;
  396. }
  397. if (f2fs_encrypted_inode(dir) &&
  398. (S_ISDIR(inode->i_mode) || S_ISLNK(inode->i_mode)) &&
  399. !fscrypt_has_permitted_context(dir, inode)) {
  400. f2fs_msg(inode->i_sb, KERN_WARNING,
  401. "Inconsistent encryption contexts: %lu/%lu",
  402. dir->i_ino, inode->i_ino);
  403. err = -EPERM;
  404. goto out_iput;
  405. }
  406. out_splice:
  407. new = d_splice_alias(inode, dentry);
  408. err = PTR_ERR_OR_ZERO(new);
  409. trace_f2fs_lookup_end(dir, dentry, ino, err);
  410. return new;
  411. out_iput:
  412. iput(inode);
  413. out:
  414. trace_f2fs_lookup_end(dir, dentry, ino, err);
  415. return ERR_PTR(err);
  416. }
  417. static int f2fs_unlink(struct inode *dir, struct dentry *dentry)
  418. {
  419. struct f2fs_sb_info *sbi = F2FS_I_SB(dir);
  420. struct inode *inode = d_inode(dentry);
  421. struct f2fs_dir_entry *de;
  422. struct page *page;
  423. int err = -ENOENT;
  424. trace_f2fs_unlink_enter(dir, dentry);
  425. if (unlikely(f2fs_cp_error(sbi)))
  426. return -EIO;
  427. err = dquot_initialize(dir);
  428. if (err)
  429. return err;
  430. err = dquot_initialize(inode);
  431. if (err)
  432. return err;
  433. de = f2fs_find_entry(dir, &dentry->d_name, &page);
  434. if (!de) {
  435. if (IS_ERR(page))
  436. err = PTR_ERR(page);
  437. goto fail;
  438. }
  439. f2fs_balance_fs(sbi, true);
  440. f2fs_lock_op(sbi);
  441. err = f2fs_acquire_orphan_inode(sbi);
  442. if (err) {
  443. f2fs_unlock_op(sbi);
  444. f2fs_put_page(page, 0);
  445. goto fail;
  446. }
  447. f2fs_delete_entry(de, page, dir, inode);
  448. f2fs_unlock_op(sbi);
  449. if (IS_DIRSYNC(dir))
  450. f2fs_sync_fs(sbi->sb, 1);
  451. fail:
  452. trace_f2fs_unlink_exit(inode, err);
  453. return err;
  454. }
  455. static const char *f2fs_get_link(struct dentry *dentry,
  456. struct inode *inode,
  457. struct delayed_call *done)
  458. {
  459. const char *link = page_get_link(dentry, inode, done);
  460. if (!IS_ERR(link) && !*link) {
  461. /* this is broken symlink case */
  462. do_delayed_call(done);
  463. clear_delayed_call(done);
  464. link = ERR_PTR(-ENOENT);
  465. }
  466. return link;
  467. }
  468. static int f2fs_symlink(struct inode *dir, struct dentry *dentry,
  469. const char *symname)
  470. {
  471. struct f2fs_sb_info *sbi = F2FS_I_SB(dir);
  472. struct inode *inode;
  473. size_t len = strlen(symname);
  474. struct fscrypt_str disk_link;
  475. int err;
  476. if (unlikely(f2fs_cp_error(sbi)))
  477. return -EIO;
  478. err = fscrypt_prepare_symlink(dir, symname, len, dir->i_sb->s_blocksize,
  479. &disk_link);
  480. if (err)
  481. return err;
  482. err = dquot_initialize(dir);
  483. if (err)
  484. return err;
  485. inode = f2fs_new_inode(dir, S_IFLNK | S_IRWXUGO);
  486. if (IS_ERR(inode))
  487. return PTR_ERR(inode);
  488. if (IS_ENCRYPTED(inode))
  489. inode->i_op = &f2fs_encrypted_symlink_inode_operations;
  490. else
  491. inode->i_op = &f2fs_symlink_inode_operations;
  492. inode_nohighmem(inode);
  493. inode->i_mapping->a_ops = &f2fs_dblock_aops;
  494. f2fs_lock_op(sbi);
  495. err = f2fs_add_link(dentry, inode);
  496. if (err)
  497. goto out_f2fs_handle_failed_inode;
  498. f2fs_unlock_op(sbi);
  499. f2fs_alloc_nid_done(sbi, inode->i_ino);
  500. err = fscrypt_encrypt_symlink(inode, symname, len, &disk_link);
  501. if (err)
  502. goto err_out;
  503. err = page_symlink(inode, disk_link.name, disk_link.len);
  504. err_out:
  505. d_instantiate_new(dentry, inode);
  506. /*
  507. * Let's flush symlink data in order to avoid broken symlink as much as
  508. * possible. Nevertheless, fsyncing is the best way, but there is no
  509. * way to get a file descriptor in order to flush that.
  510. *
  511. * Note that, it needs to do dir->fsync to make this recoverable.
  512. * If the symlink path is stored into inline_data, there is no
  513. * performance regression.
  514. */
  515. if (!err) {
  516. filemap_write_and_wait_range(inode->i_mapping, 0,
  517. disk_link.len - 1);
  518. if (IS_DIRSYNC(dir))
  519. f2fs_sync_fs(sbi->sb, 1);
  520. } else {
  521. f2fs_unlink(dir, dentry);
  522. }
  523. f2fs_balance_fs(sbi, true);
  524. goto out_free_encrypted_link;
  525. out_f2fs_handle_failed_inode:
  526. f2fs_handle_failed_inode(inode);
  527. out_free_encrypted_link:
  528. if (disk_link.name != (unsigned char *)symname)
  529. kfree(disk_link.name);
  530. return err;
  531. }
  532. static int f2fs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)
  533. {
  534. struct f2fs_sb_info *sbi = F2FS_I_SB(dir);
  535. struct inode *inode;
  536. int err;
  537. if (unlikely(f2fs_cp_error(sbi)))
  538. return -EIO;
  539. err = dquot_initialize(dir);
  540. if (err)
  541. return err;
  542. inode = f2fs_new_inode(dir, S_IFDIR | mode);
  543. if (IS_ERR(inode))
  544. return PTR_ERR(inode);
  545. inode->i_op = &f2fs_dir_inode_operations;
  546. inode->i_fop = &f2fs_dir_operations;
  547. inode->i_mapping->a_ops = &f2fs_dblock_aops;
  548. inode_nohighmem(inode);
  549. set_inode_flag(inode, FI_INC_LINK);
  550. f2fs_lock_op(sbi);
  551. err = f2fs_add_link(dentry, inode);
  552. if (err)
  553. goto out_fail;
  554. f2fs_unlock_op(sbi);
  555. f2fs_alloc_nid_done(sbi, inode->i_ino);
  556. d_instantiate_new(dentry, inode);
  557. if (IS_DIRSYNC(dir))
  558. f2fs_sync_fs(sbi->sb, 1);
  559. f2fs_balance_fs(sbi, true);
  560. return 0;
  561. out_fail:
  562. clear_inode_flag(inode, FI_INC_LINK);
  563. f2fs_handle_failed_inode(inode);
  564. return err;
  565. }
  566. static int f2fs_rmdir(struct inode *dir, struct dentry *dentry)
  567. {
  568. struct inode *inode = d_inode(dentry);
  569. if (f2fs_empty_dir(inode))
  570. return f2fs_unlink(dir, dentry);
  571. return -ENOTEMPTY;
  572. }
  573. static int f2fs_mknod(struct inode *dir, struct dentry *dentry,
  574. umode_t mode, dev_t rdev)
  575. {
  576. struct f2fs_sb_info *sbi = F2FS_I_SB(dir);
  577. struct inode *inode;
  578. int err = 0;
  579. if (unlikely(f2fs_cp_error(sbi)))
  580. return -EIO;
  581. err = dquot_initialize(dir);
  582. if (err)
  583. return err;
  584. inode = f2fs_new_inode(dir, mode);
  585. if (IS_ERR(inode))
  586. return PTR_ERR(inode);
  587. init_special_inode(inode, inode->i_mode, rdev);
  588. inode->i_op = &f2fs_special_inode_operations;
  589. f2fs_lock_op(sbi);
  590. err = f2fs_add_link(dentry, inode);
  591. if (err)
  592. goto out;
  593. f2fs_unlock_op(sbi);
  594. f2fs_alloc_nid_done(sbi, inode->i_ino);
  595. d_instantiate_new(dentry, inode);
  596. if (IS_DIRSYNC(dir))
  597. f2fs_sync_fs(sbi->sb, 1);
  598. f2fs_balance_fs(sbi, true);
  599. return 0;
  600. out:
  601. f2fs_handle_failed_inode(inode);
  602. return err;
  603. }
  604. static int __f2fs_tmpfile(struct inode *dir, struct dentry *dentry,
  605. umode_t mode, struct inode **whiteout)
  606. {
  607. struct f2fs_sb_info *sbi = F2FS_I_SB(dir);
  608. struct inode *inode;
  609. int err;
  610. err = dquot_initialize(dir);
  611. if (err)
  612. return err;
  613. inode = f2fs_new_inode(dir, mode);
  614. if (IS_ERR(inode))
  615. return PTR_ERR(inode);
  616. if (whiteout) {
  617. init_special_inode(inode, inode->i_mode, WHITEOUT_DEV);
  618. inode->i_op = &f2fs_special_inode_operations;
  619. } else {
  620. inode->i_op = &f2fs_file_inode_operations;
  621. inode->i_fop = &f2fs_file_operations;
  622. inode->i_mapping->a_ops = &f2fs_dblock_aops;
  623. }
  624. f2fs_lock_op(sbi);
  625. err = f2fs_acquire_orphan_inode(sbi);
  626. if (err)
  627. goto out;
  628. err = f2fs_do_tmpfile(inode, dir);
  629. if (err)
  630. goto release_out;
  631. /*
  632. * add this non-linked tmpfile to orphan list, in this way we could
  633. * remove all unused data of tmpfile after abnormal power-off.
  634. */
  635. f2fs_add_orphan_inode(inode);
  636. f2fs_alloc_nid_done(sbi, inode->i_ino);
  637. if (whiteout) {
  638. f2fs_i_links_write(inode, false);
  639. spin_lock(&inode->i_lock);
  640. inode->i_state |= I_LINKABLE;
  641. spin_unlock(&inode->i_lock);
  642. *whiteout = inode;
  643. } else {
  644. d_tmpfile(dentry, inode);
  645. }
  646. /* link_count was changed by d_tmpfile as well. */
  647. f2fs_unlock_op(sbi);
  648. unlock_new_inode(inode);
  649. f2fs_balance_fs(sbi, true);
  650. return 0;
  651. release_out:
  652. f2fs_release_orphan_inode(sbi);
  653. out:
  654. f2fs_handle_failed_inode(inode);
  655. return err;
  656. }
  657. static int f2fs_tmpfile(struct inode *dir, struct dentry *dentry, umode_t mode)
  658. {
  659. struct f2fs_sb_info *sbi = F2FS_I_SB(dir);
  660. if (unlikely(f2fs_cp_error(sbi)))
  661. return -EIO;
  662. if (f2fs_encrypted_inode(dir) || DUMMY_ENCRYPTION_ENABLED(sbi)) {
  663. int err = fscrypt_get_encryption_info(dir);
  664. if (err)
  665. return err;
  666. }
  667. return __f2fs_tmpfile(dir, dentry, mode, NULL);
  668. }
  669. static int f2fs_create_whiteout(struct inode *dir, struct inode **whiteout)
  670. {
  671. if (unlikely(f2fs_cp_error(F2FS_I_SB(dir))))
  672. return -EIO;
  673. return __f2fs_tmpfile(dir, NULL, S_IFCHR | WHITEOUT_MODE, whiteout);
  674. }
  675. static int f2fs_rename(struct inode *old_dir, struct dentry *old_dentry,
  676. struct inode *new_dir, struct dentry *new_dentry,
  677. unsigned int flags)
  678. {
  679. struct f2fs_sb_info *sbi = F2FS_I_SB(old_dir);
  680. struct inode *old_inode = d_inode(old_dentry);
  681. struct inode *new_inode = d_inode(new_dentry);
  682. struct inode *whiteout = NULL;
  683. struct page *old_dir_page;
  684. struct page *old_page, *new_page = NULL;
  685. struct f2fs_dir_entry *old_dir_entry = NULL;
  686. struct f2fs_dir_entry *old_entry;
  687. struct f2fs_dir_entry *new_entry;
  688. bool is_old_inline = f2fs_has_inline_dentry(old_dir);
  689. int err = -ENOENT;
  690. if (unlikely(f2fs_cp_error(sbi)))
  691. return -EIO;
  692. if (is_inode_flag_set(new_dir, FI_PROJ_INHERIT) &&
  693. (!projid_eq(F2FS_I(new_dir)->i_projid,
  694. F2FS_I(old_dentry->d_inode)->i_projid)))
  695. return -EXDEV;
  696. if (flags & RENAME_WHITEOUT) {
  697. err = f2fs_create_whiteout(old_dir, &whiteout);
  698. if (err)
  699. return err;
  700. }
  701. err = dquot_initialize(old_dir);
  702. if (err)
  703. goto out;
  704. err = dquot_initialize(new_dir);
  705. if (err)
  706. goto out;
  707. if (new_inode) {
  708. err = dquot_initialize(new_inode);
  709. if (err)
  710. goto out;
  711. }
  712. old_entry = f2fs_find_entry(old_dir, &old_dentry->d_name, &old_page);
  713. if (!old_entry) {
  714. if (IS_ERR(old_page))
  715. err = PTR_ERR(old_page);
  716. goto out;
  717. }
  718. if (S_ISDIR(old_inode->i_mode)) {
  719. old_dir_entry = f2fs_parent_dir(old_inode, &old_dir_page);
  720. if (!old_dir_entry) {
  721. if (IS_ERR(old_dir_page))
  722. err = PTR_ERR(old_dir_page);
  723. goto out_old;
  724. }
  725. }
  726. if (new_inode) {
  727. err = -ENOTEMPTY;
  728. if (old_dir_entry && !f2fs_empty_dir(new_inode))
  729. goto out_dir;
  730. err = -ENOENT;
  731. new_entry = f2fs_find_entry(new_dir, &new_dentry->d_name,
  732. &new_page);
  733. if (!new_entry) {
  734. if (IS_ERR(new_page))
  735. err = PTR_ERR(new_page);
  736. goto out_dir;
  737. }
  738. f2fs_balance_fs(sbi, true);
  739. f2fs_lock_op(sbi);
  740. err = f2fs_acquire_orphan_inode(sbi);
  741. if (err)
  742. goto put_out_dir;
  743. f2fs_set_link(new_dir, new_entry, new_page, old_inode);
  744. new_inode->i_ctime = current_time(new_inode);
  745. down_write(&F2FS_I(new_inode)->i_sem);
  746. if (old_dir_entry)
  747. f2fs_i_links_write(new_inode, false);
  748. f2fs_i_links_write(new_inode, false);
  749. up_write(&F2FS_I(new_inode)->i_sem);
  750. if (!new_inode->i_nlink)
  751. f2fs_add_orphan_inode(new_inode);
  752. else
  753. f2fs_release_orphan_inode(sbi);
  754. } else {
  755. f2fs_balance_fs(sbi, true);
  756. f2fs_lock_op(sbi);
  757. err = f2fs_add_link(new_dentry, old_inode);
  758. if (err) {
  759. f2fs_unlock_op(sbi);
  760. goto out_dir;
  761. }
  762. if (old_dir_entry)
  763. f2fs_i_links_write(new_dir, true);
  764. /*
  765. * old entry and new entry can locate in the same inline
  766. * dentry in inode, when attaching new entry in inline dentry,
  767. * it could force inline dentry conversion, after that,
  768. * old_entry and old_page will point to wrong address, in
  769. * order to avoid this, let's do the check and update here.
  770. */
  771. if (is_old_inline && !f2fs_has_inline_dentry(old_dir)) {
  772. f2fs_put_page(old_page, 0);
  773. old_page = NULL;
  774. old_entry = f2fs_find_entry(old_dir,
  775. &old_dentry->d_name, &old_page);
  776. if (!old_entry) {
  777. err = -ENOENT;
  778. if (IS_ERR(old_page))
  779. err = PTR_ERR(old_page);
  780. f2fs_unlock_op(sbi);
  781. goto out_dir;
  782. }
  783. }
  784. }
  785. down_write(&F2FS_I(old_inode)->i_sem);
  786. if (!old_dir_entry || whiteout)
  787. file_lost_pino(old_inode);
  788. else
  789. /* adjust dir's i_pino to pass fsck check */
  790. f2fs_i_pino_write(old_inode, new_dir->i_ino);
  791. up_write(&F2FS_I(old_inode)->i_sem);
  792. old_inode->i_ctime = current_time(old_inode);
  793. f2fs_mark_inode_dirty_sync(old_inode, false);
  794. f2fs_delete_entry(old_entry, old_page, old_dir, NULL);
  795. if (whiteout) {
  796. set_inode_flag(whiteout, FI_INC_LINK);
  797. err = f2fs_add_link(old_dentry, whiteout);
  798. if (err)
  799. goto put_out_dir;
  800. spin_lock(&whiteout->i_lock);
  801. whiteout->i_state &= ~I_LINKABLE;
  802. spin_unlock(&whiteout->i_lock);
  803. iput(whiteout);
  804. }
  805. if (old_dir_entry) {
  806. if (old_dir != new_dir && !whiteout)
  807. f2fs_set_link(old_inode, old_dir_entry,
  808. old_dir_page, new_dir);
  809. else
  810. f2fs_put_page(old_dir_page, 0);
  811. f2fs_i_links_write(old_dir, false);
  812. }
  813. if (F2FS_OPTION(sbi).fsync_mode == FSYNC_MODE_STRICT) {
  814. f2fs_add_ino_entry(sbi, new_dir->i_ino, TRANS_DIR_INO);
  815. if (S_ISDIR(old_inode->i_mode))
  816. f2fs_add_ino_entry(sbi, old_inode->i_ino,
  817. TRANS_DIR_INO);
  818. }
  819. f2fs_unlock_op(sbi);
  820. if (IS_DIRSYNC(old_dir) || IS_DIRSYNC(new_dir))
  821. f2fs_sync_fs(sbi->sb, 1);
  822. return 0;
  823. put_out_dir:
  824. f2fs_unlock_op(sbi);
  825. if (new_page)
  826. f2fs_put_page(new_page, 0);
  827. out_dir:
  828. if (old_dir_entry)
  829. f2fs_put_page(old_dir_page, 0);
  830. out_old:
  831. f2fs_put_page(old_page, 0);
  832. out:
  833. if (whiteout)
  834. iput(whiteout);
  835. return err;
  836. }
  837. static int f2fs_cross_rename(struct inode *old_dir, struct dentry *old_dentry,
  838. struct inode *new_dir, struct dentry *new_dentry)
  839. {
  840. struct f2fs_sb_info *sbi = F2FS_I_SB(old_dir);
  841. struct inode *old_inode = d_inode(old_dentry);
  842. struct inode *new_inode = d_inode(new_dentry);
  843. struct page *old_dir_page, *new_dir_page;
  844. struct page *old_page, *new_page;
  845. struct f2fs_dir_entry *old_dir_entry = NULL, *new_dir_entry = NULL;
  846. struct f2fs_dir_entry *old_entry, *new_entry;
  847. int old_nlink = 0, new_nlink = 0;
  848. int err = -ENOENT;
  849. if (unlikely(f2fs_cp_error(sbi)))
  850. return -EIO;
  851. if ((is_inode_flag_set(new_dir, FI_PROJ_INHERIT) &&
  852. !projid_eq(F2FS_I(new_dir)->i_projid,
  853. F2FS_I(old_dentry->d_inode)->i_projid)) ||
  854. (is_inode_flag_set(new_dir, FI_PROJ_INHERIT) &&
  855. !projid_eq(F2FS_I(old_dir)->i_projid,
  856. F2FS_I(new_dentry->d_inode)->i_projid)))
  857. return -EXDEV;
  858. err = dquot_initialize(old_dir);
  859. if (err)
  860. goto out;
  861. err = dquot_initialize(new_dir);
  862. if (err)
  863. goto out;
  864. old_entry = f2fs_find_entry(old_dir, &old_dentry->d_name, &old_page);
  865. if (!old_entry) {
  866. if (IS_ERR(old_page))
  867. err = PTR_ERR(old_page);
  868. goto out;
  869. }
  870. new_entry = f2fs_find_entry(new_dir, &new_dentry->d_name, &new_page);
  871. if (!new_entry) {
  872. if (IS_ERR(new_page))
  873. err = PTR_ERR(new_page);
  874. goto out_old;
  875. }
  876. /* prepare for updating ".." directory entry info later */
  877. if (old_dir != new_dir) {
  878. if (S_ISDIR(old_inode->i_mode)) {
  879. old_dir_entry = f2fs_parent_dir(old_inode,
  880. &old_dir_page);
  881. if (!old_dir_entry) {
  882. if (IS_ERR(old_dir_page))
  883. err = PTR_ERR(old_dir_page);
  884. goto out_new;
  885. }
  886. }
  887. if (S_ISDIR(new_inode->i_mode)) {
  888. new_dir_entry = f2fs_parent_dir(new_inode,
  889. &new_dir_page);
  890. if (!new_dir_entry) {
  891. if (IS_ERR(new_dir_page))
  892. err = PTR_ERR(new_dir_page);
  893. goto out_old_dir;
  894. }
  895. }
  896. }
  897. /*
  898. * If cross rename between file and directory those are not
  899. * in the same directory, we will inc nlink of file's parent
  900. * later, so we should check upper boundary of its nlink.
  901. */
  902. if ((!old_dir_entry || !new_dir_entry) &&
  903. old_dir_entry != new_dir_entry) {
  904. old_nlink = old_dir_entry ? -1 : 1;
  905. new_nlink = -old_nlink;
  906. err = -EMLINK;
  907. if ((old_nlink > 0 && old_dir->i_nlink >= F2FS_LINK_MAX) ||
  908. (new_nlink > 0 && new_dir->i_nlink >= F2FS_LINK_MAX))
  909. goto out_new_dir;
  910. }
  911. f2fs_balance_fs(sbi, true);
  912. f2fs_lock_op(sbi);
  913. /* update ".." directory entry info of old dentry */
  914. if (old_dir_entry)
  915. f2fs_set_link(old_inode, old_dir_entry, old_dir_page, new_dir);
  916. /* update ".." directory entry info of new dentry */
  917. if (new_dir_entry)
  918. f2fs_set_link(new_inode, new_dir_entry, new_dir_page, old_dir);
  919. /* update directory entry info of old dir inode */
  920. f2fs_set_link(old_dir, old_entry, old_page, new_inode);
  921. down_write(&F2FS_I(old_inode)->i_sem);
  922. if (!old_dir_entry)
  923. file_lost_pino(old_inode);
  924. else
  925. /* adjust dir's i_pino to pass fsck check */
  926. f2fs_i_pino_write(old_inode, new_dir->i_ino);
  927. up_write(&F2FS_I(old_inode)->i_sem);
  928. old_dir->i_ctime = current_time(old_dir);
  929. if (old_nlink) {
  930. down_write(&F2FS_I(old_dir)->i_sem);
  931. f2fs_i_links_write(old_dir, old_nlink > 0);
  932. up_write(&F2FS_I(old_dir)->i_sem);
  933. }
  934. f2fs_mark_inode_dirty_sync(old_dir, false);
  935. /* update directory entry info of new dir inode */
  936. f2fs_set_link(new_dir, new_entry, new_page, old_inode);
  937. down_write(&F2FS_I(new_inode)->i_sem);
  938. if (!new_dir_entry)
  939. file_lost_pino(new_inode);
  940. else
  941. /* adjust dir's i_pino to pass fsck check */
  942. f2fs_i_pino_write(new_inode, old_dir->i_ino);
  943. up_write(&F2FS_I(new_inode)->i_sem);
  944. new_dir->i_ctime = current_time(new_dir);
  945. if (new_nlink) {
  946. down_write(&F2FS_I(new_dir)->i_sem);
  947. f2fs_i_links_write(new_dir, new_nlink > 0);
  948. up_write(&F2FS_I(new_dir)->i_sem);
  949. }
  950. f2fs_mark_inode_dirty_sync(new_dir, false);
  951. if (F2FS_OPTION(sbi).fsync_mode == FSYNC_MODE_STRICT) {
  952. f2fs_add_ino_entry(sbi, old_dir->i_ino, TRANS_DIR_INO);
  953. f2fs_add_ino_entry(sbi, new_dir->i_ino, TRANS_DIR_INO);
  954. }
  955. f2fs_unlock_op(sbi);
  956. if (IS_DIRSYNC(old_dir) || IS_DIRSYNC(new_dir))
  957. f2fs_sync_fs(sbi->sb, 1);
  958. return 0;
  959. out_new_dir:
  960. if (new_dir_entry) {
  961. f2fs_put_page(new_dir_page, 0);
  962. }
  963. out_old_dir:
  964. if (old_dir_entry) {
  965. f2fs_put_page(old_dir_page, 0);
  966. }
  967. out_new:
  968. f2fs_put_page(new_page, 0);
  969. out_old:
  970. f2fs_put_page(old_page, 0);
  971. out:
  972. return err;
  973. }
  974. static int f2fs_rename2(struct inode *old_dir, struct dentry *old_dentry,
  975. struct inode *new_dir, struct dentry *new_dentry,
  976. unsigned int flags)
  977. {
  978. int err;
  979. if (flags & ~(RENAME_NOREPLACE | RENAME_EXCHANGE | RENAME_WHITEOUT))
  980. return -EINVAL;
  981. err = fscrypt_prepare_rename(old_dir, old_dentry, new_dir, new_dentry,
  982. flags);
  983. if (err)
  984. return err;
  985. if (flags & RENAME_EXCHANGE) {
  986. return f2fs_cross_rename(old_dir, old_dentry,
  987. new_dir, new_dentry);
  988. }
  989. /*
  990. * VFS has already handled the new dentry existence case,
  991. * here, we just deal with "RENAME_NOREPLACE" as regular rename.
  992. */
  993. return f2fs_rename(old_dir, old_dentry, new_dir, new_dentry, flags);
  994. }
  995. static const char *f2fs_encrypted_get_link(struct dentry *dentry,
  996. struct inode *inode,
  997. struct delayed_call *done)
  998. {
  999. struct page *page;
  1000. const char *target;
  1001. if (!dentry)
  1002. return ERR_PTR(-ECHILD);
  1003. page = read_mapping_page(inode->i_mapping, 0, NULL);
  1004. if (IS_ERR(page))
  1005. return ERR_CAST(page);
  1006. target = fscrypt_get_symlink(inode, page_address(page),
  1007. inode->i_sb->s_blocksize, done);
  1008. put_page(page);
  1009. return target;
  1010. }
  1011. const struct inode_operations f2fs_encrypted_symlink_inode_operations = {
  1012. .get_link = f2fs_encrypted_get_link,
  1013. .getattr = f2fs_getattr,
  1014. .setattr = f2fs_setattr,
  1015. #ifdef CONFIG_F2FS_FS_XATTR
  1016. .listxattr = f2fs_listxattr,
  1017. #endif
  1018. };
  1019. const struct inode_operations f2fs_dir_inode_operations = {
  1020. .create = f2fs_create,
  1021. .lookup = f2fs_lookup,
  1022. .link = f2fs_link,
  1023. .unlink = f2fs_unlink,
  1024. .symlink = f2fs_symlink,
  1025. .mkdir = f2fs_mkdir,
  1026. .rmdir = f2fs_rmdir,
  1027. .mknod = f2fs_mknod,
  1028. .rename = f2fs_rename2,
  1029. .tmpfile = f2fs_tmpfile,
  1030. .getattr = f2fs_getattr,
  1031. .setattr = f2fs_setattr,
  1032. .get_acl = f2fs_get_acl,
  1033. .set_acl = f2fs_set_acl,
  1034. #ifdef CONFIG_F2FS_FS_XATTR
  1035. .listxattr = f2fs_listxattr,
  1036. #endif
  1037. };
  1038. const struct inode_operations f2fs_symlink_inode_operations = {
  1039. .get_link = f2fs_get_link,
  1040. .getattr = f2fs_getattr,
  1041. .setattr = f2fs_setattr,
  1042. #ifdef CONFIG_F2FS_FS_XATTR
  1043. .listxattr = f2fs_listxattr,
  1044. #endif
  1045. };
  1046. const struct inode_operations f2fs_special_inode_operations = {
  1047. .getattr = f2fs_getattr,
  1048. .setattr = f2fs_setattr,
  1049. .get_acl = f2fs_get_acl,
  1050. .set_acl = f2fs_set_acl,
  1051. #ifdef CONFIG_F2FS_FS_XATTR
  1052. .listxattr = f2fs_listxattr,
  1053. #endif
  1054. };