xref: /openbmc/linux/fs/ocfs2/dir.c (revision a1e58bbd)
1 /* -*- mode: c; c-basic-offset: 8; -*-
2  * vim: noexpandtab sw=8 ts=8 sts=0:
3  *
4  * dir.c
5  *
6  * Creates, reads, walks and deletes directory-nodes
7  *
8  * Copyright (C) 2002, 2004 Oracle.  All rights reserved.
9  *
10  *  Portions of this code from linux/fs/ext3/dir.c
11  *
12  *  Copyright (C) 1992, 1993, 1994, 1995
13  *  Remy Card (card@masi.ibp.fr)
14  *  Laboratoire MASI - Institut Blaise pascal
15  *  Universite Pierre et Marie Curie (Paris VI)
16  *
17  *   from
18  *
19  *   linux/fs/minix/dir.c
20  *
21  *   Copyright (C) 1991, 1992 Linux Torvalds
22  *
23  * This program is free software; you can redistribute it and/or
24  * modify it under the terms of the GNU General Public
25  * License as published by the Free Software Foundation; either
26  * version 2 of the License, or (at your option) any later version.
27  *
28  * This program is distributed in the hope that it will be useful,
29  * but WITHOUT ANY WARRANTY; without even the implied warranty of
30  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
31  * General Public License for more details.
32  *
33  * You should have received a copy of the GNU General Public
34  * License along with this program; if not, write to the
35  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
36  * Boston, MA 021110-1307, USA.
37  */
38 
39 #include <linux/fs.h>
40 #include <linux/types.h>
41 #include <linux/slab.h>
42 #include <linux/highmem.h>
43 
44 #define MLOG_MASK_PREFIX ML_NAMEI
45 #include <cluster/masklog.h>
46 
47 #include "ocfs2.h"
48 
49 #include "alloc.h"
50 #include "dir.h"
51 #include "dlmglue.h"
52 #include "extent_map.h"
53 #include "file.h"
54 #include "inode.h"
55 #include "journal.h"
56 #include "namei.h"
57 #include "suballoc.h"
58 #include "super.h"
59 #include "uptodate.h"
60 
61 #include "buffer_head_io.h"
62 
63 #define NAMEI_RA_CHUNKS  2
64 #define NAMEI_RA_BLOCKS  4
65 #define NAMEI_RA_SIZE        (NAMEI_RA_CHUNKS * NAMEI_RA_BLOCKS)
66 #define NAMEI_RA_INDEX(c,b)  (((c) * NAMEI_RA_BLOCKS) + (b))
67 
68 static unsigned char ocfs2_filetype_table[] = {
69 	DT_UNKNOWN, DT_REG, DT_DIR, DT_CHR, DT_BLK, DT_FIFO, DT_SOCK, DT_LNK
70 };
71 
72 static int ocfs2_extend_dir(struct ocfs2_super *osb,
73 			    struct inode *dir,
74 			    struct buffer_head *parent_fe_bh,
75 			    unsigned int blocks_wanted,
76 			    struct buffer_head **new_de_bh);
77 static int ocfs2_do_extend_dir(struct super_block *sb,
78 			       handle_t *handle,
79 			       struct inode *dir,
80 			       struct buffer_head *parent_fe_bh,
81 			       struct ocfs2_alloc_context *data_ac,
82 			       struct ocfs2_alloc_context *meta_ac,
83 			       struct buffer_head **new_bh);
84 
85 /*
86  * bh passed here can be an inode block or a dir data block, depending
87  * on the inode inline data flag.
88  */
89 static int ocfs2_check_dir_entry(struct inode * dir,
90 				 struct ocfs2_dir_entry * de,
91 				 struct buffer_head * bh,
92 				 unsigned long offset)
93 {
94 	const char *error_msg = NULL;
95 	const int rlen = le16_to_cpu(de->rec_len);
96 
97 	if (rlen < OCFS2_DIR_REC_LEN(1))
98 		error_msg = "rec_len is smaller than minimal";
99 	else if (rlen % 4 != 0)
100 		error_msg = "rec_len % 4 != 0";
101 	else if (rlen < OCFS2_DIR_REC_LEN(de->name_len))
102 		error_msg = "rec_len is too small for name_len";
103 	else if (((char *) de - bh->b_data) + rlen > dir->i_sb->s_blocksize)
104 		error_msg = "directory entry across blocks";
105 
106 	if (error_msg != NULL)
107 		mlog(ML_ERROR, "bad entry in directory #%llu: %s - "
108 		     "offset=%lu, inode=%llu, rec_len=%d, name_len=%d\n",
109 		     (unsigned long long)OCFS2_I(dir)->ip_blkno, error_msg,
110 		     offset, (unsigned long long)le64_to_cpu(de->inode), rlen,
111 		     de->name_len);
112 	return error_msg == NULL ? 1 : 0;
113 }
114 
115 static inline int ocfs2_match(int len,
116 			      const char * const name,
117 			      struct ocfs2_dir_entry *de)
118 {
119 	if (len != de->name_len)
120 		return 0;
121 	if (!de->inode)
122 		return 0;
123 	return !memcmp(name, de->name, len);
124 }
125 
126 /*
127  * Returns 0 if not found, -1 on failure, and 1 on success
128  */
129 static int inline ocfs2_search_dirblock(struct buffer_head *bh,
130 					struct inode *dir,
131 					const char *name, int namelen,
132 					unsigned long offset,
133 					char *first_de,
134 					unsigned int bytes,
135 					struct ocfs2_dir_entry **res_dir)
136 {
137 	struct ocfs2_dir_entry *de;
138 	char *dlimit, *de_buf;
139 	int de_len;
140 	int ret = 0;
141 
142 	mlog_entry_void();
143 
144 	de_buf = first_de;
145 	dlimit = de_buf + bytes;
146 
147 	while (de_buf < dlimit) {
148 		/* this code is executed quadratically often */
149 		/* do minimal checking `by hand' */
150 
151 		de = (struct ocfs2_dir_entry *) de_buf;
152 
153 		if (de_buf + namelen <= dlimit &&
154 		    ocfs2_match(namelen, name, de)) {
155 			/* found a match - just to be sure, do a full check */
156 			if (!ocfs2_check_dir_entry(dir, de, bh, offset)) {
157 				ret = -1;
158 				goto bail;
159 			}
160 			*res_dir = de;
161 			ret = 1;
162 			goto bail;
163 		}
164 
165 		/* prevent looping on a bad block */
166 		de_len = le16_to_cpu(de->rec_len);
167 		if (de_len <= 0) {
168 			ret = -1;
169 			goto bail;
170 		}
171 
172 		de_buf += de_len;
173 		offset += de_len;
174 	}
175 
176 bail:
177 	mlog_exit(ret);
178 	return ret;
179 }
180 
181 static struct buffer_head *ocfs2_find_entry_id(const char *name,
182 					       int namelen,
183 					       struct inode *dir,
184 					       struct ocfs2_dir_entry **res_dir)
185 {
186 	int ret, found;
187 	struct buffer_head *di_bh = NULL;
188 	struct ocfs2_dinode *di;
189 	struct ocfs2_inline_data *data;
190 
191 	ret = ocfs2_read_block(OCFS2_SB(dir->i_sb), OCFS2_I(dir)->ip_blkno,
192 			       &di_bh, OCFS2_BH_CACHED, dir);
193 	if (ret) {
194 		mlog_errno(ret);
195 		goto out;
196 	}
197 
198 	di = (struct ocfs2_dinode *)di_bh->b_data;
199 	data = &di->id2.i_data;
200 
201 	found = ocfs2_search_dirblock(di_bh, dir, name, namelen, 0,
202 				      data->id_data, i_size_read(dir), res_dir);
203 	if (found == 1)
204 		return di_bh;
205 
206 	brelse(di_bh);
207 out:
208 	return NULL;
209 }
210 
211 static struct buffer_head *ocfs2_find_entry_el(const char *name, int namelen,
212 					       struct inode *dir,
213 					       struct ocfs2_dir_entry **res_dir)
214 {
215 	struct super_block *sb;
216 	struct buffer_head *bh_use[NAMEI_RA_SIZE];
217 	struct buffer_head *bh, *ret = NULL;
218 	unsigned long start, block, b;
219 	int ra_max = 0;		/* Number of bh's in the readahead
220 				   buffer, bh_use[] */
221 	int ra_ptr = 0;		/* Current index into readahead
222 				   buffer */
223 	int num = 0;
224 	int nblocks, i, err;
225 
226 	mlog_entry_void();
227 
228 	sb = dir->i_sb;
229 
230 	nblocks = i_size_read(dir) >> sb->s_blocksize_bits;
231 	start = OCFS2_I(dir)->ip_dir_start_lookup;
232 	if (start >= nblocks)
233 		start = 0;
234 	block = start;
235 
236 restart:
237 	do {
238 		/*
239 		 * We deal with the read-ahead logic here.
240 		 */
241 		if (ra_ptr >= ra_max) {
242 			/* Refill the readahead buffer */
243 			ra_ptr = 0;
244 			b = block;
245 			for (ra_max = 0; ra_max < NAMEI_RA_SIZE; ra_max++) {
246 				/*
247 				 * Terminate if we reach the end of the
248 				 * directory and must wrap, or if our
249 				 * search has finished at this block.
250 				 */
251 				if (b >= nblocks || (num && block == start)) {
252 					bh_use[ra_max] = NULL;
253 					break;
254 				}
255 				num++;
256 
257 				bh = ocfs2_bread(dir, b++, &err, 1);
258 				bh_use[ra_max] = bh;
259 			}
260 		}
261 		if ((bh = bh_use[ra_ptr++]) == NULL)
262 			goto next;
263 		wait_on_buffer(bh);
264 		if (!buffer_uptodate(bh)) {
265 			/* read error, skip block & hope for the best */
266 			ocfs2_error(dir->i_sb, "reading directory %llu, "
267 				    "offset %lu\n",
268 				    (unsigned long long)OCFS2_I(dir)->ip_blkno,
269 				    block);
270 			brelse(bh);
271 			goto next;
272 		}
273 		i = ocfs2_search_dirblock(bh, dir, name, namelen,
274 					  block << sb->s_blocksize_bits,
275 					  bh->b_data, sb->s_blocksize,
276 					  res_dir);
277 		if (i == 1) {
278 			OCFS2_I(dir)->ip_dir_start_lookup = block;
279 			ret = bh;
280 			goto cleanup_and_exit;
281 		} else {
282 			brelse(bh);
283 			if (i < 0)
284 				goto cleanup_and_exit;
285 		}
286 	next:
287 		if (++block >= nblocks)
288 			block = 0;
289 	} while (block != start);
290 
291 	/*
292 	 * If the directory has grown while we were searching, then
293 	 * search the last part of the directory before giving up.
294 	 */
295 	block = nblocks;
296 	nblocks = i_size_read(dir) >> sb->s_blocksize_bits;
297 	if (block < nblocks) {
298 		start = 0;
299 		goto restart;
300 	}
301 
302 cleanup_and_exit:
303 	/* Clean up the read-ahead blocks */
304 	for (; ra_ptr < ra_max; ra_ptr++)
305 		brelse(bh_use[ra_ptr]);
306 
307 	mlog_exit_ptr(ret);
308 	return ret;
309 }
310 
311 /*
312  * Try to find an entry of the provided name within 'dir'.
313  *
314  * If nothing was found, NULL is returned. Otherwise, a buffer_head
315  * and pointer to the dir entry are passed back.
316  *
317  * Caller can NOT assume anything about the contents of the
318  * buffer_head - it is passed back only so that it can be passed into
319  * any one of the manipulation functions (add entry, delete entry,
320  * etc). As an example, bh in the extent directory case is a data
321  * block, in the inline-data case it actually points to an inode.
322  */
323 struct buffer_head *ocfs2_find_entry(const char *name, int namelen,
324 				     struct inode *dir,
325 				     struct ocfs2_dir_entry **res_dir)
326 {
327 	*res_dir = NULL;
328 
329 	if (OCFS2_I(dir)->ip_dyn_features & OCFS2_INLINE_DATA_FL)
330 		return ocfs2_find_entry_id(name, namelen, dir, res_dir);
331 
332 	return ocfs2_find_entry_el(name, namelen, dir, res_dir);
333 }
334 
335 /*
336  * Update inode number and type of a previously found directory entry.
337  */
338 int ocfs2_update_entry(struct inode *dir, handle_t *handle,
339 		       struct buffer_head *de_bh, struct ocfs2_dir_entry *de,
340 		       struct inode *new_entry_inode)
341 {
342 	int ret;
343 
344 	/*
345 	 * The same code works fine for both inline-data and extent
346 	 * based directories, so no need to split this up.
347 	 */
348 
349 	ret = ocfs2_journal_access(handle, dir, de_bh,
350 				   OCFS2_JOURNAL_ACCESS_WRITE);
351 	if (ret) {
352 		mlog_errno(ret);
353 		goto out;
354 	}
355 
356 	de->inode = cpu_to_le64(OCFS2_I(new_entry_inode)->ip_blkno);
357 	ocfs2_set_de_type(de, new_entry_inode->i_mode);
358 
359 	ocfs2_journal_dirty(handle, de_bh);
360 
361 out:
362 	return ret;
363 }
364 
365 static int __ocfs2_delete_entry(handle_t *handle, struct inode *dir,
366 				struct ocfs2_dir_entry *de_del,
367 				struct buffer_head *bh, char *first_de,
368 				unsigned int bytes)
369 {
370 	struct ocfs2_dir_entry *de, *pde;
371 	int i, status = -ENOENT;
372 
373 	mlog_entry("(0x%p, 0x%p, 0x%p, 0x%p)\n", handle, dir, de_del, bh);
374 
375 	i = 0;
376 	pde = NULL;
377 	de = (struct ocfs2_dir_entry *) first_de;
378 	while (i < bytes) {
379 		if (!ocfs2_check_dir_entry(dir, de, bh, i)) {
380 			status = -EIO;
381 			mlog_errno(status);
382 			goto bail;
383 		}
384 		if (de == de_del)  {
385 			status = ocfs2_journal_access(handle, dir, bh,
386 						      OCFS2_JOURNAL_ACCESS_WRITE);
387 			if (status < 0) {
388 				status = -EIO;
389 				mlog_errno(status);
390 				goto bail;
391 			}
392 			if (pde)
393 				le16_add_cpu(&pde->rec_len,
394 						le16_to_cpu(de->rec_len));
395 			else
396 				de->inode = 0;
397 			dir->i_version++;
398 			status = ocfs2_journal_dirty(handle, bh);
399 			goto bail;
400 		}
401 		i += le16_to_cpu(de->rec_len);
402 		pde = de;
403 		de = (struct ocfs2_dir_entry *)((char *)de + le16_to_cpu(de->rec_len));
404 	}
405 bail:
406 	mlog_exit(status);
407 	return status;
408 }
409 
410 static inline int ocfs2_delete_entry_id(handle_t *handle,
411 					struct inode *dir,
412 					struct ocfs2_dir_entry *de_del,
413 					struct buffer_head *bh)
414 {
415 	int ret;
416 	struct buffer_head *di_bh = NULL;
417 	struct ocfs2_dinode *di;
418 	struct ocfs2_inline_data *data;
419 
420 	ret = ocfs2_read_block(OCFS2_SB(dir->i_sb), OCFS2_I(dir)->ip_blkno,
421 			       &di_bh, OCFS2_BH_CACHED, dir);
422 	if (ret) {
423 		mlog_errno(ret);
424 		goto out;
425 	}
426 
427 	di = (struct ocfs2_dinode *)di_bh->b_data;
428 	data = &di->id2.i_data;
429 
430 	ret = __ocfs2_delete_entry(handle, dir, de_del, bh, data->id_data,
431 				   i_size_read(dir));
432 
433 	brelse(di_bh);
434 out:
435 	return ret;
436 }
437 
438 static inline int ocfs2_delete_entry_el(handle_t *handle,
439 					struct inode *dir,
440 					struct ocfs2_dir_entry *de_del,
441 					struct buffer_head *bh)
442 {
443 	return __ocfs2_delete_entry(handle, dir, de_del, bh, bh->b_data,
444 				    bh->b_size);
445 }
446 
447 /*
448  * ocfs2_delete_entry deletes a directory entry by merging it with the
449  * previous entry
450  */
451 int ocfs2_delete_entry(handle_t *handle,
452 		       struct inode *dir,
453 		       struct ocfs2_dir_entry *de_del,
454 		       struct buffer_head *bh)
455 {
456 	if (OCFS2_I(dir)->ip_dyn_features & OCFS2_INLINE_DATA_FL)
457 		return ocfs2_delete_entry_id(handle, dir, de_del, bh);
458 
459 	return ocfs2_delete_entry_el(handle, dir, de_del, bh);
460 }
461 
462 /*
463  * Check whether 'de' has enough room to hold an entry of
464  * 'new_rec_len' bytes.
465  */
466 static inline int ocfs2_dirent_would_fit(struct ocfs2_dir_entry *de,
467 					 unsigned int new_rec_len)
468 {
469 	unsigned int de_really_used;
470 
471 	/* Check whether this is an empty record with enough space */
472 	if (le64_to_cpu(de->inode) == 0 &&
473 	    le16_to_cpu(de->rec_len) >= new_rec_len)
474 		return 1;
475 
476 	/*
477 	 * Record might have free space at the end which we can
478 	 * use.
479 	 */
480 	de_really_used = OCFS2_DIR_REC_LEN(de->name_len);
481 	if (le16_to_cpu(de->rec_len) >= (de_really_used + new_rec_len))
482 	    return 1;
483 
484 	return 0;
485 }
486 
487 /* we don't always have a dentry for what we want to add, so people
488  * like orphan dir can call this instead.
489  *
490  * If you pass me insert_bh, I'll skip the search of the other dir
491  * blocks and put the record in there.
492  */
493 int __ocfs2_add_entry(handle_t *handle,
494 		      struct inode *dir,
495 		      const char *name, int namelen,
496 		      struct inode *inode, u64 blkno,
497 		      struct buffer_head *parent_fe_bh,
498 		      struct buffer_head *insert_bh)
499 {
500 	unsigned long offset;
501 	unsigned short rec_len;
502 	struct ocfs2_dir_entry *de, *de1;
503 	struct ocfs2_dinode *di = (struct ocfs2_dinode *)parent_fe_bh->b_data;
504 	struct super_block *sb = dir->i_sb;
505 	int retval, status;
506 	unsigned int size = sb->s_blocksize;
507 	char *data_start = insert_bh->b_data;
508 
509 	mlog_entry_void();
510 
511 	if (!namelen)
512 		return -EINVAL;
513 
514 	if (OCFS2_I(dir)->ip_dyn_features & OCFS2_INLINE_DATA_FL) {
515 		data_start = di->id2.i_data.id_data;
516 		size = i_size_read(dir);
517 
518 		BUG_ON(insert_bh != parent_fe_bh);
519 	}
520 
521 	rec_len = OCFS2_DIR_REC_LEN(namelen);
522 	offset = 0;
523 	de = (struct ocfs2_dir_entry *) data_start;
524 	while (1) {
525 		BUG_ON((char *)de >= (size + data_start));
526 
527 		/* These checks should've already been passed by the
528 		 * prepare function, but I guess we can leave them
529 		 * here anyway. */
530 		if (!ocfs2_check_dir_entry(dir, de, insert_bh, offset)) {
531 			retval = -ENOENT;
532 			goto bail;
533 		}
534 		if (ocfs2_match(namelen, name, de)) {
535 			retval = -EEXIST;
536 			goto bail;
537 		}
538 
539 		if (ocfs2_dirent_would_fit(de, rec_len)) {
540 			dir->i_mtime = dir->i_ctime = CURRENT_TIME;
541 			retval = ocfs2_mark_inode_dirty(handle, dir, parent_fe_bh);
542 			if (retval < 0) {
543 				mlog_errno(retval);
544 				goto bail;
545 			}
546 
547 			status = ocfs2_journal_access(handle, dir, insert_bh,
548 						      OCFS2_JOURNAL_ACCESS_WRITE);
549 			/* By now the buffer is marked for journaling */
550 			offset += le16_to_cpu(de->rec_len);
551 			if (le64_to_cpu(de->inode)) {
552 				de1 = (struct ocfs2_dir_entry *)((char *) de +
553 					OCFS2_DIR_REC_LEN(de->name_len));
554 				de1->rec_len =
555 					cpu_to_le16(le16_to_cpu(de->rec_len) -
556 					OCFS2_DIR_REC_LEN(de->name_len));
557 				de->rec_len = cpu_to_le16(OCFS2_DIR_REC_LEN(de->name_len));
558 				de = de1;
559 			}
560 			de->file_type = OCFS2_FT_UNKNOWN;
561 			if (blkno) {
562 				de->inode = cpu_to_le64(blkno);
563 				ocfs2_set_de_type(de, inode->i_mode);
564 			} else
565 				de->inode = 0;
566 			de->name_len = namelen;
567 			memcpy(de->name, name, namelen);
568 
569 			dir->i_version++;
570 			status = ocfs2_journal_dirty(handle, insert_bh);
571 			retval = 0;
572 			goto bail;
573 		}
574 		offset += le16_to_cpu(de->rec_len);
575 		de = (struct ocfs2_dir_entry *) ((char *) de + le16_to_cpu(de->rec_len));
576 	}
577 
578 	/* when you think about it, the assert above should prevent us
579 	 * from ever getting here. */
580 	retval = -ENOSPC;
581 bail:
582 
583 	mlog_exit(retval);
584 	return retval;
585 }
586 
587 static int ocfs2_dir_foreach_blk_id(struct inode *inode,
588 				    u64 *f_version,
589 				    loff_t *f_pos, void *priv,
590 				    filldir_t filldir, int *filldir_err)
591 {
592 	int ret, i, filldir_ret;
593 	unsigned long offset = *f_pos;
594 	struct buffer_head *di_bh = NULL;
595 	struct ocfs2_dinode *di;
596 	struct ocfs2_inline_data *data;
597 	struct ocfs2_dir_entry *de;
598 
599 	ret = ocfs2_read_block(OCFS2_SB(inode->i_sb), OCFS2_I(inode)->ip_blkno,
600 			       &di_bh, OCFS2_BH_CACHED, inode);
601 	if (ret) {
602 		mlog(ML_ERROR, "Unable to read inode block for dir %llu\n",
603 		     (unsigned long long)OCFS2_I(inode)->ip_blkno);
604 		goto out;
605 	}
606 
607 	di = (struct ocfs2_dinode *)di_bh->b_data;
608 	data = &di->id2.i_data;
609 
610 	while (*f_pos < i_size_read(inode)) {
611 revalidate:
612 		/* If the dir block has changed since the last call to
613 		 * readdir(2), then we might be pointing to an invalid
614 		 * dirent right now.  Scan from the start of the block
615 		 * to make sure. */
616 		if (*f_version != inode->i_version) {
617 			for (i = 0; i < i_size_read(inode) && i < offset; ) {
618 				de = (struct ocfs2_dir_entry *)
619 					(data->id_data + i);
620 				/* It's too expensive to do a full
621 				 * dirent test each time round this
622 				 * loop, but we do have to test at
623 				 * least that it is non-zero.  A
624 				 * failure will be detected in the
625 				 * dirent test below. */
626 				if (le16_to_cpu(de->rec_len) <
627 				    OCFS2_DIR_REC_LEN(1))
628 					break;
629 				i += le16_to_cpu(de->rec_len);
630 			}
631 			*f_pos = offset = i;
632 			*f_version = inode->i_version;
633 		}
634 
635 		de = (struct ocfs2_dir_entry *) (data->id_data + *f_pos);
636 		if (!ocfs2_check_dir_entry(inode, de, di_bh, *f_pos)) {
637 			/* On error, skip the f_pos to the end. */
638 			*f_pos = i_size_read(inode);
639 			goto out;
640 		}
641 		offset += le16_to_cpu(de->rec_len);
642 		if (le64_to_cpu(de->inode)) {
643 			/* We might block in the next section
644 			 * if the data destination is
645 			 * currently swapped out.  So, use a
646 			 * version stamp to detect whether or
647 			 * not the directory has been modified
648 			 * during the copy operation.
649 			 */
650 			u64 version = *f_version;
651 			unsigned char d_type = DT_UNKNOWN;
652 
653 			if (de->file_type < OCFS2_FT_MAX)
654 				d_type = ocfs2_filetype_table[de->file_type];
655 
656 			filldir_ret = filldir(priv, de->name,
657 					      de->name_len,
658 					      *f_pos,
659 					      le64_to_cpu(de->inode),
660 					      d_type);
661 			if (filldir_ret) {
662 				if (filldir_err)
663 					*filldir_err = filldir_ret;
664 				break;
665 			}
666 			if (version != *f_version)
667 				goto revalidate;
668 		}
669 		*f_pos += le16_to_cpu(de->rec_len);
670 	}
671 
672 out:
673 	brelse(di_bh);
674 
675 	return 0;
676 }
677 
678 static int ocfs2_dir_foreach_blk_el(struct inode *inode,
679 				    u64 *f_version,
680 				    loff_t *f_pos, void *priv,
681 				    filldir_t filldir, int *filldir_err)
682 {
683 	int error = 0;
684 	unsigned long offset, blk, last_ra_blk = 0;
685 	int i, stored;
686 	struct buffer_head * bh, * tmp;
687 	struct ocfs2_dir_entry * de;
688 	int err;
689 	struct super_block * sb = inode->i_sb;
690 	unsigned int ra_sectors = 16;
691 
692 	stored = 0;
693 	bh = NULL;
694 
695 	offset = (*f_pos) & (sb->s_blocksize - 1);
696 
697 	while (!error && !stored && *f_pos < i_size_read(inode)) {
698 		blk = (*f_pos) >> sb->s_blocksize_bits;
699 		bh = ocfs2_bread(inode, blk, &err, 0);
700 		if (!bh) {
701 			mlog(ML_ERROR,
702 			     "directory #%llu contains a hole at offset %lld\n",
703 			     (unsigned long long)OCFS2_I(inode)->ip_blkno,
704 			     *f_pos);
705 			*f_pos += sb->s_blocksize - offset;
706 			continue;
707 		}
708 
709 		/* The idea here is to begin with 8k read-ahead and to stay
710 		 * 4k ahead of our current position.
711 		 *
712 		 * TODO: Use the pagecache for this. We just need to
713 		 * make sure it's cluster-safe... */
714 		if (!last_ra_blk
715 		    || (((last_ra_blk - blk) << 9) <= (ra_sectors / 2))) {
716 			for (i = ra_sectors >> (sb->s_blocksize_bits - 9);
717 			     i > 0; i--) {
718 				tmp = ocfs2_bread(inode, ++blk, &err, 1);
719 				if (tmp)
720 					brelse(tmp);
721 			}
722 			last_ra_blk = blk;
723 			ra_sectors = 8;
724 		}
725 
726 revalidate:
727 		/* If the dir block has changed since the last call to
728 		 * readdir(2), then we might be pointing to an invalid
729 		 * dirent right now.  Scan from the start of the block
730 		 * to make sure. */
731 		if (*f_version != inode->i_version) {
732 			for (i = 0; i < sb->s_blocksize && i < offset; ) {
733 				de = (struct ocfs2_dir_entry *) (bh->b_data + i);
734 				/* It's too expensive to do a full
735 				 * dirent test each time round this
736 				 * loop, but we do have to test at
737 				 * least that it is non-zero.  A
738 				 * failure will be detected in the
739 				 * dirent test below. */
740 				if (le16_to_cpu(de->rec_len) <
741 				    OCFS2_DIR_REC_LEN(1))
742 					break;
743 				i += le16_to_cpu(de->rec_len);
744 			}
745 			offset = i;
746 			*f_pos = ((*f_pos) & ~(sb->s_blocksize - 1))
747 				| offset;
748 			*f_version = inode->i_version;
749 		}
750 
751 		while (!error && *f_pos < i_size_read(inode)
752 		       && offset < sb->s_blocksize) {
753 			de = (struct ocfs2_dir_entry *) (bh->b_data + offset);
754 			if (!ocfs2_check_dir_entry(inode, de, bh, offset)) {
755 				/* On error, skip the f_pos to the
756 				   next block. */
757 				*f_pos = ((*f_pos) | (sb->s_blocksize - 1)) + 1;
758 				brelse(bh);
759 				goto out;
760 			}
761 			offset += le16_to_cpu(de->rec_len);
762 			if (le64_to_cpu(de->inode)) {
763 				/* We might block in the next section
764 				 * if the data destination is
765 				 * currently swapped out.  So, use a
766 				 * version stamp to detect whether or
767 				 * not the directory has been modified
768 				 * during the copy operation.
769 				 */
770 				unsigned long version = *f_version;
771 				unsigned char d_type = DT_UNKNOWN;
772 
773 				if (de->file_type < OCFS2_FT_MAX)
774 					d_type = ocfs2_filetype_table[de->file_type];
775 				error = filldir(priv, de->name,
776 						de->name_len,
777 						*f_pos,
778 						le64_to_cpu(de->inode),
779 						d_type);
780 				if (error) {
781 					if (filldir_err)
782 						*filldir_err = error;
783 					break;
784 				}
785 				if (version != *f_version)
786 					goto revalidate;
787 				stored ++;
788 			}
789 			*f_pos += le16_to_cpu(de->rec_len);
790 		}
791 		offset = 0;
792 		brelse(bh);
793 	}
794 
795 	stored = 0;
796 out:
797 	return stored;
798 }
799 
800 static int ocfs2_dir_foreach_blk(struct inode *inode, u64 *f_version,
801 				 loff_t *f_pos, void *priv, filldir_t filldir,
802 				 int *filldir_err)
803 {
804 	if (OCFS2_I(inode)->ip_dyn_features & OCFS2_INLINE_DATA_FL)
805 		return ocfs2_dir_foreach_blk_id(inode, f_version, f_pos, priv,
806 						filldir, filldir_err);
807 
808 	return ocfs2_dir_foreach_blk_el(inode, f_version, f_pos, priv, filldir,
809 					filldir_err);
810 }
811 
812 /*
813  * This is intended to be called from inside other kernel functions,
814  * so we fake some arguments.
815  */
816 int ocfs2_dir_foreach(struct inode *inode, loff_t *f_pos, void *priv,
817 		      filldir_t filldir)
818 {
819 	int ret = 0, filldir_err = 0;
820 	u64 version = inode->i_version;
821 
822 	while (*f_pos < i_size_read(inode)) {
823 		ret = ocfs2_dir_foreach_blk(inode, &version, f_pos, priv,
824 					    filldir, &filldir_err);
825 		if (ret || filldir_err)
826 			break;
827 	}
828 
829 	if (ret > 0)
830 		ret = -EIO;
831 
832 	return 0;
833 }
834 
835 /*
836  * ocfs2_readdir()
837  *
838  */
839 int ocfs2_readdir(struct file * filp, void * dirent, filldir_t filldir)
840 {
841 	int error = 0;
842 	struct inode *inode = filp->f_path.dentry->d_inode;
843 	int lock_level = 0;
844 
845 	mlog_entry("dirino=%llu\n",
846 		   (unsigned long long)OCFS2_I(inode)->ip_blkno);
847 
848 	error = ocfs2_inode_lock_atime(inode, filp->f_vfsmnt, &lock_level);
849 	if (lock_level && error >= 0) {
850 		/* We release EX lock which used to update atime
851 		 * and get PR lock again to reduce contention
852 		 * on commonly accessed directories. */
853 		ocfs2_inode_unlock(inode, 1);
854 		lock_level = 0;
855 		error = ocfs2_inode_lock(inode, NULL, 0);
856 	}
857 	if (error < 0) {
858 		if (error != -ENOENT)
859 			mlog_errno(error);
860 		/* we haven't got any yet, so propagate the error. */
861 		goto bail_nolock;
862 	}
863 
864 	error = ocfs2_dir_foreach_blk(inode, &filp->f_version, &filp->f_pos,
865 				      dirent, filldir, NULL);
866 
867 	ocfs2_inode_unlock(inode, lock_level);
868 
869 bail_nolock:
870 	mlog_exit(error);
871 
872 	return error;
873 }
874 
875 /*
876  * NOTE: this should always be called with parent dir i_mutex taken.
877  */
878 int ocfs2_find_files_on_disk(const char *name,
879 			     int namelen,
880 			     u64 *blkno,
881 			     struct inode *inode,
882 			     struct buffer_head **dirent_bh,
883 			     struct ocfs2_dir_entry **dirent)
884 {
885 	int status = -ENOENT;
886 
887 	mlog_entry("(name=%.*s, blkno=%p, inode=%p, dirent_bh=%p, dirent=%p)\n",
888 		   namelen, name, blkno, inode, dirent_bh, dirent);
889 
890 	*dirent_bh = ocfs2_find_entry(name, namelen, inode, dirent);
891 	if (!*dirent_bh || !*dirent) {
892 		status = -ENOENT;
893 		goto leave;
894 	}
895 
896 	*blkno = le64_to_cpu((*dirent)->inode);
897 
898 	status = 0;
899 leave:
900 	if (status < 0) {
901 		*dirent = NULL;
902 		if (*dirent_bh) {
903 			brelse(*dirent_bh);
904 			*dirent_bh = NULL;
905 		}
906 	}
907 
908 	mlog_exit(status);
909 	return status;
910 }
911 
912 /*
913  * Convenience function for callers which just want the block number
914  * mapped to a name and don't require the full dirent info, etc.
915  */
916 int ocfs2_lookup_ino_from_name(struct inode *dir, const char *name,
917 			       int namelen, u64 *blkno)
918 {
919 	int ret;
920 	struct buffer_head *bh = NULL;
921 	struct ocfs2_dir_entry *dirent = NULL;
922 
923 	ret = ocfs2_find_files_on_disk(name, namelen, blkno, dir, &bh, &dirent);
924 	brelse(bh);
925 
926 	return ret;
927 }
928 
929 /* Check for a name within a directory.
930  *
931  * Return 0 if the name does not exist
932  * Return -EEXIST if the directory contains the name
933  *
934  * Callers should have i_mutex + a cluster lock on dir
935  */
936 int ocfs2_check_dir_for_entry(struct inode *dir,
937 			      const char *name,
938 			      int namelen)
939 {
940 	int ret;
941 	struct buffer_head *dirent_bh = NULL;
942 	struct ocfs2_dir_entry *dirent = NULL;
943 
944 	mlog_entry("dir %llu, name '%.*s'\n",
945 		   (unsigned long long)OCFS2_I(dir)->ip_blkno, namelen, name);
946 
947 	ret = -EEXIST;
948 	dirent_bh = ocfs2_find_entry(name, namelen, dir, &dirent);
949 	if (dirent_bh)
950 		goto bail;
951 
952 	ret = 0;
953 bail:
954 	if (dirent_bh)
955 		brelse(dirent_bh);
956 
957 	mlog_exit(ret);
958 	return ret;
959 }
960 
961 struct ocfs2_empty_dir_priv {
962 	unsigned seen_dot;
963 	unsigned seen_dot_dot;
964 	unsigned seen_other;
965 };
966 static int ocfs2_empty_dir_filldir(void *priv, const char *name, int name_len,
967 				   loff_t pos, u64 ino, unsigned type)
968 {
969 	struct ocfs2_empty_dir_priv *p = priv;
970 
971 	/*
972 	 * Check the positions of "." and ".." records to be sure
973 	 * they're in the correct place.
974 	 */
975 	if (name_len == 1 && !strncmp(".", name, 1) && pos == 0) {
976 		p->seen_dot = 1;
977 		return 0;
978 	}
979 
980 	if (name_len == 2 && !strncmp("..", name, 2) &&
981 	    pos == OCFS2_DIR_REC_LEN(1)) {
982 		p->seen_dot_dot = 1;
983 		return 0;
984 	}
985 
986 	p->seen_other = 1;
987 	return 1;
988 }
989 /*
990  * routine to check that the specified directory is empty (for rmdir)
991  *
992  * Returns 1 if dir is empty, zero otherwise.
993  */
994 int ocfs2_empty_dir(struct inode *inode)
995 {
996 	int ret;
997 	loff_t start = 0;
998 	struct ocfs2_empty_dir_priv priv;
999 
1000 	memset(&priv, 0, sizeof(priv));
1001 
1002 	ret = ocfs2_dir_foreach(inode, &start, &priv, ocfs2_empty_dir_filldir);
1003 	if (ret)
1004 		mlog_errno(ret);
1005 
1006 	if (!priv.seen_dot || !priv.seen_dot_dot) {
1007 		mlog(ML_ERROR, "bad directory (dir #%llu) - no `.' or `..'\n",
1008 		     (unsigned long long)OCFS2_I(inode)->ip_blkno);
1009 		/*
1010 		 * XXX: Is it really safe to allow an unlink to continue?
1011 		 */
1012 		return 1;
1013 	}
1014 
1015 	return !priv.seen_other;
1016 }
1017 
1018 static void ocfs2_fill_initial_dirents(struct inode *inode,
1019 				       struct inode *parent,
1020 				       char *start, unsigned int size)
1021 {
1022 	struct ocfs2_dir_entry *de = (struct ocfs2_dir_entry *)start;
1023 
1024 	de->inode = cpu_to_le64(OCFS2_I(inode)->ip_blkno);
1025 	de->name_len = 1;
1026 	de->rec_len =
1027 		cpu_to_le16(OCFS2_DIR_REC_LEN(de->name_len));
1028 	strcpy(de->name, ".");
1029 	ocfs2_set_de_type(de, S_IFDIR);
1030 
1031 	de = (struct ocfs2_dir_entry *) ((char *)de + le16_to_cpu(de->rec_len));
1032 	de->inode = cpu_to_le64(OCFS2_I(parent)->ip_blkno);
1033 	de->rec_len = cpu_to_le16(size - OCFS2_DIR_REC_LEN(1));
1034 	de->name_len = 2;
1035 	strcpy(de->name, "..");
1036 	ocfs2_set_de_type(de, S_IFDIR);
1037 }
1038 
1039 /*
1040  * This works together with code in ocfs2_mknod_locked() which sets
1041  * the inline-data flag and initializes the inline-data section.
1042  */
1043 static int ocfs2_fill_new_dir_id(struct ocfs2_super *osb,
1044 				 handle_t *handle,
1045 				 struct inode *parent,
1046 				 struct inode *inode,
1047 				 struct buffer_head *di_bh)
1048 {
1049 	int ret;
1050 	struct ocfs2_dinode *di = (struct ocfs2_dinode *)di_bh->b_data;
1051 	struct ocfs2_inline_data *data = &di->id2.i_data;
1052 	unsigned int size = le16_to_cpu(data->id_count);
1053 
1054 	ret = ocfs2_journal_access(handle, inode, di_bh,
1055 				   OCFS2_JOURNAL_ACCESS_WRITE);
1056 	if (ret) {
1057 		mlog_errno(ret);
1058 		goto out;
1059 	}
1060 
1061 	ocfs2_fill_initial_dirents(inode, parent, data->id_data, size);
1062 
1063 	ocfs2_journal_dirty(handle, di_bh);
1064 	if (ret) {
1065 		mlog_errno(ret);
1066 		goto out;
1067 	}
1068 
1069 	i_size_write(inode, size);
1070 	inode->i_nlink = 2;
1071 	inode->i_blocks = ocfs2_inode_sector_count(inode);
1072 
1073 	ret = ocfs2_mark_inode_dirty(handle, inode, di_bh);
1074 	if (ret < 0)
1075 		mlog_errno(ret);
1076 
1077 out:
1078 	return ret;
1079 }
1080 
1081 static int ocfs2_fill_new_dir_el(struct ocfs2_super *osb,
1082 				 handle_t *handle,
1083 				 struct inode *parent,
1084 				 struct inode *inode,
1085 				 struct buffer_head *fe_bh,
1086 				 struct ocfs2_alloc_context *data_ac)
1087 {
1088 	int status;
1089 	struct buffer_head *new_bh = NULL;
1090 
1091 	mlog_entry_void();
1092 
1093 	status = ocfs2_do_extend_dir(osb->sb, handle, inode, fe_bh,
1094 				     data_ac, NULL, &new_bh);
1095 	if (status < 0) {
1096 		mlog_errno(status);
1097 		goto bail;
1098 	}
1099 
1100 	ocfs2_set_new_buffer_uptodate(inode, new_bh);
1101 
1102 	status = ocfs2_journal_access(handle, inode, new_bh,
1103 				      OCFS2_JOURNAL_ACCESS_CREATE);
1104 	if (status < 0) {
1105 		mlog_errno(status);
1106 		goto bail;
1107 	}
1108 	memset(new_bh->b_data, 0, osb->sb->s_blocksize);
1109 
1110 	ocfs2_fill_initial_dirents(inode, parent, new_bh->b_data,
1111 				   osb->sb->s_blocksize);
1112 
1113 	status = ocfs2_journal_dirty(handle, new_bh);
1114 	if (status < 0) {
1115 		mlog_errno(status);
1116 		goto bail;
1117 	}
1118 
1119 	i_size_write(inode, inode->i_sb->s_blocksize);
1120 	inode->i_nlink = 2;
1121 	inode->i_blocks = ocfs2_inode_sector_count(inode);
1122 	status = ocfs2_mark_inode_dirty(handle, inode, fe_bh);
1123 	if (status < 0) {
1124 		mlog_errno(status);
1125 		goto bail;
1126 	}
1127 
1128 	status = 0;
1129 bail:
1130 	if (new_bh)
1131 		brelse(new_bh);
1132 
1133 	mlog_exit(status);
1134 	return status;
1135 }
1136 
1137 int ocfs2_fill_new_dir(struct ocfs2_super *osb,
1138 		       handle_t *handle,
1139 		       struct inode *parent,
1140 		       struct inode *inode,
1141 		       struct buffer_head *fe_bh,
1142 		       struct ocfs2_alloc_context *data_ac)
1143 {
1144 	BUG_ON(!ocfs2_supports_inline_data(osb) && data_ac == NULL);
1145 
1146 	if (OCFS2_I(inode)->ip_dyn_features & OCFS2_INLINE_DATA_FL)
1147 		return ocfs2_fill_new_dir_id(osb, handle, parent, inode, fe_bh);
1148 
1149 	return ocfs2_fill_new_dir_el(osb, handle, parent, inode, fe_bh,
1150 				     data_ac);
1151 }
1152 
1153 static void ocfs2_expand_last_dirent(char *start, unsigned int old_size,
1154 				     unsigned int new_size)
1155 {
1156 	struct ocfs2_dir_entry *de;
1157 	struct ocfs2_dir_entry *prev_de;
1158 	char *de_buf, *limit;
1159 	unsigned int bytes = new_size - old_size;
1160 
1161 	limit = start + old_size;
1162 	de_buf = start;
1163 	de = (struct ocfs2_dir_entry *)de_buf;
1164 	do {
1165 		prev_de = de;
1166 		de_buf += le16_to_cpu(de->rec_len);
1167 		de = (struct ocfs2_dir_entry *)de_buf;
1168 	} while (de_buf < limit);
1169 
1170 	le16_add_cpu(&prev_de->rec_len, bytes);
1171 }
1172 
1173 /*
1174  * We allocate enough clusters to fulfill "blocks_wanted", but set
1175  * i_size to exactly one block. Ocfs2_extend_dir() will handle the
1176  * rest automatically for us.
1177  *
1178  * *first_block_bh is a pointer to the 1st data block allocated to the
1179  *  directory.
1180  */
1181 static int ocfs2_expand_inline_dir(struct inode *dir, struct buffer_head *di_bh,
1182 				   unsigned int blocks_wanted,
1183 				   struct buffer_head **first_block_bh)
1184 {
1185 	int ret, credits = OCFS2_INLINE_TO_EXTENTS_CREDITS;
1186 	u32 alloc, bit_off, len;
1187 	struct super_block *sb = dir->i_sb;
1188 	u64 blkno, bytes = blocks_wanted << sb->s_blocksize_bits;
1189 	struct ocfs2_super *osb = OCFS2_SB(dir->i_sb);
1190 	struct ocfs2_inode_info *oi = OCFS2_I(dir);
1191 	struct ocfs2_alloc_context *data_ac;
1192 	struct buffer_head *dirdata_bh = NULL;
1193 	struct ocfs2_dinode *di = (struct ocfs2_dinode *)di_bh->b_data;
1194 	handle_t *handle;
1195 
1196 	alloc = ocfs2_clusters_for_bytes(sb, bytes);
1197 
1198 	/*
1199 	 * We should never need more than 2 clusters for this -
1200 	 * maximum dirent size is far less than one block. In fact,
1201 	 * the only time we'd need more than one cluster is if
1202 	 * blocksize == clustersize and the dirent won't fit in the
1203 	 * extra space that the expansion to a single block gives. As
1204 	 * of today, that only happens on 4k/4k file systems.
1205 	 */
1206 	BUG_ON(alloc > 2);
1207 
1208 	ret = ocfs2_reserve_clusters(osb, alloc, &data_ac);
1209 	if (ret) {
1210 		mlog_errno(ret);
1211 		goto out;
1212 	}
1213 
1214 	down_write(&oi->ip_alloc_sem);
1215 
1216 	/*
1217 	 * Prepare for worst case allocation scenario of two separate
1218 	 * extents.
1219 	 */
1220 	if (alloc == 2)
1221 		credits += OCFS2_SUBALLOC_ALLOC;
1222 
1223 	handle = ocfs2_start_trans(osb, credits);
1224 	if (IS_ERR(handle)) {
1225 		ret = PTR_ERR(handle);
1226 		mlog_errno(ret);
1227 		goto out_sem;
1228 	}
1229 
1230 	/*
1231 	 * Try to claim as many clusters as the bitmap can give though
1232 	 * if we only get one now, that's enough to continue. The rest
1233 	 * will be claimed after the conversion to extents.
1234 	 */
1235 	ret = ocfs2_claim_clusters(osb, handle, data_ac, 1, &bit_off, &len);
1236 	if (ret) {
1237 		mlog_errno(ret);
1238 		goto out_commit;
1239 	}
1240 
1241 	/*
1242 	 * Operations are carefully ordered so that we set up the new
1243 	 * data block first. The conversion from inline data to
1244 	 * extents follows.
1245 	 */
1246 	blkno = ocfs2_clusters_to_blocks(dir->i_sb, bit_off);
1247 	dirdata_bh = sb_getblk(sb, blkno);
1248 	if (!dirdata_bh) {
1249 		ret = -EIO;
1250 		mlog_errno(ret);
1251 		goto out_commit;
1252 	}
1253 
1254 	ocfs2_set_new_buffer_uptodate(dir, dirdata_bh);
1255 
1256 	ret = ocfs2_journal_access(handle, dir, dirdata_bh,
1257 				   OCFS2_JOURNAL_ACCESS_CREATE);
1258 	if (ret) {
1259 		mlog_errno(ret);
1260 		goto out_commit;
1261 	}
1262 
1263 	memcpy(dirdata_bh->b_data, di->id2.i_data.id_data, i_size_read(dir));
1264 	memset(dirdata_bh->b_data + i_size_read(dir), 0,
1265 	       sb->s_blocksize - i_size_read(dir));
1266 	ocfs2_expand_last_dirent(dirdata_bh->b_data, i_size_read(dir),
1267 				 sb->s_blocksize);
1268 
1269 	ret = ocfs2_journal_dirty(handle, dirdata_bh);
1270 	if (ret) {
1271 		mlog_errno(ret);
1272 		goto out_commit;
1273 	}
1274 
1275 	/*
1276 	 * Set extent, i_size, etc on the directory. After this, the
1277 	 * inode should contain the same exact dirents as before and
1278 	 * be fully accessible from system calls.
1279 	 *
1280 	 * We let the later dirent insert modify c/mtime - to the user
1281 	 * the data hasn't changed.
1282 	 */
1283 	ret = ocfs2_journal_access(handle, dir, di_bh,
1284 				   OCFS2_JOURNAL_ACCESS_CREATE);
1285 	if (ret) {
1286 		mlog_errno(ret);
1287 		goto out_commit;
1288 	}
1289 
1290 	spin_lock(&oi->ip_lock);
1291 	oi->ip_dyn_features &= ~OCFS2_INLINE_DATA_FL;
1292 	di->i_dyn_features = cpu_to_le16(oi->ip_dyn_features);
1293 	spin_unlock(&oi->ip_lock);
1294 
1295 	ocfs2_dinode_new_extent_list(dir, di);
1296 
1297 	i_size_write(dir, sb->s_blocksize);
1298 	dir->i_mtime = dir->i_ctime = CURRENT_TIME;
1299 
1300 	di->i_size = cpu_to_le64(sb->s_blocksize);
1301 	di->i_ctime = di->i_mtime = cpu_to_le64(dir->i_ctime.tv_sec);
1302 	di->i_ctime_nsec = di->i_mtime_nsec = cpu_to_le32(dir->i_ctime.tv_nsec);
1303 	dir->i_blocks = ocfs2_inode_sector_count(dir);
1304 
1305 	/*
1306 	 * This should never fail as our extent list is empty and all
1307 	 * related blocks have been journaled already.
1308 	 */
1309 	ret = ocfs2_insert_extent(osb, handle, dir, di_bh, 0, blkno, len, 0,
1310 				  NULL);
1311 	if (ret) {
1312 		mlog_errno(ret);
1313 		goto out;
1314 	}
1315 
1316 	ret = ocfs2_journal_dirty(handle, di_bh);
1317 	if (ret) {
1318 		mlog_errno(ret);
1319 		goto out_commit;
1320 	}
1321 
1322 	/*
1323 	 * We asked for two clusters, but only got one in the 1st
1324 	 * pass. Claim the 2nd cluster as a separate extent.
1325 	 */
1326 	if (alloc > len) {
1327 		ret = ocfs2_claim_clusters(osb, handle, data_ac, 1, &bit_off,
1328 					   &len);
1329 		if (ret) {
1330 			mlog_errno(ret);
1331 			goto out_commit;
1332 		}
1333 		blkno = ocfs2_clusters_to_blocks(dir->i_sb, bit_off);
1334 
1335 		ret = ocfs2_insert_extent(osb, handle, dir, di_bh, 1, blkno,
1336 					  len, 0, NULL);
1337 		if (ret) {
1338 			mlog_errno(ret);
1339 			goto out;
1340 		}
1341 	}
1342 
1343 	*first_block_bh = dirdata_bh;
1344 	dirdata_bh = NULL;
1345 
1346 out_commit:
1347 	ocfs2_commit_trans(osb, handle);
1348 
1349 out_sem:
1350 	up_write(&oi->ip_alloc_sem);
1351 
1352 out:
1353 	if (data_ac)
1354 		ocfs2_free_alloc_context(data_ac);
1355 
1356 	brelse(dirdata_bh);
1357 
1358 	return ret;
1359 }
1360 
1361 /* returns a bh of the 1st new block in the allocation. */
1362 static int ocfs2_do_extend_dir(struct super_block *sb,
1363 			       handle_t *handle,
1364 			       struct inode *dir,
1365 			       struct buffer_head *parent_fe_bh,
1366 			       struct ocfs2_alloc_context *data_ac,
1367 			       struct ocfs2_alloc_context *meta_ac,
1368 			       struct buffer_head **new_bh)
1369 {
1370 	int status;
1371 	int extend;
1372 	u64 p_blkno, v_blkno;
1373 
1374 	spin_lock(&OCFS2_I(dir)->ip_lock);
1375 	extend = (i_size_read(dir) == ocfs2_clusters_to_bytes(sb, OCFS2_I(dir)->ip_clusters));
1376 	spin_unlock(&OCFS2_I(dir)->ip_lock);
1377 
1378 	if (extend) {
1379 		u32 offset = OCFS2_I(dir)->ip_clusters;
1380 
1381 		status = ocfs2_do_extend_allocation(OCFS2_SB(sb), dir, &offset,
1382 						    1, 0, parent_fe_bh, handle,
1383 						    data_ac, meta_ac, NULL);
1384 		BUG_ON(status == -EAGAIN);
1385 		if (status < 0) {
1386 			mlog_errno(status);
1387 			goto bail;
1388 		}
1389 	}
1390 
1391 	v_blkno = ocfs2_blocks_for_bytes(sb, i_size_read(dir));
1392 	status = ocfs2_extent_map_get_blocks(dir, v_blkno, &p_blkno, NULL, NULL);
1393 	if (status < 0) {
1394 		mlog_errno(status);
1395 		goto bail;
1396 	}
1397 
1398 	*new_bh = sb_getblk(sb, p_blkno);
1399 	if (!*new_bh) {
1400 		status = -EIO;
1401 		mlog_errno(status);
1402 		goto bail;
1403 	}
1404 	status = 0;
1405 bail:
1406 	mlog_exit(status);
1407 	return status;
1408 }
1409 
1410 /*
1411  * Assumes you already have a cluster lock on the directory.
1412  *
1413  * 'blocks_wanted' is only used if we have an inline directory which
1414  * is to be turned into an extent based one. The size of the dirent to
1415  * insert might be larger than the space gained by growing to just one
1416  * block, so we may have to grow the inode by two blocks in that case.
1417  */
1418 static int ocfs2_extend_dir(struct ocfs2_super *osb,
1419 			    struct inode *dir,
1420 			    struct buffer_head *parent_fe_bh,
1421 			    unsigned int blocks_wanted,
1422 			    struct buffer_head **new_de_bh)
1423 {
1424 	int status = 0;
1425 	int credits, num_free_extents, drop_alloc_sem = 0;
1426 	loff_t dir_i_size;
1427 	struct ocfs2_dinode *fe = (struct ocfs2_dinode *) parent_fe_bh->b_data;
1428 	struct ocfs2_alloc_context *data_ac = NULL;
1429 	struct ocfs2_alloc_context *meta_ac = NULL;
1430 	handle_t *handle = NULL;
1431 	struct buffer_head *new_bh = NULL;
1432 	struct ocfs2_dir_entry * de;
1433 	struct super_block *sb = osb->sb;
1434 
1435 	mlog_entry_void();
1436 
1437 	if (OCFS2_I(dir)->ip_dyn_features & OCFS2_INLINE_DATA_FL) {
1438 		status = ocfs2_expand_inline_dir(dir, parent_fe_bh,
1439 						 blocks_wanted, &new_bh);
1440 		if (status) {
1441 			mlog_errno(status);
1442 			goto bail;
1443 		}
1444 
1445 		if (blocks_wanted == 1) {
1446 			/*
1447 			 * If the new dirent will fit inside the space
1448 			 * created by pushing out to one block, then
1449 			 * we can complete the operation
1450 			 * here. Otherwise we have to expand i_size
1451 			 * and format the 2nd block below.
1452 			 */
1453 			BUG_ON(new_bh == NULL);
1454 			goto bail_bh;
1455 		}
1456 
1457 		/*
1458 		 * Get rid of 'new_bh' - we want to format the 2nd
1459 		 * data block and return that instead.
1460 		 */
1461 		brelse(new_bh);
1462 		new_bh = NULL;
1463 
1464 		dir_i_size = i_size_read(dir);
1465 		credits = OCFS2_SIMPLE_DIR_EXTEND_CREDITS;
1466 		goto do_extend;
1467 	}
1468 
1469 	dir_i_size = i_size_read(dir);
1470 	mlog(0, "extending dir %llu (i_size = %lld)\n",
1471 	     (unsigned long long)OCFS2_I(dir)->ip_blkno, dir_i_size);
1472 
1473 	/* dir->i_size is always block aligned. */
1474 	spin_lock(&OCFS2_I(dir)->ip_lock);
1475 	if (dir_i_size == ocfs2_clusters_to_bytes(sb, OCFS2_I(dir)->ip_clusters)) {
1476 		spin_unlock(&OCFS2_I(dir)->ip_lock);
1477 		num_free_extents = ocfs2_num_free_extents(osb, dir, fe);
1478 		if (num_free_extents < 0) {
1479 			status = num_free_extents;
1480 			mlog_errno(status);
1481 			goto bail;
1482 		}
1483 
1484 		if (!num_free_extents) {
1485 			status = ocfs2_reserve_new_metadata(osb, fe, &meta_ac);
1486 			if (status < 0) {
1487 				if (status != -ENOSPC)
1488 					mlog_errno(status);
1489 				goto bail;
1490 			}
1491 		}
1492 
1493 		status = ocfs2_reserve_clusters(osb, 1, &data_ac);
1494 		if (status < 0) {
1495 			if (status != -ENOSPC)
1496 				mlog_errno(status);
1497 			goto bail;
1498 		}
1499 
1500 		credits = ocfs2_calc_extend_credits(sb, fe, 1);
1501 	} else {
1502 		spin_unlock(&OCFS2_I(dir)->ip_lock);
1503 		credits = OCFS2_SIMPLE_DIR_EXTEND_CREDITS;
1504 	}
1505 
1506 do_extend:
1507 	down_write(&OCFS2_I(dir)->ip_alloc_sem);
1508 	drop_alloc_sem = 1;
1509 
1510 	handle = ocfs2_start_trans(osb, credits);
1511 	if (IS_ERR(handle)) {
1512 		status = PTR_ERR(handle);
1513 		handle = NULL;
1514 		mlog_errno(status);
1515 		goto bail;
1516 	}
1517 
1518 	status = ocfs2_do_extend_dir(osb->sb, handle, dir, parent_fe_bh,
1519 				     data_ac, meta_ac, &new_bh);
1520 	if (status < 0) {
1521 		mlog_errno(status);
1522 		goto bail;
1523 	}
1524 
1525 	ocfs2_set_new_buffer_uptodate(dir, new_bh);
1526 
1527 	status = ocfs2_journal_access(handle, dir, new_bh,
1528 				      OCFS2_JOURNAL_ACCESS_CREATE);
1529 	if (status < 0) {
1530 		mlog_errno(status);
1531 		goto bail;
1532 	}
1533 	memset(new_bh->b_data, 0, sb->s_blocksize);
1534 	de = (struct ocfs2_dir_entry *) new_bh->b_data;
1535 	de->inode = 0;
1536 	de->rec_len = cpu_to_le16(sb->s_blocksize);
1537 	status = ocfs2_journal_dirty(handle, new_bh);
1538 	if (status < 0) {
1539 		mlog_errno(status);
1540 		goto bail;
1541 	}
1542 
1543 	dir_i_size += dir->i_sb->s_blocksize;
1544 	i_size_write(dir, dir_i_size);
1545 	dir->i_blocks = ocfs2_inode_sector_count(dir);
1546 	status = ocfs2_mark_inode_dirty(handle, dir, parent_fe_bh);
1547 	if (status < 0) {
1548 		mlog_errno(status);
1549 		goto bail;
1550 	}
1551 
1552 bail_bh:
1553 	*new_de_bh = new_bh;
1554 	get_bh(*new_de_bh);
1555 bail:
1556 	if (drop_alloc_sem)
1557 		up_write(&OCFS2_I(dir)->ip_alloc_sem);
1558 	if (handle)
1559 		ocfs2_commit_trans(osb, handle);
1560 
1561 	if (data_ac)
1562 		ocfs2_free_alloc_context(data_ac);
1563 	if (meta_ac)
1564 		ocfs2_free_alloc_context(meta_ac);
1565 
1566 	if (new_bh)
1567 		brelse(new_bh);
1568 
1569 	mlog_exit(status);
1570 	return status;
1571 }
1572 
1573 static int ocfs2_find_dir_space_id(struct inode *dir, struct buffer_head *di_bh,
1574 				   const char *name, int namelen,
1575 				   struct buffer_head **ret_de_bh,
1576 				   unsigned int *blocks_wanted)
1577 {
1578 	int ret;
1579 	struct ocfs2_dinode *di = (struct ocfs2_dinode *)di_bh->b_data;
1580 	struct ocfs2_dir_entry *de, *last_de = NULL;
1581 	char *de_buf, *limit;
1582 	unsigned long offset = 0;
1583 	unsigned int rec_len, new_rec_len;
1584 
1585 	de_buf = di->id2.i_data.id_data;
1586 	limit = de_buf + i_size_read(dir);
1587 	rec_len = OCFS2_DIR_REC_LEN(namelen);
1588 
1589 	while (de_buf < limit) {
1590 		de = (struct ocfs2_dir_entry *)de_buf;
1591 
1592 		if (!ocfs2_check_dir_entry(dir, de, di_bh, offset)) {
1593 			ret = -ENOENT;
1594 			goto out;
1595 		}
1596 		if (ocfs2_match(namelen, name, de)) {
1597 			ret = -EEXIST;
1598 			goto out;
1599 		}
1600 		if (ocfs2_dirent_would_fit(de, rec_len)) {
1601 			/* Ok, we found a spot. Return this bh and let
1602 			 * the caller actually fill it in. */
1603 			*ret_de_bh = di_bh;
1604 			get_bh(*ret_de_bh);
1605 			ret = 0;
1606 			goto out;
1607 		}
1608 
1609 		last_de = de;
1610 		de_buf += le16_to_cpu(de->rec_len);
1611 		offset += le16_to_cpu(de->rec_len);
1612 	}
1613 
1614 	/*
1615 	 * We're going to require expansion of the directory - figure
1616 	 * out how many blocks we'll need so that a place for the
1617 	 * dirent can be found.
1618 	 */
1619 	*blocks_wanted = 1;
1620 	new_rec_len = le16_to_cpu(last_de->rec_len) + (dir->i_sb->s_blocksize - i_size_read(dir));
1621 	if (new_rec_len < (rec_len + OCFS2_DIR_REC_LEN(last_de->name_len)))
1622 		*blocks_wanted = 2;
1623 
1624 	ret = -ENOSPC;
1625 out:
1626 	return ret;
1627 }
1628 
1629 static int ocfs2_find_dir_space_el(struct inode *dir, const char *name,
1630 				   int namelen, struct buffer_head **ret_de_bh)
1631 {
1632 	unsigned long offset;
1633 	struct buffer_head *bh = NULL;
1634 	unsigned short rec_len;
1635 	struct ocfs2_dir_entry *de;
1636 	struct super_block *sb = dir->i_sb;
1637 	int status;
1638 
1639 	bh = ocfs2_bread(dir, 0, &status, 0);
1640 	if (!bh) {
1641 		mlog_errno(status);
1642 		goto bail;
1643 	}
1644 
1645 	rec_len = OCFS2_DIR_REC_LEN(namelen);
1646 	offset = 0;
1647 	de = (struct ocfs2_dir_entry *) bh->b_data;
1648 	while (1) {
1649 		if ((char *)de >= sb->s_blocksize + bh->b_data) {
1650 			brelse(bh);
1651 			bh = NULL;
1652 
1653 			if (i_size_read(dir) <= offset) {
1654 				/*
1655 				 * Caller will have to expand this
1656 				 * directory.
1657 				 */
1658 				status = -ENOSPC;
1659 				goto bail;
1660 			}
1661 			bh = ocfs2_bread(dir,
1662 					 offset >> sb->s_blocksize_bits,
1663 					 &status,
1664 					 0);
1665 			if (!bh) {
1666 				mlog_errno(status);
1667 				goto bail;
1668 			}
1669 			/* move to next block */
1670 			de = (struct ocfs2_dir_entry *) bh->b_data;
1671 		}
1672 		if (!ocfs2_check_dir_entry(dir, de, bh, offset)) {
1673 			status = -ENOENT;
1674 			goto bail;
1675 		}
1676 		if (ocfs2_match(namelen, name, de)) {
1677 			status = -EEXIST;
1678 			goto bail;
1679 		}
1680 		if (ocfs2_dirent_would_fit(de, rec_len)) {
1681 			/* Ok, we found a spot. Return this bh and let
1682 			 * the caller actually fill it in. */
1683 			*ret_de_bh = bh;
1684 			get_bh(*ret_de_bh);
1685 			status = 0;
1686 			goto bail;
1687 		}
1688 		offset += le16_to_cpu(de->rec_len);
1689 		de = (struct ocfs2_dir_entry *)((char *) de + le16_to_cpu(de->rec_len));
1690 	}
1691 
1692 	status = 0;
1693 bail:
1694 	if (bh)
1695 		brelse(bh);
1696 
1697 	mlog_exit(status);
1698 	return status;
1699 }
1700 
1701 int ocfs2_prepare_dir_for_insert(struct ocfs2_super *osb,
1702 				 struct inode *dir,
1703 				 struct buffer_head *parent_fe_bh,
1704 				 const char *name,
1705 				 int namelen,
1706 				 struct buffer_head **ret_de_bh)
1707 {
1708 	int ret;
1709 	unsigned int blocks_wanted = 1;
1710 	struct buffer_head *bh = NULL;
1711 
1712 	mlog(0, "getting ready to insert namelen %d into dir %llu\n",
1713 	     namelen, (unsigned long long)OCFS2_I(dir)->ip_blkno);
1714 
1715 	*ret_de_bh = NULL;
1716 
1717 	if (!namelen) {
1718 		ret = -EINVAL;
1719 		mlog_errno(ret);
1720 		goto out;
1721 	}
1722 
1723 	if (OCFS2_I(dir)->ip_dyn_features & OCFS2_INLINE_DATA_FL) {
1724 		ret = ocfs2_find_dir_space_id(dir, parent_fe_bh, name,
1725 					      namelen, &bh, &blocks_wanted);
1726 	} else
1727 		ret = ocfs2_find_dir_space_el(dir, name, namelen, &bh);
1728 
1729 	if (ret && ret != -ENOSPC) {
1730 		mlog_errno(ret);
1731 		goto out;
1732 	}
1733 
1734 	if (ret == -ENOSPC) {
1735 		/*
1736 		 * We have to expand the directory to add this name.
1737 		 */
1738 		BUG_ON(bh);
1739 
1740 		ret = ocfs2_extend_dir(osb, dir, parent_fe_bh, blocks_wanted,
1741 				       &bh);
1742 		if (ret) {
1743 			if (ret != -ENOSPC)
1744 				mlog_errno(ret);
1745 			goto out;
1746 		}
1747 
1748 		BUG_ON(!bh);
1749 	}
1750 
1751 	*ret_de_bh = bh;
1752 	bh = NULL;
1753 out:
1754 	if (bh)
1755 		brelse(bh);
1756 	return ret;
1757 }
1758