Lines Matching defs:inode
43 #include "inode.h"
60 struct inode *dir,
65 static int ocfs2_dir_indexed(struct inode *inode);
71 static int ocfs2_supports_dir_trailer(struct inode *dir)
89 static int ocfs2_new_dir_wants_trailer(struct inode *dir)
119 static int ocfs2_skip_dir_trailer(struct inode *dir,
135 static void ocfs2_init_dir_trailer(struct inode *inode,
140 trailer = ocfs2_trailer_from_bh(bh, inode->i_sb);
144 trailer->db_parent_dinode = cpu_to_le64(OCFS2_I(inode)->ip_blkno);
153 static int ocfs2_dx_dir_link_trailer(struct inode *dir, handle_t *handle,
192 static int ocfs2_dir_indexed(struct inode *inode)
194 if (OCFS2_I(inode)->ip_dyn_features & OCFS2_INDEXED_DIR_FL)
253 static void ocfs2_dx_dir_name_hash(struct inode *dir, const char *name, int len,
296 * bh passed here can be an inode block or a dir data block, depending
297 * on the inode inline data flag.
299 static int ocfs2_check_dir_entry(struct inode *dir,
324 "offset=%lu, inode=%llu, rec_len=%d, name_len=%d\n",
326 offset, (unsigned long long)le64_to_cpu(de->inode), rlen,
338 if (!de->inode)
347 struct inode *dir,
399 struct inode *dir,
463 * because that function doesn't have the inode to test.
465 static int ocfs2_check_dir_trailer(struct inode *dir, struct buffer_head *bh)
504 static int ocfs2_read_dir_block(struct inode *inode, u64 v_block,
510 rc = ocfs2_read_virt_blocks(inode, v_block, 1, &tmp, flags,
518 ocfs2_supports_dir_trailer(inode)) {
519 rc = ocfs2_check_dir_trailer(inode, tmp);
538 * inode. This function does no virtual->physical block translation -
541 static int ocfs2_read_dir_block_direct(struct inode *dir, u64 phys,
598 static int ocfs2_read_dx_root(struct inode *dir, struct ocfs2_dinode *di,
639 static int ocfs2_read_dx_leaf(struct inode *dir, u64 blkno,
659 static int ocfs2_read_dx_leaves(struct inode *dir, u64 start, int num,
673 struct inode *dir,
771 static int ocfs2_dx_dir_lookup_rec(struct inode *inode,
784 ret = ocfs2_find_leaf(INODE_CACHE(inode), el, major_hash,
795 ret = ocfs2_error(inode->i_sb,
797 inode->i_ino,
814 ret = ocfs2_error(inode->i_sb,
816 inode->i_ino,
850 static int ocfs2_dx_dir_lookup(struct inode *inode,
862 ret = ocfs2_dx_dir_lookup_rec(inode, el, name_hash, &cpos, &blkno,
872 blkno += ocfs2_clusters_to_blocks(inode->i_sb, clen - 1);
875 blkno += ocfs2_clusters_to_blocks(inode->i_sb,
885 blkno += ocfs2_dx_dir_hash_idx(OCFS2_SB(inode->i_sb), hinfo);
898 struct inode *dir,
1012 struct inode *dir,
1062 * data block, in the inline-data case it actually points to an inode,
1066 struct inode *dir, struct ocfs2_dir_lookup_result *lookup)
1093 * Update inode number and type of a previously found directory entry.
1095 int ocfs2_update_entry(struct inode *dir, handle_t *handle,
1097 struct inode *new_entry_inode)
1120 de->inode = cpu_to_le64(OCFS2_I(new_entry_inode)->ip_blkno);
1133 static int __ocfs2_delete_entry(handle_t *handle, struct inode *dir,
1165 de->inode = 0;
1182 if (le64_to_cpu(de->inode) == 0)
1237 static int ocfs2_delete_entry_dx(handle_t *handle, struct inode *dir,
1354 struct inode *dir,
1381 struct inode *dir,
1394 struct inode *dir,
1418 if (le64_to_cpu(de->inode) == 0 &&
1462 static int __ocfs2_dx_dir_leaf_insert(struct inode *dir, handle_t *handle,
1485 static void ocfs2_dx_inline_root_insert(struct inode *dir, handle_t *handle,
1493 static int ocfs2_dx_dir_insert(struct inode *dir, handle_t *handle,
1528 static void ocfs2_remove_block_from_free_list(struct inode *dir,
1559 static void ocfs2_recalc_free_list(struct inode *dir, handle_t *handle,
1588 struct inode *dir,
1590 struct inode *inode, u64 blkno,
1701 if (le64_to_cpu(de->inode)) {
1712 de->inode = cpu_to_le64(blkno);
1713 ocfs2_set_de_type(de, inode->i_mode);
1715 de->inode = 0;
1742 static int ocfs2_dir_foreach_blk_id(struct inode *inode,
1753 ret = ocfs2_read_inode_block(inode, &di_bh);
1755 mlog(ML_ERROR, "Unable to read inode block for dir %llu\n",
1756 (unsigned long long)OCFS2_I(inode)->ip_blkno);
1763 while (ctx->pos < i_size_read(inode)) {
1768 if (!inode_eq_iversion(inode, *f_version)) {
1769 for (i = 0; i < i_size_read(inode) && i < offset; ) {
1784 *f_version = inode_query_iversion(inode);
1788 if (!ocfs2_check_dir_entry(inode, de, di_bh, (char *)data->id_data,
1789 i_size_read(inode), ctx->pos)) {
1791 ctx->pos = i_size_read(inode);
1795 if (le64_to_cpu(de->inode)) {
1797 le64_to_cpu(de->inode),
1812 static int ocfs2_dir_foreach_blk_el(struct inode *inode,
1821 struct super_block * sb = inode->i_sb;
1829 while (ctx->pos < i_size_read(inode)) {
1831 if (ocfs2_read_dir_block(inode, blk, &bh, 0)) {
1847 if (!ocfs2_read_dir_block(inode, ++blk, &tmp,
1859 if (!inode_eq_iversion(inode, *f_version)) {
1876 *f_version = inode_query_iversion(inode);
1879 while (ctx->pos < i_size_read(inode)
1882 if (!ocfs2_check_dir_entry(inode, de, bh, bh->b_data,
1889 if (le64_to_cpu(de->inode)) {
1892 le64_to_cpu(de->inode),
1911 static int ocfs2_dir_foreach_blk(struct inode *inode, u64 *f_version,
1915 if (OCFS2_I(inode)->ip_dyn_features & OCFS2_INLINE_DATA_FL)
1916 return ocfs2_dir_foreach_blk_id(inode, f_version, ctx);
1917 return ocfs2_dir_foreach_blk_el(inode, f_version, ctx, persist);
1924 int ocfs2_dir_foreach(struct inode *inode, struct dir_context *ctx)
1926 u64 version = inode_query_iversion(inode);
1927 ocfs2_dir_foreach_blk(inode, &version, ctx, true);
1938 struct inode *inode = file_inode(file);
1941 trace_ocfs2_readdir((unsigned long long)OCFS2_I(inode)->ip_blkno);
1943 error = ocfs2_inode_lock_atime(inode, file->f_path.mnt, &lock_level, 1);
1948 ocfs2_inode_unlock(inode, 1);
1950 error = ocfs2_inode_lock(inode, NULL, 0);
1959 error = ocfs2_dir_foreach_blk(inode, &file->f_version, ctx, false);
1961 ocfs2_inode_unlock(inode, lock_level);
1976 struct inode *inode,
1982 (unsigned long long)OCFS2_I(inode)->ip_blkno);
1984 status = ocfs2_find_entry(name, namelen, inode, lookup);
1988 *blkno = le64_to_cpu(lookup->dl_entry->inode);
2000 int ocfs2_lookup_ino_from_name(struct inode *dir, const char *name,
2019 int ocfs2_check_dir_for_entry(struct inode *dir,
2083 static int ocfs2_empty_dir_dx(struct inode *inode,
2094 ret = ocfs2_read_inode_block(inode, &di_bh);
2101 ret = ocfs2_read_dx_root(inode, di, &dx_root_bh);
2124 int ocfs2_empty_dir(struct inode *inode)
2131 if (ocfs2_dir_indexed(inode)) {
2132 ret = ocfs2_empty_dir_dx(inode, &priv);
2141 ret = ocfs2_dir_foreach(inode, &priv.ctx);
2147 (unsigned long long)OCFS2_I(inode)->ip_blkno);
2162 static struct ocfs2_dir_entry *ocfs2_fill_initial_dirents(struct inode *inode,
2163 struct inode *parent,
2169 de->inode = cpu_to_le64(OCFS2_I(inode)->ip_blkno);
2177 de->inode = cpu_to_le64(OCFS2_I(parent)->ip_blkno);
2192 struct inode *parent,
2193 struct inode *inode,
2201 ret = ocfs2_journal_access_di(handle, INODE_CACHE(inode), di_bh,
2208 ocfs2_fill_initial_dirents(inode, parent, data->id_data, size);
2211 i_size_write(inode, size);
2212 set_nlink(inode, 2);
2213 inode->i_blocks = ocfs2_inode_sector_count(inode);
2215 ret = ocfs2_mark_inode_dirty(handle, inode, di_bh);
2225 struct inode *parent,
2226 struct inode *inode,
2236 if (ocfs2_new_dir_wants_trailer(inode))
2239 status = ocfs2_do_extend_dir(osb->sb, handle, inode, fe_bh,
2246 ocfs2_set_new_buffer_uptodate(INODE_CACHE(inode), new_bh);
2248 status = ocfs2_journal_access_db(handle, INODE_CACHE(inode), new_bh,
2256 de = ocfs2_fill_initial_dirents(inode, parent, new_bh->b_data, size);
2257 if (ocfs2_new_dir_wants_trailer(inode)) {
2268 ocfs2_init_dir_trailer(inode, new_bh, size);
2273 i_size_write(inode, inode->i_sb->s_blocksize);
2274 set_nlink(inode, 2);
2275 inode->i_blocks = ocfs2_inode_sector_count(inode);
2276 status = ocfs2_mark_inode_dirty(handle, inode, fe_bh);
2294 handle_t *handle, struct inode *dir,
2386 handle_t *handle, struct inode *dir,
2438 static int __ocfs2_dx_dir_new_cluster(struct inode *dir,
2478 static int ocfs2_dx_dir_new_cluster(struct inode *dir,
2520 struct inode *parent,
2521 struct inode *inode,
2544 ret = ocfs2_fill_new_dir_el(osb, handle, parent, inode, di_bh,
2551 ret = ocfs2_dx_dir_attach_index(osb, handle, inode, di_bh, leaf_bh,
2561 ocfs2_dx_dir_name_hash(inode, ".", 1, &hinfo);
2564 ocfs2_dx_dir_name_hash(inode, "..", 2, &hinfo);
2575 struct inode *parent,
2576 struct inode *inode,
2584 if (OCFS2_I(inode)->ip_dyn_features & OCFS2_INLINE_DATA_FL)
2585 return ocfs2_fill_new_dir_id(osb, handle, parent, inode, fe_bh);
2588 return ocfs2_fill_new_dir_dx(osb, handle, parent, inode, fe_bh,
2591 return ocfs2_fill_new_dir_el(osb, handle, parent, inode, fe_bh,
2595 static int ocfs2_dx_dir_index_block(struct inode *dir,
2616 if (!namelen || !de->inode)
2644 static void ocfs2_dx_dir_index_root_block(struct inode *dir,
2662 if (!de->name_len || !de->inode)
2687 static int ocfs2_new_dx_should_be_inline(struct inode *dir,
2701 if (de->name_len && de->inode)
2715 * in that case is taken from the inline data portion of the inode block.
2726 struct inode *dir)
2775 static int ocfs2_expand_inline_dir(struct inode *dir, struct buffer_head *di_bh,
2955 * inode should contain the same exact dirents as before and
3094 struct inode *dir,
3153 * block, so we may have to grow the inode by two blocks in that case.
3158 struct inode *dir,
3298 de->inode = 0;
3346 static int ocfs2_find_dir_space_id(struct inode *dir, struct buffer_head *di_bh,
3419 static int ocfs2_find_dir_space_el(struct inode *dir, const char *name,
3641 static void ocfs2_dx_dir_transfer_leaf(struct inode *dir, u32 split_hash,
3698 static int ocfs2_dx_dir_rebalance(struct ocfs2_super *osb, struct inode *dir,
3893 static int ocfs2_find_dir_space_dx(struct ocfs2_super *osb, struct inode *dir,
3966 static int ocfs2_search_dx_free_list(struct inode *dir,
4014 static int ocfs2_expand_inline_dx_root(struct inode *dir,
4145 static int ocfs2_prepare_dx_dir_for_insert(struct inode *dir,
4248 struct inode *dir,
4324 static int ocfs2_dx_dir_remove_index(struct inode *dir,
4332 struct inode *dx_alloc_inode = NULL;
4405 int ocfs2_dx_dir_truncate(struct inode *dir, struct buffer_head *di_bh)