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