Lines Matching refs:dip

587 static int dirent_check_reclen(struct gfs2_inode *dip,  in dirent_check_reclen()  argument
601 gfs2_consist_inode(dip); in dirent_check_reclen()
614 static int dirent_next(struct gfs2_inode *dip, struct buffer_head *bh, in dirent_next() argument
621 ret = dirent_check_reclen(dip, cur, bh_end); in dirent_next()
626 ret = dirent_check_reclen(dip, tmp, bh_end); in dirent_next()
632 gfs2_consist_inode(dip); in dirent_next()
649 static void dirent_del(struct gfs2_inode *dip, struct buffer_head *bh, in dirent_del() argument
655 gfs2_consist_inode(dip); in dirent_del()
659 gfs2_trans_add_meta(dip->i_gl, bh); in dirent_del()
677 gfs2_consist_inode(dip); in dirent_del()
679 gfs2_consist_inode(dip); in dirent_del()
721 static int get_leaf(struct gfs2_inode *dip, u64 leaf_no, in get_leaf() argument
726 error = gfs2_meta_read(dip->i_gl, leaf_no, DIO_WAIT, bhp); in get_leaf()
727 if (!error && gfs2_metatype_check(GFS2_SB(&dip->i_inode), *bhp, GFS2_METATYPE_LF)) { in get_leaf()
744 static int get_leaf_nr(struct gfs2_inode *dip, u32 index, in get_leaf_nr() argument
749 hash = gfs2_dir_get_hash_table(dip); in get_leaf_nr()
756 static int get_first_leaf(struct gfs2_inode *dip, u32 index, in get_first_leaf() argument
762 error = get_leaf_nr(dip, index, &leaf_no); in get_first_leaf()
764 error = get_leaf(dip, leaf_no, bh_out); in get_first_leaf()
871 struct gfs2_inode *dip = GFS2_I(inode); in dir_make_exhash() local
883 error = gfs2_meta_inode_buffer(dip, &dibh); in dir_make_exhash()
894 gfs2_assert(sdp, dip->i_entries < (1 << 16)); in dir_make_exhash()
895 leaf->lf_entries = cpu_to_be16(dip->i_entries); in dir_make_exhash()
908 dent = gfs2_dirent_scan(&dip->i_inode, bh->b_data, bh->b_size, in dir_make_exhash()
933 gfs2_trans_add_meta(dip->i_gl, dibh); in dir_make_exhash()
942 gfs2_add_inode_blocks(&dip->i_inode, 1); in dir_make_exhash()
943 dip->i_diskflags |= GFS2_DIF_EXHASH; in dir_make_exhash()
946 dip->i_depth = y; in dir_make_exhash()
948 gfs2_dinode_out(dip, dibh->b_data); in dir_make_exhash()
966 struct gfs2_inode *dip = GFS2_I(inode); in dir_split_leaf() local
977 index = name->hash >> (32 - dip->i_depth); in dir_split_leaf()
978 error = get_leaf_nr(dip, index, &leaf_no); in dir_split_leaf()
983 error = get_leaf(dip, leaf_no, &obh); in dir_split_leaf()
988 if (dip->i_depth == be16_to_cpu(oleaf->lf_depth)) { in dir_split_leaf()
993 gfs2_trans_add_meta(dip->i_gl, obh); in dir_split_leaf()
1003 len = 1 << (dip->i_depth - be16_to_cpu(oleaf->lf_depth)); in dir_split_leaf()
1007 dip->i_depth, be16_to_cpu(oleaf->lf_depth), index); in dir_split_leaf()
1008 gfs2_consist_inode(dip); in dir_split_leaf()
1028 gfs2_dir_hash_inval(dip); in dir_split_leaf()
1030 error = gfs2_dir_write_data(dip, (char *)lp, start * sizeof(u64), in dir_split_leaf()
1041 divider = (start + half_len) << (32 - dip->i_depth); in dir_split_leaf()
1048 if (dirent_next(dip, obh, &next)) in dir_split_leaf()
1067 dirent_del(dip, obh, prev, dent); in dir_split_leaf()
1070 gfs2_consist_inode(dip); in dir_split_leaf()
1085 error = gfs2_meta_inode_buffer(dip, &dibh); in dir_split_leaf()
1086 if (!gfs2_assert_withdraw(GFS2_SB(&dip->i_inode), !error)) { in dir_split_leaf()
1087 gfs2_trans_add_meta(dip->i_gl, dibh); in dir_split_leaf()
1088 gfs2_add_inode_blocks(&dip->i_inode, 1); in dir_split_leaf()
1089 gfs2_dinode_out(dip, dibh->b_data); in dir_split_leaf()
1114 static int dir_double_exhash(struct gfs2_inode *dip) in dir_double_exhash() argument
1124 hsize = 1 << dip->i_depth; in dir_double_exhash()
1127 hc = gfs2_dir_get_hash_table(dip); in dir_double_exhash()
1139 error = gfs2_meta_inode_buffer(dip, &dibh); in dir_double_exhash()
1149 error = gfs2_dir_write_data(dip, (char *)hc2, 0, hsize_bytes * 2); in dir_double_exhash()
1153 gfs2_dir_hash_inval(dip); in dir_double_exhash()
1154 dip->i_hash_cache = hc2; in dir_double_exhash()
1155 dip->i_depth++; in dir_double_exhash()
1156 gfs2_dinode_out(dip, dibh->b_data); in dir_double_exhash()
1162 gfs2_dir_write_data(dip, (char *)hc, 0, hsize_bytes); in dir_double_exhash()
1163 i_size_write(&dip->i_inode, hsize_bytes); in dir_double_exhash()
1164 gfs2_dinode_out(dip, dibh->b_data); in dir_double_exhash()
1229 static int do_filldir_main(struct gfs2_inode *dip, struct dir_context *ctx, in do_filldir_main() argument
1444 struct gfs2_inode *dip = GFS2_I(inode); in dir_e_read() local
1452 hsize = 1 << dip->i_depth; in dir_e_read()
1454 index = hash >> (32 - dip->i_depth); in dir_e_read()
1456 if (dip->i_hash_cache == NULL) in dir_e_read()
1458 lp = gfs2_dir_get_hash_table(dip); in dir_e_read()
1471 len = 1 << (dip->i_depth - depth); in dir_e_read()
1483 struct gfs2_inode *dip = GFS2_I(inode); in gfs2_dir_read() local
1491 if (!dip->i_entries) in gfs2_dir_read()
1494 if (dip->i_diskflags & GFS2_DIF_EXHASH) in gfs2_dir_read()
1497 if (!gfs2_is_stuffed(dip)) { in gfs2_dir_read()
1498 gfs2_consist_inode(dip); in gfs2_dir_read()
1502 error = gfs2_meta_inode_buffer(dip, &dibh); in gfs2_dir_read()
1518 if (dip->i_entries != g.offset) { in gfs2_dir_read()
1521 (unsigned long long)dip->i_no_addr, in gfs2_dir_read()
1522 dip->i_entries, in gfs2_dir_read()
1527 error = do_filldir_main(dip, ctx, darr, in gfs2_dir_read()
1528 dip->i_entries, &copied); in gfs2_dir_read()
1777 int gfs2_dir_del(struct gfs2_inode *dip, const struct dentry *dentry) in gfs2_dir_del() argument
1786 dent = gfs2_dirent_search(&dip->i_inode, name, gfs2_dirent_prev, &bh); in gfs2_dir_del()
1788 gfs2_consist_inode(dip); in gfs2_dir_del()
1792 gfs2_consist_inode(dip); in gfs2_dir_del()
1801 dirent_del(dip, bh, prev, dent); in gfs2_dir_del()
1802 if (dip->i_diskflags & GFS2_DIF_EXHASH) { in gfs2_dir_del()
1806 gfs2_consist_inode(dip); in gfs2_dir_del()
1813 if (!dip->i_entries) in gfs2_dir_del()
1814 gfs2_consist_inode(dip); in gfs2_dir_del()
1815 dip->i_entries--; in gfs2_dir_del()
1816 dip->i_inode.i_mtime = dip->i_inode.i_ctime = tv; in gfs2_dir_del()
1818 drop_nlink(&dip->i_inode); in gfs2_dir_del()
1819 mark_inode_dirty(&dip->i_inode); in gfs2_dir_del()
1837 int gfs2_dir_mvino(struct gfs2_inode *dip, const struct qstr *filename, in gfs2_dir_mvino() argument
1844 dent = gfs2_dirent_search(&dip->i_inode, filename, gfs2_dirent_find, &bh); in gfs2_dir_mvino()
1846 gfs2_consist_inode(dip); in gfs2_dir_mvino()
1852 gfs2_trans_add_meta(dip->i_gl, bh); in gfs2_dir_mvino()
1856 if (dip->i_diskflags & GFS2_DIF_EXHASH) { in gfs2_dir_mvino()
1858 error = gfs2_meta_inode_buffer(dip, &bh); in gfs2_dir_mvino()
1861 gfs2_trans_add_meta(dip->i_gl, bh); in gfs2_dir_mvino()
1864 dip->i_inode.i_mtime = dip->i_inode.i_ctime = CURRENT_TIME; in gfs2_dir_mvino()
1865 gfs2_dinode_out(dip, bh->b_data); in gfs2_dir_mvino()
1882 static int leaf_dealloc(struct gfs2_inode *dip, u32 index, u32 len, in leaf_dealloc() argument
1886 struct gfs2_sbd *sdp = GFS2_SB(&dip->i_inode); in leaf_dealloc()
1909 error = gfs2_quota_hold(dip, NO_UID_QUOTA_CHANGE, NO_GID_QUOTA_CHANGE); in leaf_dealloc()
1918 error = get_leaf(dip, blk, &bh); in leaf_dealloc()
1927 gfs2_rlist_add(dip, &rlist, blk); in leaf_dealloc()
1953 error = get_leaf(dip, blk, &bh); in leaf_dealloc()
1962 gfs2_free_meta(dip, blk, 1); in leaf_dealloc()
1963 gfs2_add_inode_blocks(&dip->i_inode, -1); in leaf_dealloc()
1966 error = gfs2_dir_write_data(dip, ht, index * sizeof(u64), size); in leaf_dealloc()
1973 error = gfs2_meta_inode_buffer(dip, &dibh); in leaf_dealloc()
1977 gfs2_trans_add_meta(dip->i_gl, dibh); in leaf_dealloc()
1981 dip->i_inode.i_mode = S_IFREG; in leaf_dealloc()
1982 gfs2_dinode_out(dip, dibh->b_data); in leaf_dealloc()
1991 gfs2_quota_unhold(dip); in leaf_dealloc()
2007 int gfs2_dir_exhash_dealloc(struct gfs2_inode *dip) in gfs2_dir_exhash_dealloc() argument
2017 hsize = 1 << dip->i_depth; in gfs2_dir_exhash_dealloc()
2019 lp = gfs2_dir_get_hash_table(dip); in gfs2_dir_exhash_dealloc()
2026 error = get_leaf(dip, leaf_no, &bh); in gfs2_dir_exhash_dealloc()
2030 len = 1 << (dip->i_depth - be16_to_cpu(leaf->lf_depth)); in gfs2_dir_exhash_dealloc()
2034 error = leaf_dealloc(dip, index, len, leaf_no, bh, in gfs2_dir_exhash_dealloc()
2045 gfs2_consist_inode(dip); in gfs2_dir_exhash_dealloc()