namei.c
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:30k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  *  linux/fs/ext3/namei.c
  3.  *
  4.  * Copyright (C) 1992, 1993, 1994, 1995
  5.  * Remy Card (card@masi.ibp.fr)
  6.  * Laboratoire MASI - Institut Blaise Pascal
  7.  * Universite Pierre et Marie Curie (Paris VI)
  8.  *
  9.  *  from
  10.  *
  11.  *  linux/fs/minix/namei.c
  12.  *
  13.  *  Copyright (C) 1991, 1992  Linus Torvalds
  14.  *
  15.  *  Big-endian to little-endian byte-swapping/bitmaps by
  16.  *        David S. Miller (davem@caip.rutgers.edu), 1995
  17.  *  Directory entry file type support and forward compatibility hooks
  18.  *   for B-tree directories by Theodore Ts'o (tytso@mit.edu), 1998
  19.  */
  20. #include <linux/fs.h>
  21. #include <linux/jbd.h>
  22. #include <linux/sched.h>
  23. #include <linux/ext3_fs.h>
  24. #include <linux/ext3_jbd.h>
  25. #include <linux/fcntl.h>
  26. #include <linux/stat.h>
  27. #include <linux/string.h>
  28. #include <linux/locks.h>
  29. #include <linux/quotaops.h>
  30. /*
  31.  * define how far ahead to read directories while searching them.
  32.  */
  33. #define NAMEI_RA_CHUNKS  2
  34. #define NAMEI_RA_BLOCKS  4
  35. #define NAMEI_RA_SIZE        (NAMEI_RA_CHUNKS * NAMEI_RA_BLOCKS)
  36. #define NAMEI_RA_INDEX(c,b)  (((c) * NAMEI_RA_BLOCKS) + (b))
  37. /*
  38.  * NOTE! unlike strncmp, ext3_match returns 1 for success, 0 for failure.
  39.  *
  40.  * `len <= EXT3_NAME_LEN' is guaranteed by caller.
  41.  * `de != NULL' is guaranteed by caller.
  42.  */
  43. static inline int ext3_match (int len, const char * const name,
  44.       struct ext3_dir_entry_2 * de)
  45. {
  46. if (len != de->name_len)
  47. return 0;
  48. if (!de->inode)
  49. return 0;
  50. return !memcmp(name, de->name, len);
  51. }
  52. /*
  53.  * Returns 0 if not found, -1 on failure, and 1 on success
  54.  */
  55. static int inline search_dirblock(struct buffer_head * bh,
  56.   struct inode *dir,
  57.   struct dentry *dentry,
  58.   unsigned long offset,
  59.   struct ext3_dir_entry_2 ** res_dir)
  60. {
  61. struct ext3_dir_entry_2 * de;
  62. char * dlimit;
  63. int de_len;
  64. const char *name = dentry->d_name.name;
  65. int namelen = dentry->d_name.len;
  66. de = (struct ext3_dir_entry_2 *) bh->b_data;
  67. dlimit = bh->b_data + dir->i_sb->s_blocksize;
  68. while ((char *) de < dlimit) {
  69. /* this code is executed quadratically often */
  70. /* do minimal checking `by hand' */
  71. if ((char *) de + namelen <= dlimit &&
  72.     ext3_match (namelen, name, de)) {
  73. /* found a match - just to be sure, do a full check */
  74. if (!ext3_check_dir_entry("ext3_find_entry",
  75.   dir, de, bh, offset))
  76. return -1;
  77. *res_dir = de;
  78. return 1;
  79. }
  80. /* prevent looping on a bad block */
  81. de_len = le16_to_cpu(de->rec_len);
  82. if (de_len <= 0)
  83. return -1;
  84. offset += de_len;
  85. de = (struct ext3_dir_entry_2 *) ((char *) de + de_len);
  86. }
  87. return 0;
  88. }
  89. /*
  90.  * ext3_find_entry()
  91.  *
  92.  * finds an entry in the specified directory with the wanted name. It
  93.  * returns the cache buffer in which the entry was found, and the entry
  94.  * itself (as a parameter - res_dir). It does NOT read the inode of the
  95.  * entry - you'll have to do that yourself if you want to.
  96.  *
  97.  * The returned buffer_head has ->b_count elevated.  The caller is expected
  98.  * to brelse() it when appropriate.
  99.  */
  100. static struct buffer_head * ext3_find_entry (struct dentry *dentry,
  101. struct ext3_dir_entry_2 ** res_dir)
  102. {
  103. struct super_block * sb;
  104. struct buffer_head * bh_use[NAMEI_RA_SIZE];
  105. struct buffer_head * bh, *ret = NULL;
  106. unsigned long start, block, b;
  107. int ra_max = 0; /* Number of bh's in the readahead
  108.    buffer, bh_use[] */
  109. int ra_ptr = 0; /* Current index into readahead
  110.    buffer */
  111. int num = 0;
  112. int nblocks, i, err;
  113. struct inode *dir = dentry->d_parent->d_inode;
  114. *res_dir = NULL;
  115. sb = dir->i_sb;
  116. nblocks = dir->i_size >> EXT3_BLOCK_SIZE_BITS(sb);
  117. start = dir->u.ext3_i.i_dir_start_lookup;
  118. if (start >= nblocks)
  119. start = 0;
  120. block = start;
  121. restart:
  122. do {
  123. /*
  124.  * We deal with the read-ahead logic here.
  125.  */
  126. if (ra_ptr >= ra_max) {
  127. /* Refill the readahead buffer */
  128. ra_ptr = 0;
  129. b = block;
  130. for (ra_max = 0; ra_max < NAMEI_RA_SIZE; ra_max++) {
  131. /*
  132.  * Terminate if we reach the end of the
  133.  * directory and must wrap, or if our
  134.  * search has finished at this block.
  135.  */
  136. if (b >= nblocks || (num && block == start)) {
  137. bh_use[ra_max] = NULL;
  138. break;
  139. }
  140. num++;
  141. bh = ext3_getblk(NULL, dir, b++, 0, &err);
  142. bh_use[ra_max] = bh;
  143. if (bh)
  144. ll_rw_block(READ, 1, &bh);
  145. }
  146. }
  147. if ((bh = bh_use[ra_ptr++]) == NULL)
  148. goto next;
  149. wait_on_buffer(bh);
  150. if (!buffer_uptodate(bh)) {
  151. /* read error, skip block & hope for the best */
  152. brelse(bh);
  153. goto next;
  154. }
  155. i = search_dirblock(bh, dir, dentry,
  156.     block << EXT3_BLOCK_SIZE_BITS(sb), res_dir);
  157. if (i == 1) {
  158. dir->u.ext3_i.i_dir_start_lookup = block;
  159. ret = bh;
  160. goto cleanup_and_exit;
  161. } else {
  162. brelse(bh);
  163. if (i < 0)
  164. goto cleanup_and_exit;
  165. }
  166. next:
  167. if (++block >= nblocks)
  168. block = 0;
  169. } while (block != start);
  170. /*
  171.  * If the directory has grown while we were searching, then
  172.  * search the last part of the directory before giving up.
  173.  */
  174. block = nblocks;
  175. nblocks = dir->i_size >> EXT3_BLOCK_SIZE_BITS(sb);
  176. if (block < nblocks) {
  177. start = 0;
  178. goto restart;
  179. }
  180. cleanup_and_exit:
  181. /* Clean up the read-ahead blocks */
  182. for (; ra_ptr < ra_max; ra_ptr++)
  183. brelse (bh_use[ra_ptr]);
  184. return ret;
  185. }
  186. static struct dentry *ext3_lookup(struct inode * dir, struct dentry *dentry)
  187. {
  188. struct inode * inode;
  189. struct ext3_dir_entry_2 * de;
  190. struct buffer_head * bh;
  191. if (dentry->d_name.len > EXT3_NAME_LEN)
  192. return ERR_PTR(-ENAMETOOLONG);
  193. bh = ext3_find_entry(dentry, &de);
  194. inode = NULL;
  195. if (bh) {
  196. unsigned long ino = le32_to_cpu(de->inode);
  197. brelse (bh);
  198. inode = iget(dir->i_sb, ino);
  199. if (!inode)
  200. return ERR_PTR(-EACCES);
  201. }
  202. d_add(dentry, inode);
  203. return NULL;
  204. }
  205. #define S_SHIFT 12
  206. static unsigned char ext3_type_by_mode[S_IFMT >> S_SHIFT] = {
  207. [S_IFREG >> S_SHIFT] EXT3_FT_REG_FILE,
  208. [S_IFDIR >> S_SHIFT] EXT3_FT_DIR,
  209. [S_IFCHR >> S_SHIFT] EXT3_FT_CHRDEV,
  210. [S_IFBLK >> S_SHIFT] EXT3_FT_BLKDEV,
  211. [S_IFIFO >> S_SHIFT] EXT3_FT_FIFO,
  212. [S_IFSOCK >> S_SHIFT] EXT3_FT_SOCK,
  213. [S_IFLNK >> S_SHIFT] EXT3_FT_SYMLINK,
  214. };
  215. static inline void ext3_set_de_type(struct super_block *sb,
  216. struct ext3_dir_entry_2 *de,
  217. umode_t mode) {
  218. if (EXT3_HAS_INCOMPAT_FEATURE(sb, EXT3_FEATURE_INCOMPAT_FILETYPE))
  219. de->file_type = ext3_type_by_mode[(mode & S_IFMT)>>S_SHIFT];
  220. }
  221. /*
  222.  * ext3_add_entry()
  223.  *
  224.  * adds a file entry to the specified directory, using the same
  225.  * semantics as ext3_find_entry(). It returns NULL if it failed.
  226.  *
  227.  * NOTE!! The inode part of 'de' is left at 0 - which means you
  228.  * may not sleep between calling this and putting something into
  229.  * the entry, as someone else might have used it while you slept.
  230.  */
  231. /*
  232.  * AKPM: the journalling code here looks wrong on the error paths
  233.  */
  234. static int ext3_add_entry (handle_t *handle, struct dentry *dentry,
  235. struct inode *inode)
  236. {
  237. struct inode *dir = dentry->d_parent->d_inode;
  238. const char *name = dentry->d_name.name;
  239. int namelen = dentry->d_name.len;
  240. unsigned long offset;
  241. unsigned short rec_len;
  242. struct buffer_head * bh;
  243. struct ext3_dir_entry_2 * de, * de1;
  244. struct super_block * sb;
  245. int retval;
  246. sb = dir->i_sb;
  247. if (!namelen)
  248. return -EINVAL;
  249. bh = ext3_bread (handle, dir, 0, 0, &retval);
  250. if (!bh)
  251. return retval;
  252. rec_len = EXT3_DIR_REC_LEN(namelen);
  253. offset = 0;
  254. de = (struct ext3_dir_entry_2 *) bh->b_data;
  255. while (1) {
  256. if ((char *)de >= sb->s_blocksize + bh->b_data) {
  257. brelse (bh);
  258. bh = NULL;
  259. bh = ext3_bread (handle, dir,
  260. offset >> EXT3_BLOCK_SIZE_BITS(sb), 1, &retval);
  261. if (!bh)
  262. return retval;
  263. if (dir->i_size <= offset) {
  264. if (dir->i_size == 0) {
  265. brelse(bh);
  266. return -ENOENT;
  267. }
  268. ext3_debug ("creating next blockn");
  269. BUFFER_TRACE(bh, "get_write_access");
  270. ext3_journal_get_write_access(handle, bh);
  271. de = (struct ext3_dir_entry_2 *) bh->b_data;
  272. de->inode = 0;
  273. de->rec_len = le16_to_cpu(sb->s_blocksize);
  274. dir->u.ext3_i.i_disksize =
  275. dir->i_size = offset + sb->s_blocksize;
  276. dir->u.ext3_i.i_flags &= ~EXT3_INDEX_FL;
  277. ext3_mark_inode_dirty(handle, dir);
  278. } else {
  279. ext3_debug ("skipping to next blockn");
  280. de = (struct ext3_dir_entry_2 *) bh->b_data;
  281. }
  282. }
  283. if (!ext3_check_dir_entry ("ext3_add_entry", dir, de, bh,
  284.    offset)) {
  285. brelse (bh);
  286. return -ENOENT;
  287. }
  288. if (ext3_match (namelen, name, de)) {
  289. brelse (bh);
  290. return -EEXIST;
  291. }
  292. if ((le32_to_cpu(de->inode) == 0 &&
  293. le16_to_cpu(de->rec_len) >= rec_len) ||
  294.     (le16_to_cpu(de->rec_len) >=
  295. EXT3_DIR_REC_LEN(de->name_len) + rec_len)) {
  296. BUFFER_TRACE(bh, "get_write_access");
  297. ext3_journal_get_write_access(handle, bh);
  298. /* By now the buffer is marked for journaling */
  299. offset += le16_to_cpu(de->rec_len);
  300. if (le32_to_cpu(de->inode)) {
  301. de1 = (struct ext3_dir_entry_2 *) ((char *) de +
  302. EXT3_DIR_REC_LEN(de->name_len));
  303. de1->rec_len =
  304. cpu_to_le16(le16_to_cpu(de->rec_len) -
  305. EXT3_DIR_REC_LEN(de->name_len));
  306. de->rec_len = cpu_to_le16(
  307. EXT3_DIR_REC_LEN(de->name_len));
  308. de = de1;
  309. }
  310. de->file_type = EXT3_FT_UNKNOWN;
  311. if (inode) {
  312. de->inode = cpu_to_le32(inode->i_ino);
  313. ext3_set_de_type(dir->i_sb, de, inode->i_mode);
  314. } else
  315. de->inode = 0;
  316. de->name_len = namelen;
  317. memcpy (de->name, name, namelen);
  318. /*
  319.  * XXX shouldn't update any times until successful
  320.  * completion of syscall, but too many callers depend
  321.  * on this.
  322.  *
  323.  * XXX similarly, too many callers depend on
  324.  * ext3_new_inode() setting the times, but error
  325.  * recovery deletes the inode, so the worst that can
  326.  * happen is that the times are slightly out of date
  327.  * and/or different from the directory change time.
  328.  */
  329. dir->i_mtime = dir->i_ctime = CURRENT_TIME;
  330. dir->u.ext3_i.i_flags &= ~EXT3_INDEX_FL;
  331. dir->i_version = ++event;
  332. ext3_mark_inode_dirty(handle, dir);
  333. BUFFER_TRACE(bh, "call ext3_journal_dirty_metadata");
  334. ext3_journal_dirty_metadata(handle, bh);
  335. brelse(bh);
  336. return 0;
  337. }
  338. offset += le16_to_cpu(de->rec_len);
  339. de = (struct ext3_dir_entry_2 *)
  340. ((char *) de + le16_to_cpu(de->rec_len));
  341. }
  342. brelse (bh);
  343. return -ENOSPC;
  344. }
  345. /*
  346.  * ext3_delete_entry deletes a directory entry by merging it with the
  347.  * previous entry
  348.  */
  349. static int ext3_delete_entry (handle_t *handle, 
  350.       struct inode * dir,
  351.       struct ext3_dir_entry_2 * de_del,
  352.       struct buffer_head * bh)
  353. {
  354. struct ext3_dir_entry_2 * de, * pde;
  355. int i;
  356. i = 0;
  357. pde = NULL;
  358. de = (struct ext3_dir_entry_2 *) bh->b_data;
  359. while (i < bh->b_size) {
  360. if (!ext3_check_dir_entry("ext3_delete_entry", dir, de, bh, i))
  361. return -EIO;
  362. if (de == de_del)  {
  363. BUFFER_TRACE(bh, "get_write_access");
  364. ext3_journal_get_write_access(handle, bh);
  365. if (pde)
  366. pde->rec_len =
  367. cpu_to_le16(le16_to_cpu(pde->rec_len) +
  368.     le16_to_cpu(de->rec_len));
  369. else
  370. de->inode = 0;
  371. dir->i_version = ++event;
  372. BUFFER_TRACE(bh, "call ext3_journal_dirty_metadata");
  373. ext3_journal_dirty_metadata(handle, bh);
  374. return 0;
  375. }
  376. i += le16_to_cpu(de->rec_len);
  377. pde = de;
  378. de = (struct ext3_dir_entry_2 *)
  379. ((char *) de + le16_to_cpu(de->rec_len));
  380. }
  381. return -ENOENT;
  382. }
  383. /*
  384.  * ext3_mark_inode_dirty is somewhat expensive, so unlike ext2 we
  385.  * do not perform it in these functions.  We perform it at the call site,
  386.  * if it is needed.
  387.  */
  388. static inline void ext3_inc_count(handle_t *handle, struct inode *inode)
  389. {
  390. inode->i_nlink++;
  391. }
  392. static inline void ext3_dec_count(handle_t *handle, struct inode *inode)
  393. {
  394. inode->i_nlink--;
  395. }
  396. static int ext3_add_nondir(handle_t *handle,
  397. struct dentry *dentry, struct inode *inode)
  398. {
  399. int err = ext3_add_entry(handle, dentry, inode);
  400. if (!err) {
  401. d_instantiate(dentry, inode);
  402. return 0;
  403. }
  404. ext3_dec_count(handle, inode);
  405. iput(inode);
  406. return err;
  407. }
  408. /*
  409.  * By the time this is called, we already have created
  410.  * the directory cache entry for the new file, but it
  411.  * is so far negative - it has no inode.
  412.  *
  413.  * If the create succeeds, we fill in the inode information
  414.  * with d_instantiate(). 
  415.  */
  416. static int ext3_create (struct inode * dir, struct dentry * dentry, int mode)
  417. {
  418. handle_t *handle; 
  419. struct inode * inode;
  420. int err;
  421. handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS + 3);
  422. if (IS_ERR(handle))
  423. return PTR_ERR(handle);
  424. if (IS_SYNC(dir))
  425. handle->h_sync = 1;
  426. inode = ext3_new_inode (handle, dir, mode);
  427. err = PTR_ERR(inode);
  428. if (!IS_ERR(inode)) {
  429. inode->i_op = &ext3_file_inode_operations;
  430. inode->i_fop = &ext3_file_operations;
  431. inode->i_mapping->a_ops = &ext3_aops;
  432. err = ext3_add_nondir(handle, dentry, inode);
  433. ext3_mark_inode_dirty(handle, inode);
  434. }
  435. ext3_journal_stop(handle, dir);
  436. return err;
  437. }
  438. static int ext3_mknod (struct inode * dir, struct dentry *dentry,
  439. int mode, int rdev)
  440. {
  441. handle_t *handle;
  442. struct inode *inode;
  443. int err;
  444. handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS + 3);
  445. if (IS_ERR(handle))
  446. return PTR_ERR(handle);
  447. if (IS_SYNC(dir))
  448. handle->h_sync = 1;
  449. inode = ext3_new_inode (handle, dir, mode);
  450. err = PTR_ERR(inode);
  451. if (!IS_ERR(inode)) {
  452. init_special_inode(inode, mode, rdev);
  453. err = ext3_add_nondir(handle, dentry, inode);
  454. ext3_mark_inode_dirty(handle, inode);
  455. }
  456. ext3_journal_stop(handle, dir);
  457. return err;
  458. }
  459. static int ext3_mkdir(struct inode * dir, struct dentry * dentry, int mode)
  460. {
  461. handle_t *handle;
  462. struct inode * inode;
  463. struct buffer_head * dir_block;
  464. struct ext3_dir_entry_2 * de;
  465. int err;
  466. if (dir->i_nlink >= EXT3_LINK_MAX)
  467. return -EMLINK;
  468. handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS + 3);
  469. if (IS_ERR(handle))
  470. return PTR_ERR(handle);
  471. if (IS_SYNC(dir))
  472. handle->h_sync = 1;
  473. inode = ext3_new_inode (handle, dir, S_IFDIR);
  474. err = PTR_ERR(inode);
  475. if (IS_ERR(inode))
  476. goto out_stop;
  477. inode->i_op = &ext3_dir_inode_operations;
  478. inode->i_fop = &ext3_dir_operations;
  479. inode->i_size = inode->u.ext3_i.i_disksize = inode->i_sb->s_blocksize;
  480. inode->i_blocks = 0;
  481. dir_block = ext3_bread (handle, inode, 0, 1, &err);
  482. if (!dir_block) {
  483. inode->i_nlink--; /* is this nlink == 0? */
  484. ext3_mark_inode_dirty(handle, inode);
  485. iput (inode);
  486. goto out_stop;
  487. }
  488. BUFFER_TRACE(dir_block, "get_write_access");
  489. ext3_journal_get_write_access(handle, dir_block);
  490. de = (struct ext3_dir_entry_2 *) dir_block->b_data;
  491. de->inode = cpu_to_le32(inode->i_ino);
  492. de->name_len = 1;
  493. de->rec_len = cpu_to_le16(EXT3_DIR_REC_LEN(de->name_len));
  494. strcpy (de->name, ".");
  495. ext3_set_de_type(dir->i_sb, de, S_IFDIR);
  496. de = (struct ext3_dir_entry_2 *)
  497. ((char *) de + le16_to_cpu(de->rec_len));
  498. de->inode = cpu_to_le32(dir->i_ino);
  499. de->rec_len = cpu_to_le16(inode->i_sb->s_blocksize-EXT3_DIR_REC_LEN(1));
  500. de->name_len = 2;
  501. strcpy (de->name, "..");
  502. ext3_set_de_type(dir->i_sb, de, S_IFDIR);
  503. inode->i_nlink = 2;
  504. BUFFER_TRACE(dir_block, "call ext3_journal_dirty_metadata");
  505. ext3_journal_dirty_metadata(handle, dir_block);
  506. brelse (dir_block);
  507. inode->i_mode = S_IFDIR | mode;
  508. if (dir->i_mode & S_ISGID)
  509. inode->i_mode |= S_ISGID;
  510. ext3_mark_inode_dirty(handle, inode);
  511. err = ext3_add_entry (handle, dentry, inode);
  512. if (err)
  513. goto out_no_entry;
  514. dir->i_nlink++;
  515. dir->u.ext3_i.i_flags &= ~EXT3_INDEX_FL;
  516. ext3_mark_inode_dirty(handle, dir);
  517. d_instantiate(dentry, inode);
  518. out_stop:
  519. ext3_journal_stop(handle, dir);
  520. return err;
  521. out_no_entry:
  522. inode->i_nlink = 0;
  523. ext3_mark_inode_dirty(handle, inode);
  524. iput (inode);
  525. goto out_stop;
  526. }
  527. /*
  528.  * routine to check that the specified directory is empty (for rmdir)
  529.  */
  530. static int empty_dir (struct inode * inode)
  531. {
  532. unsigned long offset;
  533. struct buffer_head * bh;
  534. struct ext3_dir_entry_2 * de, * de1;
  535. struct super_block * sb;
  536. int err;
  537. sb = inode->i_sb;
  538. if (inode->i_size < EXT3_DIR_REC_LEN(1) + EXT3_DIR_REC_LEN(2) ||
  539.     !(bh = ext3_bread (NULL, inode, 0, 0, &err))) {
  540.      ext3_warning (inode->i_sb, "empty_dir",
  541.       "bad directory (dir #%lu) - no data block",
  542.       inode->i_ino);
  543. return 1;
  544. }
  545. de = (struct ext3_dir_entry_2 *) bh->b_data;
  546. de1 = (struct ext3_dir_entry_2 *)
  547. ((char *) de + le16_to_cpu(de->rec_len));
  548. if (le32_to_cpu(de->inode) != inode->i_ino ||
  549. !le32_to_cpu(de1->inode) || 
  550. strcmp (".", de->name) ||
  551. strcmp ("..", de1->name)) {
  552.      ext3_warning (inode->i_sb, "empty_dir",
  553.       "bad directory (dir #%lu) - no `.' or `..'",
  554.       inode->i_ino);
  555. brelse (bh);
  556. return 1;
  557. }
  558. offset = le16_to_cpu(de->rec_len) + le16_to_cpu(de1->rec_len);
  559. de = (struct ext3_dir_entry_2 *)
  560. ((char *) de1 + le16_to_cpu(de1->rec_len));
  561. while (offset < inode->i_size ) {
  562. if (!bh ||
  563. (void *) de >= (void *) (bh->b_data+sb->s_blocksize)) {
  564. brelse (bh);
  565. bh = ext3_bread (NULL, inode,
  566. offset >> EXT3_BLOCK_SIZE_BITS(sb), 0, &err);
  567. if (!bh) {
  568. #if 0
  569. ext3_error (sb, "empty_dir",
  570. "directory #%lu contains a hole at offset %lu",
  571. inode->i_ino, offset);
  572. #endif
  573. offset += sb->s_blocksize;
  574. continue;
  575. }
  576. de = (struct ext3_dir_entry_2 *) bh->b_data;
  577. }
  578. if (!ext3_check_dir_entry ("empty_dir", inode, de, bh,
  579.    offset)) {
  580. brelse (bh);
  581. return 1;
  582. }
  583. if (le32_to_cpu(de->inode)) {
  584. brelse (bh);
  585. return 0;
  586. }
  587. offset += le16_to_cpu(de->rec_len);
  588. de = (struct ext3_dir_entry_2 *)
  589. ((char *) de + le16_to_cpu(de->rec_len));
  590. }
  591. brelse (bh);
  592. return 1;
  593. }
  594. /* ext3_orphan_add() links an unlinked or truncated inode into a list of
  595.  * such inodes, starting at the superblock, in case we crash before the
  596.  * file is closed/deleted, or in case the inode truncate spans multiple
  597.  * transactions and the last transaction is not recovered after a crash.
  598.  *
  599.  * At filesystem recovery time, we walk this list deleting unlinked
  600.  * inodes and truncating linked inodes in ext3_orphan_cleanup().
  601.  */
  602. int ext3_orphan_add(handle_t *handle, struct inode *inode)
  603. {
  604. struct super_block *sb = inode->i_sb;
  605. struct ext3_iloc iloc;
  606. int err = 0, rc;
  607. lock_super(sb);
  608. if (!list_empty(&inode->u.ext3_i.i_orphan))
  609. goto out_unlock;
  610. /* Orphan handling is only valid for files with data blocks
  611.  * being truncated, or files being unlinked. */
  612. /* @@@ FIXME: Observation from aviro:
  613.  * I think I can trigger J_ASSERT in ext3_orphan_add().  We block 
  614.  * here (on lock_super()), so race with ext3_link() which might bump
  615.  * ->i_nlink. For, say it, character device. Not a regular file,
  616.  * not a directory, not a symlink and ->i_nlink > 0.
  617.  */
  618. J_ASSERT ((S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) ||
  619. S_ISLNK(inode->i_mode)) || inode->i_nlink == 0);
  620. BUFFER_TRACE(sb->u.ext3_sb.s_sbh, "get_write_access");
  621. err = ext3_journal_get_write_access(handle, sb->u.ext3_sb.s_sbh);
  622. if (err)
  623. goto out_unlock;
  624. err = ext3_reserve_inode_write(handle, inode, &iloc);
  625. if (err)
  626. goto out_unlock;
  627. /* Insert this inode at the head of the on-disk orphan list... */
  628. NEXT_ORPHAN(inode) = le32_to_cpu(EXT3_SB(sb)->s_es->s_last_orphan);
  629. EXT3_SB(sb)->s_es->s_last_orphan = cpu_to_le32(inode->i_ino);
  630. err = ext3_journal_dirty_metadata(handle, sb->u.ext3_sb.s_sbh);
  631. rc = ext3_mark_iloc_dirty(handle, inode, &iloc);
  632. if (!err)
  633. err = rc;
  634. /* Only add to the head of the in-memory list if all the
  635.  * previous operations succeeded.  If the orphan_add is going to
  636.  * fail (possibly taking the journal offline), we can't risk
  637.  * leaving the inode on the orphan list: stray orphan-list
  638.  * entries can cause panics at unmount time.
  639.  *
  640.  * This is safe: on error we're going to ignore the orphan list
  641.  * anyway on the next recovery. */
  642. if (!err)
  643. list_add(&inode->u.ext3_i.i_orphan, &EXT3_SB(sb)->s_orphan);
  644. jbd_debug(4, "superblock will point to %ldn", inode->i_ino);
  645. jbd_debug(4, "orphan inode %ld will point to %dn",
  646. inode->i_ino, NEXT_ORPHAN(inode));
  647. out_unlock:
  648. unlock_super(sb);
  649. ext3_std_error(inode->i_sb, err);
  650. return err;
  651. }
  652. /*
  653.  * ext3_orphan_del() removes an unlinked or truncated inode from the list
  654.  * of such inodes stored on disk, because it is finally being cleaned up.
  655.  */
  656. int ext3_orphan_del(handle_t *handle, struct inode *inode)
  657. {
  658. struct list_head *prev;
  659. struct ext3_sb_info *sbi;
  660. ino_t ino_next; 
  661. struct ext3_iloc iloc;
  662. int err = 0;
  663. lock_super(inode->i_sb);
  664. if (list_empty(&inode->u.ext3_i.i_orphan)) {
  665. unlock_super(inode->i_sb);
  666. return 0;
  667. }
  668. ino_next = NEXT_ORPHAN(inode);
  669. prev = inode->u.ext3_i.i_orphan.prev;
  670. sbi = EXT3_SB(inode->i_sb);
  671. jbd_debug(4, "remove inode %ld from orphan listn", inode->i_ino);
  672. list_del(&inode->u.ext3_i.i_orphan);
  673. INIT_LIST_HEAD(&inode->u.ext3_i.i_orphan);
  674. /* If we're on an error path, we may not have a valid
  675.  * transaction handle with which to update the orphan list on
  676.  * disk, but we still need to remove the inode from the linked
  677.  * list in memory. */
  678. if (!handle)
  679. goto out;
  680. err = ext3_reserve_inode_write(handle, inode, &iloc);
  681. if (err)
  682. goto out_err;
  683. if (prev == &sbi->s_orphan) {
  684. jbd_debug(4, "superblock will point to %ldn", ino_next);
  685. BUFFER_TRACE(sbi->s_sbh, "get_write_access");
  686. err = ext3_journal_get_write_access(handle, sbi->s_sbh);
  687. if (err)
  688. goto out_brelse;
  689. sbi->s_es->s_last_orphan = cpu_to_le32(ino_next);
  690. err = ext3_journal_dirty_metadata(handle, sbi->s_sbh);
  691. } else {
  692. struct ext3_iloc iloc2;
  693. struct inode *i_prev =
  694. list_entry(prev, struct inode, u.ext3_i.i_orphan);
  695. jbd_debug(4, "orphan inode %ld will point to %ldn",
  696.   i_prev->i_ino, ino_next);
  697. err = ext3_reserve_inode_write(handle, i_prev, &iloc2);
  698. if (err)
  699. goto out_brelse;
  700. NEXT_ORPHAN(i_prev) = ino_next;
  701. err = ext3_mark_iloc_dirty(handle, i_prev, &iloc2);
  702. }
  703. if (err)
  704. goto out_brelse;
  705. NEXT_ORPHAN(inode) = 0;
  706. err = ext3_mark_iloc_dirty(handle, inode, &iloc);
  707. if (err)
  708. goto out_brelse;
  709. out_err: 
  710. ext3_std_error(inode->i_sb, err);
  711. out:
  712. unlock_super(inode->i_sb);
  713. return err;
  714. out_brelse:
  715. brelse(iloc.bh);
  716. goto out_err;
  717. }
  718. static int ext3_rmdir (struct inode * dir, struct dentry *dentry)
  719. {
  720. int retval;
  721. struct inode * inode;
  722. struct buffer_head * bh;
  723. struct ext3_dir_entry_2 * de;
  724. handle_t *handle;
  725. handle = ext3_journal_start(dir, EXT3_DELETE_TRANS_BLOCKS);
  726. if (IS_ERR(handle))
  727. return PTR_ERR(handle);
  728. retval = -ENOENT;
  729. bh = ext3_find_entry (dentry, &de);
  730. if (!bh)
  731. goto end_rmdir;
  732. if (IS_SYNC(dir))
  733. handle->h_sync = 1;
  734. inode = dentry->d_inode;
  735. DQUOT_INIT(inode);
  736. retval = -EIO;
  737. if (le32_to_cpu(de->inode) != inode->i_ino)
  738. goto end_rmdir;
  739. retval = -ENOTEMPTY;
  740. if (!empty_dir (inode))
  741. goto end_rmdir;
  742. retval = ext3_delete_entry(handle, dir, de, bh);
  743. if (retval)
  744. goto end_rmdir;
  745. if (inode->i_nlink != 2)
  746. ext3_warning (inode->i_sb, "ext3_rmdir",
  747.       "empty directory has nlink!=2 (%d)",
  748.       inode->i_nlink);
  749. inode->i_version = ++event;
  750. inode->i_nlink = 0;
  751. /* There's no need to set i_disksize: the fact that i_nlink is
  752.  * zero will ensure that the right thing happens during any
  753.  * recovery. */
  754. inode->i_size = 0;
  755. ext3_orphan_add(handle, inode);
  756. dir->i_nlink--;
  757. inode->i_ctime = dir->i_ctime = dir->i_mtime = CURRENT_TIME;
  758. ext3_mark_inode_dirty(handle, inode);
  759. dir->u.ext3_i.i_flags &= ~EXT3_INDEX_FL;
  760. ext3_mark_inode_dirty(handle, dir);
  761. end_rmdir:
  762. ext3_journal_stop(handle, dir);
  763. brelse (bh);
  764. return retval;
  765. }
  766. static int ext3_unlink(struct inode * dir, struct dentry *dentry)
  767. {
  768. int retval;
  769. struct inode * inode;
  770. struct buffer_head * bh;
  771. struct ext3_dir_entry_2 * de;
  772. handle_t *handle;
  773. handle = ext3_journal_start(dir, EXT3_DELETE_TRANS_BLOCKS);
  774. if (IS_ERR(handle))
  775. return PTR_ERR(handle);
  776. if (IS_SYNC(dir))
  777. handle->h_sync = 1;
  778. retval = -ENOENT;
  779. bh = ext3_find_entry (dentry, &de);
  780. if (!bh)
  781. goto end_unlink;
  782. inode = dentry->d_inode;
  783. DQUOT_INIT(inode);
  784. retval = -EIO;
  785. if (le32_to_cpu(de->inode) != inode->i_ino)
  786. goto end_unlink;
  787. if (!inode->i_nlink) {
  788. ext3_warning (inode->i_sb, "ext3_unlink",
  789.       "Deleting nonexistent file (%lu), %d",
  790.       inode->i_ino, inode->i_nlink);
  791. inode->i_nlink = 1;
  792. }
  793. retval = ext3_delete_entry(handle, dir, de, bh);
  794. if (retval)
  795. goto end_unlink;
  796. dir->i_ctime = dir->i_mtime = CURRENT_TIME;
  797. dir->u.ext3_i.i_flags &= ~EXT3_INDEX_FL;
  798. ext3_mark_inode_dirty(handle, dir);
  799. inode->i_nlink--;
  800. if (!inode->i_nlink)
  801. ext3_orphan_add(handle, inode);
  802. inode->i_ctime = dir->i_ctime;
  803. ext3_mark_inode_dirty(handle, inode);
  804. retval = 0;
  805. end_unlink:
  806. ext3_journal_stop(handle, dir);
  807. brelse (bh);
  808. return retval;
  809. }
  810. static int ext3_symlink (struct inode * dir,
  811. struct dentry *dentry, const char * symname)
  812. {
  813. handle_t *handle;
  814. struct inode * inode;
  815. int l, err;
  816. l = strlen(symname)+1;
  817. if (l > dir->i_sb->s_blocksize)
  818. return -ENAMETOOLONG;
  819. handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS + 5);
  820. if (IS_ERR(handle))
  821. return PTR_ERR(handle);
  822. if (IS_SYNC(dir))
  823. handle->h_sync = 1;
  824. inode = ext3_new_inode (handle, dir, S_IFLNK|S_IRWXUGO);
  825. err = PTR_ERR(inode);
  826. if (IS_ERR(inode))
  827. goto out_stop;
  828. if (l > sizeof (inode->u.ext3_i.i_data)) {
  829. inode->i_op = &page_symlink_inode_operations;
  830. inode->i_mapping->a_ops = &ext3_aops;
  831. /*
  832.  * block_symlink() calls back into ext3_prepare/commit_write.
  833.  * We have a transaction open.  All is sweetness.  It also sets
  834.  * i_size in generic_commit_write().
  835.  */
  836. err = block_symlink(inode, symname, l);
  837. if (err)
  838. goto out_no_entry;
  839. } else {
  840. inode->i_op = &ext3_fast_symlink_inode_operations;
  841. memcpy((char*)&inode->u.ext3_i.i_data,symname,l);
  842. inode->i_size = l-1;
  843. }
  844. inode->u.ext3_i.i_disksize = inode->i_size;
  845. err = ext3_add_nondir(handle, dentry, inode);
  846. ext3_mark_inode_dirty(handle, inode);
  847. out_stop:
  848. ext3_journal_stop(handle, dir);
  849. return err;
  850. out_no_entry:
  851. ext3_dec_count(handle, inode);
  852. ext3_mark_inode_dirty(handle, inode);
  853. iput (inode);
  854. goto out_stop;
  855. }
  856. static int ext3_link (struct dentry * old_dentry,
  857. struct inode * dir, struct dentry *dentry)
  858. {
  859. handle_t *handle;
  860. struct inode *inode = old_dentry->d_inode;
  861. int err;
  862. if (S_ISDIR(inode->i_mode))
  863. return -EPERM;
  864. if (inode->i_nlink >= EXT3_LINK_MAX)
  865. return -EMLINK;
  866. handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS);
  867. if (IS_ERR(handle))
  868. return PTR_ERR(handle);
  869. if (IS_SYNC(dir))
  870. handle->h_sync = 1;
  871. inode->i_ctime = CURRENT_TIME;
  872. ext3_inc_count(handle, inode);
  873. atomic_inc(&inode->i_count);
  874. err = ext3_add_nondir(handle, dentry, inode);
  875. ext3_mark_inode_dirty(handle, inode);
  876. ext3_journal_stop(handle, dir);
  877. return err;
  878. }
  879. #define PARENT_INO(buffer) 
  880. ((struct ext3_dir_entry_2 *) ((char *) buffer + 
  881. le16_to_cpu(((struct ext3_dir_entry_2 *) buffer)->rec_len)))->inode
  882. /*
  883.  * Anybody can rename anything with this: the permission checks are left to the
  884.  * higher-level routines.
  885.  */
  886. static int ext3_rename (struct inode * old_dir, struct dentry *old_dentry,
  887.    struct inode * new_dir,struct dentry *new_dentry)
  888. {
  889. handle_t *handle;
  890. struct inode * old_inode, * new_inode;
  891. struct buffer_head * old_bh, * new_bh, * dir_bh;
  892. struct ext3_dir_entry_2 * old_de, * new_de;
  893. int retval;
  894. old_bh = new_bh = dir_bh = NULL;
  895. handle = ext3_journal_start(old_dir, 2 * EXT3_DATA_TRANS_BLOCKS + 2);
  896. if (IS_ERR(handle))
  897. return PTR_ERR(handle);
  898. if (IS_SYNC(old_dir) || IS_SYNC(new_dir))
  899. handle->h_sync = 1;
  900. old_bh = ext3_find_entry (old_dentry, &old_de);
  901. /*
  902.  *  Check for inode number is _not_ due to possible IO errors.
  903.  *  We might rmdir the source, keep it as pwd of some process
  904.  *  and merrily kill the link to whatever was created under the
  905.  *  same name. Goodbye sticky bit ;-<
  906.  */
  907. old_inode = old_dentry->d_inode;
  908. retval = -ENOENT;
  909. if (!old_bh || le32_to_cpu(old_de->inode) != old_inode->i_ino)
  910. goto end_rename;
  911. new_inode = new_dentry->d_inode;
  912. new_bh = ext3_find_entry (new_dentry, &new_de);
  913. if (new_bh) {
  914. if (!new_inode) {
  915. brelse (new_bh);
  916. new_bh = NULL;
  917. } else {
  918. DQUOT_INIT(new_inode);
  919. }
  920. }
  921. if (S_ISDIR(old_inode->i_mode)) {
  922. if (new_inode) {
  923. retval = -ENOTEMPTY;
  924. if (!empty_dir (new_inode))
  925. goto end_rename;
  926. }
  927. retval = -EIO;
  928. dir_bh = ext3_bread (handle, old_inode, 0, 0, &retval);
  929. if (!dir_bh)
  930. goto end_rename;
  931. if (le32_to_cpu(PARENT_INO(dir_bh->b_data)) != old_dir->i_ino)
  932. goto end_rename;
  933. retval = -EMLINK;
  934. if (!new_inode && new_dir!=old_dir &&
  935. new_dir->i_nlink >= EXT3_LINK_MAX)
  936. goto end_rename;
  937. }
  938. if (!new_bh) {
  939. retval = ext3_add_entry (handle, new_dentry, old_inode);
  940. if (retval)
  941. goto end_rename;
  942. } else {
  943. BUFFER_TRACE(new_bh, "get write access");
  944. BUFFER_TRACE(new_bh, "get_write_access");
  945. ext3_journal_get_write_access(handle, new_bh);
  946. new_de->inode = le32_to_cpu(old_inode->i_ino);
  947. if (EXT3_HAS_INCOMPAT_FEATURE(new_dir->i_sb,
  948.       EXT3_FEATURE_INCOMPAT_FILETYPE))
  949. new_de->file_type = old_de->file_type;
  950. new_dir->i_version = ++event;
  951. BUFFER_TRACE(new_bh, "call ext3_journal_dirty_metadata");
  952. ext3_journal_dirty_metadata(handle, new_bh);
  953. brelse(new_bh);
  954. new_bh = NULL;
  955. }
  956. /*
  957.  * Like most other Unix systems, set the ctime for inodes on a
  958.  * rename.
  959.  */
  960. old_inode->i_ctime = CURRENT_TIME;
  961. ext3_mark_inode_dirty(handle, old_inode);
  962. /*
  963.  * ok, that's it
  964.  */
  965. ext3_delete_entry(handle, old_dir, old_de, old_bh);
  966. if (new_inode) {
  967. new_inode->i_nlink--;
  968. new_inode->i_ctime = CURRENT_TIME;
  969. }
  970. old_dir->i_ctime = old_dir->i_mtime = CURRENT_TIME;
  971. old_dir->u.ext3_i.i_flags &= ~EXT3_INDEX_FL;
  972. if (dir_bh) {
  973. BUFFER_TRACE(dir_bh, "get_write_access");
  974. ext3_journal_get_write_access(handle, dir_bh);
  975. PARENT_INO(dir_bh->b_data) = le32_to_cpu(new_dir->i_ino);
  976. BUFFER_TRACE(dir_bh, "call ext3_journal_dirty_metadata");
  977. ext3_journal_dirty_metadata(handle, dir_bh);
  978. old_dir->i_nlink--;
  979. if (new_inode) {
  980. new_inode->i_nlink--;
  981. } else {
  982. new_dir->i_nlink++;
  983. new_dir->u.ext3_i.i_flags &= ~EXT3_INDEX_FL;
  984. ext3_mark_inode_dirty(handle, new_dir);
  985. }
  986. }
  987. ext3_mark_inode_dirty(handle, old_dir);
  988. if (new_inode) {
  989. ext3_mark_inode_dirty(handle, new_inode);
  990. if (!new_inode->i_nlink)
  991. ext3_orphan_add(handle, new_inode);
  992. }
  993. retval = 0;
  994. end_rename:
  995. brelse (dir_bh);
  996. brelse (old_bh);
  997. brelse (new_bh);
  998. ext3_journal_stop(handle, old_dir);
  999. return retval;
  1000. }
  1001. /*
  1002.  * directories can handle most operations...
  1003.  */
  1004. struct inode_operations ext3_dir_inode_operations = {
  1005. create: ext3_create, /* BKL held */
  1006. lookup: ext3_lookup, /* BKL held */
  1007. link: ext3_link, /* BKL held */
  1008. unlink: ext3_unlink, /* BKL held */
  1009. symlink: ext3_symlink, /* BKL held */
  1010. mkdir: ext3_mkdir, /* BKL held */
  1011. rmdir: ext3_rmdir, /* BKL held */
  1012. mknod: ext3_mknod, /* BKL held */
  1013. rename: ext3_rename, /* BKL held */
  1014. };