Lines Matching refs:dip

608 static int dirent_check_reclen(struct gfs2_inode *dip,  in dirent_check_reclen()  argument
615 gfs2_consist_inode(dip); in dirent_check_reclen()
624 gfs2_consist_inode(dip); in dirent_check_reclen()
637 static int dirent_next(struct gfs2_inode *dip, struct buffer_head *bh, in dirent_next() argument
644 ret = dirent_check_reclen(dip, cur, bh_end); in dirent_next()
649 ret = dirent_check_reclen(dip, tmp, bh_end); in dirent_next()
655 gfs2_consist_inode(dip); in dirent_next()
672 static void dirent_del(struct gfs2_inode *dip, struct buffer_head *bh, in dirent_del() argument
678 gfs2_consist_inode(dip); in dirent_del()
682 gfs2_trans_add_meta(dip->i_gl, bh); in dirent_del()
700 gfs2_consist_inode(dip); in dirent_del()
702 gfs2_consist_inode(dip); in dirent_del()
759 static int get_leaf(struct gfs2_inode *dip, u64 leaf_no, in get_leaf() argument
764 error = gfs2_meta_read(dip->i_gl, leaf_no, DIO_WAIT, 0, bhp); in get_leaf()
765 if (!error && gfs2_metatype_check(GFS2_SB(&dip->i_inode), *bhp, GFS2_METATYPE_LF)) { in get_leaf()
782 static int get_leaf_nr(struct gfs2_inode *dip, u32 index, u64 *leaf_out) in get_leaf_nr() argument
787 hash = gfs2_dir_get_hash_table(dip); in get_leaf_nr()
796 static int get_first_leaf(struct gfs2_inode *dip, u32 index, in get_first_leaf() argument
802 error = get_leaf_nr(dip, index, &leaf_no); in get_first_leaf()
804 error = get_leaf(dip, leaf_no, bh_out); in get_first_leaf()
910 struct gfs2_inode *dip = GFS2_I(inode); in dir_make_exhash() local
921 error = gfs2_meta_inode_buffer(dip, &dibh); in dir_make_exhash()
932 gfs2_assert(sdp, dip->i_entries < BIT(16)); in dir_make_exhash()
933 leaf->lf_entries = cpu_to_be16(dip->i_entries); in dir_make_exhash()
946 dent = gfs2_dirent_scan(&dip->i_inode, bh->b_data, bh->b_size, in dir_make_exhash()
971 gfs2_trans_add_meta(dip->i_gl, dibh); in dir_make_exhash()
980 gfs2_add_inode_blocks(&dip->i_inode, 1); in dir_make_exhash()
981 dip->i_diskflags |= GFS2_DIF_EXHASH; in dir_make_exhash()
982 dip->i_depth = ilog2(sdp->sd_hash_ptrs); in dir_make_exhash()
984 gfs2_dinode_out(dip, dibh->b_data); in dir_make_exhash()
1001 struct gfs2_inode *dip = GFS2_I(inode); in dir_split_leaf() local
1012 index = name->hash >> (32 - dip->i_depth); in dir_split_leaf()
1013 error = get_leaf_nr(dip, index, &leaf_no); in dir_split_leaf()
1018 error = get_leaf(dip, leaf_no, &obh); in dir_split_leaf()
1023 if (dip->i_depth == be16_to_cpu(oleaf->lf_depth)) { in dir_split_leaf()
1028 gfs2_trans_add_meta(dip->i_gl, obh); in dir_split_leaf()
1038 len = BIT(dip->i_depth - be16_to_cpu(oleaf->lf_depth)); in dir_split_leaf()
1042 dip->i_depth, be16_to_cpu(oleaf->lf_depth), index); in dir_split_leaf()
1043 gfs2_consist_inode(dip); in dir_split_leaf()
1063 gfs2_dir_hash_inval(dip); in dir_split_leaf()
1065 error = gfs2_dir_write_data(dip, (char *)lp, start * sizeof(u64), in dir_split_leaf()
1076 divider = (start + half_len) << (32 - dip->i_depth); in dir_split_leaf()
1083 if (dirent_next(dip, obh, &next)) in dir_split_leaf()
1103 dirent_del(dip, obh, prev, dent); in dir_split_leaf()
1106 gfs2_consist_inode(dip); in dir_split_leaf()
1119 error = gfs2_meta_inode_buffer(dip, &dibh); in dir_split_leaf()
1120 if (!gfs2_assert_withdraw(GFS2_SB(&dip->i_inode), !error)) { in dir_split_leaf()
1121 gfs2_trans_add_meta(dip->i_gl, dibh); in dir_split_leaf()
1122 gfs2_add_inode_blocks(&dip->i_inode, 1); in dir_split_leaf()
1123 gfs2_dinode_out(dip, dibh->b_data); in dir_split_leaf()
1148 static int dir_double_exhash(struct gfs2_inode *dip) in dir_double_exhash() argument
1158 hsize = BIT(dip->i_depth); in dir_double_exhash()
1161 hc = gfs2_dir_get_hash_table(dip); in dir_double_exhash()
1173 error = gfs2_meta_inode_buffer(dip, &dibh); in dir_double_exhash()
1183 error = gfs2_dir_write_data(dip, (char *)hc2, 0, hsize_bytes * 2); in dir_double_exhash()
1187 gfs2_dir_hash_inval(dip); in dir_double_exhash()
1188 dip->i_hash_cache = hc2; in dir_double_exhash()
1189 dip->i_depth++; in dir_double_exhash()
1190 gfs2_dinode_out(dip, dibh->b_data); in dir_double_exhash()
1196 gfs2_dir_write_data(dip, (char *)hc, 0, hsize_bytes); in dir_double_exhash()
1197 i_size_write(&dip->i_inode, hsize_bytes); in dir_double_exhash()
1198 gfs2_dinode_out(dip, dibh->b_data); in dir_double_exhash()
1264 static int do_filldir_main(struct gfs2_inode *dip, struct dir_context *ctx, in do_filldir_main() argument
1532 struct gfs2_inode *dip = GFS2_I(inode); in dir_e_read() local
1540 hsize = BIT(dip->i_depth); in dir_e_read()
1542 index = hash >> (32 - dip->i_depth); in dir_e_read()
1544 if (dip->i_hash_cache == NULL) in dir_e_read()
1546 lp = gfs2_dir_get_hash_table(dip); in dir_e_read()
1559 len = BIT(dip->i_depth - depth); in dir_e_read()
1571 struct gfs2_inode *dip = GFS2_I(inode); in gfs2_dir_read() local
1579 if (!dip->i_entries) in gfs2_dir_read()
1582 if (dip->i_diskflags & GFS2_DIF_EXHASH) in gfs2_dir_read()
1585 if (!gfs2_is_stuffed(dip)) { in gfs2_dir_read()
1586 gfs2_consist_inode(dip); in gfs2_dir_read()
1590 error = gfs2_meta_inode_buffer(dip, &dibh); in gfs2_dir_read()
1606 if (dip->i_entries != g.offset) { in gfs2_dir_read()
1609 (unsigned long long)dip->i_no_addr, in gfs2_dir_read()
1610 dip->i_entries, in gfs2_dir_read()
1612 gfs2_consist_inode(dip); in gfs2_dir_read()
1616 gfs2_set_cookies(sdp, dibh, 0, darr, dip->i_entries); in gfs2_dir_read()
1617 error = do_filldir_main(dip, ctx, darr, in gfs2_dir_read()
1618 dip->i_entries, 0, &copied); in gfs2_dir_read()
1875 int gfs2_dir_del(struct gfs2_inode *dip, const struct dentry *dentry) in gfs2_dir_del() argument
1884 dent = gfs2_dirent_search(&dip->i_inode, name, gfs2_dirent_prev, &bh); in gfs2_dir_del()
1886 gfs2_consist_inode(dip); in gfs2_dir_del()
1890 gfs2_consist_inode(dip); in gfs2_dir_del()
1899 dirent_del(dip, bh, prev, dent); in gfs2_dir_del()
1900 tv = inode_set_ctime_current(&dip->i_inode); in gfs2_dir_del()
1901 if (dip->i_diskflags & GFS2_DIF_EXHASH) { in gfs2_dir_del()
1905 gfs2_consist_inode(dip); in gfs2_dir_del()
1912 if (!dip->i_entries) in gfs2_dir_del()
1913 gfs2_consist_inode(dip); in gfs2_dir_del()
1914 dip->i_entries--; in gfs2_dir_del()
1915 inode_set_mtime_to_ts(&dip->i_inode, tv); in gfs2_dir_del()
1917 drop_nlink(&dip->i_inode); in gfs2_dir_del()
1918 mark_inode_dirty(&dip->i_inode); in gfs2_dir_del()
1937 int gfs2_dir_mvino(struct gfs2_inode *dip, const struct qstr *filename, in gfs2_dir_mvino() argument
1943 dent = gfs2_dirent_search(&dip->i_inode, filename, gfs2_dirent_find, &bh); in gfs2_dir_mvino()
1945 gfs2_consist_inode(dip); in gfs2_dir_mvino()
1951 gfs2_trans_add_meta(dip->i_gl, bh); in gfs2_dir_mvino()
1956 inode_set_mtime_to_ts(&dip->i_inode, inode_set_ctime_current(&dip->i_inode)); in gfs2_dir_mvino()
1957 mark_inode_dirty_sync(&dip->i_inode); in gfs2_dir_mvino()
1973 static int leaf_dealloc(struct gfs2_inode *dip, u32 index, u32 len, in leaf_dealloc() argument
1977 struct gfs2_sbd *sdp = GFS2_SB(&dip->i_inode); in leaf_dealloc()
1999 error = gfs2_quota_hold(dip, NO_UID_QUOTA_CHANGE, NO_GID_QUOTA_CHANGE); in leaf_dealloc()
2008 error = get_leaf(dip, blk, &bh); in leaf_dealloc()
2017 gfs2_rlist_add(dip, &rlist, blk); in leaf_dealloc()
2046 error = get_leaf(dip, blk, &bh); in leaf_dealloc()
2056 gfs2_free_meta(dip, rgd, blk, 1); in leaf_dealloc()
2057 gfs2_add_inode_blocks(&dip->i_inode, -1); in leaf_dealloc()
2060 error = gfs2_dir_write_data(dip, ht, index * sizeof(u64), size); in leaf_dealloc()
2067 error = gfs2_meta_inode_buffer(dip, &dibh); in leaf_dealloc()
2071 gfs2_trans_add_meta(dip->i_gl, dibh); in leaf_dealloc()
2075 dip->i_inode.i_mode = S_IFREG; in leaf_dealloc()
2076 gfs2_dinode_out(dip, dibh->b_data); in leaf_dealloc()
2085 gfs2_quota_unhold(dip); in leaf_dealloc()
2101 int gfs2_dir_exhash_dealloc(struct gfs2_inode *dip) in gfs2_dir_exhash_dealloc() argument
2111 hsize = BIT(dip->i_depth); in gfs2_dir_exhash_dealloc()
2113 lp = gfs2_dir_get_hash_table(dip); in gfs2_dir_exhash_dealloc()
2120 error = get_leaf(dip, leaf_no, &bh); in gfs2_dir_exhash_dealloc()
2124 len = BIT(dip->i_depth - be16_to_cpu(leaf->lf_depth)); in gfs2_dir_exhash_dealloc()
2128 error = leaf_dealloc(dip, index, len, leaf_no, bh, in gfs2_dir_exhash_dealloc()
2139 gfs2_consist_inode(dip); in gfs2_dir_exhash_dealloc()