xref: /openbmc/linux/fs/ocfs2/localalloc.c (revision 7ad8b3d30ecae325fcccbf86f34ce3af716b4f95)
1 /* -*- mode: c; c-basic-offset: 8; -*-
2  * vim: noexpandtab sw=8 ts=8 sts=0:
3  *
4  * localalloc.c
5  *
6  * Node local data allocation
7  *
8  * Copyright (C) 2002, 2004 Oracle.  All rights reserved.
9  *
10  * This program is free software; you can redistribute it and/or
11  * modify it under the terms of the GNU General Public
12  * License as published by the Free Software Foundation; either
13  * version 2 of the License, or (at your option) any later version.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
18  * General Public License for more details.
19  *
20  * You should have received a copy of the GNU General Public
21  * License along with this program; if not, write to the
22  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
23  * Boston, MA 021110-1307, USA.
24  */
25 
26 #include <linux/fs.h>
27 #include <linux/types.h>
28 #include <linux/slab.h>
29 #include <linux/highmem.h>
30 #include <linux/bitops.h>
31 
32 #define MLOG_MASK_PREFIX ML_DISK_ALLOC
33 #include <cluster/masklog.h>
34 
35 #include "ocfs2.h"
36 
37 #include "alloc.h"
38 #include "dlmglue.h"
39 #include "inode.h"
40 #include "journal.h"
41 #include "localalloc.h"
42 #include "suballoc.h"
43 #include "super.h"
44 #include "sysfile.h"
45 
46 #include "buffer_head_io.h"
47 
48 #define OCFS2_LOCAL_ALLOC(dinode)	(&((dinode)->id2.i_lab))
49 
50 static inline int ocfs2_local_alloc_window_bits(struct ocfs2_super *osb);
51 
52 static u32 ocfs2_local_alloc_count_bits(struct ocfs2_dinode *alloc);
53 
54 static int ocfs2_local_alloc_find_clear_bits(struct ocfs2_super *osb,
55 					     struct ocfs2_dinode *alloc,
56 					     u32 numbits);
57 
58 static void ocfs2_clear_local_alloc(struct ocfs2_dinode *alloc);
59 
60 static int ocfs2_sync_local_to_main(struct ocfs2_super *osb,
61 				    handle_t *handle,
62 				    struct ocfs2_dinode *alloc,
63 				    struct inode *main_bm_inode,
64 				    struct buffer_head *main_bm_bh);
65 
66 static int ocfs2_local_alloc_reserve_for_window(struct ocfs2_super *osb,
67 						struct ocfs2_alloc_context **ac,
68 						struct inode **bitmap_inode,
69 						struct buffer_head **bitmap_bh);
70 
71 static int ocfs2_local_alloc_new_window(struct ocfs2_super *osb,
72 					handle_t *handle,
73 					struct ocfs2_alloc_context *ac);
74 
75 static int ocfs2_local_alloc_slide_window(struct ocfs2_super *osb,
76 					  struct inode *local_alloc_inode);
77 
78 static inline int ocfs2_local_alloc_window_bits(struct ocfs2_super *osb)
79 {
80 	BUG_ON(osb->s_clustersize_bits > 20);
81 
82 	/* Size local alloc windows by the megabyte */
83 	return osb->local_alloc_size << (20 - osb->s_clustersize_bits);
84 }
85 
86 /*
87  * Tell us whether a given allocation should use the local alloc
88  * file. Otherwise, it has to go to the main bitmap.
89  */
90 int ocfs2_alloc_should_use_local(struct ocfs2_super *osb, u64 bits)
91 {
92 	int la_bits = ocfs2_local_alloc_window_bits(osb);
93 	int ret = 0;
94 
95 	if (osb->local_alloc_state != OCFS2_LA_ENABLED)
96 		goto bail;
97 
98 	/* la_bits should be at least twice the size (in clusters) of
99 	 * a new block group. We want to be sure block group
100 	 * allocations go through the local alloc, so allow an
101 	 * allocation to take up to half the bitmap. */
102 	if (bits > (la_bits / 2))
103 		goto bail;
104 
105 	ret = 1;
106 bail:
107 	mlog(0, "state=%d, bits=%llu, la_bits=%d, ret=%d\n",
108 	     osb->local_alloc_state, (unsigned long long)bits, la_bits, ret);
109 	return ret;
110 }
111 
112 int ocfs2_load_local_alloc(struct ocfs2_super *osb)
113 {
114 	int status = 0;
115 	struct ocfs2_dinode *alloc = NULL;
116 	struct buffer_head *alloc_bh = NULL;
117 	u32 num_used;
118 	struct inode *inode = NULL;
119 	struct ocfs2_local_alloc *la;
120 
121 	mlog_entry_void();
122 
123 	if (osb->local_alloc_size == 0)
124 		goto bail;
125 
126 	if (ocfs2_local_alloc_window_bits(osb) >= osb->bitmap_cpg) {
127 		mlog(ML_NOTICE, "Requested local alloc window %d is larger "
128 		     "than max possible %u. Using defaults.\n",
129 		     ocfs2_local_alloc_window_bits(osb), (osb->bitmap_cpg - 1));
130 		osb->local_alloc_size = OCFS2_DEFAULT_LOCAL_ALLOC_SIZE;
131 	}
132 
133 	/* read the alloc off disk */
134 	inode = ocfs2_get_system_file_inode(osb, LOCAL_ALLOC_SYSTEM_INODE,
135 					    osb->slot_num);
136 	if (!inode) {
137 		status = -EINVAL;
138 		mlog_errno(status);
139 		goto bail;
140 	}
141 
142 	status = ocfs2_read_block(osb, OCFS2_I(inode)->ip_blkno,
143 				  &alloc_bh, 0, inode);
144 	if (status < 0) {
145 		mlog_errno(status);
146 		goto bail;
147 	}
148 
149 	alloc = (struct ocfs2_dinode *) alloc_bh->b_data;
150 	la = OCFS2_LOCAL_ALLOC(alloc);
151 
152 	if (!(le32_to_cpu(alloc->i_flags) &
153 	    (OCFS2_LOCAL_ALLOC_FL|OCFS2_BITMAP_FL))) {
154 		mlog(ML_ERROR, "Invalid local alloc inode, %llu\n",
155 		     (unsigned long long)OCFS2_I(inode)->ip_blkno);
156 		status = -EINVAL;
157 		goto bail;
158 	}
159 
160 	if ((la->la_size == 0) ||
161 	    (le16_to_cpu(la->la_size) > ocfs2_local_alloc_size(inode->i_sb))) {
162 		mlog(ML_ERROR, "Local alloc size is invalid (la_size = %u)\n",
163 		     le16_to_cpu(la->la_size));
164 		status = -EINVAL;
165 		goto bail;
166 	}
167 
168 	/* do a little verification. */
169 	num_used = ocfs2_local_alloc_count_bits(alloc);
170 
171 	/* hopefully the local alloc has always been recovered before
172 	 * we load it. */
173 	if (num_used
174 	    || alloc->id1.bitmap1.i_used
175 	    || alloc->id1.bitmap1.i_total
176 	    || la->la_bm_off)
177 		mlog(ML_ERROR, "Local alloc hasn't been recovered!\n"
178 		     "found = %u, set = %u, taken = %u, off = %u\n",
179 		     num_used, le32_to_cpu(alloc->id1.bitmap1.i_used),
180 		     le32_to_cpu(alloc->id1.bitmap1.i_total),
181 		     OCFS2_LOCAL_ALLOC(alloc)->la_bm_off);
182 
183 	osb->local_alloc_bh = alloc_bh;
184 	osb->local_alloc_state = OCFS2_LA_ENABLED;
185 
186 bail:
187 	if (status < 0)
188 		if (alloc_bh)
189 			brelse(alloc_bh);
190 	if (inode)
191 		iput(inode);
192 
193 	mlog(0, "Local alloc window bits = %d\n",
194 	     ocfs2_local_alloc_window_bits(osb));
195 
196 	mlog_exit(status);
197 	return status;
198 }
199 
200 /*
201  * return any unused bits to the bitmap and write out a clean
202  * local_alloc.
203  *
204  * local_alloc_bh is optional. If not passed, we will simply use the
205  * one off osb. If you do pass it however, be warned that it *will* be
206  * returned brelse'd and NULL'd out.*/
207 void ocfs2_shutdown_local_alloc(struct ocfs2_super *osb)
208 {
209 	int status;
210 	handle_t *handle;
211 	struct inode *local_alloc_inode = NULL;
212 	struct buffer_head *bh = NULL;
213 	struct buffer_head *main_bm_bh = NULL;
214 	struct inode *main_bm_inode = NULL;
215 	struct ocfs2_dinode *alloc_copy = NULL;
216 	struct ocfs2_dinode *alloc = NULL;
217 
218 	mlog_entry_void();
219 
220 	if (osb->local_alloc_state == OCFS2_LA_UNUSED)
221 		goto out;
222 
223 	local_alloc_inode =
224 		ocfs2_get_system_file_inode(osb,
225 					    LOCAL_ALLOC_SYSTEM_INODE,
226 					    osb->slot_num);
227 	if (!local_alloc_inode) {
228 		status = -ENOENT;
229 		mlog_errno(status);
230 		goto out;
231 	}
232 
233 	osb->local_alloc_state = OCFS2_LA_DISABLED;
234 
235 	main_bm_inode = ocfs2_get_system_file_inode(osb,
236 						    GLOBAL_BITMAP_SYSTEM_INODE,
237 						    OCFS2_INVALID_SLOT);
238 	if (!main_bm_inode) {
239 		status = -EINVAL;
240 		mlog_errno(status);
241 		goto out;
242 	}
243 
244 	mutex_lock(&main_bm_inode->i_mutex);
245 
246 	status = ocfs2_inode_lock(main_bm_inode, &main_bm_bh, 1);
247 	if (status < 0) {
248 		mlog_errno(status);
249 		goto out_mutex;
250 	}
251 
252 	/* WINDOW_MOVE_CREDITS is a bit heavy... */
253 	handle = ocfs2_start_trans(osb, OCFS2_WINDOW_MOVE_CREDITS);
254 	if (IS_ERR(handle)) {
255 		mlog_errno(PTR_ERR(handle));
256 		handle = NULL;
257 		goto out_unlock;
258 	}
259 
260 	bh = osb->local_alloc_bh;
261 	alloc = (struct ocfs2_dinode *) bh->b_data;
262 
263 	alloc_copy = kmalloc(bh->b_size, GFP_KERNEL);
264 	if (!alloc_copy) {
265 		status = -ENOMEM;
266 		goto out_commit;
267 	}
268 	memcpy(alloc_copy, alloc, bh->b_size);
269 
270 	status = ocfs2_journal_access(handle, local_alloc_inode, bh,
271 				      OCFS2_JOURNAL_ACCESS_WRITE);
272 	if (status < 0) {
273 		mlog_errno(status);
274 		goto out_commit;
275 	}
276 
277 	ocfs2_clear_local_alloc(alloc);
278 
279 	status = ocfs2_journal_dirty(handle, bh);
280 	if (status < 0) {
281 		mlog_errno(status);
282 		goto out_commit;
283 	}
284 
285 	brelse(bh);
286 	osb->local_alloc_bh = NULL;
287 	osb->local_alloc_state = OCFS2_LA_UNUSED;
288 
289 	status = ocfs2_sync_local_to_main(osb, handle, alloc_copy,
290 					  main_bm_inode, main_bm_bh);
291 	if (status < 0)
292 		mlog_errno(status);
293 
294 out_commit:
295 	ocfs2_commit_trans(osb, handle);
296 
297 out_unlock:
298 	if (main_bm_bh)
299 		brelse(main_bm_bh);
300 
301 	ocfs2_inode_unlock(main_bm_inode, 1);
302 
303 out_mutex:
304 	mutex_unlock(&main_bm_inode->i_mutex);
305 	iput(main_bm_inode);
306 
307 out:
308 	if (local_alloc_inode)
309 		iput(local_alloc_inode);
310 
311 	if (alloc_copy)
312 		kfree(alloc_copy);
313 
314 	mlog_exit_void();
315 }
316 
317 /*
318  * We want to free the bitmap bits outside of any recovery context as
319  * we'll need a cluster lock to do so, but we must clear the local
320  * alloc before giving up the recovered nodes journal. To solve this,
321  * we kmalloc a copy of the local alloc before it's change for the
322  * caller to process with ocfs2_complete_local_alloc_recovery
323  */
324 int ocfs2_begin_local_alloc_recovery(struct ocfs2_super *osb,
325 				     int slot_num,
326 				     struct ocfs2_dinode **alloc_copy)
327 {
328 	int status = 0;
329 	struct buffer_head *alloc_bh = NULL;
330 	struct inode *inode = NULL;
331 	struct ocfs2_dinode *alloc;
332 
333 	mlog_entry("(slot_num = %d)\n", slot_num);
334 
335 	*alloc_copy = NULL;
336 
337 	inode = ocfs2_get_system_file_inode(osb,
338 					    LOCAL_ALLOC_SYSTEM_INODE,
339 					    slot_num);
340 	if (!inode) {
341 		status = -EINVAL;
342 		mlog_errno(status);
343 		goto bail;
344 	}
345 
346 	mutex_lock(&inode->i_mutex);
347 
348 	status = ocfs2_read_block(osb, OCFS2_I(inode)->ip_blkno,
349 				  &alloc_bh, 0, inode);
350 	if (status < 0) {
351 		mlog_errno(status);
352 		goto bail;
353 	}
354 
355 	*alloc_copy = kmalloc(alloc_bh->b_size, GFP_KERNEL);
356 	if (!(*alloc_copy)) {
357 		status = -ENOMEM;
358 		goto bail;
359 	}
360 	memcpy((*alloc_copy), alloc_bh->b_data, alloc_bh->b_size);
361 
362 	alloc = (struct ocfs2_dinode *) alloc_bh->b_data;
363 	ocfs2_clear_local_alloc(alloc);
364 
365 	status = ocfs2_write_block(osb, alloc_bh, inode);
366 	if (status < 0)
367 		mlog_errno(status);
368 
369 bail:
370 	if ((status < 0) && (*alloc_copy)) {
371 		kfree(*alloc_copy);
372 		*alloc_copy = NULL;
373 	}
374 
375 	if (alloc_bh)
376 		brelse(alloc_bh);
377 
378 	if (inode) {
379 		mutex_unlock(&inode->i_mutex);
380 		iput(inode);
381 	}
382 
383 	mlog_exit(status);
384 	return status;
385 }
386 
387 /*
388  * Step 2: By now, we've completed the journal recovery, we've stamped
389  * a clean local alloc on disk and dropped the node out of the
390  * recovery map. Dlm locks will no longer stall, so lets clear out the
391  * main bitmap.
392  */
393 int ocfs2_complete_local_alloc_recovery(struct ocfs2_super *osb,
394 					struct ocfs2_dinode *alloc)
395 {
396 	int status;
397 	handle_t *handle;
398 	struct buffer_head *main_bm_bh = NULL;
399 	struct inode *main_bm_inode;
400 
401 	mlog_entry_void();
402 
403 	main_bm_inode = ocfs2_get_system_file_inode(osb,
404 						    GLOBAL_BITMAP_SYSTEM_INODE,
405 						    OCFS2_INVALID_SLOT);
406 	if (!main_bm_inode) {
407 		status = -EINVAL;
408 		mlog_errno(status);
409 		goto out;
410 	}
411 
412 	mutex_lock(&main_bm_inode->i_mutex);
413 
414 	status = ocfs2_inode_lock(main_bm_inode, &main_bm_bh, 1);
415 	if (status < 0) {
416 		mlog_errno(status);
417 		goto out_mutex;
418 	}
419 
420 	handle = ocfs2_start_trans(osb, OCFS2_WINDOW_MOVE_CREDITS);
421 	if (IS_ERR(handle)) {
422 		status = PTR_ERR(handle);
423 		handle = NULL;
424 		mlog_errno(status);
425 		goto out_unlock;
426 	}
427 
428 	/* we want the bitmap change to be recorded on disk asap */
429 	handle->h_sync = 1;
430 
431 	status = ocfs2_sync_local_to_main(osb, handle, alloc,
432 					  main_bm_inode, main_bm_bh);
433 	if (status < 0)
434 		mlog_errno(status);
435 
436 	ocfs2_commit_trans(osb, handle);
437 
438 out_unlock:
439 	ocfs2_inode_unlock(main_bm_inode, 1);
440 
441 out_mutex:
442 	mutex_unlock(&main_bm_inode->i_mutex);
443 
444 	if (main_bm_bh)
445 		brelse(main_bm_bh);
446 
447 	iput(main_bm_inode);
448 
449 out:
450 	mlog_exit(status);
451 	return status;
452 }
453 
454 /*
455  * make sure we've got at least bitswanted contiguous bits in the
456  * local alloc. You lose them when you drop i_mutex.
457  *
458  * We will add ourselves to the transaction passed in, but may start
459  * our own in order to shift windows.
460  */
461 int ocfs2_reserve_local_alloc_bits(struct ocfs2_super *osb,
462 				   u32 bits_wanted,
463 				   struct ocfs2_alloc_context *ac)
464 {
465 	int status;
466 	struct ocfs2_dinode *alloc;
467 	struct inode *local_alloc_inode;
468 	unsigned int free_bits;
469 
470 	mlog_entry_void();
471 
472 	BUG_ON(!ac);
473 
474 	local_alloc_inode =
475 		ocfs2_get_system_file_inode(osb,
476 					    LOCAL_ALLOC_SYSTEM_INODE,
477 					    osb->slot_num);
478 	if (!local_alloc_inode) {
479 		status = -ENOENT;
480 		mlog_errno(status);
481 		goto bail;
482 	}
483 
484 	mutex_lock(&local_alloc_inode->i_mutex);
485 
486 	if (osb->local_alloc_state != OCFS2_LA_ENABLED) {
487 		status = -ENOSPC;
488 		goto bail;
489 	}
490 
491 	if (bits_wanted > ocfs2_local_alloc_window_bits(osb)) {
492 		mlog(0, "Asking for more than my max window size!\n");
493 		status = -ENOSPC;
494 		goto bail;
495 	}
496 
497 	alloc = (struct ocfs2_dinode *) osb->local_alloc_bh->b_data;
498 
499 #ifdef OCFS2_DEBUG_FS
500 	if (le32_to_cpu(alloc->id1.bitmap1.i_used) !=
501 	    ocfs2_local_alloc_count_bits(alloc)) {
502 		ocfs2_error(osb->sb, "local alloc inode %llu says it has "
503 			    "%u free bits, but a count shows %u",
504 			    (unsigned long long)le64_to_cpu(alloc->i_blkno),
505 			    le32_to_cpu(alloc->id1.bitmap1.i_used),
506 			    ocfs2_local_alloc_count_bits(alloc));
507 		status = -EIO;
508 		goto bail;
509 	}
510 #endif
511 
512 	free_bits = le32_to_cpu(alloc->id1.bitmap1.i_total) -
513 		le32_to_cpu(alloc->id1.bitmap1.i_used);
514 	if (bits_wanted > free_bits) {
515 		/* uhoh, window change time. */
516 		status =
517 			ocfs2_local_alloc_slide_window(osb, local_alloc_inode);
518 		if (status < 0) {
519 			if (status != -ENOSPC)
520 				mlog_errno(status);
521 			goto bail;
522 		}
523 	}
524 
525 	ac->ac_inode = local_alloc_inode;
526 	ac->ac_which = OCFS2_AC_USE_LOCAL;
527 	get_bh(osb->local_alloc_bh);
528 	ac->ac_bh = osb->local_alloc_bh;
529 	status = 0;
530 bail:
531 	if (status < 0 && local_alloc_inode) {
532 		mutex_unlock(&local_alloc_inode->i_mutex);
533 		iput(local_alloc_inode);
534 	}
535 
536 	mlog(0, "bits=%d, slot=%d, ret=%d\n", bits_wanted, osb->slot_num,
537 	     status);
538 
539 	mlog_exit(status);
540 	return status;
541 }
542 
543 int ocfs2_claim_local_alloc_bits(struct ocfs2_super *osb,
544 				 handle_t *handle,
545 				 struct ocfs2_alloc_context *ac,
546 				 u32 bits_wanted,
547 				 u32 *bit_off,
548 				 u32 *num_bits)
549 {
550 	int status, start;
551 	struct inode *local_alloc_inode;
552 	void *bitmap;
553 	struct ocfs2_dinode *alloc;
554 	struct ocfs2_local_alloc *la;
555 
556 	mlog_entry_void();
557 	BUG_ON(ac->ac_which != OCFS2_AC_USE_LOCAL);
558 
559 	local_alloc_inode = ac->ac_inode;
560 	alloc = (struct ocfs2_dinode *) osb->local_alloc_bh->b_data;
561 	la = OCFS2_LOCAL_ALLOC(alloc);
562 
563 	start = ocfs2_local_alloc_find_clear_bits(osb, alloc, bits_wanted);
564 	if (start == -1) {
565 		/* TODO: Shouldn't we just BUG here? */
566 		status = -ENOSPC;
567 		mlog_errno(status);
568 		goto bail;
569 	}
570 
571 	bitmap = la->la_bitmap;
572 	*bit_off = le32_to_cpu(la->la_bm_off) + start;
573 	/* local alloc is always contiguous by nature -- we never
574 	 * delete bits from it! */
575 	*num_bits = bits_wanted;
576 
577 	status = ocfs2_journal_access(handle, local_alloc_inode,
578 				      osb->local_alloc_bh,
579 				      OCFS2_JOURNAL_ACCESS_WRITE);
580 	if (status < 0) {
581 		mlog_errno(status);
582 		goto bail;
583 	}
584 
585 	while(bits_wanted--)
586 		ocfs2_set_bit(start++, bitmap);
587 
588 	alloc->id1.bitmap1.i_used = cpu_to_le32(*num_bits +
589 				le32_to_cpu(alloc->id1.bitmap1.i_used));
590 
591 	status = ocfs2_journal_dirty(handle, osb->local_alloc_bh);
592 	if (status < 0) {
593 		mlog_errno(status);
594 		goto bail;
595 	}
596 
597 	status = 0;
598 bail:
599 	mlog_exit(status);
600 	return status;
601 }
602 
603 static u32 ocfs2_local_alloc_count_bits(struct ocfs2_dinode *alloc)
604 {
605 	int i;
606 	u8 *buffer;
607 	u32 count = 0;
608 	struct ocfs2_local_alloc *la = OCFS2_LOCAL_ALLOC(alloc);
609 
610 	mlog_entry_void();
611 
612 	buffer = la->la_bitmap;
613 	for (i = 0; i < le16_to_cpu(la->la_size); i++)
614 		count += hweight8(buffer[i]);
615 
616 	mlog_exit(count);
617 	return count;
618 }
619 
620 static int ocfs2_local_alloc_find_clear_bits(struct ocfs2_super *osb,
621 					     struct ocfs2_dinode *alloc,
622 					     u32 numbits)
623 {
624 	int numfound, bitoff, left, startoff, lastzero;
625 	void *bitmap = NULL;
626 
627 	mlog_entry("(numbits wanted = %u)\n", numbits);
628 
629 	if (!alloc->id1.bitmap1.i_total) {
630 		mlog(0, "No bits in my window!\n");
631 		bitoff = -1;
632 		goto bail;
633 	}
634 
635 	bitmap = OCFS2_LOCAL_ALLOC(alloc)->la_bitmap;
636 
637 	numfound = bitoff = startoff = 0;
638 	lastzero = -1;
639 	left = le32_to_cpu(alloc->id1.bitmap1.i_total);
640 	while ((bitoff = ocfs2_find_next_zero_bit(bitmap, left, startoff)) != -1) {
641 		if (bitoff == left) {
642 			/* mlog(0, "bitoff (%d) == left", bitoff); */
643 			break;
644 		}
645 		/* mlog(0, "Found a zero: bitoff = %d, startoff = %d, "
646 		   "numfound = %d\n", bitoff, startoff, numfound);*/
647 
648 		/* Ok, we found a zero bit... is it contig. or do we
649 		 * start over?*/
650 		if (bitoff == startoff) {
651 			/* we found a zero */
652 			numfound++;
653 			startoff++;
654 		} else {
655 			/* got a zero after some ones */
656 			numfound = 1;
657 			startoff = bitoff+1;
658 		}
659 		/* we got everything we needed */
660 		if (numfound == numbits) {
661 			/* mlog(0, "Found it all!\n"); */
662 			break;
663 		}
664 	}
665 
666 	mlog(0, "Exiting loop, bitoff = %d, numfound = %d\n", bitoff,
667 	     numfound);
668 
669 	if (numfound == numbits)
670 		bitoff = startoff - numfound;
671 	else
672 		bitoff = -1;
673 
674 bail:
675 	mlog_exit(bitoff);
676 	return bitoff;
677 }
678 
679 static void ocfs2_clear_local_alloc(struct ocfs2_dinode *alloc)
680 {
681 	struct ocfs2_local_alloc *la = OCFS2_LOCAL_ALLOC(alloc);
682 	int i;
683 	mlog_entry_void();
684 
685 	alloc->id1.bitmap1.i_total = 0;
686 	alloc->id1.bitmap1.i_used = 0;
687 	la->la_bm_off = 0;
688 	for(i = 0; i < le16_to_cpu(la->la_size); i++)
689 		la->la_bitmap[i] = 0;
690 
691 	mlog_exit_void();
692 }
693 
694 #if 0
695 /* turn this on and uncomment below to aid debugging window shifts. */
696 static void ocfs2_verify_zero_bits(unsigned long *bitmap,
697 				   unsigned int start,
698 				   unsigned int count)
699 {
700 	unsigned int tmp = count;
701 	while(tmp--) {
702 		if (ocfs2_test_bit(start + tmp, bitmap)) {
703 			printk("ocfs2_verify_zero_bits: start = %u, count = "
704 			       "%u\n", start, count);
705 			printk("ocfs2_verify_zero_bits: bit %u is set!",
706 			       start + tmp);
707 			BUG();
708 		}
709 	}
710 }
711 #endif
712 
713 /*
714  * sync the local alloc to main bitmap.
715  *
716  * assumes you've already locked the main bitmap -- the bitmap inode
717  * passed is used for caching.
718  */
719 static int ocfs2_sync_local_to_main(struct ocfs2_super *osb,
720 				    handle_t *handle,
721 				    struct ocfs2_dinode *alloc,
722 				    struct inode *main_bm_inode,
723 				    struct buffer_head *main_bm_bh)
724 {
725 	int status = 0;
726 	int bit_off, left, count, start;
727 	u64 la_start_blk;
728 	u64 blkno;
729 	void *bitmap;
730 	struct ocfs2_local_alloc *la = OCFS2_LOCAL_ALLOC(alloc);
731 
732 	mlog_entry("total = %u, used = %u\n",
733 		   le32_to_cpu(alloc->id1.bitmap1.i_total),
734 		   le32_to_cpu(alloc->id1.bitmap1.i_used));
735 
736 	if (!alloc->id1.bitmap1.i_total) {
737 		mlog(0, "nothing to sync!\n");
738 		goto bail;
739 	}
740 
741 	if (le32_to_cpu(alloc->id1.bitmap1.i_used) ==
742 	    le32_to_cpu(alloc->id1.bitmap1.i_total)) {
743 		mlog(0, "all bits were taken!\n");
744 		goto bail;
745 	}
746 
747 	la_start_blk = ocfs2_clusters_to_blocks(osb->sb,
748 						le32_to_cpu(la->la_bm_off));
749 	bitmap = la->la_bitmap;
750 	start = count = bit_off = 0;
751 	left = le32_to_cpu(alloc->id1.bitmap1.i_total);
752 
753 	while ((bit_off = ocfs2_find_next_zero_bit(bitmap, left, start))
754 	       != -1) {
755 		if ((bit_off < left) && (bit_off == start)) {
756 			count++;
757 			start++;
758 			continue;
759 		}
760 		if (count) {
761 			blkno = la_start_blk +
762 				ocfs2_clusters_to_blocks(osb->sb,
763 							 start - count);
764 
765 			mlog(0, "freeing %u bits starting at local alloc bit "
766 			     "%u (la_start_blk = %llu, blkno = %llu)\n",
767 			     count, start - count,
768 			     (unsigned long long)la_start_blk,
769 			     (unsigned long long)blkno);
770 
771 			status = ocfs2_free_clusters(handle, main_bm_inode,
772 						     main_bm_bh, blkno, count);
773 			if (status < 0) {
774 				mlog_errno(status);
775 				goto bail;
776 			}
777 		}
778 		if (bit_off >= left)
779 			break;
780 		count = 1;
781 		start = bit_off + 1;
782 	}
783 
784 bail:
785 	mlog_exit(status);
786 	return status;
787 }
788 
789 static int ocfs2_local_alloc_reserve_for_window(struct ocfs2_super *osb,
790 						struct ocfs2_alloc_context **ac,
791 						struct inode **bitmap_inode,
792 						struct buffer_head **bitmap_bh)
793 {
794 	int status;
795 
796 	*ac = kzalloc(sizeof(struct ocfs2_alloc_context), GFP_KERNEL);
797 	if (!(*ac)) {
798 		status = -ENOMEM;
799 		mlog_errno(status);
800 		goto bail;
801 	}
802 
803 	(*ac)->ac_bits_wanted = ocfs2_local_alloc_window_bits(osb);
804 
805 	status = ocfs2_reserve_cluster_bitmap_bits(osb, *ac);
806 	if (status < 0) {
807 		if (status != -ENOSPC)
808 			mlog_errno(status);
809 		goto bail;
810 	}
811 
812 	*bitmap_inode = (*ac)->ac_inode;
813 	igrab(*bitmap_inode);
814 	*bitmap_bh = (*ac)->ac_bh;
815 	get_bh(*bitmap_bh);
816 	status = 0;
817 bail:
818 	if ((status < 0) && *ac) {
819 		ocfs2_free_alloc_context(*ac);
820 		*ac = NULL;
821 	}
822 
823 	mlog_exit(status);
824 	return status;
825 }
826 
827 /*
828  * pass it the bitmap lock in lock_bh if you have it.
829  */
830 static int ocfs2_local_alloc_new_window(struct ocfs2_super *osb,
831 					handle_t *handle,
832 					struct ocfs2_alloc_context *ac)
833 {
834 	int status = 0;
835 	u32 cluster_off, cluster_count;
836 	struct ocfs2_dinode *alloc = NULL;
837 	struct ocfs2_local_alloc *la;
838 
839 	mlog_entry_void();
840 
841 	alloc = (struct ocfs2_dinode *) osb->local_alloc_bh->b_data;
842 	la = OCFS2_LOCAL_ALLOC(alloc);
843 
844 	if (alloc->id1.bitmap1.i_total)
845 		mlog(0, "asking me to alloc a new window over a non-empty "
846 		     "one\n");
847 
848 	mlog(0, "Allocating %u clusters for a new window.\n",
849 	     ocfs2_local_alloc_window_bits(osb));
850 
851 	/* Instruct the allocation code to try the most recently used
852 	 * cluster group. We'll re-record the group used this pass
853 	 * below. */
854 	ac->ac_last_group = osb->la_last_gd;
855 
856 	/* we used the generic suballoc reserve function, but we set
857 	 * everything up nicely, so there's no reason why we can't use
858 	 * the more specific cluster api to claim bits. */
859 	status = ocfs2_claim_clusters(osb, handle, ac,
860 				      ocfs2_local_alloc_window_bits(osb),
861 				      &cluster_off, &cluster_count);
862 	if (status < 0) {
863 		if (status != -ENOSPC)
864 			mlog_errno(status);
865 		goto bail;
866 	}
867 
868 	osb->la_last_gd = ac->ac_last_group;
869 
870 	la->la_bm_off = cpu_to_le32(cluster_off);
871 	alloc->id1.bitmap1.i_total = cpu_to_le32(cluster_count);
872 	/* just in case... In the future when we find space ourselves,
873 	 * we don't have to get all contiguous -- but we'll have to
874 	 * set all previously used bits in bitmap and update
875 	 * la_bits_set before setting the bits in the main bitmap. */
876 	alloc->id1.bitmap1.i_used = 0;
877 	memset(OCFS2_LOCAL_ALLOC(alloc)->la_bitmap, 0,
878 	       le16_to_cpu(la->la_size));
879 
880 	mlog(0, "New window allocated:\n");
881 	mlog(0, "window la_bm_off = %u\n",
882 	     OCFS2_LOCAL_ALLOC(alloc)->la_bm_off);
883 	mlog(0, "window bits = %u\n", le32_to_cpu(alloc->id1.bitmap1.i_total));
884 
885 bail:
886 	mlog_exit(status);
887 	return status;
888 }
889 
890 /* Note that we do *NOT* lock the local alloc inode here as
891  * it's been locked already for us. */
892 static int ocfs2_local_alloc_slide_window(struct ocfs2_super *osb,
893 					  struct inode *local_alloc_inode)
894 {
895 	int status = 0;
896 	struct buffer_head *main_bm_bh = NULL;
897 	struct inode *main_bm_inode = NULL;
898 	handle_t *handle = NULL;
899 	struct ocfs2_dinode *alloc;
900 	struct ocfs2_dinode *alloc_copy = NULL;
901 	struct ocfs2_alloc_context *ac = NULL;
902 
903 	mlog_entry_void();
904 
905 	/* This will lock the main bitmap for us. */
906 	status = ocfs2_local_alloc_reserve_for_window(osb,
907 						      &ac,
908 						      &main_bm_inode,
909 						      &main_bm_bh);
910 	if (status < 0) {
911 		if (status != -ENOSPC)
912 			mlog_errno(status);
913 		goto bail;
914 	}
915 
916 	handle = ocfs2_start_trans(osb, OCFS2_WINDOW_MOVE_CREDITS);
917 	if (IS_ERR(handle)) {
918 		status = PTR_ERR(handle);
919 		handle = NULL;
920 		mlog_errno(status);
921 		goto bail;
922 	}
923 
924 	alloc = (struct ocfs2_dinode *) osb->local_alloc_bh->b_data;
925 
926 	/* We want to clear the local alloc before doing anything
927 	 * else, so that if we error later during this operation,
928 	 * local alloc shutdown won't try to double free main bitmap
929 	 * bits. Make a copy so the sync function knows which bits to
930 	 * free. */
931 	alloc_copy = kmalloc(osb->local_alloc_bh->b_size, GFP_KERNEL);
932 	if (!alloc_copy) {
933 		status = -ENOMEM;
934 		mlog_errno(status);
935 		goto bail;
936 	}
937 	memcpy(alloc_copy, alloc, osb->local_alloc_bh->b_size);
938 
939 	status = ocfs2_journal_access(handle, local_alloc_inode,
940 				      osb->local_alloc_bh,
941 				      OCFS2_JOURNAL_ACCESS_WRITE);
942 	if (status < 0) {
943 		mlog_errno(status);
944 		goto bail;
945 	}
946 
947 	ocfs2_clear_local_alloc(alloc);
948 
949 	status = ocfs2_journal_dirty(handle, osb->local_alloc_bh);
950 	if (status < 0) {
951 		mlog_errno(status);
952 		goto bail;
953 	}
954 
955 	status = ocfs2_sync_local_to_main(osb, handle, alloc_copy,
956 					  main_bm_inode, main_bm_bh);
957 	if (status < 0) {
958 		mlog_errno(status);
959 		goto bail;
960 	}
961 
962 	status = ocfs2_local_alloc_new_window(osb, handle, ac);
963 	if (status < 0) {
964 		if (status != -ENOSPC)
965 			mlog_errno(status);
966 		goto bail;
967 	}
968 
969 	atomic_inc(&osb->alloc_stats.moves);
970 
971 	status = 0;
972 bail:
973 	if (handle)
974 		ocfs2_commit_trans(osb, handle);
975 
976 	if (main_bm_bh)
977 		brelse(main_bm_bh);
978 
979 	if (main_bm_inode)
980 		iput(main_bm_inode);
981 
982 	if (alloc_copy)
983 		kfree(alloc_copy);
984 
985 	if (ac)
986 		ocfs2_free_alloc_context(ac);
987 
988 	mlog_exit(status);
989 	return status;
990 }
991 
992