Lines Matching refs:dip
582 static int dirent_check_reclen(struct gfs2_inode *dip, in dirent_check_reclen() argument
596 gfs2_consist_inode(dip); in dirent_check_reclen()
609 static int dirent_next(struct gfs2_inode *dip, struct buffer_head *bh, in dirent_next() argument
616 ret = dirent_check_reclen(dip, cur, bh_end); in dirent_next()
621 ret = dirent_check_reclen(dip, tmp, bh_end); in dirent_next()
627 gfs2_consist_inode(dip); in dirent_next()
644 static void dirent_del(struct gfs2_inode *dip, struct buffer_head *bh, in dirent_del() argument
650 gfs2_consist_inode(dip); in dirent_del()
654 gfs2_trans_add_meta(dip->i_gl, bh); in dirent_del()
672 gfs2_consist_inode(dip); in dirent_del()
674 gfs2_consist_inode(dip); in dirent_del()
716 static int get_leaf(struct gfs2_inode *dip, u64 leaf_no, in get_leaf() argument
721 error = gfs2_meta_read(dip->i_gl, leaf_no, DIO_WAIT, bhp); in get_leaf()
722 if (!error && gfs2_metatype_check(GFS2_SB(&dip->i_inode), *bhp, GFS2_METATYPE_LF)) { in get_leaf()
739 static int get_leaf_nr(struct gfs2_inode *dip, u32 index, in get_leaf_nr() argument
744 hash = gfs2_dir_get_hash_table(dip); in get_leaf_nr()
751 static int get_first_leaf(struct gfs2_inode *dip, u32 index, in get_first_leaf() argument
757 error = get_leaf_nr(dip, index, &leaf_no); in get_first_leaf()
759 error = get_leaf(dip, leaf_no, bh_out); in get_first_leaf()
866 struct gfs2_inode *dip = GFS2_I(inode); in dir_make_exhash() local
878 error = gfs2_meta_inode_buffer(dip, &dibh); in dir_make_exhash()
889 gfs2_assert(sdp, dip->i_entries < (1 << 16)); in dir_make_exhash()
890 leaf->lf_entries = cpu_to_be16(dip->i_entries); in dir_make_exhash()
903 dent = gfs2_dirent_scan(&dip->i_inode, bh->b_data, bh->b_size, in dir_make_exhash()
928 gfs2_trans_add_meta(dip->i_gl, dibh); in dir_make_exhash()
937 gfs2_add_inode_blocks(&dip->i_inode, 1); in dir_make_exhash()
938 dip->i_diskflags |= GFS2_DIF_EXHASH; in dir_make_exhash()
941 dip->i_depth = y; in dir_make_exhash()
943 gfs2_dinode_out(dip, dibh->b_data); in dir_make_exhash()
961 struct gfs2_inode *dip = GFS2_I(inode); in dir_split_leaf() local
972 index = name->hash >> (32 - dip->i_depth); in dir_split_leaf()
973 error = get_leaf_nr(dip, index, &leaf_no); in dir_split_leaf()
978 error = get_leaf(dip, leaf_no, &obh); in dir_split_leaf()
983 if (dip->i_depth == be16_to_cpu(oleaf->lf_depth)) { in dir_split_leaf()
988 gfs2_trans_add_meta(dip->i_gl, obh); in dir_split_leaf()
998 len = 1 << (dip->i_depth - be16_to_cpu(oleaf->lf_depth)); in dir_split_leaf()
1002 dip->i_depth, be16_to_cpu(oleaf->lf_depth), index); in dir_split_leaf()
1003 gfs2_consist_inode(dip); in dir_split_leaf()
1023 gfs2_dir_hash_inval(dip); in dir_split_leaf()
1025 error = gfs2_dir_write_data(dip, (char *)lp, start * sizeof(u64), in dir_split_leaf()
1036 divider = (start + half_len) << (32 - dip->i_depth); in dir_split_leaf()
1043 if (dirent_next(dip, obh, &next)) in dir_split_leaf()
1062 dirent_del(dip, obh, prev, dent); in dir_split_leaf()
1065 gfs2_consist_inode(dip); in dir_split_leaf()
1080 error = gfs2_meta_inode_buffer(dip, &dibh); in dir_split_leaf()
1081 if (!gfs2_assert_withdraw(GFS2_SB(&dip->i_inode), !error)) { in dir_split_leaf()
1082 gfs2_trans_add_meta(dip->i_gl, dibh); in dir_split_leaf()
1083 gfs2_add_inode_blocks(&dip->i_inode, 1); in dir_split_leaf()
1084 gfs2_dinode_out(dip, dibh->b_data); in dir_split_leaf()
1109 static int dir_double_exhash(struct gfs2_inode *dip) in dir_double_exhash() argument
1119 hsize = 1 << dip->i_depth; in dir_double_exhash()
1122 hc = gfs2_dir_get_hash_table(dip); in dir_double_exhash()
1134 error = gfs2_meta_inode_buffer(dip, &dibh); in dir_double_exhash()
1144 error = gfs2_dir_write_data(dip, (char *)hc2, 0, hsize_bytes * 2); in dir_double_exhash()
1148 gfs2_dir_hash_inval(dip); in dir_double_exhash()
1149 dip->i_hash_cache = hc2; in dir_double_exhash()
1150 dip->i_depth++; in dir_double_exhash()
1151 gfs2_dinode_out(dip, dibh->b_data); in dir_double_exhash()
1157 gfs2_dir_write_data(dip, (char *)hc, 0, hsize_bytes); in dir_double_exhash()
1158 i_size_write(&dip->i_inode, hsize_bytes); in dir_double_exhash()
1159 gfs2_dinode_out(dip, dibh->b_data); in dir_double_exhash()
1224 static int do_filldir_main(struct gfs2_inode *dip, struct dir_context *ctx, in do_filldir_main() argument
1439 struct gfs2_inode *dip = GFS2_I(inode); in dir_e_read() local
1447 hsize = 1 << dip->i_depth; in dir_e_read()
1449 index = hash >> (32 - dip->i_depth); in dir_e_read()
1451 if (dip->i_hash_cache == NULL) in dir_e_read()
1453 lp = gfs2_dir_get_hash_table(dip); in dir_e_read()
1466 len = 1 << (dip->i_depth - depth); in dir_e_read()
1478 struct gfs2_inode *dip = GFS2_I(inode); in gfs2_dir_read() local
1486 if (!dip->i_entries) in gfs2_dir_read()
1489 if (dip->i_diskflags & GFS2_DIF_EXHASH) in gfs2_dir_read()
1492 if (!gfs2_is_stuffed(dip)) { in gfs2_dir_read()
1493 gfs2_consist_inode(dip); in gfs2_dir_read()
1497 error = gfs2_meta_inode_buffer(dip, &dibh); in gfs2_dir_read()
1513 if (dip->i_entries != g.offset) { in gfs2_dir_read()
1516 (unsigned long long)dip->i_no_addr, in gfs2_dir_read()
1517 dip->i_entries, in gfs2_dir_read()
1522 error = do_filldir_main(dip, ctx, darr, in gfs2_dir_read()
1523 dip->i_entries, &copied); in gfs2_dir_read()
1772 int gfs2_dir_del(struct gfs2_inode *dip, const struct dentry *dentry) in gfs2_dir_del() argument
1781 dent = gfs2_dirent_search(&dip->i_inode, name, gfs2_dirent_prev, &bh); in gfs2_dir_del()
1783 gfs2_consist_inode(dip); in gfs2_dir_del()
1787 gfs2_consist_inode(dip); in gfs2_dir_del()
1796 dirent_del(dip, bh, prev, dent); in gfs2_dir_del()
1797 if (dip->i_diskflags & GFS2_DIF_EXHASH) { in gfs2_dir_del()
1801 gfs2_consist_inode(dip); in gfs2_dir_del()
1808 if (!dip->i_entries) in gfs2_dir_del()
1809 gfs2_consist_inode(dip); in gfs2_dir_del()
1810 dip->i_entries--; in gfs2_dir_del()
1811 dip->i_inode.i_mtime = dip->i_inode.i_ctime = tv; in gfs2_dir_del()
1813 drop_nlink(&dip->i_inode); in gfs2_dir_del()
1814 mark_inode_dirty(&dip->i_inode); in gfs2_dir_del()
1832 int gfs2_dir_mvino(struct gfs2_inode *dip, const struct qstr *filename, in gfs2_dir_mvino() argument
1839 dent = gfs2_dirent_search(&dip->i_inode, filename, gfs2_dirent_find, &bh); in gfs2_dir_mvino()
1841 gfs2_consist_inode(dip); in gfs2_dir_mvino()
1847 gfs2_trans_add_meta(dip->i_gl, bh); in gfs2_dir_mvino()
1851 if (dip->i_diskflags & GFS2_DIF_EXHASH) { in gfs2_dir_mvino()
1853 error = gfs2_meta_inode_buffer(dip, &bh); in gfs2_dir_mvino()
1856 gfs2_trans_add_meta(dip->i_gl, bh); in gfs2_dir_mvino()
1859 dip->i_inode.i_mtime = dip->i_inode.i_ctime = CURRENT_TIME; in gfs2_dir_mvino()
1860 gfs2_dinode_out(dip, bh->b_data); in gfs2_dir_mvino()
1877 static int leaf_dealloc(struct gfs2_inode *dip, u32 index, u32 len, in leaf_dealloc() argument
1881 struct gfs2_sbd *sdp = GFS2_SB(&dip->i_inode); in leaf_dealloc()
1904 error = gfs2_quota_hold(dip, NO_UID_QUOTA_CHANGE, NO_GID_QUOTA_CHANGE); in leaf_dealloc()
1913 error = get_leaf(dip, blk, &bh); in leaf_dealloc()
1922 gfs2_rlist_add(dip, &rlist, blk); in leaf_dealloc()
1948 error = get_leaf(dip, blk, &bh); in leaf_dealloc()
1957 gfs2_free_meta(dip, blk, 1); in leaf_dealloc()
1958 gfs2_add_inode_blocks(&dip->i_inode, -1); in leaf_dealloc()
1961 error = gfs2_dir_write_data(dip, ht, index * sizeof(u64), size); in leaf_dealloc()
1968 error = gfs2_meta_inode_buffer(dip, &dibh); in leaf_dealloc()
1972 gfs2_trans_add_meta(dip->i_gl, dibh); in leaf_dealloc()
1976 dip->i_inode.i_mode = S_IFREG; in leaf_dealloc()
1977 gfs2_dinode_out(dip, dibh->b_data); in leaf_dealloc()
1986 gfs2_quota_unhold(dip); in leaf_dealloc()
2002 int gfs2_dir_exhash_dealloc(struct gfs2_inode *dip) in gfs2_dir_exhash_dealloc() argument
2012 hsize = 1 << dip->i_depth; in gfs2_dir_exhash_dealloc()
2014 lp = gfs2_dir_get_hash_table(dip); in gfs2_dir_exhash_dealloc()
2021 error = get_leaf(dip, leaf_no, &bh); in gfs2_dir_exhash_dealloc()
2025 len = 1 << (dip->i_depth - be16_to_cpu(leaf->lf_depth)); in gfs2_dir_exhash_dealloc()
2029 error = leaf_dealloc(dip, index, len, leaf_no, bh, in gfs2_dir_exhash_dealloc()
2040 gfs2_consist_inode(dip); in gfs2_dir_exhash_dealloc()