dir.c 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838
  1. /*
  2. * fs/logfs/dir.c - directory-related code
  3. *
  4. * As should be obvious for Linux kernel code, license is GPLv2
  5. *
  6. * Copyright (c) 2005-2008 Joern Engel <joern@logfs.org>
  7. */
  8. #include "logfs.h"
  9. #include <linux/slab.h>
  10. /*
  11. * Atomic dir operations
  12. *
  13. * Directory operations are by default not atomic. Dentries and Inodes are
  14. * created/removed/altered in separate operations. Therefore we need to do
  15. * a small amount of journaling.
  16. *
  17. * Create, link, mkdir, mknod and symlink all share the same function to do
  18. * the work: __logfs_create. This function works in two atomic steps:
  19. * 1. allocate inode (remember in journal)
  20. * 2. allocate dentry (clear journal)
  21. *
  22. * As we can only get interrupted between the two, when the inode we just
  23. * created is simply stored in the anchor. On next mount, if we were
  24. * interrupted, we delete the inode. From a users point of view the
  25. * operation never happened.
  26. *
  27. * Unlink and rmdir also share the same function: unlink. Again, this
  28. * function works in two atomic steps
  29. * 1. remove dentry (remember inode in journal)
  30. * 2. unlink inode (clear journal)
  31. *
  32. * And again, on the next mount, if we were interrupted, we delete the inode.
  33. * From a users point of view the operation succeeded.
  34. *
  35. * Rename is the real pain to deal with, harder than all the other methods
  36. * combined. Depending on the circumstances we can run into three cases.
  37. * A "target rename" where the target dentry already existed, a "local
  38. * rename" where both parent directories are identical or a "cross-directory
  39. * rename" in the remaining case.
  40. *
  41. * Local rename is atomic, as the old dentry is simply rewritten with a new
  42. * name.
  43. *
  44. * Cross-directory rename works in two steps, similar to __logfs_create and
  45. * logfs_unlink:
  46. * 1. Write new dentry (remember old dentry in journal)
  47. * 2. Remove old dentry (clear journal)
  48. *
  49. * Here we remember a dentry instead of an inode. On next mount, if we were
  50. * interrupted, we delete the dentry. From a users point of view, the
  51. * operation succeeded.
  52. *
  53. * Target rename works in three atomic steps:
  54. * 1. Attach old inode to new dentry (remember old dentry and new inode)
  55. * 2. Remove old dentry (still remember the new inode)
  56. * 3. Remove victim inode
  57. *
  58. * Here we remember both an inode an a dentry. If we get interrupted
  59. * between steps 1 and 2, we delete both the dentry and the inode. If
  60. * we get interrupted between steps 2 and 3, we delete just the inode.
  61. * In either case, the remaining objects are deleted on next mount. From
  62. * a users point of view, the operation succeeded.
  63. */
  64. static int write_dir(struct inode *dir, struct logfs_disk_dentry *dd,
  65. loff_t pos)
  66. {
  67. return logfs_inode_write(dir, dd, sizeof(*dd), pos, WF_LOCK, NULL);
  68. }
  69. static int write_inode(struct inode *inode)
  70. {
  71. return __logfs_write_inode(inode, WF_LOCK);
  72. }
  73. static s64 dir_seek_data(struct inode *inode, s64 pos)
  74. {
  75. s64 new_pos = logfs_seek_data(inode, pos);
  76. return max(pos, new_pos - 1);
  77. }
  78. static int beyond_eof(struct inode *inode, loff_t bix)
  79. {
  80. loff_t pos = bix << inode->i_sb->s_blocksize_bits;
  81. return pos >= i_size_read(inode);
  82. }
  83. /*
  84. * Prime value was chosen to be roughly 256 + 26. r5 hash uses 11,
  85. * so short names (len <= 9) don't even occupy the complete 32bit name
  86. * space. A prime >256 ensures short names quickly spread the 32bit
  87. * name space. Add about 26 for the estimated amount of information
  88. * of each character and pick a prime nearby, preferably a bit-sparse
  89. * one.
  90. */
  91. static u32 hash_32(const char *s, int len, u32 seed)
  92. {
  93. u32 hash = seed;
  94. int i;
  95. for (i = 0; i < len; i++)
  96. hash = hash * 293 + s[i];
  97. return hash;
  98. }
  99. /*
  100. * We have to satisfy several conflicting requirements here. Small
  101. * directories should stay fairly compact and not require too many
  102. * indirect blocks. The number of possible locations for a given hash
  103. * should be small to make lookup() fast. And we should try hard not
  104. * to overflow the 32bit name space or nfs and 32bit host systems will
  105. * be unhappy.
  106. *
  107. * So we use the following scheme. First we reduce the hash to 0..15
  108. * and try a direct block. If that is occupied we reduce the hash to
  109. * 16..255 and try an indirect block. Same for 2x and 3x indirect
  110. * blocks. Lastly we reduce the hash to 0x800_0000 .. 0xffff_ffff,
  111. * but use buckets containing eight entries instead of a single one.
  112. *
  113. * Using 16 entries should allow for a reasonable amount of hash
  114. * collisions, so the 32bit name space can be packed fairly tight
  115. * before overflowing. Oh and currently we don't overflow but return
  116. * and error.
  117. *
  118. * How likely are collisions? Doing the appropriate math is beyond me
  119. * and the Bronstein textbook. But running a test program to brute
  120. * force collisions for a couple of days showed that on average the
  121. * first collision occurs after 598M entries, with 290M being the
  122. * smallest result. Obviously 21 entries could already cause a
  123. * collision if all entries are carefully chosen.
  124. */
  125. static pgoff_t hash_index(u32 hash, int round)
  126. {
  127. u32 i0_blocks = I0_BLOCKS;
  128. u32 i1_blocks = I1_BLOCKS;
  129. u32 i2_blocks = I2_BLOCKS;
  130. u32 i3_blocks = I3_BLOCKS;
  131. switch (round) {
  132. case 0:
  133. return hash % i0_blocks;
  134. case 1:
  135. return i0_blocks + hash % (i1_blocks - i0_blocks);
  136. case 2:
  137. return i1_blocks + hash % (i2_blocks - i1_blocks);
  138. case 3:
  139. return i2_blocks + hash % (i3_blocks - i2_blocks);
  140. case 4 ... 19:
  141. return i3_blocks + 16 * (hash % (((1<<31) - i3_blocks) / 16))
  142. + round - 4;
  143. }
  144. BUG();
  145. }
  146. static struct page *logfs_get_dd_page(struct inode *dir, struct dentry *dentry)
  147. {
  148. struct qstr *name = &dentry->d_name;
  149. struct page *page;
  150. struct logfs_disk_dentry *dd;
  151. u32 hash = hash_32(name->name, name->len, 0);
  152. pgoff_t index;
  153. int round;
  154. if (name->len > LOGFS_MAX_NAMELEN)
  155. return ERR_PTR(-ENAMETOOLONG);
  156. for (round = 0; round < 20; round++) {
  157. index = hash_index(hash, round);
  158. if (beyond_eof(dir, index))
  159. return NULL;
  160. if (!logfs_exist_block(dir, index))
  161. continue;
  162. page = read_cache_page(dir->i_mapping, index,
  163. (filler_t *)logfs_readpage, NULL);
  164. if (IS_ERR(page))
  165. return page;
  166. dd = kmap_atomic(page, KM_USER0);
  167. BUG_ON(dd->namelen == 0);
  168. if (name->len != be16_to_cpu(dd->namelen) ||
  169. memcmp(name->name, dd->name, name->len)) {
  170. kunmap_atomic(dd, KM_USER0);
  171. page_cache_release(page);
  172. continue;
  173. }
  174. kunmap_atomic(dd, KM_USER0);
  175. return page;
  176. }
  177. return NULL;
  178. }
  179. static int logfs_remove_inode(struct inode *inode)
  180. {
  181. int ret;
  182. inode->i_nlink--;
  183. ret = write_inode(inode);
  184. LOGFS_BUG_ON(ret, inode->i_sb);
  185. return ret;
  186. }
  187. static void abort_transaction(struct inode *inode, struct logfs_transaction *ta)
  188. {
  189. if (logfs_inode(inode)->li_block)
  190. logfs_inode(inode)->li_block->ta = NULL;
  191. kfree(ta);
  192. }
  193. static int logfs_unlink(struct inode *dir, struct dentry *dentry)
  194. {
  195. struct logfs_super *super = logfs_super(dir->i_sb);
  196. struct inode *inode = dentry->d_inode;
  197. struct logfs_transaction *ta;
  198. struct page *page;
  199. pgoff_t index;
  200. int ret;
  201. ta = kzalloc(sizeof(*ta), GFP_KERNEL);
  202. if (!ta)
  203. return -ENOMEM;
  204. ta->state = UNLINK_1;
  205. ta->ino = inode->i_ino;
  206. inode->i_ctime = dir->i_ctime = dir->i_mtime = CURRENT_TIME;
  207. page = logfs_get_dd_page(dir, dentry);
  208. if (!page) {
  209. kfree(ta);
  210. return -ENOENT;
  211. }
  212. if (IS_ERR(page)) {
  213. kfree(ta);
  214. return PTR_ERR(page);
  215. }
  216. index = page->index;
  217. page_cache_release(page);
  218. mutex_lock(&super->s_dirop_mutex);
  219. logfs_add_transaction(dir, ta);
  220. ret = logfs_delete(dir, index, NULL);
  221. if (!ret)
  222. ret = write_inode(dir);
  223. if (ret) {
  224. abort_transaction(dir, ta);
  225. printk(KERN_ERR"LOGFS: unable to delete inode\n");
  226. goto out;
  227. }
  228. ta->state = UNLINK_2;
  229. logfs_add_transaction(inode, ta);
  230. ret = logfs_remove_inode(inode);
  231. out:
  232. mutex_unlock(&super->s_dirop_mutex);
  233. return ret;
  234. }
  235. static inline int logfs_empty_dir(struct inode *dir)
  236. {
  237. u64 data;
  238. data = logfs_seek_data(dir, 0) << dir->i_sb->s_blocksize_bits;
  239. return data >= i_size_read(dir);
  240. }
  241. static int logfs_rmdir(struct inode *dir, struct dentry *dentry)
  242. {
  243. struct inode *inode = dentry->d_inode;
  244. dentry_unhash(dentry);
  245. if (!logfs_empty_dir(inode))
  246. return -ENOTEMPTY;
  247. return logfs_unlink(dir, dentry);
  248. }
  249. /* FIXME: readdir currently has it's own dir_walk code. I don't see a good
  250. * way to combine the two copies */
  251. #define IMPLICIT_NODES 2
  252. static int __logfs_readdir(struct file *file, void *buf, filldir_t filldir)
  253. {
  254. struct inode *dir = file->f_dentry->d_inode;
  255. loff_t pos = file->f_pos - IMPLICIT_NODES;
  256. struct page *page;
  257. struct logfs_disk_dentry *dd;
  258. int full;
  259. BUG_ON(pos < 0);
  260. for (;; pos++) {
  261. if (beyond_eof(dir, pos))
  262. break;
  263. if (!logfs_exist_block(dir, pos)) {
  264. /* deleted dentry */
  265. pos = dir_seek_data(dir, pos);
  266. continue;
  267. }
  268. page = read_cache_page(dir->i_mapping, pos,
  269. (filler_t *)logfs_readpage, NULL);
  270. if (IS_ERR(page))
  271. return PTR_ERR(page);
  272. dd = kmap(page);
  273. BUG_ON(dd->namelen == 0);
  274. full = filldir(buf, (char *)dd->name, be16_to_cpu(dd->namelen),
  275. pos, be64_to_cpu(dd->ino), dd->type);
  276. kunmap(page);
  277. page_cache_release(page);
  278. if (full)
  279. break;
  280. }
  281. file->f_pos = pos + IMPLICIT_NODES;
  282. return 0;
  283. }
  284. static int logfs_readdir(struct file *file, void *buf, filldir_t filldir)
  285. {
  286. struct inode *inode = file->f_dentry->d_inode;
  287. ino_t pino = parent_ino(file->f_dentry);
  288. int err;
  289. if (file->f_pos < 0)
  290. return -EINVAL;
  291. if (file->f_pos == 0) {
  292. if (filldir(buf, ".", 1, 1, inode->i_ino, DT_DIR) < 0)
  293. return 0;
  294. file->f_pos++;
  295. }
  296. if (file->f_pos == 1) {
  297. if (filldir(buf, "..", 2, 2, pino, DT_DIR) < 0)
  298. return 0;
  299. file->f_pos++;
  300. }
  301. err = __logfs_readdir(file, buf, filldir);
  302. return err;
  303. }
  304. static void logfs_set_name(struct logfs_disk_dentry *dd, struct qstr *name)
  305. {
  306. dd->namelen = cpu_to_be16(name->len);
  307. memcpy(dd->name, name->name, name->len);
  308. }
  309. static struct dentry *logfs_lookup(struct inode *dir, struct dentry *dentry,
  310. struct nameidata *nd)
  311. {
  312. struct page *page;
  313. struct logfs_disk_dentry *dd;
  314. pgoff_t index;
  315. u64 ino = 0;
  316. struct inode *inode;
  317. page = logfs_get_dd_page(dir, dentry);
  318. if (IS_ERR(page))
  319. return ERR_CAST(page);
  320. if (!page) {
  321. d_add(dentry, NULL);
  322. return NULL;
  323. }
  324. index = page->index;
  325. dd = kmap_atomic(page, KM_USER0);
  326. ino = be64_to_cpu(dd->ino);
  327. kunmap_atomic(dd, KM_USER0);
  328. page_cache_release(page);
  329. inode = logfs_iget(dir->i_sb, ino);
  330. if (IS_ERR(inode)) {
  331. printk(KERN_ERR"LogFS: Cannot read inode #%llx for dentry (%lx, %lx)n",
  332. ino, dir->i_ino, index);
  333. return ERR_CAST(inode);
  334. }
  335. return d_splice_alias(inode, dentry);
  336. }
  337. static void grow_dir(struct inode *dir, loff_t index)
  338. {
  339. index = (index + 1) << dir->i_sb->s_blocksize_bits;
  340. if (i_size_read(dir) < index)
  341. i_size_write(dir, index);
  342. }
  343. static int logfs_write_dir(struct inode *dir, struct dentry *dentry,
  344. struct inode *inode)
  345. {
  346. struct page *page;
  347. struct logfs_disk_dentry *dd;
  348. u32 hash = hash_32(dentry->d_name.name, dentry->d_name.len, 0);
  349. pgoff_t index;
  350. int round, err;
  351. for (round = 0; round < 20; round++) {
  352. index = hash_index(hash, round);
  353. if (logfs_exist_block(dir, index))
  354. continue;
  355. page = find_or_create_page(dir->i_mapping, index, GFP_KERNEL);
  356. if (!page)
  357. return -ENOMEM;
  358. dd = kmap_atomic(page, KM_USER0);
  359. memset(dd, 0, sizeof(*dd));
  360. dd->ino = cpu_to_be64(inode->i_ino);
  361. dd->type = logfs_type(inode);
  362. logfs_set_name(dd, &dentry->d_name);
  363. kunmap_atomic(dd, KM_USER0);
  364. err = logfs_write_buf(dir, page, WF_LOCK);
  365. unlock_page(page);
  366. page_cache_release(page);
  367. if (!err)
  368. grow_dir(dir, index);
  369. return err;
  370. }
  371. /* FIXME: Is there a better return value? In most cases neither
  372. * the filesystem nor the directory are full. But we have had
  373. * too many collisions for this particular hash and no fallback.
  374. */
  375. return -ENOSPC;
  376. }
  377. static int __logfs_create(struct inode *dir, struct dentry *dentry,
  378. struct inode *inode, const char *dest, long destlen)
  379. {
  380. struct logfs_super *super = logfs_super(dir->i_sb);
  381. struct logfs_inode *li = logfs_inode(inode);
  382. struct logfs_transaction *ta;
  383. int ret;
  384. ta = kzalloc(sizeof(*ta), GFP_KERNEL);
  385. if (!ta) {
  386. inode->i_nlink--;
  387. iput(inode);
  388. return -ENOMEM;
  389. }
  390. ta->state = CREATE_1;
  391. ta->ino = inode->i_ino;
  392. mutex_lock(&super->s_dirop_mutex);
  393. logfs_add_transaction(inode, ta);
  394. if (dest) {
  395. /* symlink */
  396. ret = logfs_inode_write(inode, dest, destlen, 0, WF_LOCK, NULL);
  397. if (!ret)
  398. ret = write_inode(inode);
  399. } else {
  400. /* creat/mkdir/mknod */
  401. ret = write_inode(inode);
  402. }
  403. if (ret) {
  404. abort_transaction(inode, ta);
  405. li->li_flags |= LOGFS_IF_STILLBORN;
  406. /* FIXME: truncate symlink */
  407. inode->i_nlink--;
  408. iput(inode);
  409. goto out;
  410. }
  411. ta->state = CREATE_2;
  412. logfs_add_transaction(dir, ta);
  413. ret = logfs_write_dir(dir, dentry, inode);
  414. /* sync directory */
  415. if (!ret)
  416. ret = write_inode(dir);
  417. if (ret) {
  418. logfs_del_transaction(dir, ta);
  419. ta->state = CREATE_2;
  420. logfs_add_transaction(inode, ta);
  421. logfs_remove_inode(inode);
  422. iput(inode);
  423. goto out;
  424. }
  425. d_instantiate(dentry, inode);
  426. out:
  427. mutex_unlock(&super->s_dirop_mutex);
  428. return ret;
  429. }
  430. static int logfs_mkdir(struct inode *dir, struct dentry *dentry, int mode)
  431. {
  432. struct inode *inode;
  433. /*
  434. * FIXME: why do we have to fill in S_IFDIR, while the mode is
  435. * correct for mknod, creat, etc.? Smells like the vfs *should*
  436. * do it for us but for some reason fails to do so.
  437. */
  438. inode = logfs_new_inode(dir, S_IFDIR | mode);
  439. if (IS_ERR(inode))
  440. return PTR_ERR(inode);
  441. inode->i_op = &logfs_dir_iops;
  442. inode->i_fop = &logfs_dir_fops;
  443. return __logfs_create(dir, dentry, inode, NULL, 0);
  444. }
  445. static int logfs_create(struct inode *dir, struct dentry *dentry, int mode,
  446. struct nameidata *nd)
  447. {
  448. struct inode *inode;
  449. inode = logfs_new_inode(dir, mode);
  450. if (IS_ERR(inode))
  451. return PTR_ERR(inode);
  452. inode->i_op = &logfs_reg_iops;
  453. inode->i_fop = &logfs_reg_fops;
  454. inode->i_mapping->a_ops = &logfs_reg_aops;
  455. return __logfs_create(dir, dentry, inode, NULL, 0);
  456. }
  457. static int logfs_mknod(struct inode *dir, struct dentry *dentry, int mode,
  458. dev_t rdev)
  459. {
  460. struct inode *inode;
  461. if (dentry->d_name.len > LOGFS_MAX_NAMELEN)
  462. return -ENAMETOOLONG;
  463. inode = logfs_new_inode(dir, mode);
  464. if (IS_ERR(inode))
  465. return PTR_ERR(inode);
  466. init_special_inode(inode, mode, rdev);
  467. return __logfs_create(dir, dentry, inode, NULL, 0);
  468. }
  469. static int logfs_symlink(struct inode *dir, struct dentry *dentry,
  470. const char *target)
  471. {
  472. struct inode *inode;
  473. size_t destlen = strlen(target) + 1;
  474. if (destlen > dir->i_sb->s_blocksize)
  475. return -ENAMETOOLONG;
  476. inode = logfs_new_inode(dir, S_IFLNK | 0777);
  477. if (IS_ERR(inode))
  478. return PTR_ERR(inode);
  479. inode->i_op = &logfs_symlink_iops;
  480. inode->i_mapping->a_ops = &logfs_reg_aops;
  481. return __logfs_create(dir, dentry, inode, target, destlen);
  482. }
  483. static int logfs_permission(struct inode *inode, int mask, unsigned int flags)
  484. {
  485. if (flags & IPERM_FLAG_RCU)
  486. return -ECHILD;
  487. return generic_permission(inode, mask, flags, NULL);
  488. }
  489. static int logfs_link(struct dentry *old_dentry, struct inode *dir,
  490. struct dentry *dentry)
  491. {
  492. struct inode *inode = old_dentry->d_inode;
  493. if (inode->i_nlink >= LOGFS_LINK_MAX)
  494. return -EMLINK;
  495. inode->i_ctime = dir->i_ctime = dir->i_mtime = CURRENT_TIME;
  496. ihold(inode);
  497. inode->i_nlink++;
  498. mark_inode_dirty_sync(inode);
  499. return __logfs_create(dir, dentry, inode, NULL, 0);
  500. }
  501. static int logfs_get_dd(struct inode *dir, struct dentry *dentry,
  502. struct logfs_disk_dentry *dd, loff_t *pos)
  503. {
  504. struct page *page;
  505. void *map;
  506. page = logfs_get_dd_page(dir, dentry);
  507. if (IS_ERR(page))
  508. return PTR_ERR(page);
  509. *pos = page->index;
  510. map = kmap_atomic(page, KM_USER0);
  511. memcpy(dd, map, sizeof(*dd));
  512. kunmap_atomic(map, KM_USER0);
  513. page_cache_release(page);
  514. return 0;
  515. }
  516. static int logfs_delete_dd(struct inode *dir, loff_t pos)
  517. {
  518. /*
  519. * Getting called with pos somewhere beyond eof is either a goofup
  520. * within this file or means someone maliciously edited the
  521. * (crc-protected) journal.
  522. */
  523. BUG_ON(beyond_eof(dir, pos));
  524. dir->i_ctime = dir->i_mtime = CURRENT_TIME;
  525. log_dir(" Delete dentry (%lx, %llx)\n", dir->i_ino, pos);
  526. return logfs_delete(dir, pos, NULL);
  527. }
  528. /*
  529. * Cross-directory rename, target does not exist. Just a little nasty.
  530. * Create a new dentry in the target dir, then remove the old dentry,
  531. * all the while taking care to remember our operation in the journal.
  532. */
  533. static int logfs_rename_cross(struct inode *old_dir, struct dentry *old_dentry,
  534. struct inode *new_dir, struct dentry *new_dentry)
  535. {
  536. struct logfs_super *super = logfs_super(old_dir->i_sb);
  537. struct logfs_disk_dentry dd;
  538. struct logfs_transaction *ta;
  539. loff_t pos;
  540. int err;
  541. if (new_dentry->d_inode && S_ISDIR(new_dentry->d_inode->i_mode))
  542. dentry_unhash(new_dentry);
  543. /* 1. locate source dd */
  544. err = logfs_get_dd(old_dir, old_dentry, &dd, &pos);
  545. if (err)
  546. return err;
  547. ta = kzalloc(sizeof(*ta), GFP_KERNEL);
  548. if (!ta)
  549. return -ENOMEM;
  550. ta->state = CROSS_RENAME_1;
  551. ta->dir = old_dir->i_ino;
  552. ta->pos = pos;
  553. /* 2. write target dd */
  554. mutex_lock(&super->s_dirop_mutex);
  555. logfs_add_transaction(new_dir, ta);
  556. err = logfs_write_dir(new_dir, new_dentry, old_dentry->d_inode);
  557. if (!err)
  558. err = write_inode(new_dir);
  559. if (err) {
  560. super->s_rename_dir = 0;
  561. super->s_rename_pos = 0;
  562. abort_transaction(new_dir, ta);
  563. goto out;
  564. }
  565. /* 3. remove source dd */
  566. ta->state = CROSS_RENAME_2;
  567. logfs_add_transaction(old_dir, ta);
  568. err = logfs_delete_dd(old_dir, pos);
  569. if (!err)
  570. err = write_inode(old_dir);
  571. LOGFS_BUG_ON(err, old_dir->i_sb);
  572. out:
  573. mutex_unlock(&super->s_dirop_mutex);
  574. return err;
  575. }
  576. static int logfs_replace_inode(struct inode *dir, struct dentry *dentry,
  577. struct logfs_disk_dentry *dd, struct inode *inode)
  578. {
  579. loff_t pos;
  580. int err;
  581. err = logfs_get_dd(dir, dentry, dd, &pos);
  582. if (err)
  583. return err;
  584. dd->ino = cpu_to_be64(inode->i_ino);
  585. dd->type = logfs_type(inode);
  586. err = write_dir(dir, dd, pos);
  587. if (err)
  588. return err;
  589. log_dir("Replace dentry (%lx, %llx) %s -> %llx\n", dir->i_ino, pos,
  590. dd->name, be64_to_cpu(dd->ino));
  591. return write_inode(dir);
  592. }
  593. /* Target dentry exists - the worst case. We need to attach the source
  594. * inode to the target dentry, then remove the orphaned target inode and
  595. * source dentry.
  596. */
  597. static int logfs_rename_target(struct inode *old_dir, struct dentry *old_dentry,
  598. struct inode *new_dir, struct dentry *new_dentry)
  599. {
  600. struct logfs_super *super = logfs_super(old_dir->i_sb);
  601. struct inode *old_inode = old_dentry->d_inode;
  602. struct inode *new_inode = new_dentry->d_inode;
  603. int isdir = S_ISDIR(old_inode->i_mode);
  604. struct logfs_disk_dentry dd;
  605. struct logfs_transaction *ta;
  606. loff_t pos;
  607. int err;
  608. BUG_ON(isdir != S_ISDIR(new_inode->i_mode));
  609. if (isdir) {
  610. if (!logfs_empty_dir(new_inode))
  611. return -ENOTEMPTY;
  612. }
  613. /* 1. locate source dd */
  614. err = logfs_get_dd(old_dir, old_dentry, &dd, &pos);
  615. if (err)
  616. return err;
  617. ta = kzalloc(sizeof(*ta), GFP_KERNEL);
  618. if (!ta)
  619. return -ENOMEM;
  620. ta->state = TARGET_RENAME_1;
  621. ta->dir = old_dir->i_ino;
  622. ta->pos = pos;
  623. ta->ino = new_inode->i_ino;
  624. /* 2. attach source inode to target dd */
  625. mutex_lock(&super->s_dirop_mutex);
  626. logfs_add_transaction(new_dir, ta);
  627. err = logfs_replace_inode(new_dir, new_dentry, &dd, old_inode);
  628. if (err) {
  629. super->s_rename_dir = 0;
  630. super->s_rename_pos = 0;
  631. super->s_victim_ino = 0;
  632. abort_transaction(new_dir, ta);
  633. goto out;
  634. }
  635. /* 3. remove source dd */
  636. ta->state = TARGET_RENAME_2;
  637. logfs_add_transaction(old_dir, ta);
  638. err = logfs_delete_dd(old_dir, pos);
  639. if (!err)
  640. err = write_inode(old_dir);
  641. LOGFS_BUG_ON(err, old_dir->i_sb);
  642. /* 4. remove target inode */
  643. ta->state = TARGET_RENAME_3;
  644. logfs_add_transaction(new_inode, ta);
  645. err = logfs_remove_inode(new_inode);
  646. out:
  647. mutex_unlock(&super->s_dirop_mutex);
  648. return err;
  649. }
  650. static int logfs_rename(struct inode *old_dir, struct dentry *old_dentry,
  651. struct inode *new_dir, struct dentry *new_dentry)
  652. {
  653. if (new_dentry->d_inode)
  654. return logfs_rename_target(old_dir, old_dentry,
  655. new_dir, new_dentry);
  656. return logfs_rename_cross(old_dir, old_dentry, new_dir, new_dentry);
  657. }
  658. /* No locking done here, as this is called before .get_sb() returns. */
  659. int logfs_replay_journal(struct super_block *sb)
  660. {
  661. struct logfs_super *super = logfs_super(sb);
  662. struct inode *inode;
  663. u64 ino, pos;
  664. int err;
  665. if (super->s_victim_ino) {
  666. /* delete victim inode */
  667. ino = super->s_victim_ino;
  668. printk(KERN_INFO"LogFS: delete unmapped inode #%llx\n", ino);
  669. inode = logfs_iget(sb, ino);
  670. if (IS_ERR(inode))
  671. goto fail;
  672. LOGFS_BUG_ON(i_size_read(inode) > 0, sb);
  673. super->s_victim_ino = 0;
  674. err = logfs_remove_inode(inode);
  675. iput(inode);
  676. if (err) {
  677. super->s_victim_ino = ino;
  678. goto fail;
  679. }
  680. }
  681. if (super->s_rename_dir) {
  682. /* delete old dd from rename */
  683. ino = super->s_rename_dir;
  684. pos = super->s_rename_pos;
  685. printk(KERN_INFO"LogFS: delete unbacked dentry (%llx, %llx)\n",
  686. ino, pos);
  687. inode = logfs_iget(sb, ino);
  688. if (IS_ERR(inode))
  689. goto fail;
  690. super->s_rename_dir = 0;
  691. super->s_rename_pos = 0;
  692. err = logfs_delete_dd(inode, pos);
  693. iput(inode);
  694. if (err) {
  695. super->s_rename_dir = ino;
  696. super->s_rename_pos = pos;
  697. goto fail;
  698. }
  699. }
  700. return 0;
  701. fail:
  702. LOGFS_BUG(sb);
  703. return -EIO;
  704. }
  705. const struct inode_operations logfs_symlink_iops = {
  706. .readlink = generic_readlink,
  707. .follow_link = page_follow_link_light,
  708. };
  709. const struct inode_operations logfs_dir_iops = {
  710. .create = logfs_create,
  711. .link = logfs_link,
  712. .lookup = logfs_lookup,
  713. .mkdir = logfs_mkdir,
  714. .mknod = logfs_mknod,
  715. .rename = logfs_rename,
  716. .rmdir = logfs_rmdir,
  717. .permission = logfs_permission,
  718. .symlink = logfs_symlink,
  719. .unlink = logfs_unlink,
  720. };
  721. const struct file_operations logfs_dir_fops = {
  722. .fsync = logfs_fsync,
  723. .unlocked_ioctl = logfs_ioctl,
  724. .readdir = logfs_readdir,
  725. .read = generic_read_dir,
  726. .llseek = default_llseek,
  727. };