Lines Matching refs:dir

143 static unsigned dx_root_limit (struct inode *dir, unsigned infosize);
144 static unsigned dx_node_limit (struct inode *dir);
146 struct inode *dir,
158 static int ext3_htree_next_block(struct inode *dir, __u32 hash,
162 static struct buffer_head * ext3_dx_find_entry(struct inode *dir,
223 static inline unsigned dx_root_limit (struct inode *dir, unsigned infosize) in dx_root_limit() argument
225 unsigned entry_space = dir->i_sb->s_blocksize - EXT3_DIR_REC_LEN(1) - in dx_root_limit()
230 static inline unsigned dx_node_limit (struct inode *dir) in dx_node_limit() argument
232 unsigned entry_space = dir->i_sb->s_blocksize - EXT3_DIR_REC_LEN(0); in dx_node_limit()
288 struct stats dx_show_entries(struct dx_hash_info *hinfo, struct inode *dir, in dx_show_entries() argument
291 unsigned blocksize = dir->i_sb->s_blocksize; in dx_show_entries()
303 if (!(bh = ext3_bread (NULL,dir, block, 0,&err))) continue; in dx_show_entries()
305 dx_show_entries(hinfo, dir, ((struct dx_node *) bh->b_data)->entries, levels - 1): in dx_show_entries()
329 dx_probe(struct qstr *entry, struct inode *dir, in dx_probe() argument
340 if (!(bh = ext3_dir_bread(NULL, dir, 0, 0, err))) { in dx_probe()
348 ext3_warning(dir->i_sb, __func__, in dx_probe()
357 hinfo->hash_version += EXT3_SB(dir->i_sb)->s_hash_unsigned; in dx_probe()
358 hinfo->seed = EXT3_SB(dir->i_sb)->s_hash_seed; in dx_probe()
364 ext3_warning(dir->i_sb, __func__, in dx_probe()
373 ext3_warning(dir->i_sb, __func__, in dx_probe()
384 if (dx_get_limit(entries) != dx_root_limit(dir, in dx_probe()
386 ext3_warning(dir->i_sb, __func__, in dx_probe()
398 ext3_warning(dir->i_sb, __func__, in dx_probe()
439 if (!(bh = ext3_dir_bread(NULL, dir, dx_get_block(at), 0, err))) { in dx_probe()
444 if (dx_get_limit(entries) != dx_node_limit (dir)) { in dx_probe()
445 ext3_warning(dir->i_sb, __func__, in dx_probe()
461 ext3_warning(dir->i_sb, __func__, in dx_probe()
463 "recommended.", dir->i_ino); in dx_probe()
494 static int ext3_htree_next_block(struct inode *dir, __u32 hash, in ext3_htree_next_block() argument
540 if (!(bh = ext3_dir_bread(NULL, dir, dx_get_block(p->at), in ext3_htree_next_block()
558 struct inode *dir, int block, in htree_dirblock_to_tree() argument
568 if (!(bh = ext3_dir_bread(NULL, dir, block, 0, &err))) in htree_dirblock_to_tree()
573 dir->i_sb->s_blocksize - in htree_dirblock_to_tree()
576 if (!ext3_check_dir_entry("htree_dirblock_to_tree", dir, de, bh, in htree_dirblock_to_tree()
577 (block<<EXT3_BLOCK_SIZE_BITS(dir->i_sb)) in htree_dirblock_to_tree()
615 struct inode *dir; in ext3_htree_fill_tree() local
623 dir = file_inode(dir_file); in ext3_htree_fill_tree()
624 if (!(EXT3_I(dir)->i_flags & EXT3_INDEX_FL)) { in ext3_htree_fill_tree()
625 hinfo.hash_version = EXT3_SB(dir->i_sb)->s_def_hash_version; in ext3_htree_fill_tree()
628 EXT3_SB(dir->i_sb)->s_hash_unsigned; in ext3_htree_fill_tree()
629 hinfo.seed = EXT3_SB(dir->i_sb)->s_hash_seed; in ext3_htree_fill_tree()
630 count = htree_dirblock_to_tree(dir_file, dir, 0, &hinfo, in ext3_htree_fill_tree()
658 ret = htree_dirblock_to_tree(dir_file, dir, block, &hinfo, in ext3_htree_fill_tree()
666 ret = ext3_htree_next_block(dir, HASH_NB_ALWAYS, in ext3_htree_fill_tree()
794 struct inode *dir, in search_dirblock() argument
806 dlimit = bh->b_data + dir->i_sb->s_blocksize; in search_dirblock()
815 dir, de, bh, offset)) in search_dirblock()
842 static struct buffer_head *ext3_find_entry(struct inode *dir, in ext3_find_entry() argument
860 sb = dir->i_sb; in ext3_find_entry()
874 if (is_dx(dir)) { in ext3_find_entry()
875 bh = ext3_dx_find_entry(dir, entry, res_dir, &err); in ext3_find_entry()
885 nblocks = dir->i_size >> EXT3_BLOCK_SIZE_BITS(sb); in ext3_find_entry()
886 start = EXT3_I(dir)->i_dir_start_lookup; in ext3_find_entry()
910 bh = ext3_getblk(NULL, dir, b++, 0, &err); in ext3_find_entry()
926 "offset %lu", dir->i_ino, block); in ext3_find_entry()
930 i = search_dirblock(bh, dir, entry, in ext3_find_entry()
933 EXT3_I(dir)->i_dir_start_lookup = block; in ext3_find_entry()
951 nblocks = dir->i_size >> EXT3_BLOCK_SIZE_BITS(sb); in ext3_find_entry()
964 static struct buffer_head * ext3_dx_find_entry(struct inode *dir, in ext3_dx_find_entry() argument
968 struct super_block *sb = dir->i_sb; in ext3_dx_find_entry()
975 if (!(frame = dx_probe(entry, dir, &hinfo, frames, err))) in ext3_dx_find_entry()
979 if (!(bh = ext3_dir_bread (NULL, dir, block, 0, err))) in ext3_dx_find_entry()
982 retval = search_dirblock(bh, dir, entry, in ext3_dx_find_entry()
996 retval = ext3_htree_next_block(dir, hinfo.hash, frame, in ext3_dx_find_entry()
1001 dir->i_ino); in ext3_dx_find_entry()
1014 static struct dentry *ext3_lookup(struct inode * dir, struct dentry *dentry, unsigned int flags) in ext3_lookup() argument
1023 bh = ext3_find_entry(dir, &dentry->d_name, &de); in ext3_lookup()
1028 if (!ext3_valid_inum(dir->i_sb, ino)) { in ext3_lookup()
1029 ext3_error(dir->i_sb, "ext3_lookup", in ext3_lookup()
1033 inode = ext3_iget(dir->i_sb, ino); in ext3_lookup()
1035 ext3_error(dir->i_sb, __func__, in ext3_lookup()
1138 static struct ext3_dir_entry_2 *do_split(handle_t *handle, struct inode *dir, in do_split() argument
1142 unsigned blocksize = dir->i_sb->s_blocksize; in do_split()
1153 bh2 = ext3_append (handle, dir, &newblock, &err); in do_split()
1224 ext3_std_error(dir->i_sb, err); in do_split()
1246 struct inode *dir = d_inode(dentry->d_parent); in add_dirent_to_buf() local
1257 top = bh->b_data + dir->i_sb->s_blocksize - reclen; in add_dirent_to_buf()
1259 if (!ext3_check_dir_entry("ext3_add_entry", dir, de, in add_dirent_to_buf()
1281 ext3_std_error(dir->i_sb, err); in add_dirent_to_buf()
1298 ext3_set_de_type(dir->i_sb, de, inode->i_mode); in add_dirent_to_buf()
1314 dir->i_mtime = dir->i_ctime = CURRENT_TIME_SEC; in add_dirent_to_buf()
1315 ext3_update_dx_flag(dir); in add_dirent_to_buf()
1316 dir->i_version++; in add_dirent_to_buf()
1317 ext3_mark_inode_dirty(handle, dir); in add_dirent_to_buf()
1321 ext3_std_error(dir->i_sb, err); in add_dirent_to_buf()
1333 struct inode *dir = d_inode(dentry->d_parent); in make_indexed_dir() local
1349 blocksize = dir->i_sb->s_blocksize; in make_indexed_dir()
1350 dxtrace(printk(KERN_DEBUG "Creating index: inode %lu\n", dir->i_ino)); in make_indexed_dir()
1353 ext3_std_error(dir->i_sb, retval); in make_indexed_dir()
1364 ext3_error(dir->i_sb, __func__, in make_indexed_dir()
1366 dir->i_ino); in make_indexed_dir()
1372 bh2 = ext3_append (handle, dir, &block, &retval); in make_indexed_dir()
1377 EXT3_I(dir)->i_flags |= EXT3_INDEX_FL; in make_indexed_dir()
1391 root->info.hash_version = EXT3_SB(dir->i_sb)->s_def_hash_version; in make_indexed_dir()
1395 dx_set_limit (entries, dx_root_limit(dir, sizeof(root->info))); in make_indexed_dir()
1400 hinfo.hash_version += EXT3_SB(dir->i_sb)->s_hash_unsigned; in make_indexed_dir()
1401 hinfo.seed = EXT3_SB(dir->i_sb)->s_hash_seed; in make_indexed_dir()
1414 de = do_split(handle,dir, &bh, frame, &hinfo, &retval); in make_indexed_dir()
1416 ext3_mark_inode_dirty(handle, dir); in make_indexed_dir()
1438 struct inode *dir = d_inode(dentry->d_parent); in ext3_add_entry() local
1447 sb = dir->i_sb; in ext3_add_entry()
1451 if (is_dx(dir)) { in ext3_add_entry()
1455 EXT3_I(dir)->i_flags &= ~EXT3_INDEX_FL; in ext3_add_entry()
1457 ext3_mark_inode_dirty(handle, dir); in ext3_add_entry()
1459 blocks = dir->i_size >> sb->s_blocksize_bits; in ext3_add_entry()
1461 if (!(bh = ext3_dir_bread(handle, dir, block, 0, &retval))) in ext3_add_entry()
1473 bh = ext3_append(handle, dir, &block, &retval); in ext3_add_entry()
1492 struct inode *dir = d_inode(dentry->d_parent); in ext3_dx_add_entry() local
1493 struct super_block * sb = dir->i_sb; in ext3_dx_add_entry()
1497 frame = dx_probe(&dentry->d_name, dir, &hinfo, frames, &err); in ext3_dx_add_entry()
1503 if (!(bh = ext3_dir_bread(handle, dir, dx_get_block(frame->at), 0, &err))) in ext3_dx_add_entry()
1536 bh2 = ext3_append (handle, dir, &newblock, &err); in ext3_dx_add_entry()
1562 dx_set_limit (entries2, dx_node_limit(dir)); in ext3_dx_add_entry()
1582 dx_set_limit(entries2, dx_node_limit(dir)); in ext3_dx_add_entry()
1603 de = do_split(handle, dir, &bh, frame, &hinfo, &err); in ext3_dx_add_entry()
1611 ext3_std_error(dir->i_sb, err); in ext3_dx_add_entry()
1624 struct inode * dir, in ext3_delete_entry() argument
1635 if (!ext3_check_dir_entry("ext3_delete_entry", dir, de, bh, i)) in ext3_delete_entry()
1651 dir->i_version++; in ext3_delete_entry()
1656 ext3_std_error(dir->i_sb, err); in ext3_delete_entry()
1692 static int ext3_create (struct inode * dir, struct dentry * dentry, umode_t mode, in ext3_create() argument
1699 dquot_initialize(dir); in ext3_create()
1702 handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS(dir->i_sb) + in ext3_create()
1704 EXT3_MAXQUOTAS_INIT_BLOCKS(dir->i_sb)); in ext3_create()
1708 if (IS_DIRSYNC(dir)) in ext3_create()
1711 inode = ext3_new_inode (handle, dir, &dentry->d_name, mode); in ext3_create()
1720 if (err == -ENOSPC && ext3_should_retry_alloc(dir->i_sb, &retries)) in ext3_create()
1725 static int ext3_mknod (struct inode * dir, struct dentry *dentry, in ext3_mknod() argument
1735 dquot_initialize(dir); in ext3_mknod()
1738 handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS(dir->i_sb) + in ext3_mknod()
1740 EXT3_MAXQUOTAS_INIT_BLOCKS(dir->i_sb)); in ext3_mknod()
1744 if (IS_DIRSYNC(dir)) in ext3_mknod()
1747 inode = ext3_new_inode (handle, dir, &dentry->d_name, mode); in ext3_mknod()
1757 if (err == -ENOSPC && ext3_should_retry_alloc(dir->i_sb, &retries)) in ext3_mknod()
1762 static int ext3_tmpfile(struct inode *dir, struct dentry *dentry, umode_t mode) in ext3_tmpfile() argument
1768 dquot_initialize(dir); in ext3_tmpfile()
1771 handle = ext3_journal_start(dir, EXT3_MAXQUOTAS_INIT_BLOCKS(dir->i_sb) + in ext3_tmpfile()
1777 inode = ext3_new_inode (handle, dir, NULL, mode); in ext3_tmpfile()
1791 if (err == -ENOSPC && ext3_should_retry_alloc(dir->i_sb, &retries)) in ext3_tmpfile()
1800 static int ext3_mkdir(struct inode * dir, struct dentry * dentry, umode_t mode) in ext3_mkdir() argument
1808 if (dir->i_nlink >= EXT3_LINK_MAX) in ext3_mkdir()
1811 dquot_initialize(dir); in ext3_mkdir()
1814 handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS(dir->i_sb) + in ext3_mkdir()
1816 EXT3_MAXQUOTAS_INIT_BLOCKS(dir->i_sb)); in ext3_mkdir()
1820 if (IS_DIRSYNC(dir)) in ext3_mkdir()
1823 inode = ext3_new_inode (handle, dir, &dentry->d_name, S_IFDIR | mode); in ext3_mkdir()
1844 ext3_set_de_type(dir->i_sb, de, S_IFDIR); in ext3_mkdir()
1846 de->inode = cpu_to_le32(dir->i_ino); in ext3_mkdir()
1851 ext3_set_de_type(dir->i_sb, de, S_IFDIR); in ext3_mkdir()
1870 inc_nlink(dir); in ext3_mkdir()
1871 ext3_update_dx_flag(dir); in ext3_mkdir()
1872 err = ext3_mark_inode_dirty(handle, dir); in ext3_mkdir()
1881 if (err == -ENOSPC && ext3_should_retry_alloc(dir->i_sb, &retries)) in ext3_mkdir()
2103 static int ext3_rmdir (struct inode * dir, struct dentry *dentry) in ext3_rmdir() argument
2113 dquot_initialize(dir); in ext3_rmdir()
2116 handle = ext3_journal_start(dir, EXT3_DELETE_TRANS_BLOCKS(dir->i_sb)); in ext3_rmdir()
2121 bh = ext3_find_entry(dir, &dentry->d_name, &de); in ext3_rmdir()
2125 if (IS_DIRSYNC(dir)) in ext3_rmdir()
2138 retval = ext3_delete_entry(handle, dir, de, bh); in ext3_rmdir()
2152 inode->i_ctime = dir->i_ctime = dir->i_mtime = CURRENT_TIME_SEC; in ext3_rmdir()
2154 drop_nlink(dir); in ext3_rmdir()
2155 ext3_update_dx_flag(dir); in ext3_rmdir()
2156 ext3_mark_inode_dirty(handle, dir); in ext3_rmdir()
2164 static int ext3_unlink(struct inode * dir, struct dentry *dentry) in ext3_unlink() argument
2172 trace_ext3_unlink_enter(dir, dentry); in ext3_unlink()
2175 dquot_initialize(dir); in ext3_unlink()
2178 handle = ext3_journal_start(dir, EXT3_DELETE_TRANS_BLOCKS(dir->i_sb)); in ext3_unlink()
2182 if (IS_DIRSYNC(dir)) in ext3_unlink()
2186 bh = ext3_find_entry(dir, &dentry->d_name, &de); in ext3_unlink()
2202 retval = ext3_delete_entry(handle, dir, de, bh); in ext3_unlink()
2205 dir->i_ctime = dir->i_mtime = CURRENT_TIME_SEC; in ext3_unlink()
2206 ext3_update_dx_flag(dir); in ext3_unlink()
2207 ext3_mark_inode_dirty(handle, dir); in ext3_unlink()
2211 inode->i_ctime = dir->i_ctime; in ext3_unlink()
2222 static int ext3_symlink (struct inode * dir, in ext3_symlink() argument
2231 if (l > dir->i_sb->s_blocksize) in ext3_symlink()
2234 dquot_initialize(dir); in ext3_symlink()
2243 credits = 4 + EXT3_MAXQUOTAS_INIT_BLOCKS(dir->i_sb) + in ext3_symlink()
2252 credits = EXT3_DATA_TRANS_BLOCKS(dir->i_sb) + in ext3_symlink()
2254 EXT3_MAXQUOTAS_INIT_BLOCKS(dir->i_sb); in ext3_symlink()
2257 handle = ext3_journal_start(dir, credits); in ext3_symlink()
2261 if (IS_DIRSYNC(dir)) in ext3_symlink()
2264 inode = ext3_new_inode (handle, dir, &dentry->d_name, S_IFLNK|S_IRWXUGO); in ext3_symlink()
2295 handle = ext3_journal_start(dir, in ext3_symlink()
2296 EXT3_DATA_TRANS_BLOCKS(dir->i_sb) + in ext3_symlink()
2318 if (err == -ENOSPC && ext3_should_retry_alloc(dir->i_sb, &retries)) in ext3_symlink()
2328 struct inode * dir, struct dentry *dentry) in ext3_link() argument
2337 dquot_initialize(dir); in ext3_link()
2340 handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS(dir->i_sb) + in ext3_link()
2345 if (IS_DIRSYNC(dir)) in ext3_link()
2366 if (err == -ENOSPC && ext3_should_retry_alloc(dir->i_sb, &retries)) in ext3_link()