diff options
Diffstat (limited to 'fs/gfs2/dir.c')
-rw-r--r-- | fs/gfs2/dir.c | 66 |
1 files changed, 36 insertions, 30 deletions
diff --git a/fs/gfs2/dir.c b/fs/gfs2/dir.c index 6918a58261e2..b0353884dd7d 100644 --- a/fs/gfs2/dir.c +++ b/fs/gfs2/dir.c | |||
@@ -113,7 +113,7 @@ static int gfs2_dir_get_existing_buffer(struct gfs2_inode *ip, uint64_t block, | |||
113 | error = gfs2_meta_read(ip->i_gl, block, DIO_START | DIO_WAIT, &bh); | 113 | error = gfs2_meta_read(ip->i_gl, block, DIO_START | DIO_WAIT, &bh); |
114 | if (error) | 114 | if (error) |
115 | return error; | 115 | return error; |
116 | if (gfs2_metatype_check(ip->i_sbd, bh, GFS2_METATYPE_JD)) { | 116 | if (gfs2_metatype_check(GFS2_SB(&ip->i_inode), bh, GFS2_METATYPE_JD)) { |
117 | brelse(bh); | 117 | brelse(bh); |
118 | return -EIO; | 118 | return -EIO; |
119 | } | 119 | } |
@@ -158,7 +158,7 @@ static int gfs2_dir_write_stuffed(struct gfs2_inode *ip, const char *buf, | |||
158 | static int gfs2_dir_write_data(struct gfs2_inode *ip, const char *buf, | 158 | static int gfs2_dir_write_data(struct gfs2_inode *ip, const char *buf, |
159 | uint64_t offset, unsigned int size) | 159 | uint64_t offset, unsigned int size) |
160 | { | 160 | { |
161 | struct gfs2_sbd *sdp = ip->i_sbd; | 161 | struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode); |
162 | struct buffer_head *dibh; | 162 | struct buffer_head *dibh; |
163 | uint64_t lblock, dblock; | 163 | uint64_t lblock, dblock; |
164 | uint32_t extlen = 0; | 164 | uint32_t extlen = 0; |
@@ -197,7 +197,7 @@ static int gfs2_dir_write_data(struct gfs2_inode *ip, const char *buf, | |||
197 | 197 | ||
198 | if (!extlen) { | 198 | if (!extlen) { |
199 | new = 1; | 199 | new = 1; |
200 | error = gfs2_extent_map(ip->i_vnode, lblock, &new, | 200 | error = gfs2_extent_map(&ip->i_inode, lblock, &new, |
201 | &dblock, &extlen); | 201 | &dblock, &extlen); |
202 | if (error) | 202 | if (error) |
203 | goto fail; | 203 | goto fail; |
@@ -277,7 +277,7 @@ static int gfs2_dir_read_stuffed(struct gfs2_inode *ip, char *buf, | |||
277 | static int gfs2_dir_read_data(struct gfs2_inode *ip, char *buf, | 277 | static int gfs2_dir_read_data(struct gfs2_inode *ip, char *buf, |
278 | uint64_t offset, unsigned int size) | 278 | uint64_t offset, unsigned int size) |
279 | { | 279 | { |
280 | struct gfs2_sbd *sdp = ip->i_sbd; | 280 | struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode); |
281 | uint64_t lblock, dblock; | 281 | uint64_t lblock, dblock; |
282 | uint32_t extlen = 0; | 282 | uint32_t extlen = 0; |
283 | unsigned int o; | 283 | unsigned int o; |
@@ -314,7 +314,7 @@ static int gfs2_dir_read_data(struct gfs2_inode *ip, char *buf, | |||
314 | 314 | ||
315 | if (!extlen) { | 315 | if (!extlen) { |
316 | new = 0; | 316 | new = 0; |
317 | error = gfs2_extent_map(ip->i_vnode, lblock, &new, | 317 | error = gfs2_extent_map(&ip->i_inode, lblock, &new, |
318 | &dblock, &extlen); | 318 | &dblock, &extlen); |
319 | if (error) | 319 | if (error) |
320 | goto fail; | 320 | goto fail; |
@@ -534,7 +534,7 @@ static struct gfs2_dirent *gfs2_dirent_scan(struct inode *inode, | |||
534 | } | 534 | } |
535 | 535 | ||
536 | consist_inode: | 536 | consist_inode: |
537 | gfs2_consist_inode(inode->u.generic_ip); | 537 | gfs2_consist_inode(GFS2_I(inode)); |
538 | return ERR_PTR(-EIO); | 538 | return ERR_PTR(-EIO); |
539 | } | 539 | } |
540 | 540 | ||
@@ -556,13 +556,13 @@ static int dirent_first(struct gfs2_inode *dip, struct buffer_head *bh, | |||
556 | struct gfs2_meta_header *h = (struct gfs2_meta_header *)bh->b_data; | 556 | struct gfs2_meta_header *h = (struct gfs2_meta_header *)bh->b_data; |
557 | 557 | ||
558 | if (be32_to_cpu(h->mh_type) == GFS2_METATYPE_LF) { | 558 | if (be32_to_cpu(h->mh_type) == GFS2_METATYPE_LF) { |
559 | if (gfs2_meta_check(dip->i_sbd, bh)) | 559 | if (gfs2_meta_check(GFS2_SB(&dip->i_inode), bh)) |
560 | return -EIO; | 560 | return -EIO; |
561 | *dent = (struct gfs2_dirent *)(bh->b_data + | 561 | *dent = (struct gfs2_dirent *)(bh->b_data + |
562 | sizeof(struct gfs2_leaf)); | 562 | sizeof(struct gfs2_leaf)); |
563 | return IS_LEAF; | 563 | return IS_LEAF; |
564 | } else { | 564 | } else { |
565 | if (gfs2_metatype_check(dip->i_sbd, bh, GFS2_METATYPE_DI)) | 565 | if (gfs2_metatype_check(GFS2_SB(&dip->i_inode), bh, GFS2_METATYPE_DI)) |
566 | return -EIO; | 566 | return -EIO; |
567 | *dent = (struct gfs2_dirent *)(bh->b_data + | 567 | *dent = (struct gfs2_dirent *)(bh->b_data + |
568 | sizeof(struct gfs2_dinode)); | 568 | sizeof(struct gfs2_dinode)); |
@@ -674,7 +674,7 @@ static struct gfs2_dirent *gfs2_init_dirent(struct inode *inode, | |||
674 | const struct qstr *name, | 674 | const struct qstr *name, |
675 | struct buffer_head *bh) | 675 | struct buffer_head *bh) |
676 | { | 676 | { |
677 | struct gfs2_inode *ip = inode->u.generic_ip; | 677 | struct gfs2_inode *ip = GFS2_I(inode); |
678 | struct gfs2_dirent *ndent; | 678 | struct gfs2_dirent *ndent; |
679 | unsigned offset = 0, totlen; | 679 | unsigned offset = 0, totlen; |
680 | 680 | ||
@@ -707,8 +707,10 @@ static int get_leaf(struct gfs2_inode *dip, uint64_t leaf_no, | |||
707 | int error; | 707 | int error; |
708 | 708 | ||
709 | error = gfs2_meta_read(dip->i_gl, leaf_no, DIO_START | DIO_WAIT, bhp); | 709 | error = gfs2_meta_read(dip->i_gl, leaf_no, DIO_START | DIO_WAIT, bhp); |
710 | if (!error && gfs2_metatype_check(dip->i_sbd, *bhp, GFS2_METATYPE_LF)) | 710 | if (!error && gfs2_metatype_check(GFS2_SB(&dip->i_inode), *bhp, GFS2_METATYPE_LF)) { |
711 | /* printk(KERN_INFO "block num=%llu\n", leaf_no); */ | ||
711 | error = -EIO; | 712 | error = -EIO; |
713 | } | ||
712 | 714 | ||
713 | return error; | 715 | return error; |
714 | } | 716 | } |
@@ -759,7 +761,7 @@ static struct gfs2_dirent *gfs2_dirent_search(struct inode *inode, | |||
759 | { | 761 | { |
760 | struct buffer_head *bh; | 762 | struct buffer_head *bh; |
761 | struct gfs2_dirent *dent; | 763 | struct gfs2_dirent *dent; |
762 | struct gfs2_inode *ip = inode->u.generic_ip; | 764 | struct gfs2_inode *ip = GFS2_I(inode); |
763 | int error; | 765 | int error; |
764 | 766 | ||
765 | if (ip->i_di.di_flags & GFS2_DIF_EXHASH) { | 767 | if (ip->i_di.di_flags & GFS2_DIF_EXHASH) { |
@@ -771,7 +773,7 @@ static struct gfs2_dirent *gfs2_dirent_search(struct inode *inode, | |||
771 | gfs2_consist_inode(ip); | 773 | gfs2_consist_inode(ip); |
772 | return ERR_PTR(-EIO); | 774 | return ERR_PTR(-EIO); |
773 | } | 775 | } |
774 | 776 | ||
775 | index = name->hash >> (32 - ip->i_di.di_depth); | 777 | index = name->hash >> (32 - ip->i_di.di_depth); |
776 | error = get_first_leaf(ip, index, &bh); | 778 | error = get_first_leaf(ip, index, &bh); |
777 | if (error) | 779 | if (error) |
@@ -786,12 +788,14 @@ static struct gfs2_dirent *gfs2_dirent_search(struct inode *inode, | |||
786 | brelse(bh); | 788 | brelse(bh); |
787 | if (!ln) | 789 | if (!ln) |
788 | break; | 790 | break; |
791 | |||
789 | error = get_leaf(ip, ln, &bh); | 792 | error = get_leaf(ip, ln, &bh); |
790 | } while(!error); | 793 | } while(!error); |
791 | 794 | ||
792 | return error ? ERR_PTR(error) : NULL; | 795 | return error ? ERR_PTR(error) : NULL; |
793 | } | 796 | } |
794 | 797 | ||
798 | |||
795 | error = gfs2_meta_inode_buffer(ip, &bh); | 799 | error = gfs2_meta_inode_buffer(ip, &bh); |
796 | if (error) | 800 | if (error) |
797 | return ERR_PTR(error); | 801 | return ERR_PTR(error); |
@@ -807,7 +811,7 @@ got_dent: | |||
807 | 811 | ||
808 | static struct gfs2_leaf *new_leaf(struct inode *inode, struct buffer_head **pbh, u16 depth) | 812 | static struct gfs2_leaf *new_leaf(struct inode *inode, struct buffer_head **pbh, u16 depth) |
809 | { | 813 | { |
810 | struct gfs2_inode *ip = inode->u.generic_ip; | 814 | struct gfs2_inode *ip = GFS2_I(inode); |
811 | u64 bn = gfs2_alloc_meta(ip); | 815 | u64 bn = gfs2_alloc_meta(ip); |
812 | struct buffer_head *bh = gfs2_meta_new(ip->i_gl, bn); | 816 | struct buffer_head *bh = gfs2_meta_new(ip->i_gl, bn); |
813 | struct gfs2_leaf *leaf; | 817 | struct gfs2_leaf *leaf; |
@@ -815,6 +819,7 @@ static struct gfs2_leaf *new_leaf(struct inode *inode, struct buffer_head **pbh, | |||
815 | struct qstr name = { .name = "", .len = 0, .hash = 0 }; | 819 | struct qstr name = { .name = "", .len = 0, .hash = 0 }; |
816 | if (!bh) | 820 | if (!bh) |
817 | return NULL; | 821 | return NULL; |
822 | |||
818 | gfs2_trans_add_bh(ip->i_gl, bh, 1); | 823 | gfs2_trans_add_bh(ip->i_gl, bh, 1); |
819 | gfs2_metatype_set(bh, GFS2_METATYPE_LF, GFS2_FORMAT_LF); | 824 | gfs2_metatype_set(bh, GFS2_METATYPE_LF, GFS2_FORMAT_LF); |
820 | leaf = (struct gfs2_leaf *)bh->b_data; | 825 | leaf = (struct gfs2_leaf *)bh->b_data; |
@@ -838,8 +843,8 @@ static struct gfs2_leaf *new_leaf(struct inode *inode, struct buffer_head **pbh, | |||
838 | 843 | ||
839 | static int dir_make_exhash(struct inode *inode) | 844 | static int dir_make_exhash(struct inode *inode) |
840 | { | 845 | { |
841 | struct gfs2_inode *dip = inode->u.generic_ip; | 846 | struct gfs2_inode *dip = GFS2_I(inode); |
842 | struct gfs2_sbd *sdp = dip->i_sbd; | 847 | struct gfs2_sbd *sdp = GFS2_SB(inode); |
843 | struct gfs2_dirent *dent; | 848 | struct gfs2_dirent *dent; |
844 | struct qstr args; | 849 | struct qstr args; |
845 | struct buffer_head *bh, *dibh; | 850 | struct buffer_head *bh, *dibh; |
@@ -874,7 +879,7 @@ static int dir_make_exhash(struct inode *inode) | |||
874 | args.len = bh->b_size - sizeof(struct gfs2_dinode) + | 879 | args.len = bh->b_size - sizeof(struct gfs2_dinode) + |
875 | sizeof(struct gfs2_leaf); | 880 | sizeof(struct gfs2_leaf); |
876 | args.name = bh->b_data; | 881 | args.name = bh->b_data; |
877 | dent = gfs2_dirent_scan(dip->i_vnode, bh->b_data, bh->b_size, | 882 | dent = gfs2_dirent_scan(&dip->i_inode, bh->b_data, bh->b_size, |
878 | gfs2_dirent_last, &args, NULL); | 883 | gfs2_dirent_last, &args, NULL); |
879 | if (!dent) { | 884 | if (!dent) { |
880 | brelse(bh); | 885 | brelse(bh); |
@@ -933,7 +938,7 @@ static int dir_make_exhash(struct inode *inode) | |||
933 | 938 | ||
934 | static int dir_split_leaf(struct inode *inode, const struct qstr *name) | 939 | static int dir_split_leaf(struct inode *inode, const struct qstr *name) |
935 | { | 940 | { |
936 | struct gfs2_inode *dip = inode->u.generic_ip; | 941 | struct gfs2_inode *dip = GFS2_I(inode); |
937 | struct buffer_head *nbh, *obh, *dibh; | 942 | struct buffer_head *nbh, *obh, *dibh; |
938 | struct gfs2_leaf *nleaf, *oleaf; | 943 | struct gfs2_leaf *nleaf, *oleaf; |
939 | struct gfs2_dirent *dent, *prev = NULL, *next = NULL, *new; | 944 | struct gfs2_dirent *dent, *prev = NULL, *next = NULL, *new; |
@@ -1044,7 +1049,7 @@ static int dir_split_leaf(struct inode *inode, const struct qstr *name) | |||
1044 | oleaf->lf_depth = nleaf->lf_depth; | 1049 | oleaf->lf_depth = nleaf->lf_depth; |
1045 | 1050 | ||
1046 | error = gfs2_meta_inode_buffer(dip, &dibh); | 1051 | error = gfs2_meta_inode_buffer(dip, &dibh); |
1047 | if (!gfs2_assert_withdraw(dip->i_sbd, !error)) { | 1052 | if (!gfs2_assert_withdraw(GFS2_SB(&dip->i_inode), !error)) { |
1048 | dip->i_di.di_blocks++; | 1053 | dip->i_di.di_blocks++; |
1049 | gfs2_dinode_out(&dip->i_di, dibh->b_data); | 1054 | gfs2_dinode_out(&dip->i_di, dibh->b_data); |
1050 | brelse(dibh); | 1055 | brelse(dibh); |
@@ -1073,7 +1078,7 @@ fail_brelse: | |||
1073 | 1078 | ||
1074 | static int dir_double_exhash(struct gfs2_inode *dip) | 1079 | static int dir_double_exhash(struct gfs2_inode *dip) |
1075 | { | 1080 | { |
1076 | struct gfs2_sbd *sdp = dip->i_sbd; | 1081 | struct gfs2_sbd *sdp = GFS2_SB(&dip->i_inode); |
1077 | struct buffer_head *dibh; | 1082 | struct buffer_head *dibh; |
1078 | uint32_t hsize; | 1083 | uint32_t hsize; |
1079 | uint64_t *buf; | 1084 | uint64_t *buf; |
@@ -1268,7 +1273,7 @@ static int gfs2_dir_read_leaf(struct inode *inode, u64 *offset, void *opaque, | |||
1268 | gfs2_filldir_t filldir, int *copied, | 1273 | gfs2_filldir_t filldir, int *copied, |
1269 | unsigned *depth, u64 leaf_no) | 1274 | unsigned *depth, u64 leaf_no) |
1270 | { | 1275 | { |
1271 | struct gfs2_inode *ip = inode->u.generic_ip; | 1276 | struct gfs2_inode *ip = GFS2_I(inode); |
1272 | struct buffer_head *bh; | 1277 | struct buffer_head *bh; |
1273 | struct gfs2_leaf *lf; | 1278 | struct gfs2_leaf *lf; |
1274 | unsigned entries = 0; | 1279 | unsigned entries = 0; |
@@ -1348,8 +1353,8 @@ out: | |||
1348 | static int dir_e_read(struct inode *inode, uint64_t *offset, void *opaque, | 1353 | static int dir_e_read(struct inode *inode, uint64_t *offset, void *opaque, |
1349 | gfs2_filldir_t filldir) | 1354 | gfs2_filldir_t filldir) |
1350 | { | 1355 | { |
1351 | struct gfs2_inode *dip = inode->u.generic_ip; | 1356 | struct gfs2_inode *dip = GFS2_I(inode); |
1352 | struct gfs2_sbd *sdp = dip->i_sbd; | 1357 | struct gfs2_sbd *sdp = GFS2_SB(inode); |
1353 | uint32_t hsize, len = 0; | 1358 | uint32_t hsize, len = 0; |
1354 | uint32_t ht_offset, lp_offset, ht_offset_cur = -1; | 1359 | uint32_t ht_offset, lp_offset, ht_offset_cur = -1; |
1355 | uint32_t hash, index; | 1360 | uint32_t hash, index; |
@@ -1407,7 +1412,7 @@ out: | |||
1407 | int gfs2_dir_read(struct inode *inode, uint64_t *offset, void *opaque, | 1412 | int gfs2_dir_read(struct inode *inode, uint64_t *offset, void *opaque, |
1408 | gfs2_filldir_t filldir) | 1413 | gfs2_filldir_t filldir) |
1409 | { | 1414 | { |
1410 | struct gfs2_inode *dip = inode->u.generic_ip; | 1415 | struct gfs2_inode *dip = GFS2_I(inode); |
1411 | struct dirent_gather g; | 1416 | struct dirent_gather g; |
1412 | const struct gfs2_dirent **darr, *dent; | 1417 | const struct gfs2_dirent **darr, *dent; |
1413 | struct buffer_head *dibh; | 1418 | struct buffer_head *dibh; |
@@ -1490,7 +1495,7 @@ int gfs2_dir_search(struct inode *dir, const struct qstr *name, | |||
1490 | static int dir_new_leaf(struct inode *inode, const struct qstr *name) | 1495 | static int dir_new_leaf(struct inode *inode, const struct qstr *name) |
1491 | { | 1496 | { |
1492 | struct buffer_head *bh, *obh; | 1497 | struct buffer_head *bh, *obh; |
1493 | struct gfs2_inode *ip = inode->u.generic_ip; | 1498 | struct gfs2_inode *ip = GFS2_I(inode); |
1494 | struct gfs2_leaf *leaf, *oleaf; | 1499 | struct gfs2_leaf *leaf, *oleaf; |
1495 | int error; | 1500 | int error; |
1496 | u32 index; | 1501 | u32 index; |
@@ -1545,7 +1550,7 @@ static int dir_new_leaf(struct inode *inode, const struct qstr *name) | |||
1545 | int gfs2_dir_add(struct inode *inode, const struct qstr *name, | 1550 | int gfs2_dir_add(struct inode *inode, const struct qstr *name, |
1546 | const struct gfs2_inum *inum, unsigned type) | 1551 | const struct gfs2_inum *inum, unsigned type) |
1547 | { | 1552 | { |
1548 | struct gfs2_inode *ip = inode->u.generic_ip; | 1553 | struct gfs2_inode *ip = GFS2_I(inode); |
1549 | struct buffer_head *bh; | 1554 | struct buffer_head *bh; |
1550 | struct gfs2_dirent *dent; | 1555 | struct gfs2_dirent *dent; |
1551 | struct gfs2_leaf *leaf; | 1556 | struct gfs2_leaf *leaf; |
@@ -1623,7 +1628,7 @@ int gfs2_dir_del(struct gfs2_inode *dip, const struct qstr *name) | |||
1623 | 1628 | ||
1624 | /* Returns _either_ the entry (if its first in block) or the | 1629 | /* Returns _either_ the entry (if its first in block) or the |
1625 | previous entry otherwise */ | 1630 | previous entry otherwise */ |
1626 | dent = gfs2_dirent_search(dip->i_vnode, name, gfs2_dirent_prev, &bh); | 1631 | dent = gfs2_dirent_search(&dip->i_inode, name, gfs2_dirent_prev, &bh); |
1627 | if (!dent) { | 1632 | if (!dent) { |
1628 | gfs2_consist_inode(dip); | 1633 | gfs2_consist_inode(dip); |
1629 | return -EIO; | 1634 | return -EIO; |
@@ -1659,6 +1664,7 @@ int gfs2_dir_del(struct gfs2_inode *dip, const struct qstr *name) | |||
1659 | dip->i_di.di_mtime = dip->i_di.di_ctime = get_seconds(); | 1664 | dip->i_di.di_mtime = dip->i_di.di_ctime = get_seconds(); |
1660 | gfs2_dinode_out(&dip->i_di, bh->b_data); | 1665 | gfs2_dinode_out(&dip->i_di, bh->b_data); |
1661 | brelse(bh); | 1666 | brelse(bh); |
1667 | mark_inode_dirty(&dip->i_inode); | ||
1662 | 1668 | ||
1663 | return error; | 1669 | return error; |
1664 | } | 1670 | } |
@@ -1683,7 +1689,7 @@ int gfs2_dir_mvino(struct gfs2_inode *dip, const struct qstr *filename, | |||
1683 | struct gfs2_dirent *dent; | 1689 | struct gfs2_dirent *dent; |
1684 | int error; | 1690 | int error; |
1685 | 1691 | ||
1686 | dent = gfs2_dirent_search(dip->i_vnode, filename, gfs2_dirent_find, &bh); | 1692 | dent = gfs2_dirent_search(&dip->i_inode, filename, gfs2_dirent_find, &bh); |
1687 | if (!dent) { | 1693 | if (!dent) { |
1688 | gfs2_consist_inode(dip); | 1694 | gfs2_consist_inode(dip); |
1689 | return -EIO; | 1695 | return -EIO; |
@@ -1720,7 +1726,7 @@ int gfs2_dir_mvino(struct gfs2_inode *dip, const struct qstr *filename, | |||
1720 | 1726 | ||
1721 | static int foreach_leaf(struct gfs2_inode *dip, leaf_call_t lc, void *data) | 1727 | static int foreach_leaf(struct gfs2_inode *dip, leaf_call_t lc, void *data) |
1722 | { | 1728 | { |
1723 | struct gfs2_sbd *sdp = dip->i_sbd; | 1729 | struct gfs2_sbd *sdp = GFS2_SB(&dip->i_inode); |
1724 | struct buffer_head *bh; | 1730 | struct buffer_head *bh; |
1725 | struct gfs2_leaf *leaf; | 1731 | struct gfs2_leaf *leaf; |
1726 | uint32_t hsize, len; | 1732 | uint32_t hsize, len; |
@@ -1800,7 +1806,7 @@ static int foreach_leaf(struct gfs2_inode *dip, leaf_call_t lc, void *data) | |||
1800 | static int leaf_dealloc(struct gfs2_inode *dip, uint32_t index, uint32_t len, | 1806 | static int leaf_dealloc(struct gfs2_inode *dip, uint32_t index, uint32_t len, |
1801 | uint64_t leaf_no, void *data) | 1807 | uint64_t leaf_no, void *data) |
1802 | { | 1808 | { |
1803 | struct gfs2_sbd *sdp = dip->i_sbd; | 1809 | struct gfs2_sbd *sdp = GFS2_SB(&dip->i_inode); |
1804 | struct gfs2_leaf *tmp_leaf; | 1810 | struct gfs2_leaf *tmp_leaf; |
1805 | struct gfs2_rgrp_list rlist; | 1811 | struct gfs2_rgrp_list rlist; |
1806 | struct buffer_head *bh, *dibh; | 1812 | struct buffer_head *bh, *dibh; |
@@ -1920,7 +1926,7 @@ static int leaf_dealloc(struct gfs2_inode *dip, uint32_t index, uint32_t len, | |||
1920 | 1926 | ||
1921 | int gfs2_dir_exhash_dealloc(struct gfs2_inode *dip) | 1927 | int gfs2_dir_exhash_dealloc(struct gfs2_inode *dip) |
1922 | { | 1928 | { |
1923 | struct gfs2_sbd *sdp = dip->i_sbd; | 1929 | struct gfs2_sbd *sdp = GFS2_SB(&dip->i_inode); |
1924 | struct buffer_head *bh; | 1930 | struct buffer_head *bh; |
1925 | int error; | 1931 | int error; |
1926 | 1932 | ||