xref: /openbmc/linux/fs/gfs2/dir.c (revision 5f5bac82)
1 /*
2  * Copyright (C) Sistina Software, Inc.  1997-2003 All rights reserved.
3  * Copyright (C) 2004-2006 Red Hat, Inc.  All rights reserved.
4  *
5  * This copyrighted material is made available to anyone wishing to use,
6  * modify, copy, or redistribute it subject to the terms and conditions
7  * of the GNU General Public License version 2.
8  */
9 
10 /*
11  * Implements Extendible Hashing as described in:
12  *   "Extendible Hashing" by Fagin, et al in
13  *     __ACM Trans. on Database Systems__, Sept 1979.
14  *
15  *
16  * Here's the layout of dirents which is essentially the same as that of ext2
17  * within a single block. The field de_name_len is the number of bytes
18  * actually required for the name (no null terminator). The field de_rec_len
19  * is the number of bytes allocated to the dirent. The offset of the next
20  * dirent in the block is (dirent + dirent->de_rec_len). When a dirent is
21  * deleted, the preceding dirent inherits its allocated space, ie
22  * prev->de_rec_len += deleted->de_rec_len. Since the next dirent is obtained
23  * by adding de_rec_len to the current dirent, this essentially causes the
24  * deleted dirent to get jumped over when iterating through all the dirents.
25  *
26  * When deleting the first dirent in a block, there is no previous dirent so
27  * the field de_ino is set to zero to designate it as deleted. When allocating
28  * a dirent, gfs2_dirent_alloc iterates through the dirents in a block. If the
29  * first dirent has (de_ino == 0) and de_rec_len is large enough, this first
30  * dirent is allocated. Otherwise it must go through all the 'used' dirents
31  * searching for one in which the amount of total space minus the amount of
32  * used space will provide enough space for the new dirent.
33  *
34  * There are two types of blocks in which dirents reside. In a stuffed dinode,
35  * the dirents begin at offset sizeof(struct gfs2_dinode) from the beginning of
36  * the block.  In leaves, they begin at offset sizeof(struct gfs2_leaf) from the
37  * beginning of the leaf block. The dirents reside in leaves when
38  *
39  * dip->i_diskflags & GFS2_DIF_EXHASH is true
40  *
41  * Otherwise, the dirents are "linear", within a single stuffed dinode block.
42  *
43  * When the dirents are in leaves, the actual contents of the directory file are
44  * used as an array of 64-bit block pointers pointing to the leaf blocks. The
45  * dirents are NOT in the directory file itself. There can be more than one
46  * block pointer in the array that points to the same leaf. In fact, when a
47  * directory is first converted from linear to exhash, all of the pointers
48  * point to the same leaf.
49  *
50  * When a leaf is completely full, the size of the hash table can be
51  * doubled unless it is already at the maximum size which is hard coded into
52  * GFS2_DIR_MAX_DEPTH. After that, leaves are chained together in a linked list,
53  * but never before the maximum hash table size has been reached.
54  */
55 
56 #include <linux/slab.h>
57 #include <linux/spinlock.h>
58 #include <linux/buffer_head.h>
59 #include <linux/sort.h>
60 #include <linux/gfs2_ondisk.h>
61 #include <linux/crc32.h>
62 #include <linux/vmalloc.h>
63 
64 #include "gfs2.h"
65 #include "incore.h"
66 #include "dir.h"
67 #include "glock.h"
68 #include "inode.h"
69 #include "meta_io.h"
70 #include "quota.h"
71 #include "rgrp.h"
72 #include "trans.h"
73 #include "bmap.h"
74 #include "util.h"
75 
76 #define IS_LEAF     1 /* Hashed (leaf) directory */
77 #define IS_DINODE   2 /* Linear (stuffed dinode block) directory */
78 
79 #define gfs2_disk_hash2offset(h) (((u64)(h)) >> 1)
80 #define gfs2_dir_offset2hash(p) ((u32)(((u64)(p)) << 1))
81 
82 typedef int (*leaf_call_t) (struct gfs2_inode *dip, u32 index, u32 len,
83 			    u64 leaf_no, void *data);
84 typedef int (*gfs2_dscan_t)(const struct gfs2_dirent *dent,
85 			    const struct qstr *name, void *opaque);
86 
87 
88 int gfs2_dir_get_new_buffer(struct gfs2_inode *ip, u64 block,
89 			    struct buffer_head **bhp)
90 {
91 	struct buffer_head *bh;
92 
93 	bh = gfs2_meta_new(ip->i_gl, block);
94 	gfs2_trans_add_bh(ip->i_gl, bh, 1);
95 	gfs2_metatype_set(bh, GFS2_METATYPE_JD, GFS2_FORMAT_JD);
96 	gfs2_buffer_clear_tail(bh, sizeof(struct gfs2_meta_header));
97 	*bhp = bh;
98 	return 0;
99 }
100 
101 static int gfs2_dir_get_existing_buffer(struct gfs2_inode *ip, u64 block,
102 					struct buffer_head **bhp)
103 {
104 	struct buffer_head *bh;
105 	int error;
106 
107 	error = gfs2_meta_read(ip->i_gl, block, DIO_WAIT, &bh);
108 	if (error)
109 		return error;
110 	if (gfs2_metatype_check(GFS2_SB(&ip->i_inode), bh, GFS2_METATYPE_JD)) {
111 		brelse(bh);
112 		return -EIO;
113 	}
114 	*bhp = bh;
115 	return 0;
116 }
117 
118 static int gfs2_dir_write_stuffed(struct gfs2_inode *ip, const char *buf,
119 				  unsigned int offset, unsigned int size)
120 {
121 	struct buffer_head *dibh;
122 	int error;
123 
124 	error = gfs2_meta_inode_buffer(ip, &dibh);
125 	if (error)
126 		return error;
127 
128 	gfs2_trans_add_bh(ip->i_gl, dibh, 1);
129 	memcpy(dibh->b_data + offset + sizeof(struct gfs2_dinode), buf, size);
130 	if (ip->i_disksize < offset + size)
131 		ip->i_disksize = offset + size;
132 	ip->i_inode.i_mtime = ip->i_inode.i_ctime = CURRENT_TIME;
133 	gfs2_dinode_out(ip, dibh->b_data);
134 
135 	brelse(dibh);
136 
137 	return size;
138 }
139 
140 
141 
142 /**
143  * gfs2_dir_write_data - Write directory information to the inode
144  * @ip: The GFS2 inode
145  * @buf: The buffer containing information to be written
146  * @offset: The file offset to start writing at
147  * @size: The amount of data to write
148  *
149  * Returns: The number of bytes correctly written or error code
150  */
151 static int gfs2_dir_write_data(struct gfs2_inode *ip, const char *buf,
152 			       u64 offset, unsigned int size)
153 {
154 	struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
155 	struct buffer_head *dibh;
156 	u64 lblock, dblock;
157 	u32 extlen = 0;
158 	unsigned int o;
159 	int copied = 0;
160 	int error = 0;
161 	int new = 0;
162 
163 	if (!size)
164 		return 0;
165 
166 	if (gfs2_is_stuffed(ip) &&
167 	    offset + size <= sdp->sd_sb.sb_bsize - sizeof(struct gfs2_dinode))
168 		return gfs2_dir_write_stuffed(ip, buf, (unsigned int)offset,
169 					      size);
170 
171 	if (gfs2_assert_warn(sdp, gfs2_is_jdata(ip)))
172 		return -EINVAL;
173 
174 	if (gfs2_is_stuffed(ip)) {
175 		error = gfs2_unstuff_dinode(ip, NULL);
176 		if (error)
177 			return error;
178 	}
179 
180 	lblock = offset;
181 	o = do_div(lblock, sdp->sd_jbsize) + sizeof(struct gfs2_meta_header);
182 
183 	while (copied < size) {
184 		unsigned int amount;
185 		struct buffer_head *bh;
186 
187 		amount = size - copied;
188 		if (amount > sdp->sd_sb.sb_bsize - o)
189 			amount = sdp->sd_sb.sb_bsize - o;
190 
191 		if (!extlen) {
192 			new = 1;
193 			error = gfs2_extent_map(&ip->i_inode, lblock, &new,
194 						&dblock, &extlen);
195 			if (error)
196 				goto fail;
197 			error = -EIO;
198 			if (gfs2_assert_withdraw(sdp, dblock))
199 				goto fail;
200 		}
201 
202 		if (amount == sdp->sd_jbsize || new)
203 			error = gfs2_dir_get_new_buffer(ip, dblock, &bh);
204 		else
205 			error = gfs2_dir_get_existing_buffer(ip, dblock, &bh);
206 
207 		if (error)
208 			goto fail;
209 
210 		gfs2_trans_add_bh(ip->i_gl, bh, 1);
211 		memcpy(bh->b_data + o, buf, amount);
212 		brelse(bh);
213 
214 		buf += amount;
215 		copied += amount;
216 		lblock++;
217 		dblock++;
218 		extlen--;
219 
220 		o = sizeof(struct gfs2_meta_header);
221 	}
222 
223 out:
224 	error = gfs2_meta_inode_buffer(ip, &dibh);
225 	if (error)
226 		return error;
227 
228 	if (ip->i_disksize < offset + copied)
229 		ip->i_disksize = offset + copied;
230 	ip->i_inode.i_mtime = ip->i_inode.i_ctime = CURRENT_TIME;
231 
232 	gfs2_trans_add_bh(ip->i_gl, dibh, 1);
233 	gfs2_dinode_out(ip, dibh->b_data);
234 	brelse(dibh);
235 
236 	return copied;
237 fail:
238 	if (copied)
239 		goto out;
240 	return error;
241 }
242 
243 static int gfs2_dir_read_stuffed(struct gfs2_inode *ip, char *buf,
244 				 u64 offset, unsigned int size)
245 {
246 	struct buffer_head *dibh;
247 	int error;
248 
249 	error = gfs2_meta_inode_buffer(ip, &dibh);
250 	if (!error) {
251 		offset += sizeof(struct gfs2_dinode);
252 		memcpy(buf, dibh->b_data + offset, size);
253 		brelse(dibh);
254 	}
255 
256 	return (error) ? error : size;
257 }
258 
259 
260 /**
261  * gfs2_dir_read_data - Read a data from a directory inode
262  * @ip: The GFS2 Inode
263  * @buf: The buffer to place result into
264  * @offset: File offset to begin jdata_readng from
265  * @size: Amount of data to transfer
266  *
267  * Returns: The amount of data actually copied or the error
268  */
269 static int gfs2_dir_read_data(struct gfs2_inode *ip, char *buf, u64 offset,
270 			      unsigned int size, unsigned ra)
271 {
272 	struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
273 	u64 lblock, dblock;
274 	u32 extlen = 0;
275 	unsigned int o;
276 	int copied = 0;
277 	int error = 0;
278 
279 	if (offset >= ip->i_disksize)
280 		return 0;
281 
282 	if (offset + size > ip->i_disksize)
283 		size = ip->i_disksize - offset;
284 
285 	if (!size)
286 		return 0;
287 
288 	if (gfs2_is_stuffed(ip))
289 		return gfs2_dir_read_stuffed(ip, buf, offset, size);
290 
291 	if (gfs2_assert_warn(sdp, gfs2_is_jdata(ip)))
292 		return -EINVAL;
293 
294 	lblock = offset;
295 	o = do_div(lblock, sdp->sd_jbsize) + sizeof(struct gfs2_meta_header);
296 
297 	while (copied < size) {
298 		unsigned int amount;
299 		struct buffer_head *bh;
300 		int new;
301 
302 		amount = size - copied;
303 		if (amount > sdp->sd_sb.sb_bsize - o)
304 			amount = sdp->sd_sb.sb_bsize - o;
305 
306 		if (!extlen) {
307 			new = 0;
308 			error = gfs2_extent_map(&ip->i_inode, lblock, &new,
309 						&dblock, &extlen);
310 			if (error || !dblock)
311 				goto fail;
312 			BUG_ON(extlen < 1);
313 			if (!ra)
314 				extlen = 1;
315 			bh = gfs2_meta_ra(ip->i_gl, dblock, extlen);
316 		} else {
317 			error = gfs2_meta_read(ip->i_gl, dblock, DIO_WAIT, &bh);
318 			if (error)
319 				goto fail;
320 		}
321 		error = gfs2_metatype_check(sdp, bh, GFS2_METATYPE_JD);
322 		if (error) {
323 			brelse(bh);
324 			goto fail;
325 		}
326 		dblock++;
327 		extlen--;
328 		memcpy(buf, bh->b_data + o, amount);
329 		brelse(bh);
330 		buf += amount;
331 		copied += amount;
332 		lblock++;
333 		o = sizeof(struct gfs2_meta_header);
334 	}
335 
336 	return copied;
337 fail:
338 	return (copied) ? copied : error;
339 }
340 
341 static inline int gfs2_dirent_sentinel(const struct gfs2_dirent *dent)
342 {
343 	return dent->de_inum.no_addr == 0 || dent->de_inum.no_formal_ino == 0;
344 }
345 
346 static inline int __gfs2_dirent_find(const struct gfs2_dirent *dent,
347 				     const struct qstr *name, int ret)
348 {
349 	if (!gfs2_dirent_sentinel(dent) &&
350 	    be32_to_cpu(dent->de_hash) == name->hash &&
351 	    be16_to_cpu(dent->de_name_len) == name->len &&
352 	    memcmp(dent+1, name->name, name->len) == 0)
353 		return ret;
354 	return 0;
355 }
356 
357 static int gfs2_dirent_find(const struct gfs2_dirent *dent,
358 			    const struct qstr *name,
359 			    void *opaque)
360 {
361 	return __gfs2_dirent_find(dent, name, 1);
362 }
363 
364 static int gfs2_dirent_prev(const struct gfs2_dirent *dent,
365 			    const struct qstr *name,
366 			    void *opaque)
367 {
368 	return __gfs2_dirent_find(dent, name, 2);
369 }
370 
371 /*
372  * name->name holds ptr to start of block.
373  * name->len holds size of block.
374  */
375 static int gfs2_dirent_last(const struct gfs2_dirent *dent,
376 			    const struct qstr *name,
377 			    void *opaque)
378 {
379 	const char *start = name->name;
380 	const char *end = (const char *)dent + be16_to_cpu(dent->de_rec_len);
381 	if (name->len == (end - start))
382 		return 1;
383 	return 0;
384 }
385 
386 static int gfs2_dirent_find_space(const struct gfs2_dirent *dent,
387 				  const struct qstr *name,
388 				  void *opaque)
389 {
390 	unsigned required = GFS2_DIRENT_SIZE(name->len);
391 	unsigned actual = GFS2_DIRENT_SIZE(be16_to_cpu(dent->de_name_len));
392 	unsigned totlen = be16_to_cpu(dent->de_rec_len);
393 
394 	if (gfs2_dirent_sentinel(dent))
395 		actual = GFS2_DIRENT_SIZE(0);
396 	if (totlen - actual >= required)
397 		return 1;
398 	return 0;
399 }
400 
401 struct dirent_gather {
402 	const struct gfs2_dirent **pdent;
403 	unsigned offset;
404 };
405 
406 static int gfs2_dirent_gather(const struct gfs2_dirent *dent,
407 			      const struct qstr *name,
408 			      void *opaque)
409 {
410 	struct dirent_gather *g = opaque;
411 	if (!gfs2_dirent_sentinel(dent)) {
412 		g->pdent[g->offset++] = dent;
413 	}
414 	return 0;
415 }
416 
417 /*
418  * Other possible things to check:
419  * - Inode located within filesystem size (and on valid block)
420  * - Valid directory entry type
421  * Not sure how heavy-weight we want to make this... could also check
422  * hash is correct for example, but that would take a lot of extra time.
423  * For now the most important thing is to check that the various sizes
424  * are correct.
425  */
426 static int gfs2_check_dirent(struct gfs2_dirent *dent, unsigned int offset,
427 			     unsigned int size, unsigned int len, int first)
428 {
429 	const char *msg = "gfs2_dirent too small";
430 	if (unlikely(size < sizeof(struct gfs2_dirent)))
431 		goto error;
432 	msg = "gfs2_dirent misaligned";
433 	if (unlikely(offset & 0x7))
434 		goto error;
435 	msg = "gfs2_dirent points beyond end of block";
436 	if (unlikely(offset + size > len))
437 		goto error;
438 	msg = "zero inode number";
439 	if (unlikely(!first && gfs2_dirent_sentinel(dent)))
440 		goto error;
441 	msg = "name length is greater than space in dirent";
442 	if (!gfs2_dirent_sentinel(dent) &&
443 	    unlikely(sizeof(struct gfs2_dirent)+be16_to_cpu(dent->de_name_len) >
444 		     size))
445 		goto error;
446 	return 0;
447 error:
448 	printk(KERN_WARNING "gfs2_check_dirent: %s (%s)\n", msg,
449 	       first ? "first in block" : "not first in block");
450 	return -EIO;
451 }
452 
453 static int gfs2_dirent_offset(const void *buf)
454 {
455 	const struct gfs2_meta_header *h = buf;
456 	int offset;
457 
458 	BUG_ON(buf == NULL);
459 
460 	switch(be32_to_cpu(h->mh_type)) {
461 	case GFS2_METATYPE_LF:
462 		offset = sizeof(struct gfs2_leaf);
463 		break;
464 	case GFS2_METATYPE_DI:
465 		offset = sizeof(struct gfs2_dinode);
466 		break;
467 	default:
468 		goto wrong_type;
469 	}
470 	return offset;
471 wrong_type:
472 	printk(KERN_WARNING "gfs2_scan_dirent: wrong block type %u\n",
473 	       be32_to_cpu(h->mh_type));
474 	return -1;
475 }
476 
477 static struct gfs2_dirent *gfs2_dirent_scan(struct inode *inode, void *buf,
478 					    unsigned int len, gfs2_dscan_t scan,
479 					    const struct qstr *name,
480 					    void *opaque)
481 {
482 	struct gfs2_dirent *dent, *prev;
483 	unsigned offset;
484 	unsigned size;
485 	int ret = 0;
486 
487 	ret = gfs2_dirent_offset(buf);
488 	if (ret < 0)
489 		goto consist_inode;
490 
491 	offset = ret;
492 	prev = NULL;
493 	dent = buf + offset;
494 	size = be16_to_cpu(dent->de_rec_len);
495 	if (gfs2_check_dirent(dent, offset, size, len, 1))
496 		goto consist_inode;
497 	do {
498 		ret = scan(dent, name, opaque);
499 		if (ret)
500 			break;
501 		offset += size;
502 		if (offset == len)
503 			break;
504 		prev = dent;
505 		dent = buf + offset;
506 		size = be16_to_cpu(dent->de_rec_len);
507 		if (gfs2_check_dirent(dent, offset, size, len, 0))
508 			goto consist_inode;
509 	} while(1);
510 
511 	switch(ret) {
512 	case 0:
513 		return NULL;
514 	case 1:
515 		return dent;
516 	case 2:
517 		return prev ? prev : dent;
518 	default:
519 		BUG_ON(ret > 0);
520 		return ERR_PTR(ret);
521 	}
522 
523 consist_inode:
524 	gfs2_consist_inode(GFS2_I(inode));
525 	return ERR_PTR(-EIO);
526 }
527 
528 
529 /**
530  * dirent_first - Return the first dirent
531  * @dip: the directory
532  * @bh: The buffer
533  * @dent: Pointer to list of dirents
534  *
535  * return first dirent whether bh points to leaf or stuffed dinode
536  *
537  * Returns: IS_LEAF, IS_DINODE, or -errno
538  */
539 
540 static int dirent_first(struct gfs2_inode *dip, struct buffer_head *bh,
541 			struct gfs2_dirent **dent)
542 {
543 	struct gfs2_meta_header *h = (struct gfs2_meta_header *)bh->b_data;
544 
545 	if (be32_to_cpu(h->mh_type) == GFS2_METATYPE_LF) {
546 		if (gfs2_meta_check(GFS2_SB(&dip->i_inode), bh))
547 			return -EIO;
548 		*dent = (struct gfs2_dirent *)(bh->b_data +
549 					       sizeof(struct gfs2_leaf));
550 		return IS_LEAF;
551 	} else {
552 		if (gfs2_metatype_check(GFS2_SB(&dip->i_inode), bh, GFS2_METATYPE_DI))
553 			return -EIO;
554 		*dent = (struct gfs2_dirent *)(bh->b_data +
555 					       sizeof(struct gfs2_dinode));
556 		return IS_DINODE;
557 	}
558 }
559 
560 static int dirent_check_reclen(struct gfs2_inode *dip,
561 			       const struct gfs2_dirent *d, const void *end_p)
562 {
563 	const void *ptr = d;
564 	u16 rec_len = be16_to_cpu(d->de_rec_len);
565 
566 	if (unlikely(rec_len < sizeof(struct gfs2_dirent)))
567 		goto broken;
568 	ptr += rec_len;
569 	if (ptr < end_p)
570 		return rec_len;
571 	if (ptr == end_p)
572 		return -ENOENT;
573 broken:
574 	gfs2_consist_inode(dip);
575 	return -EIO;
576 }
577 
578 /**
579  * dirent_next - Next dirent
580  * @dip: the directory
581  * @bh: The buffer
582  * @dent: Pointer to list of dirents
583  *
584  * Returns: 0 on success, error code otherwise
585  */
586 
587 static int dirent_next(struct gfs2_inode *dip, struct buffer_head *bh,
588 		       struct gfs2_dirent **dent)
589 {
590 	struct gfs2_dirent *cur = *dent, *tmp;
591 	char *bh_end = bh->b_data + bh->b_size;
592 	int ret;
593 
594 	ret = dirent_check_reclen(dip, cur, bh_end);
595 	if (ret < 0)
596 		return ret;
597 
598 	tmp = (void *)cur + ret;
599 	ret = dirent_check_reclen(dip, tmp, bh_end);
600 	if (ret == -EIO)
601 		return ret;
602 
603         /* Only the first dent could ever have de_inum.no_addr == 0 */
604 	if (gfs2_dirent_sentinel(tmp)) {
605 		gfs2_consist_inode(dip);
606 		return -EIO;
607 	}
608 
609 	*dent = tmp;
610 	return 0;
611 }
612 
613 /**
614  * dirent_del - Delete a dirent
615  * @dip: The GFS2 inode
616  * @bh: The buffer
617  * @prev: The previous dirent
618  * @cur: The current dirent
619  *
620  */
621 
622 static void dirent_del(struct gfs2_inode *dip, struct buffer_head *bh,
623 		       struct gfs2_dirent *prev, struct gfs2_dirent *cur)
624 {
625 	u16 cur_rec_len, prev_rec_len;
626 
627 	if (gfs2_dirent_sentinel(cur)) {
628 		gfs2_consist_inode(dip);
629 		return;
630 	}
631 
632 	gfs2_trans_add_bh(dip->i_gl, bh, 1);
633 
634 	/* If there is no prev entry, this is the first entry in the block.
635 	   The de_rec_len is already as big as it needs to be.  Just zero
636 	   out the inode number and return.  */
637 
638 	if (!prev) {
639 		cur->de_inum.no_addr = 0;
640 		cur->de_inum.no_formal_ino = 0;
641 		return;
642 	}
643 
644 	/*  Combine this dentry with the previous one.  */
645 
646 	prev_rec_len = be16_to_cpu(prev->de_rec_len);
647 	cur_rec_len = be16_to_cpu(cur->de_rec_len);
648 
649 	if ((char *)prev + prev_rec_len != (char *)cur)
650 		gfs2_consist_inode(dip);
651 	if ((char *)cur + cur_rec_len > bh->b_data + bh->b_size)
652 		gfs2_consist_inode(dip);
653 
654 	prev_rec_len += cur_rec_len;
655 	prev->de_rec_len = cpu_to_be16(prev_rec_len);
656 }
657 
658 /*
659  * Takes a dent from which to grab space as an argument. Returns the
660  * newly created dent.
661  */
662 static struct gfs2_dirent *gfs2_init_dirent(struct inode *inode,
663 					    struct gfs2_dirent *dent,
664 					    const struct qstr *name,
665 					    struct buffer_head *bh)
666 {
667 	struct gfs2_inode *ip = GFS2_I(inode);
668 	struct gfs2_dirent *ndent;
669 	unsigned offset = 0, totlen;
670 
671 	if (!gfs2_dirent_sentinel(dent))
672 		offset = GFS2_DIRENT_SIZE(be16_to_cpu(dent->de_name_len));
673 	totlen = be16_to_cpu(dent->de_rec_len);
674 	BUG_ON(offset + name->len > totlen);
675 	gfs2_trans_add_bh(ip->i_gl, bh, 1);
676 	ndent = (struct gfs2_dirent *)((char *)dent + offset);
677 	dent->de_rec_len = cpu_to_be16(offset);
678 	gfs2_qstr2dirent(name, totlen - offset, ndent);
679 	return ndent;
680 }
681 
682 static struct gfs2_dirent *gfs2_dirent_alloc(struct inode *inode,
683 					     struct buffer_head *bh,
684 					     const struct qstr *name)
685 {
686 	struct gfs2_dirent *dent;
687 	dent = gfs2_dirent_scan(inode, bh->b_data, bh->b_size,
688 				gfs2_dirent_find_space, name, NULL);
689 	if (!dent || IS_ERR(dent))
690 		return dent;
691 	return gfs2_init_dirent(inode, dent, name, bh);
692 }
693 
694 static int get_leaf(struct gfs2_inode *dip, u64 leaf_no,
695 		    struct buffer_head **bhp)
696 {
697 	int error;
698 
699 	error = gfs2_meta_read(dip->i_gl, leaf_no, DIO_WAIT, bhp);
700 	if (!error && gfs2_metatype_check(GFS2_SB(&dip->i_inode), *bhp, GFS2_METATYPE_LF)) {
701 		/* printk(KERN_INFO "block num=%llu\n", leaf_no); */
702 		error = -EIO;
703 	}
704 
705 	return error;
706 }
707 
708 /**
709  * get_leaf_nr - Get a leaf number associated with the index
710  * @dip: The GFS2 inode
711  * @index:
712  * @leaf_out:
713  *
714  * Returns: 0 on success, error code otherwise
715  */
716 
717 static int get_leaf_nr(struct gfs2_inode *dip, u32 index,
718 		       u64 *leaf_out)
719 {
720 	__be64 leaf_no;
721 	int error;
722 
723 	error = gfs2_dir_read_data(dip, (char *)&leaf_no,
724 				    index * sizeof(__be64),
725 				    sizeof(__be64), 0);
726 	if (error != sizeof(u64))
727 		return (error < 0) ? error : -EIO;
728 
729 	*leaf_out = be64_to_cpu(leaf_no);
730 
731 	return 0;
732 }
733 
734 static int get_first_leaf(struct gfs2_inode *dip, u32 index,
735 			  struct buffer_head **bh_out)
736 {
737 	u64 leaf_no;
738 	int error;
739 
740 	error = get_leaf_nr(dip, index, &leaf_no);
741 	if (!error)
742 		error = get_leaf(dip, leaf_no, bh_out);
743 
744 	return error;
745 }
746 
747 static struct gfs2_dirent *gfs2_dirent_search(struct inode *inode,
748 					      const struct qstr *name,
749 					      gfs2_dscan_t scan,
750 					      struct buffer_head **pbh)
751 {
752 	struct buffer_head *bh;
753 	struct gfs2_dirent *dent;
754 	struct gfs2_inode *ip = GFS2_I(inode);
755 	int error;
756 
757 	if (ip->i_diskflags & GFS2_DIF_EXHASH) {
758 		struct gfs2_leaf *leaf;
759 		unsigned hsize = 1 << ip->i_depth;
760 		unsigned index;
761 		u64 ln;
762 		if (hsize * sizeof(u64) != ip->i_disksize) {
763 			gfs2_consist_inode(ip);
764 			return ERR_PTR(-EIO);
765 		}
766 
767 		index = name->hash >> (32 - ip->i_depth);
768 		error = get_first_leaf(ip, index, &bh);
769 		if (error)
770 			return ERR_PTR(error);
771 		do {
772 			dent = gfs2_dirent_scan(inode, bh->b_data, bh->b_size,
773 						scan, name, NULL);
774 			if (dent)
775 				goto got_dent;
776 			leaf = (struct gfs2_leaf *)bh->b_data;
777 			ln = be64_to_cpu(leaf->lf_next);
778 			brelse(bh);
779 			if (!ln)
780 				break;
781 
782 			error = get_leaf(ip, ln, &bh);
783 		} while(!error);
784 
785 		return error ? ERR_PTR(error) : NULL;
786 	}
787 
788 
789 	error = gfs2_meta_inode_buffer(ip, &bh);
790 	if (error)
791 		return ERR_PTR(error);
792 	dent = gfs2_dirent_scan(inode, bh->b_data, bh->b_size, scan, name, NULL);
793 got_dent:
794 	if (unlikely(dent == NULL || IS_ERR(dent))) {
795 		brelse(bh);
796 		bh = NULL;
797 	}
798 	*pbh = bh;
799 	return dent;
800 }
801 
802 static struct gfs2_leaf *new_leaf(struct inode *inode, struct buffer_head **pbh, u16 depth)
803 {
804 	struct gfs2_inode *ip = GFS2_I(inode);
805 	unsigned int n = 1;
806 	u64 bn;
807 	int error;
808 	struct buffer_head *bh;
809 	struct gfs2_leaf *leaf;
810 	struct gfs2_dirent *dent;
811 	struct qstr name = { .name = "", .len = 0, .hash = 0 };
812 
813 	error = gfs2_alloc_block(ip, &bn, &n);
814 	if (error)
815 		return NULL;
816 	bh = gfs2_meta_new(ip->i_gl, bn);
817 	if (!bh)
818 		return NULL;
819 
820 	gfs2_trans_add_unrevoke(GFS2_SB(inode), bn, 1);
821 	gfs2_trans_add_bh(ip->i_gl, bh, 1);
822 	gfs2_metatype_set(bh, GFS2_METATYPE_LF, GFS2_FORMAT_LF);
823 	leaf = (struct gfs2_leaf *)bh->b_data;
824 	leaf->lf_depth = cpu_to_be16(depth);
825 	leaf->lf_entries = 0;
826 	leaf->lf_dirent_format = cpu_to_be32(GFS2_FORMAT_DE);
827 	leaf->lf_next = 0;
828 	memset(leaf->lf_reserved, 0, sizeof(leaf->lf_reserved));
829 	dent = (struct gfs2_dirent *)(leaf+1);
830 	gfs2_qstr2dirent(&name, bh->b_size - sizeof(struct gfs2_leaf), dent);
831 	*pbh = bh;
832 	return leaf;
833 }
834 
835 /**
836  * dir_make_exhash - Convert a stuffed directory into an ExHash directory
837  * @dip: The GFS2 inode
838  *
839  * Returns: 0 on success, error code otherwise
840  */
841 
842 static int dir_make_exhash(struct inode *inode)
843 {
844 	struct gfs2_inode *dip = GFS2_I(inode);
845 	struct gfs2_sbd *sdp = GFS2_SB(inode);
846 	struct gfs2_dirent *dent;
847 	struct qstr args;
848 	struct buffer_head *bh, *dibh;
849 	struct gfs2_leaf *leaf;
850 	int y;
851 	u32 x;
852 	__be64 *lp;
853 	u64 bn;
854 	int error;
855 
856 	error = gfs2_meta_inode_buffer(dip, &dibh);
857 	if (error)
858 		return error;
859 
860 	/*  Turn over a new leaf  */
861 
862 	leaf = new_leaf(inode, &bh, 0);
863 	if (!leaf)
864 		return -ENOSPC;
865 	bn = bh->b_blocknr;
866 
867 	gfs2_assert(sdp, dip->i_entries < (1 << 16));
868 	leaf->lf_entries = cpu_to_be16(dip->i_entries);
869 
870 	/*  Copy dirents  */
871 
872 	gfs2_buffer_copy_tail(bh, sizeof(struct gfs2_leaf), dibh,
873 			     sizeof(struct gfs2_dinode));
874 
875 	/*  Find last entry  */
876 
877 	x = 0;
878 	args.len = bh->b_size - sizeof(struct gfs2_dinode) +
879 		   sizeof(struct gfs2_leaf);
880 	args.name = bh->b_data;
881 	dent = gfs2_dirent_scan(&dip->i_inode, bh->b_data, bh->b_size,
882 				gfs2_dirent_last, &args, NULL);
883 	if (!dent) {
884 		brelse(bh);
885 		brelse(dibh);
886 		return -EIO;
887 	}
888 	if (IS_ERR(dent)) {
889 		brelse(bh);
890 		brelse(dibh);
891 		return PTR_ERR(dent);
892 	}
893 
894 	/*  Adjust the last dirent's record length
895 	   (Remember that dent still points to the last entry.)  */
896 
897 	dent->de_rec_len = cpu_to_be16(be16_to_cpu(dent->de_rec_len) +
898 		sizeof(struct gfs2_dinode) -
899 		sizeof(struct gfs2_leaf));
900 
901 	brelse(bh);
902 
903 	/*  We're done with the new leaf block, now setup the new
904 	    hash table.  */
905 
906 	gfs2_trans_add_bh(dip->i_gl, dibh, 1);
907 	gfs2_buffer_clear_tail(dibh, sizeof(struct gfs2_dinode));
908 
909 	lp = (__be64 *)(dibh->b_data + sizeof(struct gfs2_dinode));
910 
911 	for (x = sdp->sd_hash_ptrs; x--; lp++)
912 		*lp = cpu_to_be64(bn);
913 
914 	dip->i_disksize = sdp->sd_sb.sb_bsize / 2;
915 	gfs2_add_inode_blocks(&dip->i_inode, 1);
916 	dip->i_diskflags |= GFS2_DIF_EXHASH;
917 
918 	for (x = sdp->sd_hash_ptrs, y = -1; x; x >>= 1, y++) ;
919 	dip->i_depth = y;
920 
921 	gfs2_dinode_out(dip, dibh->b_data);
922 
923 	brelse(dibh);
924 
925 	return 0;
926 }
927 
928 /**
929  * dir_split_leaf - Split a leaf block into two
930  * @dip: The GFS2 inode
931  * @index:
932  * @leaf_no:
933  *
934  * Returns: 0 on success, error code on failure
935  */
936 
937 static int dir_split_leaf(struct inode *inode, const struct qstr *name)
938 {
939 	struct gfs2_inode *dip = GFS2_I(inode);
940 	struct buffer_head *nbh, *obh, *dibh;
941 	struct gfs2_leaf *nleaf, *oleaf;
942 	struct gfs2_dirent *dent = NULL, *prev = NULL, *next = NULL, *new;
943 	u32 start, len, half_len, divider;
944 	u64 bn, leaf_no;
945 	__be64 *lp;
946 	u32 index;
947 	int x, moved = 0;
948 	int error;
949 
950 	index = name->hash >> (32 - dip->i_depth);
951 	error = get_leaf_nr(dip, index, &leaf_no);
952 	if (error)
953 		return error;
954 
955 	/*  Get the old leaf block  */
956 	error = get_leaf(dip, leaf_no, &obh);
957 	if (error)
958 		return error;
959 
960 	oleaf = (struct gfs2_leaf *)obh->b_data;
961 	if (dip->i_depth == be16_to_cpu(oleaf->lf_depth)) {
962 		brelse(obh);
963 		return 1; /* can't split */
964 	}
965 
966 	gfs2_trans_add_bh(dip->i_gl, obh, 1);
967 
968 	nleaf = new_leaf(inode, &nbh, be16_to_cpu(oleaf->lf_depth) + 1);
969 	if (!nleaf) {
970 		brelse(obh);
971 		return -ENOSPC;
972 	}
973 	bn = nbh->b_blocknr;
974 
975 	/*  Compute the start and len of leaf pointers in the hash table.  */
976 	len = 1 << (dip->i_depth - be16_to_cpu(oleaf->lf_depth));
977 	half_len = len >> 1;
978 	if (!half_len) {
979 		printk(KERN_WARNING "i_depth %u lf_depth %u index %u\n", dip->i_depth, be16_to_cpu(oleaf->lf_depth), index);
980 		gfs2_consist_inode(dip);
981 		error = -EIO;
982 		goto fail_brelse;
983 	}
984 
985 	start = (index & ~(len - 1));
986 
987 	/* Change the pointers.
988 	   Don't bother distinguishing stuffed from non-stuffed.
989 	   This code is complicated enough already. */
990 	lp = kmalloc(half_len * sizeof(__be64), GFP_NOFS | __GFP_NOFAIL);
991 	/*  Change the pointers  */
992 	for (x = 0; x < half_len; x++)
993 		lp[x] = cpu_to_be64(bn);
994 
995 	error = gfs2_dir_write_data(dip, (char *)lp, start * sizeof(u64),
996 				    half_len * sizeof(u64));
997 	if (error != half_len * sizeof(u64)) {
998 		if (error >= 0)
999 			error = -EIO;
1000 		goto fail_lpfree;
1001 	}
1002 
1003 	kfree(lp);
1004 
1005 	/*  Compute the divider  */
1006 	divider = (start + half_len) << (32 - dip->i_depth);
1007 
1008 	/*  Copy the entries  */
1009 	dirent_first(dip, obh, &dent);
1010 
1011 	do {
1012 		next = dent;
1013 		if (dirent_next(dip, obh, &next))
1014 			next = NULL;
1015 
1016 		if (!gfs2_dirent_sentinel(dent) &&
1017 		    be32_to_cpu(dent->de_hash) < divider) {
1018 			struct qstr str;
1019 			str.name = (char*)(dent+1);
1020 			str.len = be16_to_cpu(dent->de_name_len);
1021 			str.hash = be32_to_cpu(dent->de_hash);
1022 			new = gfs2_dirent_alloc(inode, nbh, &str);
1023 			if (IS_ERR(new)) {
1024 				error = PTR_ERR(new);
1025 				break;
1026 			}
1027 
1028 			new->de_inum = dent->de_inum; /* No endian worries */
1029 			new->de_type = dent->de_type; /* No endian worries */
1030 			be16_add_cpu(&nleaf->lf_entries, 1);
1031 
1032 			dirent_del(dip, obh, prev, dent);
1033 
1034 			if (!oleaf->lf_entries)
1035 				gfs2_consist_inode(dip);
1036 			be16_add_cpu(&oleaf->lf_entries, -1);
1037 
1038 			if (!prev)
1039 				prev = dent;
1040 
1041 			moved = 1;
1042 		} else {
1043 			prev = dent;
1044 		}
1045 		dent = next;
1046 	} while (dent);
1047 
1048 	oleaf->lf_depth = nleaf->lf_depth;
1049 
1050 	error = gfs2_meta_inode_buffer(dip, &dibh);
1051 	if (!gfs2_assert_withdraw(GFS2_SB(&dip->i_inode), !error)) {
1052 		gfs2_trans_add_bh(dip->i_gl, dibh, 1);
1053 		gfs2_add_inode_blocks(&dip->i_inode, 1);
1054 		gfs2_dinode_out(dip, dibh->b_data);
1055 		brelse(dibh);
1056 	}
1057 
1058 	brelse(obh);
1059 	brelse(nbh);
1060 
1061 	return error;
1062 
1063 fail_lpfree:
1064 	kfree(lp);
1065 
1066 fail_brelse:
1067 	brelse(obh);
1068 	brelse(nbh);
1069 	return error;
1070 }
1071 
1072 /**
1073  * dir_double_exhash - Double size of ExHash table
1074  * @dip: The GFS2 dinode
1075  *
1076  * Returns: 0 on success, error code on failure
1077  */
1078 
1079 static int dir_double_exhash(struct gfs2_inode *dip)
1080 {
1081 	struct gfs2_sbd *sdp = GFS2_SB(&dip->i_inode);
1082 	struct buffer_head *dibh;
1083 	u32 hsize;
1084 	u64 *buf;
1085 	u64 *from, *to;
1086 	u64 block;
1087 	int x;
1088 	int error = 0;
1089 
1090 	hsize = 1 << dip->i_depth;
1091 	if (hsize * sizeof(u64) != dip->i_disksize) {
1092 		gfs2_consist_inode(dip);
1093 		return -EIO;
1094 	}
1095 
1096 	/*  Allocate both the "from" and "to" buffers in one big chunk  */
1097 
1098 	buf = kcalloc(3, sdp->sd_hash_bsize, GFP_NOFS | __GFP_NOFAIL);
1099 
1100 	for (block = dip->i_disksize >> sdp->sd_hash_bsize_shift; block--;) {
1101 		error = gfs2_dir_read_data(dip, (char *)buf,
1102 					    block * sdp->sd_hash_bsize,
1103 					    sdp->sd_hash_bsize, 1);
1104 		if (error != sdp->sd_hash_bsize) {
1105 			if (error >= 0)
1106 				error = -EIO;
1107 			goto fail;
1108 		}
1109 
1110 		from = buf;
1111 		to = (u64 *)((char *)buf + sdp->sd_hash_bsize);
1112 
1113 		for (x = sdp->sd_hash_ptrs; x--; from++) {
1114 			*to++ = *from;	/*  No endianess worries  */
1115 			*to++ = *from;
1116 		}
1117 
1118 		error = gfs2_dir_write_data(dip,
1119 					     (char *)buf + sdp->sd_hash_bsize,
1120 					     block * sdp->sd_sb.sb_bsize,
1121 					     sdp->sd_sb.sb_bsize);
1122 		if (error != sdp->sd_sb.sb_bsize) {
1123 			if (error >= 0)
1124 				error = -EIO;
1125 			goto fail;
1126 		}
1127 	}
1128 
1129 	kfree(buf);
1130 
1131 	error = gfs2_meta_inode_buffer(dip, &dibh);
1132 	if (!gfs2_assert_withdraw(sdp, !error)) {
1133 		dip->i_depth++;
1134 		gfs2_dinode_out(dip, dibh->b_data);
1135 		brelse(dibh);
1136 	}
1137 
1138 	return error;
1139 
1140 fail:
1141 	kfree(buf);
1142 	return error;
1143 }
1144 
1145 /**
1146  * compare_dents - compare directory entries by hash value
1147  * @a: first dent
1148  * @b: second dent
1149  *
1150  * When comparing the hash entries of @a to @b:
1151  *   gt: returns 1
1152  *   lt: returns -1
1153  *   eq: returns 0
1154  */
1155 
1156 static int compare_dents(const void *a, const void *b)
1157 {
1158 	const struct gfs2_dirent *dent_a, *dent_b;
1159 	u32 hash_a, hash_b;
1160 	int ret = 0;
1161 
1162 	dent_a = *(const struct gfs2_dirent **)a;
1163 	hash_a = be32_to_cpu(dent_a->de_hash);
1164 
1165 	dent_b = *(const struct gfs2_dirent **)b;
1166 	hash_b = be32_to_cpu(dent_b->de_hash);
1167 
1168 	if (hash_a > hash_b)
1169 		ret = 1;
1170 	else if (hash_a < hash_b)
1171 		ret = -1;
1172 	else {
1173 		unsigned int len_a = be16_to_cpu(dent_a->de_name_len);
1174 		unsigned int len_b = be16_to_cpu(dent_b->de_name_len);
1175 
1176 		if (len_a > len_b)
1177 			ret = 1;
1178 		else if (len_a < len_b)
1179 			ret = -1;
1180 		else
1181 			ret = memcmp(dent_a + 1, dent_b + 1, len_a);
1182 	}
1183 
1184 	return ret;
1185 }
1186 
1187 /**
1188  * do_filldir_main - read out directory entries
1189  * @dip: The GFS2 inode
1190  * @offset: The offset in the file to read from
1191  * @opaque: opaque data to pass to filldir
1192  * @filldir: The function to pass entries to
1193  * @darr: an array of struct gfs2_dirent pointers to read
1194  * @entries: the number of entries in darr
1195  * @copied: pointer to int that's non-zero if a entry has been copied out
1196  *
1197  * Jump through some hoops to make sure that if there are hash collsions,
1198  * they are read out at the beginning of a buffer.  We want to minimize
1199  * the possibility that they will fall into different readdir buffers or
1200  * that someone will want to seek to that location.
1201  *
1202  * Returns: errno, >0 on exception from filldir
1203  */
1204 
1205 static int do_filldir_main(struct gfs2_inode *dip, u64 *offset,
1206 			   void *opaque, filldir_t filldir,
1207 			   const struct gfs2_dirent **darr, u32 entries,
1208 			   int *copied)
1209 {
1210 	const struct gfs2_dirent *dent, *dent_next;
1211 	u64 off, off_next;
1212 	unsigned int x, y;
1213 	int run = 0;
1214 	int error = 0;
1215 
1216 	sort(darr, entries, sizeof(struct gfs2_dirent *), compare_dents, NULL);
1217 
1218 	dent_next = darr[0];
1219 	off_next = be32_to_cpu(dent_next->de_hash);
1220 	off_next = gfs2_disk_hash2offset(off_next);
1221 
1222 	for (x = 0, y = 1; x < entries; x++, y++) {
1223 		dent = dent_next;
1224 		off = off_next;
1225 
1226 		if (y < entries) {
1227 			dent_next = darr[y];
1228 			off_next = be32_to_cpu(dent_next->de_hash);
1229 			off_next = gfs2_disk_hash2offset(off_next);
1230 
1231 			if (off < *offset)
1232 				continue;
1233 			*offset = off;
1234 
1235 			if (off_next == off) {
1236 				if (*copied && !run)
1237 					return 1;
1238 				run = 1;
1239 			} else
1240 				run = 0;
1241 		} else {
1242 			if (off < *offset)
1243 				continue;
1244 			*offset = off;
1245 		}
1246 
1247 		error = filldir(opaque, (const char *)(dent + 1),
1248 				be16_to_cpu(dent->de_name_len),
1249 				off, be64_to_cpu(dent->de_inum.no_addr),
1250 				be16_to_cpu(dent->de_type));
1251 		if (error)
1252 			return 1;
1253 
1254 		*copied = 1;
1255 	}
1256 
1257 	/* Increment the *offset by one, so the next time we come into the
1258 	   do_filldir fxn, we get the next entry instead of the last one in the
1259 	   current leaf */
1260 
1261 	(*offset)++;
1262 
1263 	return 0;
1264 }
1265 
1266 static int gfs2_dir_read_leaf(struct inode *inode, u64 *offset, void *opaque,
1267 			      filldir_t filldir, int *copied, unsigned *depth,
1268 			      u64 leaf_no)
1269 {
1270 	struct gfs2_inode *ip = GFS2_I(inode);
1271 	struct gfs2_sbd *sdp = GFS2_SB(inode);
1272 	struct buffer_head *bh;
1273 	struct gfs2_leaf *lf;
1274 	unsigned entries = 0, entries2 = 0;
1275 	unsigned leaves = 0;
1276 	const struct gfs2_dirent **darr, *dent;
1277 	struct dirent_gather g;
1278 	struct buffer_head **larr;
1279 	int leaf = 0;
1280 	int error, i;
1281 	u64 lfn = leaf_no;
1282 
1283 	do {
1284 		error = get_leaf(ip, lfn, &bh);
1285 		if (error)
1286 			goto out;
1287 		lf = (struct gfs2_leaf *)bh->b_data;
1288 		if (leaves == 0)
1289 			*depth = be16_to_cpu(lf->lf_depth);
1290 		entries += be16_to_cpu(lf->lf_entries);
1291 		leaves++;
1292 		lfn = be64_to_cpu(lf->lf_next);
1293 		brelse(bh);
1294 	} while(lfn);
1295 
1296 	if (!entries)
1297 		return 0;
1298 
1299 	error = -ENOMEM;
1300 	/*
1301 	 * The extra 99 entries are not normally used, but are a buffer
1302 	 * zone in case the number of entries in the leaf is corrupt.
1303 	 * 99 is the maximum number of entries that can fit in a single
1304 	 * leaf block.
1305 	 */
1306 	larr = vmalloc((leaves + entries + 99) * sizeof(void *));
1307 	if (!larr)
1308 		goto out;
1309 	darr = (const struct gfs2_dirent **)(larr + leaves);
1310 	g.pdent = darr;
1311 	g.offset = 0;
1312 	lfn = leaf_no;
1313 
1314 	do {
1315 		error = get_leaf(ip, lfn, &bh);
1316 		if (error)
1317 			goto out_kfree;
1318 		lf = (struct gfs2_leaf *)bh->b_data;
1319 		lfn = be64_to_cpu(lf->lf_next);
1320 		if (lf->lf_entries) {
1321 			entries2 += be16_to_cpu(lf->lf_entries);
1322 			dent = gfs2_dirent_scan(inode, bh->b_data, bh->b_size,
1323 						gfs2_dirent_gather, NULL, &g);
1324 			error = PTR_ERR(dent);
1325 			if (IS_ERR(dent))
1326 				goto out_kfree;
1327 			if (entries2 != g.offset) {
1328 				fs_warn(sdp, "Number of entries corrupt in dir "
1329 						"leaf %llu, entries2 (%u) != "
1330 						"g.offset (%u)\n",
1331 					(unsigned long long)bh->b_blocknr,
1332 					entries2, g.offset);
1333 
1334 				error = -EIO;
1335 				goto out_kfree;
1336 			}
1337 			error = 0;
1338 			larr[leaf++] = bh;
1339 		} else {
1340 			brelse(bh);
1341 		}
1342 	} while(lfn);
1343 
1344 	BUG_ON(entries2 != entries);
1345 	error = do_filldir_main(ip, offset, opaque, filldir, darr,
1346 				entries, copied);
1347 out_kfree:
1348 	for(i = 0; i < leaf; i++)
1349 		brelse(larr[i]);
1350 	vfree(larr);
1351 out:
1352 	return error;
1353 }
1354 
1355 /**
1356  * dir_e_read - Reads the entries from a directory into a filldir buffer
1357  * @dip: dinode pointer
1358  * @offset: the hash of the last entry read shifted to the right once
1359  * @opaque: buffer for the filldir function to fill
1360  * @filldir: points to the filldir function to use
1361  *
1362  * Returns: errno
1363  */
1364 
1365 static int dir_e_read(struct inode *inode, u64 *offset, void *opaque,
1366 		      filldir_t filldir)
1367 {
1368 	struct gfs2_inode *dip = GFS2_I(inode);
1369 	struct gfs2_sbd *sdp = GFS2_SB(inode);
1370 	u32 hsize, len = 0;
1371 	u32 ht_offset, lp_offset, ht_offset_cur = -1;
1372 	u32 hash, index;
1373 	__be64 *lp;
1374 	int copied = 0;
1375 	int error = 0;
1376 	unsigned depth = 0;
1377 
1378 	hsize = 1 << dip->i_depth;
1379 	if (hsize * sizeof(u64) != dip->i_disksize) {
1380 		gfs2_consist_inode(dip);
1381 		return -EIO;
1382 	}
1383 
1384 	hash = gfs2_dir_offset2hash(*offset);
1385 	index = hash >> (32 - dip->i_depth);
1386 
1387 	lp = kmalloc(sdp->sd_hash_bsize, GFP_NOFS);
1388 	if (!lp)
1389 		return -ENOMEM;
1390 
1391 	while (index < hsize) {
1392 		lp_offset = index & (sdp->sd_hash_ptrs - 1);
1393 		ht_offset = index - lp_offset;
1394 
1395 		if (ht_offset_cur != ht_offset) {
1396 			error = gfs2_dir_read_data(dip, (char *)lp,
1397 						ht_offset * sizeof(__be64),
1398 						sdp->sd_hash_bsize, 1);
1399 			if (error != sdp->sd_hash_bsize) {
1400 				if (error >= 0)
1401 					error = -EIO;
1402 				goto out;
1403 			}
1404 			ht_offset_cur = ht_offset;
1405 		}
1406 
1407 		error = gfs2_dir_read_leaf(inode, offset, opaque, filldir,
1408 					   &copied, &depth,
1409 					   be64_to_cpu(lp[lp_offset]));
1410 		if (error)
1411 			break;
1412 
1413 		len = 1 << (dip->i_depth - depth);
1414 		index = (index & ~(len - 1)) + len;
1415 	}
1416 
1417 out:
1418 	kfree(lp);
1419 	if (error > 0)
1420 		error = 0;
1421 	return error;
1422 }
1423 
1424 int gfs2_dir_read(struct inode *inode, u64 *offset, void *opaque,
1425 		  filldir_t filldir)
1426 {
1427 	struct gfs2_inode *dip = GFS2_I(inode);
1428 	struct gfs2_sbd *sdp = GFS2_SB(inode);
1429 	struct dirent_gather g;
1430 	const struct gfs2_dirent **darr, *dent;
1431 	struct buffer_head *dibh;
1432 	int copied = 0;
1433 	int error;
1434 
1435 	if (!dip->i_entries)
1436 		return 0;
1437 
1438 	if (dip->i_diskflags & GFS2_DIF_EXHASH)
1439 		return dir_e_read(inode, offset, opaque, filldir);
1440 
1441 	if (!gfs2_is_stuffed(dip)) {
1442 		gfs2_consist_inode(dip);
1443 		return -EIO;
1444 	}
1445 
1446 	error = gfs2_meta_inode_buffer(dip, &dibh);
1447 	if (error)
1448 		return error;
1449 
1450 	error = -ENOMEM;
1451 	/* 96 is max number of dirents which can be stuffed into an inode */
1452 	darr = kmalloc(96 * sizeof(struct gfs2_dirent *), GFP_NOFS);
1453 	if (darr) {
1454 		g.pdent = darr;
1455 		g.offset = 0;
1456 		dent = gfs2_dirent_scan(inode, dibh->b_data, dibh->b_size,
1457 					gfs2_dirent_gather, NULL, &g);
1458 		if (IS_ERR(dent)) {
1459 			error = PTR_ERR(dent);
1460 			goto out;
1461 		}
1462 		if (dip->i_entries != g.offset) {
1463 			fs_warn(sdp, "Number of entries corrupt in dir %llu, "
1464 				"ip->i_entries (%u) != g.offset (%u)\n",
1465 				(unsigned long long)dip->i_no_addr,
1466 				dip->i_entries,
1467 				g.offset);
1468 			error = -EIO;
1469 			goto out;
1470 		}
1471 		error = do_filldir_main(dip, offset, opaque, filldir, darr,
1472 					dip->i_entries, &copied);
1473 out:
1474 		kfree(darr);
1475 	}
1476 
1477 	if (error > 0)
1478 		error = 0;
1479 
1480 	brelse(dibh);
1481 
1482 	return error;
1483 }
1484 
1485 /**
1486  * gfs2_dir_search - Search a directory
1487  * @dip: The GFS2 inode
1488  * @filename:
1489  * @inode:
1490  *
1491  * This routine searches a directory for a file or another directory.
1492  * Assumes a glock is held on dip.
1493  *
1494  * Returns: errno
1495  */
1496 
1497 struct inode *gfs2_dir_search(struct inode *dir, const struct qstr *name)
1498 {
1499 	struct buffer_head *bh;
1500 	struct gfs2_dirent *dent;
1501 	struct inode *inode;
1502 
1503 	dent = gfs2_dirent_search(dir, name, gfs2_dirent_find, &bh);
1504 	if (dent) {
1505 		if (IS_ERR(dent))
1506 			return ERR_CAST(dent);
1507 		inode = gfs2_inode_lookup(dir->i_sb,
1508 				be16_to_cpu(dent->de_type),
1509 				be64_to_cpu(dent->de_inum.no_addr),
1510 				be64_to_cpu(dent->de_inum.no_formal_ino), 0);
1511 		brelse(bh);
1512 		return inode;
1513 	}
1514 	return ERR_PTR(-ENOENT);
1515 }
1516 
1517 int gfs2_dir_check(struct inode *dir, const struct qstr *name,
1518 		   const struct gfs2_inode *ip)
1519 {
1520 	struct buffer_head *bh;
1521 	struct gfs2_dirent *dent;
1522 	int ret = -ENOENT;
1523 
1524 	dent = gfs2_dirent_search(dir, name, gfs2_dirent_find, &bh);
1525 	if (dent) {
1526 		if (IS_ERR(dent))
1527 			return PTR_ERR(dent);
1528 		if (ip) {
1529 			if (be64_to_cpu(dent->de_inum.no_addr) != ip->i_no_addr)
1530 				goto out;
1531 			if (be64_to_cpu(dent->de_inum.no_formal_ino) !=
1532 			    ip->i_no_formal_ino)
1533 				goto out;
1534 			if (unlikely(IF2DT(ip->i_inode.i_mode) !=
1535 			    be16_to_cpu(dent->de_type))) {
1536 				gfs2_consist_inode(GFS2_I(dir));
1537 				ret = -EIO;
1538 				goto out;
1539 			}
1540 		}
1541 		ret = 0;
1542 out:
1543 		brelse(bh);
1544 	}
1545 	return ret;
1546 }
1547 
1548 static int dir_new_leaf(struct inode *inode, const struct qstr *name)
1549 {
1550 	struct buffer_head *bh, *obh;
1551 	struct gfs2_inode *ip = GFS2_I(inode);
1552 	struct gfs2_leaf *leaf, *oleaf;
1553 	int error;
1554 	u32 index;
1555 	u64 bn;
1556 
1557 	index = name->hash >> (32 - ip->i_depth);
1558 	error = get_first_leaf(ip, index, &obh);
1559 	if (error)
1560 		return error;
1561 	do {
1562 		oleaf = (struct gfs2_leaf *)obh->b_data;
1563 		bn = be64_to_cpu(oleaf->lf_next);
1564 		if (!bn)
1565 			break;
1566 		brelse(obh);
1567 		error = get_leaf(ip, bn, &obh);
1568 		if (error)
1569 			return error;
1570 	} while(1);
1571 
1572 	gfs2_trans_add_bh(ip->i_gl, obh, 1);
1573 
1574 	leaf = new_leaf(inode, &bh, be16_to_cpu(oleaf->lf_depth));
1575 	if (!leaf) {
1576 		brelse(obh);
1577 		return -ENOSPC;
1578 	}
1579 	oleaf->lf_next = cpu_to_be64(bh->b_blocknr);
1580 	brelse(bh);
1581 	brelse(obh);
1582 
1583 	error = gfs2_meta_inode_buffer(ip, &bh);
1584 	if (error)
1585 		return error;
1586 	gfs2_trans_add_bh(ip->i_gl, bh, 1);
1587 	gfs2_add_inode_blocks(&ip->i_inode, 1);
1588 	gfs2_dinode_out(ip, bh->b_data);
1589 	brelse(bh);
1590 	return 0;
1591 }
1592 
1593 /**
1594  * gfs2_dir_add - Add new filename into directory
1595  * @dip: The GFS2 inode
1596  * @filename: The new name
1597  * @inode: The inode number of the entry
1598  * @type: The type of the entry
1599  *
1600  * Returns: 0 on success, error code on failure
1601  */
1602 
1603 int gfs2_dir_add(struct inode *inode, const struct qstr *name,
1604 		 const struct gfs2_inode *nip, unsigned type)
1605 {
1606 	struct gfs2_inode *ip = GFS2_I(inode);
1607 	struct buffer_head *bh;
1608 	struct gfs2_dirent *dent;
1609 	struct gfs2_leaf *leaf;
1610 	int error;
1611 
1612 	while(1) {
1613 		dent = gfs2_dirent_search(inode, name, gfs2_dirent_find_space,
1614 					  &bh);
1615 		if (dent) {
1616 			if (IS_ERR(dent))
1617 				return PTR_ERR(dent);
1618 			dent = gfs2_init_dirent(inode, dent, name, bh);
1619 			gfs2_inum_out(nip, dent);
1620 			dent->de_type = cpu_to_be16(type);
1621 			if (ip->i_diskflags & GFS2_DIF_EXHASH) {
1622 				leaf = (struct gfs2_leaf *)bh->b_data;
1623 				be16_add_cpu(&leaf->lf_entries, 1);
1624 			}
1625 			brelse(bh);
1626 			error = gfs2_meta_inode_buffer(ip, &bh);
1627 			if (error)
1628 				break;
1629 			gfs2_trans_add_bh(ip->i_gl, bh, 1);
1630 			ip->i_entries++;
1631 			ip->i_inode.i_mtime = ip->i_inode.i_ctime = CURRENT_TIME;
1632 			gfs2_dinode_out(ip, bh->b_data);
1633 			brelse(bh);
1634 			error = 0;
1635 			break;
1636 		}
1637 		if (!(ip->i_diskflags & GFS2_DIF_EXHASH)) {
1638 			error = dir_make_exhash(inode);
1639 			if (error)
1640 				break;
1641 			continue;
1642 		}
1643 		error = dir_split_leaf(inode, name);
1644 		if (error == 0)
1645 			continue;
1646 		if (error < 0)
1647 			break;
1648 		if (ip->i_depth < GFS2_DIR_MAX_DEPTH) {
1649 			error = dir_double_exhash(ip);
1650 			if (error)
1651 				break;
1652 			error = dir_split_leaf(inode, name);
1653 			if (error < 0)
1654 				break;
1655 			if (error == 0)
1656 				continue;
1657 		}
1658 		error = dir_new_leaf(inode, name);
1659 		if (!error)
1660 			continue;
1661 		error = -ENOSPC;
1662 		break;
1663 	}
1664 	return error;
1665 }
1666 
1667 
1668 /**
1669  * gfs2_dir_del - Delete a directory entry
1670  * @dip: The GFS2 inode
1671  * @filename: The filename
1672  *
1673  * Returns: 0 on success, error code on failure
1674  */
1675 
1676 int gfs2_dir_del(struct gfs2_inode *dip, const struct qstr *name)
1677 {
1678 	struct gfs2_dirent *dent, *prev = NULL;
1679 	struct buffer_head *bh;
1680 	int error;
1681 
1682 	/* Returns _either_ the entry (if its first in block) or the
1683 	   previous entry otherwise */
1684 	dent = gfs2_dirent_search(&dip->i_inode, name, gfs2_dirent_prev, &bh);
1685 	if (!dent) {
1686 		gfs2_consist_inode(dip);
1687 		return -EIO;
1688 	}
1689 	if (IS_ERR(dent)) {
1690 		gfs2_consist_inode(dip);
1691 		return PTR_ERR(dent);
1692 	}
1693 	/* If not first in block, adjust pointers accordingly */
1694 	if (gfs2_dirent_find(dent, name, NULL) == 0) {
1695 		prev = dent;
1696 		dent = (struct gfs2_dirent *)((char *)dent + be16_to_cpu(prev->de_rec_len));
1697 	}
1698 
1699 	dirent_del(dip, bh, prev, dent);
1700 	if (dip->i_diskflags & GFS2_DIF_EXHASH) {
1701 		struct gfs2_leaf *leaf = (struct gfs2_leaf *)bh->b_data;
1702 		u16 entries = be16_to_cpu(leaf->lf_entries);
1703 		if (!entries)
1704 			gfs2_consist_inode(dip);
1705 		leaf->lf_entries = cpu_to_be16(--entries);
1706 	}
1707 	brelse(bh);
1708 
1709 	error = gfs2_meta_inode_buffer(dip, &bh);
1710 	if (error)
1711 		return error;
1712 
1713 	if (!dip->i_entries)
1714 		gfs2_consist_inode(dip);
1715 	gfs2_trans_add_bh(dip->i_gl, bh, 1);
1716 	dip->i_entries--;
1717 	dip->i_inode.i_mtime = dip->i_inode.i_ctime = CURRENT_TIME;
1718 	gfs2_dinode_out(dip, bh->b_data);
1719 	brelse(bh);
1720 	mark_inode_dirty(&dip->i_inode);
1721 
1722 	return error;
1723 }
1724 
1725 /**
1726  * gfs2_dir_mvino - Change inode number of directory entry
1727  * @dip: The GFS2 inode
1728  * @filename:
1729  * @new_inode:
1730  *
1731  * This routine changes the inode number of a directory entry.  It's used
1732  * by rename to change ".." when a directory is moved.
1733  * Assumes a glock is held on dvp.
1734  *
1735  * Returns: errno
1736  */
1737 
1738 int gfs2_dir_mvino(struct gfs2_inode *dip, const struct qstr *filename,
1739 		   const struct gfs2_inode *nip, unsigned int new_type)
1740 {
1741 	struct buffer_head *bh;
1742 	struct gfs2_dirent *dent;
1743 	int error;
1744 
1745 	dent = gfs2_dirent_search(&dip->i_inode, filename, gfs2_dirent_find, &bh);
1746 	if (!dent) {
1747 		gfs2_consist_inode(dip);
1748 		return -EIO;
1749 	}
1750 	if (IS_ERR(dent))
1751 		return PTR_ERR(dent);
1752 
1753 	gfs2_trans_add_bh(dip->i_gl, bh, 1);
1754 	gfs2_inum_out(nip, dent);
1755 	dent->de_type = cpu_to_be16(new_type);
1756 
1757 	if (dip->i_diskflags & GFS2_DIF_EXHASH) {
1758 		brelse(bh);
1759 		error = gfs2_meta_inode_buffer(dip, &bh);
1760 		if (error)
1761 			return error;
1762 		gfs2_trans_add_bh(dip->i_gl, bh, 1);
1763 	}
1764 
1765 	dip->i_inode.i_mtime = dip->i_inode.i_ctime = CURRENT_TIME;
1766 	gfs2_dinode_out(dip, bh->b_data);
1767 	brelse(bh);
1768 	return 0;
1769 }
1770 
1771 /**
1772  * foreach_leaf - call a function for each leaf in a directory
1773  * @dip: the directory
1774  * @lc: the function to call for each each
1775  * @data: private data to pass to it
1776  *
1777  * Returns: errno
1778  */
1779 
1780 static int foreach_leaf(struct gfs2_inode *dip, leaf_call_t lc, void *data)
1781 {
1782 	struct gfs2_sbd *sdp = GFS2_SB(&dip->i_inode);
1783 	struct buffer_head *bh;
1784 	struct gfs2_leaf *leaf;
1785 	u32 hsize, len;
1786 	u32 ht_offset, lp_offset, ht_offset_cur = -1;
1787 	u32 index = 0;
1788 	__be64 *lp;
1789 	u64 leaf_no;
1790 	int error = 0;
1791 
1792 	hsize = 1 << dip->i_depth;
1793 	if (hsize * sizeof(u64) != dip->i_disksize) {
1794 		gfs2_consist_inode(dip);
1795 		return -EIO;
1796 	}
1797 
1798 	lp = kmalloc(sdp->sd_hash_bsize, GFP_NOFS);
1799 	if (!lp)
1800 		return -ENOMEM;
1801 
1802 	while (index < hsize) {
1803 		lp_offset = index & (sdp->sd_hash_ptrs - 1);
1804 		ht_offset = index - lp_offset;
1805 
1806 		if (ht_offset_cur != ht_offset) {
1807 			error = gfs2_dir_read_data(dip, (char *)lp,
1808 						ht_offset * sizeof(__be64),
1809 						sdp->sd_hash_bsize, 1);
1810 			if (error != sdp->sd_hash_bsize) {
1811 				if (error >= 0)
1812 					error = -EIO;
1813 				goto out;
1814 			}
1815 			ht_offset_cur = ht_offset;
1816 		}
1817 
1818 		leaf_no = be64_to_cpu(lp[lp_offset]);
1819 		if (leaf_no) {
1820 			error = get_leaf(dip, leaf_no, &bh);
1821 			if (error)
1822 				goto out;
1823 			leaf = (struct gfs2_leaf *)bh->b_data;
1824 			len = 1 << (dip->i_depth - be16_to_cpu(leaf->lf_depth));
1825 			brelse(bh);
1826 
1827 			error = lc(dip, index, len, leaf_no, data);
1828 			if (error)
1829 				goto out;
1830 
1831 			index = (index & ~(len - 1)) + len;
1832 		} else
1833 			index++;
1834 	}
1835 
1836 	if (index != hsize) {
1837 		gfs2_consist_inode(dip);
1838 		error = -EIO;
1839 	}
1840 
1841 out:
1842 	kfree(lp);
1843 
1844 	return error;
1845 }
1846 
1847 /**
1848  * leaf_dealloc - Deallocate a directory leaf
1849  * @dip: the directory
1850  * @index: the hash table offset in the directory
1851  * @len: the number of pointers to this leaf
1852  * @leaf_no: the leaf number
1853  * @data: not used
1854  *
1855  * Returns: errno
1856  */
1857 
1858 static int leaf_dealloc(struct gfs2_inode *dip, u32 index, u32 len,
1859 			u64 leaf_no, void *data)
1860 {
1861 	struct gfs2_sbd *sdp = GFS2_SB(&dip->i_inode);
1862 	struct gfs2_leaf *tmp_leaf;
1863 	struct gfs2_rgrp_list rlist;
1864 	struct buffer_head *bh, *dibh;
1865 	u64 blk, nblk;
1866 	unsigned int rg_blocks = 0, l_blocks = 0;
1867 	char *ht;
1868 	unsigned int x, size = len * sizeof(u64);
1869 	int error;
1870 
1871 	memset(&rlist, 0, sizeof(struct gfs2_rgrp_list));
1872 
1873 	ht = kzalloc(size, GFP_NOFS);
1874 	if (!ht)
1875 		return -ENOMEM;
1876 
1877 	if (!gfs2_alloc_get(dip)) {
1878 		error = -ENOMEM;
1879 		goto out;
1880 	}
1881 
1882 	error = gfs2_quota_hold(dip, NO_QUOTA_CHANGE, NO_QUOTA_CHANGE);
1883 	if (error)
1884 		goto out_put;
1885 
1886 	error = gfs2_rindex_hold(sdp, &dip->i_alloc->al_ri_gh);
1887 	if (error)
1888 		goto out_qs;
1889 
1890 	/*  Count the number of leaves  */
1891 
1892 	for (blk = leaf_no; blk; blk = nblk) {
1893 		error = get_leaf(dip, blk, &bh);
1894 		if (error)
1895 			goto out_rlist;
1896 		tmp_leaf = (struct gfs2_leaf *)bh->b_data;
1897 		nblk = be64_to_cpu(tmp_leaf->lf_next);
1898 		brelse(bh);
1899 
1900 		gfs2_rlist_add(sdp, &rlist, blk);
1901 		l_blocks++;
1902 	}
1903 
1904 	gfs2_rlist_alloc(&rlist, LM_ST_EXCLUSIVE);
1905 
1906 	for (x = 0; x < rlist.rl_rgrps; x++) {
1907 		struct gfs2_rgrpd *rgd;
1908 		rgd = rlist.rl_ghs[x].gh_gl->gl_object;
1909 		rg_blocks += rgd->rd_length;
1910 	}
1911 
1912 	error = gfs2_glock_nq_m(rlist.rl_rgrps, rlist.rl_ghs);
1913 	if (error)
1914 		goto out_rlist;
1915 
1916 	error = gfs2_trans_begin(sdp,
1917 			rg_blocks + (DIV_ROUND_UP(size, sdp->sd_jbsize) + 1) +
1918 			RES_DINODE + RES_STATFS + RES_QUOTA, l_blocks);
1919 	if (error)
1920 		goto out_rg_gunlock;
1921 
1922 	for (blk = leaf_no; blk; blk = nblk) {
1923 		error = get_leaf(dip, blk, &bh);
1924 		if (error)
1925 			goto out_end_trans;
1926 		tmp_leaf = (struct gfs2_leaf *)bh->b_data;
1927 		nblk = be64_to_cpu(tmp_leaf->lf_next);
1928 		brelse(bh);
1929 
1930 		gfs2_free_meta(dip, blk, 1);
1931 		gfs2_add_inode_blocks(&dip->i_inode, -1);
1932 	}
1933 
1934 	error = gfs2_dir_write_data(dip, ht, index * sizeof(u64), size);
1935 	if (error != size) {
1936 		if (error >= 0)
1937 			error = -EIO;
1938 		goto out_end_trans;
1939 	}
1940 
1941 	error = gfs2_meta_inode_buffer(dip, &dibh);
1942 	if (error)
1943 		goto out_end_trans;
1944 
1945 	gfs2_trans_add_bh(dip->i_gl, dibh, 1);
1946 	gfs2_dinode_out(dip, dibh->b_data);
1947 	brelse(dibh);
1948 
1949 out_end_trans:
1950 	gfs2_trans_end(sdp);
1951 out_rg_gunlock:
1952 	gfs2_glock_dq_m(rlist.rl_rgrps, rlist.rl_ghs);
1953 out_rlist:
1954 	gfs2_rlist_free(&rlist);
1955 	gfs2_glock_dq_uninit(&dip->i_alloc->al_ri_gh);
1956 out_qs:
1957 	gfs2_quota_unhold(dip);
1958 out_put:
1959 	gfs2_alloc_put(dip);
1960 out:
1961 	kfree(ht);
1962 	return error;
1963 }
1964 
1965 /**
1966  * gfs2_dir_exhash_dealloc - free all the leaf blocks in a directory
1967  * @dip: the directory
1968  *
1969  * Dealloc all on-disk directory leaves to FREEMETA state
1970  * Change on-disk inode type to "regular file"
1971  *
1972  * Returns: errno
1973  */
1974 
1975 int gfs2_dir_exhash_dealloc(struct gfs2_inode *dip)
1976 {
1977 	struct gfs2_sbd *sdp = GFS2_SB(&dip->i_inode);
1978 	struct buffer_head *bh;
1979 	int error;
1980 
1981 	/* Dealloc on-disk leaves to FREEMETA state */
1982 	error = foreach_leaf(dip, leaf_dealloc, NULL);
1983 	if (error)
1984 		return error;
1985 
1986 	/* Make this a regular file in case we crash.
1987 	   (We don't want to free these blocks a second time.)  */
1988 
1989 	error = gfs2_trans_begin(sdp, RES_DINODE, 0);
1990 	if (error)
1991 		return error;
1992 
1993 	error = gfs2_meta_inode_buffer(dip, &bh);
1994 	if (!error) {
1995 		gfs2_trans_add_bh(dip->i_gl, bh, 1);
1996 		((struct gfs2_dinode *)bh->b_data)->di_mode =
1997 						cpu_to_be32(S_IFREG);
1998 		brelse(bh);
1999 	}
2000 
2001 	gfs2_trans_end(sdp);
2002 
2003 	return error;
2004 }
2005 
2006 /**
2007  * gfs2_diradd_alloc_required - find if adding entry will require an allocation
2008  * @ip: the file being written to
2009  * @filname: the filename that's going to be added
2010  *
2011  * Returns: 1 if alloc required, 0 if not, -ve on error
2012  */
2013 
2014 int gfs2_diradd_alloc_required(struct inode *inode, const struct qstr *name)
2015 {
2016 	struct gfs2_dirent *dent;
2017 	struct buffer_head *bh;
2018 
2019 	dent = gfs2_dirent_search(inode, name, gfs2_dirent_find_space, &bh);
2020 	if (!dent) {
2021 		return 1;
2022 	}
2023 	if (IS_ERR(dent))
2024 		return PTR_ERR(dent);
2025 	brelse(bh);
2026 	return 0;
2027 }
2028 
2029