cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

localalloc.c (34066B)


      1// SPDX-License-Identifier: GPL-2.0-or-later
      2/*
      3 * localalloc.c
      4 *
      5 * Node local data allocation
      6 *
      7 * Copyright (C) 2002, 2004 Oracle.  All rights reserved.
      8 */
      9
     10#include <linux/fs.h>
     11#include <linux/types.h>
     12#include <linux/slab.h>
     13#include <linux/highmem.h>
     14#include <linux/bitops.h>
     15
     16#include <cluster/masklog.h>
     17
     18#include "ocfs2.h"
     19
     20#include "alloc.h"
     21#include "blockcheck.h"
     22#include "dlmglue.h"
     23#include "inode.h"
     24#include "journal.h"
     25#include "localalloc.h"
     26#include "suballoc.h"
     27#include "super.h"
     28#include "sysfile.h"
     29#include "ocfs2_trace.h"
     30
     31#include "buffer_head_io.h"
     32
     33#define OCFS2_LOCAL_ALLOC(dinode)	(&((dinode)->id2.i_lab))
     34
     35static u32 ocfs2_local_alloc_count_bits(struct ocfs2_dinode *alloc);
     36
     37static int ocfs2_local_alloc_find_clear_bits(struct ocfs2_super *osb,
     38					     struct ocfs2_dinode *alloc,
     39					     u32 *numbits,
     40					     struct ocfs2_alloc_reservation *resv);
     41
     42static void ocfs2_clear_local_alloc(struct ocfs2_dinode *alloc);
     43
     44static int ocfs2_sync_local_to_main(struct ocfs2_super *osb,
     45				    handle_t *handle,
     46				    struct ocfs2_dinode *alloc,
     47				    struct inode *main_bm_inode,
     48				    struct buffer_head *main_bm_bh);
     49
     50static int ocfs2_local_alloc_reserve_for_window(struct ocfs2_super *osb,
     51						struct ocfs2_alloc_context **ac,
     52						struct inode **bitmap_inode,
     53						struct buffer_head **bitmap_bh);
     54
     55static int ocfs2_local_alloc_new_window(struct ocfs2_super *osb,
     56					handle_t *handle,
     57					struct ocfs2_alloc_context *ac);
     58
     59static int ocfs2_local_alloc_slide_window(struct ocfs2_super *osb,
     60					  struct inode *local_alloc_inode);
     61
     62/*
     63 * ocfs2_la_default_mb() - determine a default size, in megabytes of
     64 * the local alloc.
     65 *
     66 * Generally, we'd like to pick as large a local alloc as
     67 * possible. Performance on large workloads tends to scale
     68 * proportionally to la size. In addition to that, the reservations
     69 * code functions more efficiently as it can reserve more windows for
     70 * write.
     71 *
     72 * Some things work against us when trying to choose a large local alloc:
     73 *
     74 * - We need to ensure our sizing is picked to leave enough space in
     75 *   group descriptors for other allocations (such as block groups,
     76 *   etc). Picking default sizes which are a multiple of 4 could help
     77 *   - block groups are allocated in 2mb and 4mb chunks.
     78 *
     79 * - Likewise, we don't want to starve other nodes of bits on small
     80 *   file systems. This can easily be taken care of by limiting our
     81 *   default to a reasonable size (256M) on larger cluster sizes.
     82 *
     83 * - Some file systems can't support very large sizes - 4k and 8k in
     84 *   particular are limited to less than 128 and 256 megabytes respectively.
     85 *
     86 * The following reference table shows group descriptor and local
     87 * alloc maximums at various cluster sizes (4k blocksize)
     88 *
     89 * csize: 4K	group: 126M	la: 121M
     90 * csize: 8K	group: 252M	la: 243M
     91 * csize: 16K	group: 504M	la: 486M
     92 * csize: 32K	group: 1008M	la: 972M
     93 * csize: 64K	group: 2016M	la: 1944M
     94 * csize: 128K	group: 4032M	la: 3888M
     95 * csize: 256K	group: 8064M	la: 7776M
     96 * csize: 512K	group: 16128M	la: 15552M
     97 * csize: 1024K	group: 32256M	la: 31104M
     98 */
     99#define	OCFS2_LA_MAX_DEFAULT_MB	256
    100#define	OCFS2_LA_OLD_DEFAULT	8
    101unsigned int ocfs2_la_default_mb(struct ocfs2_super *osb)
    102{
    103	unsigned int la_mb;
    104	unsigned int gd_mb;
    105	unsigned int la_max_mb;
    106	unsigned int megs_per_slot;
    107	struct super_block *sb = osb->sb;
    108
    109	gd_mb = ocfs2_clusters_to_megabytes(osb->sb,
    110		8 * ocfs2_group_bitmap_size(sb, 0, osb->s_feature_incompat));
    111
    112	/*
    113	 * This takes care of files systems with very small group
    114	 * descriptors - 512 byte blocksize at cluster sizes lower
    115	 * than 16K and also 1k blocksize with 4k cluster size.
    116	 */
    117	if ((sb->s_blocksize == 512 && osb->s_clustersize <= 8192)
    118	    || (sb->s_blocksize == 1024 && osb->s_clustersize == 4096))
    119		return OCFS2_LA_OLD_DEFAULT;
    120
    121	/*
    122	 * Leave enough room for some block groups and make the final
    123	 * value we work from a multiple of 4.
    124	 */
    125	gd_mb -= 16;
    126	gd_mb &= 0xFFFFFFFB;
    127
    128	la_mb = gd_mb;
    129
    130	/*
    131	 * Keep window sizes down to a reasonable default
    132	 */
    133	if (la_mb > OCFS2_LA_MAX_DEFAULT_MB) {
    134		/*
    135		 * Some clustersize / blocksize combinations will have
    136		 * given us a larger than OCFS2_LA_MAX_DEFAULT_MB
    137		 * default size, but get poor distribution when
    138		 * limited to exactly 256 megabytes.
    139		 *
    140		 * As an example, 16K clustersize at 4K blocksize
    141		 * gives us a cluster group size of 504M. Paring the
    142		 * local alloc size down to 256 however, would give us
    143		 * only one window and around 200MB left in the
    144		 * cluster group. Instead, find the first size below
    145		 * 256 which would give us an even distribution.
    146		 *
    147		 * Larger cluster group sizes actually work out pretty
    148		 * well when pared to 256, so we don't have to do this
    149		 * for any group that fits more than two
    150		 * OCFS2_LA_MAX_DEFAULT_MB windows.
    151		 */
    152		if (gd_mb > (2 * OCFS2_LA_MAX_DEFAULT_MB))
    153			la_mb = 256;
    154		else {
    155			unsigned int gd_mult = gd_mb;
    156
    157			while (gd_mult > 256)
    158				gd_mult = gd_mult >> 1;
    159
    160			la_mb = gd_mult;
    161		}
    162	}
    163
    164	megs_per_slot = osb->osb_clusters_at_boot / osb->max_slots;
    165	megs_per_slot = ocfs2_clusters_to_megabytes(osb->sb, megs_per_slot);
    166	/* Too many nodes, too few disk clusters. */
    167	if (megs_per_slot < la_mb)
    168		la_mb = megs_per_slot;
    169
    170	/* We can't store more bits than we can in a block. */
    171	la_max_mb = ocfs2_clusters_to_megabytes(osb->sb,
    172						ocfs2_local_alloc_size(sb) * 8);
    173	if (la_mb > la_max_mb)
    174		la_mb = la_max_mb;
    175
    176	return la_mb;
    177}
    178
    179void ocfs2_la_set_sizes(struct ocfs2_super *osb, int requested_mb)
    180{
    181	struct super_block *sb = osb->sb;
    182	unsigned int la_default_mb = ocfs2_la_default_mb(osb);
    183	unsigned int la_max_mb;
    184
    185	la_max_mb = ocfs2_clusters_to_megabytes(sb,
    186						ocfs2_local_alloc_size(sb) * 8);
    187
    188	trace_ocfs2_la_set_sizes(requested_mb, la_max_mb, la_default_mb);
    189
    190	if (requested_mb == -1) {
    191		/* No user request - use defaults */
    192		osb->local_alloc_default_bits =
    193			ocfs2_megabytes_to_clusters(sb, la_default_mb);
    194	} else if (requested_mb > la_max_mb) {
    195		/* Request is too big, we give the maximum available */
    196		osb->local_alloc_default_bits =
    197			ocfs2_megabytes_to_clusters(sb, la_max_mb);
    198	} else {
    199		osb->local_alloc_default_bits =
    200			ocfs2_megabytes_to_clusters(sb, requested_mb);
    201	}
    202
    203	osb->local_alloc_bits = osb->local_alloc_default_bits;
    204}
    205
    206static inline int ocfs2_la_state_enabled(struct ocfs2_super *osb)
    207{
    208	return (osb->local_alloc_state == OCFS2_LA_THROTTLED ||
    209		osb->local_alloc_state == OCFS2_LA_ENABLED);
    210}
    211
    212void ocfs2_local_alloc_seen_free_bits(struct ocfs2_super *osb,
    213				      unsigned int num_clusters)
    214{
    215	spin_lock(&osb->osb_lock);
    216	if (osb->local_alloc_state == OCFS2_LA_DISABLED ||
    217	    osb->local_alloc_state == OCFS2_LA_THROTTLED)
    218		if (num_clusters >= osb->local_alloc_default_bits) {
    219			cancel_delayed_work(&osb->la_enable_wq);
    220			osb->local_alloc_state = OCFS2_LA_ENABLED;
    221		}
    222	spin_unlock(&osb->osb_lock);
    223}
    224
    225void ocfs2_la_enable_worker(struct work_struct *work)
    226{
    227	struct ocfs2_super *osb =
    228		container_of(work, struct ocfs2_super,
    229			     la_enable_wq.work);
    230	spin_lock(&osb->osb_lock);
    231	osb->local_alloc_state = OCFS2_LA_ENABLED;
    232	spin_unlock(&osb->osb_lock);
    233}
    234
    235/*
    236 * Tell us whether a given allocation should use the local alloc
    237 * file. Otherwise, it has to go to the main bitmap.
    238 *
    239 * This function does semi-dirty reads of local alloc size and state!
    240 * This is ok however, as the values are re-checked once under mutex.
    241 */
    242int ocfs2_alloc_should_use_local(struct ocfs2_super *osb, u64 bits)
    243{
    244	int ret = 0;
    245	int la_bits;
    246
    247	spin_lock(&osb->osb_lock);
    248	la_bits = osb->local_alloc_bits;
    249
    250	if (!ocfs2_la_state_enabled(osb))
    251		goto bail;
    252
    253	/* la_bits should be at least twice the size (in clusters) of
    254	 * a new block group. We want to be sure block group
    255	 * allocations go through the local alloc, so allow an
    256	 * allocation to take up to half the bitmap. */
    257	if (bits > (la_bits / 2))
    258		goto bail;
    259
    260	ret = 1;
    261bail:
    262	trace_ocfs2_alloc_should_use_local(
    263	     (unsigned long long)bits, osb->local_alloc_state, la_bits, ret);
    264	spin_unlock(&osb->osb_lock);
    265	return ret;
    266}
    267
    268int ocfs2_load_local_alloc(struct ocfs2_super *osb)
    269{
    270	int status = 0;
    271	struct ocfs2_dinode *alloc = NULL;
    272	struct buffer_head *alloc_bh = NULL;
    273	u32 num_used;
    274	struct inode *inode = NULL;
    275	struct ocfs2_local_alloc *la;
    276
    277	if (osb->local_alloc_bits == 0)
    278		goto bail;
    279
    280	if (osb->local_alloc_bits >= osb->bitmap_cpg) {
    281		mlog(ML_NOTICE, "Requested local alloc window %d is larger "
    282		     "than max possible %u. Using defaults.\n",
    283		     osb->local_alloc_bits, (osb->bitmap_cpg - 1));
    284		osb->local_alloc_bits =
    285			ocfs2_megabytes_to_clusters(osb->sb,
    286						    ocfs2_la_default_mb(osb));
    287	}
    288
    289	/* read the alloc off disk */
    290	inode = ocfs2_get_system_file_inode(osb, LOCAL_ALLOC_SYSTEM_INODE,
    291					    osb->slot_num);
    292	if (!inode) {
    293		status = -EINVAL;
    294		mlog_errno(status);
    295		goto bail;
    296	}
    297
    298	status = ocfs2_read_inode_block_full(inode, &alloc_bh,
    299					     OCFS2_BH_IGNORE_CACHE);
    300	if (status < 0) {
    301		mlog_errno(status);
    302		goto bail;
    303	}
    304
    305	alloc = (struct ocfs2_dinode *) alloc_bh->b_data;
    306	la = OCFS2_LOCAL_ALLOC(alloc);
    307
    308	if (!(le32_to_cpu(alloc->i_flags) &
    309	    (OCFS2_LOCAL_ALLOC_FL|OCFS2_BITMAP_FL))) {
    310		mlog(ML_ERROR, "Invalid local alloc inode, %llu\n",
    311		     (unsigned long long)OCFS2_I(inode)->ip_blkno);
    312		status = -EINVAL;
    313		goto bail;
    314	}
    315
    316	if ((la->la_size == 0) ||
    317	    (le16_to_cpu(la->la_size) > ocfs2_local_alloc_size(inode->i_sb))) {
    318		mlog(ML_ERROR, "Local alloc size is invalid (la_size = %u)\n",
    319		     le16_to_cpu(la->la_size));
    320		status = -EINVAL;
    321		goto bail;
    322	}
    323
    324	/* do a little verification. */
    325	num_used = ocfs2_local_alloc_count_bits(alloc);
    326
    327	/* hopefully the local alloc has always been recovered before
    328	 * we load it. */
    329	if (num_used
    330	    || alloc->id1.bitmap1.i_used
    331	    || alloc->id1.bitmap1.i_total
    332	    || la->la_bm_off) {
    333		mlog(ML_ERROR, "inconsistent detected, clean journal with"
    334		     " unrecovered local alloc, please run fsck.ocfs2!\n"
    335		     "found = %u, set = %u, taken = %u, off = %u\n",
    336		     num_used, le32_to_cpu(alloc->id1.bitmap1.i_used),
    337		     le32_to_cpu(alloc->id1.bitmap1.i_total),
    338		     OCFS2_LOCAL_ALLOC(alloc)->la_bm_off);
    339
    340		status = -EINVAL;
    341		goto bail;
    342	}
    343
    344	osb->local_alloc_bh = alloc_bh;
    345	osb->local_alloc_state = OCFS2_LA_ENABLED;
    346
    347bail:
    348	if (status < 0)
    349		brelse(alloc_bh);
    350	iput(inode);
    351
    352	trace_ocfs2_load_local_alloc(osb->local_alloc_bits);
    353
    354	if (status)
    355		mlog_errno(status);
    356	return status;
    357}
    358
    359/*
    360 * return any unused bits to the bitmap and write out a clean
    361 * local_alloc.
    362 *
    363 * local_alloc_bh is optional. If not passed, we will simply use the
    364 * one off osb. If you do pass it however, be warned that it *will* be
    365 * returned brelse'd and NULL'd out.*/
    366void ocfs2_shutdown_local_alloc(struct ocfs2_super *osb)
    367{
    368	int status;
    369	handle_t *handle;
    370	struct inode *local_alloc_inode = NULL;
    371	struct buffer_head *bh = NULL;
    372	struct buffer_head *main_bm_bh = NULL;
    373	struct inode *main_bm_inode = NULL;
    374	struct ocfs2_dinode *alloc_copy = NULL;
    375	struct ocfs2_dinode *alloc = NULL;
    376
    377	cancel_delayed_work(&osb->la_enable_wq);
    378	if (osb->ocfs2_wq)
    379		flush_workqueue(osb->ocfs2_wq);
    380
    381	if (osb->local_alloc_state == OCFS2_LA_UNUSED)
    382		goto out;
    383
    384	local_alloc_inode =
    385		ocfs2_get_system_file_inode(osb,
    386					    LOCAL_ALLOC_SYSTEM_INODE,
    387					    osb->slot_num);
    388	if (!local_alloc_inode) {
    389		status = -ENOENT;
    390		mlog_errno(status);
    391		goto out;
    392	}
    393
    394	osb->local_alloc_state = OCFS2_LA_DISABLED;
    395
    396	ocfs2_resmap_uninit(&osb->osb_la_resmap);
    397
    398	main_bm_inode = ocfs2_get_system_file_inode(osb,
    399						    GLOBAL_BITMAP_SYSTEM_INODE,
    400						    OCFS2_INVALID_SLOT);
    401	if (!main_bm_inode) {
    402		status = -EINVAL;
    403		mlog_errno(status);
    404		goto out;
    405	}
    406
    407	inode_lock(main_bm_inode);
    408
    409	status = ocfs2_inode_lock(main_bm_inode, &main_bm_bh, 1);
    410	if (status < 0) {
    411		mlog_errno(status);
    412		goto out_mutex;
    413	}
    414
    415	/* WINDOW_MOVE_CREDITS is a bit heavy... */
    416	handle = ocfs2_start_trans(osb, OCFS2_WINDOW_MOVE_CREDITS);
    417	if (IS_ERR(handle)) {
    418		mlog_errno(PTR_ERR(handle));
    419		handle = NULL;
    420		goto out_unlock;
    421	}
    422
    423	bh = osb->local_alloc_bh;
    424	alloc = (struct ocfs2_dinode *) bh->b_data;
    425
    426	alloc_copy = kmemdup(alloc, bh->b_size, GFP_NOFS);
    427	if (!alloc_copy) {
    428		status = -ENOMEM;
    429		goto out_commit;
    430	}
    431
    432	status = ocfs2_journal_access_di(handle, INODE_CACHE(local_alloc_inode),
    433					 bh, OCFS2_JOURNAL_ACCESS_WRITE);
    434	if (status < 0) {
    435		mlog_errno(status);
    436		goto out_commit;
    437	}
    438
    439	ocfs2_clear_local_alloc(alloc);
    440	ocfs2_journal_dirty(handle, bh);
    441
    442	brelse(bh);
    443	osb->local_alloc_bh = NULL;
    444	osb->local_alloc_state = OCFS2_LA_UNUSED;
    445
    446	status = ocfs2_sync_local_to_main(osb, handle, alloc_copy,
    447					  main_bm_inode, main_bm_bh);
    448	if (status < 0)
    449		mlog_errno(status);
    450
    451out_commit:
    452	ocfs2_commit_trans(osb, handle);
    453
    454out_unlock:
    455	brelse(main_bm_bh);
    456
    457	ocfs2_inode_unlock(main_bm_inode, 1);
    458
    459out_mutex:
    460	inode_unlock(main_bm_inode);
    461	iput(main_bm_inode);
    462
    463out:
    464	iput(local_alloc_inode);
    465
    466	kfree(alloc_copy);
    467}
    468
    469/*
    470 * We want to free the bitmap bits outside of any recovery context as
    471 * we'll need a cluster lock to do so, but we must clear the local
    472 * alloc before giving up the recovered nodes journal. To solve this,
    473 * we kmalloc a copy of the local alloc before it's change for the
    474 * caller to process with ocfs2_complete_local_alloc_recovery
    475 */
    476int ocfs2_begin_local_alloc_recovery(struct ocfs2_super *osb,
    477				     int slot_num,
    478				     struct ocfs2_dinode **alloc_copy)
    479{
    480	int status = 0;
    481	struct buffer_head *alloc_bh = NULL;
    482	struct inode *inode = NULL;
    483	struct ocfs2_dinode *alloc;
    484
    485	trace_ocfs2_begin_local_alloc_recovery(slot_num);
    486
    487	*alloc_copy = NULL;
    488
    489	inode = ocfs2_get_system_file_inode(osb,
    490					    LOCAL_ALLOC_SYSTEM_INODE,
    491					    slot_num);
    492	if (!inode) {
    493		status = -EINVAL;
    494		mlog_errno(status);
    495		goto bail;
    496	}
    497
    498	inode_lock(inode);
    499
    500	status = ocfs2_read_inode_block_full(inode, &alloc_bh,
    501					     OCFS2_BH_IGNORE_CACHE);
    502	if (status < 0) {
    503		mlog_errno(status);
    504		goto bail;
    505	}
    506
    507	*alloc_copy = kmalloc(alloc_bh->b_size, GFP_KERNEL);
    508	if (!(*alloc_copy)) {
    509		status = -ENOMEM;
    510		goto bail;
    511	}
    512	memcpy((*alloc_copy), alloc_bh->b_data, alloc_bh->b_size);
    513
    514	alloc = (struct ocfs2_dinode *) alloc_bh->b_data;
    515	ocfs2_clear_local_alloc(alloc);
    516
    517	ocfs2_compute_meta_ecc(osb->sb, alloc_bh->b_data, &alloc->i_check);
    518	status = ocfs2_write_block(osb, alloc_bh, INODE_CACHE(inode));
    519	if (status < 0)
    520		mlog_errno(status);
    521
    522bail:
    523	if (status < 0) {
    524		kfree(*alloc_copy);
    525		*alloc_copy = NULL;
    526	}
    527
    528	brelse(alloc_bh);
    529
    530	if (inode) {
    531		inode_unlock(inode);
    532		iput(inode);
    533	}
    534
    535	if (status)
    536		mlog_errno(status);
    537	return status;
    538}
    539
    540/*
    541 * Step 2: By now, we've completed the journal recovery, we've stamped
    542 * a clean local alloc on disk and dropped the node out of the
    543 * recovery map. Dlm locks will no longer stall, so lets clear out the
    544 * main bitmap.
    545 */
    546int ocfs2_complete_local_alloc_recovery(struct ocfs2_super *osb,
    547					struct ocfs2_dinode *alloc)
    548{
    549	int status;
    550	handle_t *handle;
    551	struct buffer_head *main_bm_bh = NULL;
    552	struct inode *main_bm_inode;
    553
    554	main_bm_inode = ocfs2_get_system_file_inode(osb,
    555						    GLOBAL_BITMAP_SYSTEM_INODE,
    556						    OCFS2_INVALID_SLOT);
    557	if (!main_bm_inode) {
    558		status = -EINVAL;
    559		mlog_errno(status);
    560		goto out;
    561	}
    562
    563	inode_lock(main_bm_inode);
    564
    565	status = ocfs2_inode_lock(main_bm_inode, &main_bm_bh, 1);
    566	if (status < 0) {
    567		mlog_errno(status);
    568		goto out_mutex;
    569	}
    570
    571	handle = ocfs2_start_trans(osb, OCFS2_WINDOW_MOVE_CREDITS);
    572	if (IS_ERR(handle)) {
    573		status = PTR_ERR(handle);
    574		handle = NULL;
    575		mlog_errno(status);
    576		goto out_unlock;
    577	}
    578
    579	/* we want the bitmap change to be recorded on disk asap */
    580	handle->h_sync = 1;
    581
    582	status = ocfs2_sync_local_to_main(osb, handle, alloc,
    583					  main_bm_inode, main_bm_bh);
    584	if (status < 0)
    585		mlog_errno(status);
    586
    587	ocfs2_commit_trans(osb, handle);
    588
    589out_unlock:
    590	ocfs2_inode_unlock(main_bm_inode, 1);
    591
    592out_mutex:
    593	inode_unlock(main_bm_inode);
    594
    595	brelse(main_bm_bh);
    596
    597	iput(main_bm_inode);
    598
    599out:
    600	if (!status)
    601		ocfs2_init_steal_slots(osb);
    602	if (status)
    603		mlog_errno(status);
    604	return status;
    605}
    606
    607/*
    608 * make sure we've got at least bits_wanted contiguous bits in the
    609 * local alloc. You lose them when you drop i_rwsem.
    610 *
    611 * We will add ourselves to the transaction passed in, but may start
    612 * our own in order to shift windows.
    613 */
    614int ocfs2_reserve_local_alloc_bits(struct ocfs2_super *osb,
    615				   u32 bits_wanted,
    616				   struct ocfs2_alloc_context *ac)
    617{
    618	int status;
    619	struct ocfs2_dinode *alloc;
    620	struct inode *local_alloc_inode;
    621	unsigned int free_bits;
    622
    623	BUG_ON(!ac);
    624
    625	local_alloc_inode =
    626		ocfs2_get_system_file_inode(osb,
    627					    LOCAL_ALLOC_SYSTEM_INODE,
    628					    osb->slot_num);
    629	if (!local_alloc_inode) {
    630		status = -ENOENT;
    631		mlog_errno(status);
    632		goto bail;
    633	}
    634
    635	inode_lock(local_alloc_inode);
    636
    637	/*
    638	 * We must double check state and allocator bits because
    639	 * another process may have changed them while holding i_rwsem.
    640	 */
    641	spin_lock(&osb->osb_lock);
    642	if (!ocfs2_la_state_enabled(osb) ||
    643	    (bits_wanted > osb->local_alloc_bits)) {
    644		spin_unlock(&osb->osb_lock);
    645		status = -ENOSPC;
    646		goto bail;
    647	}
    648	spin_unlock(&osb->osb_lock);
    649
    650	alloc = (struct ocfs2_dinode *) osb->local_alloc_bh->b_data;
    651
    652#ifdef CONFIG_OCFS2_DEBUG_FS
    653	if (le32_to_cpu(alloc->id1.bitmap1.i_used) !=
    654	    ocfs2_local_alloc_count_bits(alloc)) {
    655		status = ocfs2_error(osb->sb, "local alloc inode %llu says it has %u used bits, but a count shows %u\n",
    656				(unsigned long long)le64_to_cpu(alloc->i_blkno),
    657				le32_to_cpu(alloc->id1.bitmap1.i_used),
    658				ocfs2_local_alloc_count_bits(alloc));
    659		goto bail;
    660	}
    661#endif
    662
    663	free_bits = le32_to_cpu(alloc->id1.bitmap1.i_total) -
    664		le32_to_cpu(alloc->id1.bitmap1.i_used);
    665	if (bits_wanted > free_bits) {
    666		/* uhoh, window change time. */
    667		status =
    668			ocfs2_local_alloc_slide_window(osb, local_alloc_inode);
    669		if (status < 0) {
    670			if (status != -ENOSPC)
    671				mlog_errno(status);
    672			goto bail;
    673		}
    674
    675		/*
    676		 * Under certain conditions, the window slide code
    677		 * might have reduced the number of bits available or
    678		 * disabled the local alloc entirely. Re-check
    679		 * here and return -ENOSPC if necessary.
    680		 */
    681		status = -ENOSPC;
    682		if (!ocfs2_la_state_enabled(osb))
    683			goto bail;
    684
    685		free_bits = le32_to_cpu(alloc->id1.bitmap1.i_total) -
    686			le32_to_cpu(alloc->id1.bitmap1.i_used);
    687		if (bits_wanted > free_bits)
    688			goto bail;
    689	}
    690
    691	ac->ac_inode = local_alloc_inode;
    692	/* We should never use localalloc from another slot */
    693	ac->ac_alloc_slot = osb->slot_num;
    694	ac->ac_which = OCFS2_AC_USE_LOCAL;
    695	get_bh(osb->local_alloc_bh);
    696	ac->ac_bh = osb->local_alloc_bh;
    697	status = 0;
    698bail:
    699	if (status < 0 && local_alloc_inode) {
    700		inode_unlock(local_alloc_inode);
    701		iput(local_alloc_inode);
    702	}
    703
    704	trace_ocfs2_reserve_local_alloc_bits(
    705		(unsigned long long)ac->ac_max_block,
    706		bits_wanted, osb->slot_num, status);
    707
    708	if (status)
    709		mlog_errno(status);
    710	return status;
    711}
    712
    713int ocfs2_claim_local_alloc_bits(struct ocfs2_super *osb,
    714				 handle_t *handle,
    715				 struct ocfs2_alloc_context *ac,
    716				 u32 bits_wanted,
    717				 u32 *bit_off,
    718				 u32 *num_bits)
    719{
    720	int status, start;
    721	struct inode *local_alloc_inode;
    722	void *bitmap;
    723	struct ocfs2_dinode *alloc;
    724	struct ocfs2_local_alloc *la;
    725
    726	BUG_ON(ac->ac_which != OCFS2_AC_USE_LOCAL);
    727
    728	local_alloc_inode = ac->ac_inode;
    729	alloc = (struct ocfs2_dinode *) osb->local_alloc_bh->b_data;
    730	la = OCFS2_LOCAL_ALLOC(alloc);
    731
    732	start = ocfs2_local_alloc_find_clear_bits(osb, alloc, &bits_wanted,
    733						  ac->ac_resv);
    734	if (start == -1) {
    735		/* TODO: Shouldn't we just BUG here? */
    736		status = -ENOSPC;
    737		mlog_errno(status);
    738		goto bail;
    739	}
    740
    741	bitmap = la->la_bitmap;
    742	*bit_off = le32_to_cpu(la->la_bm_off) + start;
    743	*num_bits = bits_wanted;
    744
    745	status = ocfs2_journal_access_di(handle,
    746					 INODE_CACHE(local_alloc_inode),
    747					 osb->local_alloc_bh,
    748					 OCFS2_JOURNAL_ACCESS_WRITE);
    749	if (status < 0) {
    750		mlog_errno(status);
    751		goto bail;
    752	}
    753
    754	ocfs2_resmap_claimed_bits(&osb->osb_la_resmap, ac->ac_resv, start,
    755				  bits_wanted);
    756
    757	while(bits_wanted--)
    758		ocfs2_set_bit(start++, bitmap);
    759
    760	le32_add_cpu(&alloc->id1.bitmap1.i_used, *num_bits);
    761	ocfs2_journal_dirty(handle, osb->local_alloc_bh);
    762
    763bail:
    764	if (status)
    765		mlog_errno(status);
    766	return status;
    767}
    768
    769int ocfs2_free_local_alloc_bits(struct ocfs2_super *osb,
    770				handle_t *handle,
    771				struct ocfs2_alloc_context *ac,
    772				u32 bit_off,
    773				u32 num_bits)
    774{
    775	int status, start;
    776	u32 clear_bits;
    777	struct inode *local_alloc_inode;
    778	void *bitmap;
    779	struct ocfs2_dinode *alloc;
    780	struct ocfs2_local_alloc *la;
    781
    782	BUG_ON(ac->ac_which != OCFS2_AC_USE_LOCAL);
    783
    784	local_alloc_inode = ac->ac_inode;
    785	alloc = (struct ocfs2_dinode *) osb->local_alloc_bh->b_data;
    786	la = OCFS2_LOCAL_ALLOC(alloc);
    787
    788	bitmap = la->la_bitmap;
    789	start = bit_off - le32_to_cpu(la->la_bm_off);
    790	clear_bits = num_bits;
    791
    792	status = ocfs2_journal_access_di(handle,
    793			INODE_CACHE(local_alloc_inode),
    794			osb->local_alloc_bh,
    795			OCFS2_JOURNAL_ACCESS_WRITE);
    796	if (status < 0) {
    797		mlog_errno(status);
    798		goto bail;
    799	}
    800
    801	while (clear_bits--)
    802		ocfs2_clear_bit(start++, bitmap);
    803
    804	le32_add_cpu(&alloc->id1.bitmap1.i_used, -num_bits);
    805	ocfs2_journal_dirty(handle, osb->local_alloc_bh);
    806
    807bail:
    808	return status;
    809}
    810
    811static u32 ocfs2_local_alloc_count_bits(struct ocfs2_dinode *alloc)
    812{
    813	u32 count;
    814	struct ocfs2_local_alloc *la = OCFS2_LOCAL_ALLOC(alloc);
    815
    816	count = memweight(la->la_bitmap, le16_to_cpu(la->la_size));
    817
    818	trace_ocfs2_local_alloc_count_bits(count);
    819	return count;
    820}
    821
    822static int ocfs2_local_alloc_find_clear_bits(struct ocfs2_super *osb,
    823				     struct ocfs2_dinode *alloc,
    824				     u32 *numbits,
    825				     struct ocfs2_alloc_reservation *resv)
    826{
    827	int numfound = 0, bitoff, left, startoff;
    828	int local_resv = 0;
    829	struct ocfs2_alloc_reservation r;
    830	void *bitmap = NULL;
    831	struct ocfs2_reservation_map *resmap = &osb->osb_la_resmap;
    832
    833	if (!alloc->id1.bitmap1.i_total) {
    834		bitoff = -1;
    835		goto bail;
    836	}
    837
    838	if (!resv) {
    839		local_resv = 1;
    840		ocfs2_resv_init_once(&r);
    841		ocfs2_resv_set_type(&r, OCFS2_RESV_FLAG_TMP);
    842		resv = &r;
    843	}
    844
    845	numfound = *numbits;
    846	if (ocfs2_resmap_resv_bits(resmap, resv, &bitoff, &numfound) == 0) {
    847		if (numfound < *numbits)
    848			*numbits = numfound;
    849		goto bail;
    850	}
    851
    852	/*
    853	 * Code error. While reservations are enabled, local
    854	 * allocation should _always_ go through them.
    855	 */
    856	BUG_ON(osb->osb_resv_level != 0);
    857
    858	/*
    859	 * Reservations are disabled. Handle this the old way.
    860	 */
    861
    862	bitmap = OCFS2_LOCAL_ALLOC(alloc)->la_bitmap;
    863
    864	numfound = bitoff = startoff = 0;
    865	left = le32_to_cpu(alloc->id1.bitmap1.i_total);
    866	while ((bitoff = ocfs2_find_next_zero_bit(bitmap, left, startoff)) != -1) {
    867		if (bitoff == left) {
    868			/* mlog(0, "bitoff (%d) == left", bitoff); */
    869			break;
    870		}
    871		/* mlog(0, "Found a zero: bitoff = %d, startoff = %d, "
    872		   "numfound = %d\n", bitoff, startoff, numfound);*/
    873
    874		/* Ok, we found a zero bit... is it contig. or do we
    875		 * start over?*/
    876		if (bitoff == startoff) {
    877			/* we found a zero */
    878			numfound++;
    879			startoff++;
    880		} else {
    881			/* got a zero after some ones */
    882			numfound = 1;
    883			startoff = bitoff+1;
    884		}
    885		/* we got everything we needed */
    886		if (numfound == *numbits) {
    887			/* mlog(0, "Found it all!\n"); */
    888			break;
    889		}
    890	}
    891
    892	trace_ocfs2_local_alloc_find_clear_bits_search_bitmap(bitoff, numfound);
    893
    894	if (numfound == *numbits)
    895		bitoff = startoff - numfound;
    896	else
    897		bitoff = -1;
    898
    899bail:
    900	if (local_resv)
    901		ocfs2_resv_discard(resmap, resv);
    902
    903	trace_ocfs2_local_alloc_find_clear_bits(*numbits,
    904		le32_to_cpu(alloc->id1.bitmap1.i_total),
    905		bitoff, numfound);
    906
    907	return bitoff;
    908}
    909
    910static void ocfs2_clear_local_alloc(struct ocfs2_dinode *alloc)
    911{
    912	struct ocfs2_local_alloc *la = OCFS2_LOCAL_ALLOC(alloc);
    913	int i;
    914
    915	alloc->id1.bitmap1.i_total = 0;
    916	alloc->id1.bitmap1.i_used = 0;
    917	la->la_bm_off = 0;
    918	for(i = 0; i < le16_to_cpu(la->la_size); i++)
    919		la->la_bitmap[i] = 0;
    920}
    921
    922#if 0
    923/* turn this on and uncomment below to aid debugging window shifts. */
    924static void ocfs2_verify_zero_bits(unsigned long *bitmap,
    925				   unsigned int start,
    926				   unsigned int count)
    927{
    928	unsigned int tmp = count;
    929	while(tmp--) {
    930		if (ocfs2_test_bit(start + tmp, bitmap)) {
    931			printk("ocfs2_verify_zero_bits: start = %u, count = "
    932			       "%u\n", start, count);
    933			printk("ocfs2_verify_zero_bits: bit %u is set!",
    934			       start + tmp);
    935			BUG();
    936		}
    937	}
    938}
    939#endif
    940
    941/*
    942 * sync the local alloc to main bitmap.
    943 *
    944 * assumes you've already locked the main bitmap -- the bitmap inode
    945 * passed is used for caching.
    946 */
    947static int ocfs2_sync_local_to_main(struct ocfs2_super *osb,
    948				    handle_t *handle,
    949				    struct ocfs2_dinode *alloc,
    950				    struct inode *main_bm_inode,
    951				    struct buffer_head *main_bm_bh)
    952{
    953	int status = 0;
    954	int bit_off, left, count, start;
    955	u64 la_start_blk;
    956	u64 blkno;
    957	void *bitmap;
    958	struct ocfs2_local_alloc *la = OCFS2_LOCAL_ALLOC(alloc);
    959
    960	trace_ocfs2_sync_local_to_main(
    961	     le32_to_cpu(alloc->id1.bitmap1.i_total),
    962	     le32_to_cpu(alloc->id1.bitmap1.i_used));
    963
    964	if (!alloc->id1.bitmap1.i_total) {
    965		goto bail;
    966	}
    967
    968	if (le32_to_cpu(alloc->id1.bitmap1.i_used) ==
    969	    le32_to_cpu(alloc->id1.bitmap1.i_total)) {
    970		goto bail;
    971	}
    972
    973	la_start_blk = ocfs2_clusters_to_blocks(osb->sb,
    974						le32_to_cpu(la->la_bm_off));
    975	bitmap = la->la_bitmap;
    976	start = count = bit_off = 0;
    977	left = le32_to_cpu(alloc->id1.bitmap1.i_total);
    978
    979	while ((bit_off = ocfs2_find_next_zero_bit(bitmap, left, start))
    980	       != -1) {
    981		if ((bit_off < left) && (bit_off == start)) {
    982			count++;
    983			start++;
    984			continue;
    985		}
    986		if (count) {
    987			blkno = la_start_blk +
    988				ocfs2_clusters_to_blocks(osb->sb,
    989							 start - count);
    990
    991			trace_ocfs2_sync_local_to_main_free(
    992			     count, start - count,
    993			     (unsigned long long)la_start_blk,
    994			     (unsigned long long)blkno);
    995
    996			status = ocfs2_release_clusters(handle,
    997							main_bm_inode,
    998							main_bm_bh, blkno,
    999							count);
   1000			if (status < 0) {
   1001				mlog_errno(status);
   1002				goto bail;
   1003			}
   1004		}
   1005		if (bit_off >= left)
   1006			break;
   1007		count = 1;
   1008		start = bit_off + 1;
   1009	}
   1010
   1011bail:
   1012	if (status)
   1013		mlog_errno(status);
   1014	return status;
   1015}
   1016
   1017enum ocfs2_la_event {
   1018	OCFS2_LA_EVENT_SLIDE,		/* Normal window slide. */
   1019	OCFS2_LA_EVENT_FRAGMENTED,	/* The global bitmap has
   1020					 * enough bits theoretically
   1021					 * free, but a contiguous
   1022					 * allocation could not be
   1023					 * found. */
   1024	OCFS2_LA_EVENT_ENOSPC,		/* Global bitmap doesn't have
   1025					 * enough bits free to satisfy
   1026					 * our request. */
   1027};
   1028#define OCFS2_LA_ENABLE_INTERVAL (30 * HZ)
   1029/*
   1030 * Given an event, calculate the size of our next local alloc window.
   1031 *
   1032 * This should always be called under i_rwsem of the local alloc inode
   1033 * so that local alloc disabling doesn't race with processes trying to
   1034 * use the allocator.
   1035 *
   1036 * Returns the state which the local alloc was left in. This value can
   1037 * be ignored by some paths.
   1038 */
   1039static int ocfs2_recalc_la_window(struct ocfs2_super *osb,
   1040				  enum ocfs2_la_event event)
   1041{
   1042	unsigned int bits;
   1043	int state;
   1044
   1045	spin_lock(&osb->osb_lock);
   1046	if (osb->local_alloc_state == OCFS2_LA_DISABLED) {
   1047		WARN_ON_ONCE(osb->local_alloc_state == OCFS2_LA_DISABLED);
   1048		goto out_unlock;
   1049	}
   1050
   1051	/*
   1052	 * ENOSPC and fragmentation are treated similarly for now.
   1053	 */
   1054	if (event == OCFS2_LA_EVENT_ENOSPC ||
   1055	    event == OCFS2_LA_EVENT_FRAGMENTED) {
   1056		/*
   1057		 * We ran out of contiguous space in the primary
   1058		 * bitmap. Drastically reduce the number of bits used
   1059		 * by local alloc until we have to disable it.
   1060		 */
   1061		bits = osb->local_alloc_bits >> 1;
   1062		if (bits > ocfs2_megabytes_to_clusters(osb->sb, 1)) {
   1063			/*
   1064			 * By setting state to THROTTLED, we'll keep
   1065			 * the number of local alloc bits used down
   1066			 * until an event occurs which would give us
   1067			 * reason to assume the bitmap situation might
   1068			 * have changed.
   1069			 */
   1070			osb->local_alloc_state = OCFS2_LA_THROTTLED;
   1071			osb->local_alloc_bits = bits;
   1072		} else {
   1073			osb->local_alloc_state = OCFS2_LA_DISABLED;
   1074		}
   1075		queue_delayed_work(osb->ocfs2_wq, &osb->la_enable_wq,
   1076				   OCFS2_LA_ENABLE_INTERVAL);
   1077		goto out_unlock;
   1078	}
   1079
   1080	/*
   1081	 * Don't increase the size of the local alloc window until we
   1082	 * know we might be able to fulfill the request. Otherwise, we
   1083	 * risk bouncing around the global bitmap during periods of
   1084	 * low space.
   1085	 */
   1086	if (osb->local_alloc_state != OCFS2_LA_THROTTLED)
   1087		osb->local_alloc_bits = osb->local_alloc_default_bits;
   1088
   1089out_unlock:
   1090	state = osb->local_alloc_state;
   1091	spin_unlock(&osb->osb_lock);
   1092
   1093	return state;
   1094}
   1095
   1096static int ocfs2_local_alloc_reserve_for_window(struct ocfs2_super *osb,
   1097						struct ocfs2_alloc_context **ac,
   1098						struct inode **bitmap_inode,
   1099						struct buffer_head **bitmap_bh)
   1100{
   1101	int status;
   1102
   1103	*ac = kzalloc(sizeof(struct ocfs2_alloc_context), GFP_KERNEL);
   1104	if (!(*ac)) {
   1105		status = -ENOMEM;
   1106		mlog_errno(status);
   1107		goto bail;
   1108	}
   1109
   1110retry_enospc:
   1111	(*ac)->ac_bits_wanted = osb->local_alloc_bits;
   1112	status = ocfs2_reserve_cluster_bitmap_bits(osb, *ac);
   1113	if (status == -ENOSPC) {
   1114		if (ocfs2_recalc_la_window(osb, OCFS2_LA_EVENT_ENOSPC) ==
   1115		    OCFS2_LA_DISABLED)
   1116			goto bail;
   1117
   1118		ocfs2_free_ac_resource(*ac);
   1119		memset(*ac, 0, sizeof(struct ocfs2_alloc_context));
   1120		goto retry_enospc;
   1121	}
   1122	if (status < 0) {
   1123		mlog_errno(status);
   1124		goto bail;
   1125	}
   1126
   1127	*bitmap_inode = (*ac)->ac_inode;
   1128	igrab(*bitmap_inode);
   1129	*bitmap_bh = (*ac)->ac_bh;
   1130	get_bh(*bitmap_bh);
   1131	status = 0;
   1132bail:
   1133	if ((status < 0) && *ac) {
   1134		ocfs2_free_alloc_context(*ac);
   1135		*ac = NULL;
   1136	}
   1137
   1138	if (status)
   1139		mlog_errno(status);
   1140	return status;
   1141}
   1142
   1143/*
   1144 * pass it the bitmap lock in lock_bh if you have it.
   1145 */
   1146static int ocfs2_local_alloc_new_window(struct ocfs2_super *osb,
   1147					handle_t *handle,
   1148					struct ocfs2_alloc_context *ac)
   1149{
   1150	int status = 0;
   1151	u32 cluster_off, cluster_count;
   1152	struct ocfs2_dinode *alloc = NULL;
   1153	struct ocfs2_local_alloc *la;
   1154
   1155	alloc = (struct ocfs2_dinode *) osb->local_alloc_bh->b_data;
   1156	la = OCFS2_LOCAL_ALLOC(alloc);
   1157
   1158	trace_ocfs2_local_alloc_new_window(
   1159		le32_to_cpu(alloc->id1.bitmap1.i_total),
   1160		osb->local_alloc_bits);
   1161
   1162	/* Instruct the allocation code to try the most recently used
   1163	 * cluster group. We'll re-record the group used this pass
   1164	 * below. */
   1165	ac->ac_last_group = osb->la_last_gd;
   1166
   1167	/* we used the generic suballoc reserve function, but we set
   1168	 * everything up nicely, so there's no reason why we can't use
   1169	 * the more specific cluster api to claim bits. */
   1170	status = ocfs2_claim_clusters(handle, ac, osb->local_alloc_bits,
   1171				      &cluster_off, &cluster_count);
   1172	if (status == -ENOSPC) {
   1173retry_enospc:
   1174		/*
   1175		 * Note: We could also try syncing the journal here to
   1176		 * allow use of any free bits which the current
   1177		 * transaction can't give us access to. --Mark
   1178		 */
   1179		if (ocfs2_recalc_la_window(osb, OCFS2_LA_EVENT_FRAGMENTED) ==
   1180		    OCFS2_LA_DISABLED)
   1181			goto bail;
   1182
   1183		ac->ac_bits_wanted = osb->local_alloc_bits;
   1184		status = ocfs2_claim_clusters(handle, ac,
   1185					      osb->local_alloc_bits,
   1186					      &cluster_off,
   1187					      &cluster_count);
   1188		if (status == -ENOSPC)
   1189			goto retry_enospc;
   1190		/*
   1191		 * We only shrunk the *minimum* number of in our
   1192		 * request - it's entirely possible that the allocator
   1193		 * might give us more than we asked for.
   1194		 */
   1195		if (status == 0) {
   1196			spin_lock(&osb->osb_lock);
   1197			osb->local_alloc_bits = cluster_count;
   1198			spin_unlock(&osb->osb_lock);
   1199		}
   1200	}
   1201	if (status < 0) {
   1202		if (status != -ENOSPC)
   1203			mlog_errno(status);
   1204		goto bail;
   1205	}
   1206
   1207	osb->la_last_gd = ac->ac_last_group;
   1208
   1209	la->la_bm_off = cpu_to_le32(cluster_off);
   1210	alloc->id1.bitmap1.i_total = cpu_to_le32(cluster_count);
   1211	/* just in case... In the future when we find space ourselves,
   1212	 * we don't have to get all contiguous -- but we'll have to
   1213	 * set all previously used bits in bitmap and update
   1214	 * la_bits_set before setting the bits in the main bitmap. */
   1215	alloc->id1.bitmap1.i_used = 0;
   1216	memset(OCFS2_LOCAL_ALLOC(alloc)->la_bitmap, 0,
   1217	       le16_to_cpu(la->la_size));
   1218
   1219	ocfs2_resmap_restart(&osb->osb_la_resmap, cluster_count,
   1220			     OCFS2_LOCAL_ALLOC(alloc)->la_bitmap);
   1221
   1222	trace_ocfs2_local_alloc_new_window_result(
   1223		OCFS2_LOCAL_ALLOC(alloc)->la_bm_off,
   1224		le32_to_cpu(alloc->id1.bitmap1.i_total));
   1225
   1226bail:
   1227	if (status)
   1228		mlog_errno(status);
   1229	return status;
   1230}
   1231
   1232/* Note that we do *NOT* lock the local alloc inode here as
   1233 * it's been locked already for us. */
   1234static int ocfs2_local_alloc_slide_window(struct ocfs2_super *osb,
   1235					  struct inode *local_alloc_inode)
   1236{
   1237	int status = 0;
   1238	struct buffer_head *main_bm_bh = NULL;
   1239	struct inode *main_bm_inode = NULL;
   1240	handle_t *handle = NULL;
   1241	struct ocfs2_dinode *alloc;
   1242	struct ocfs2_dinode *alloc_copy = NULL;
   1243	struct ocfs2_alloc_context *ac = NULL;
   1244
   1245	ocfs2_recalc_la_window(osb, OCFS2_LA_EVENT_SLIDE);
   1246
   1247	/* This will lock the main bitmap for us. */
   1248	status = ocfs2_local_alloc_reserve_for_window(osb,
   1249						      &ac,
   1250						      &main_bm_inode,
   1251						      &main_bm_bh);
   1252	if (status < 0) {
   1253		if (status != -ENOSPC)
   1254			mlog_errno(status);
   1255		goto bail;
   1256	}
   1257
   1258	handle = ocfs2_start_trans(osb, OCFS2_WINDOW_MOVE_CREDITS);
   1259	if (IS_ERR(handle)) {
   1260		status = PTR_ERR(handle);
   1261		handle = NULL;
   1262		mlog_errno(status);
   1263		goto bail;
   1264	}
   1265
   1266	alloc = (struct ocfs2_dinode *) osb->local_alloc_bh->b_data;
   1267
   1268	/* We want to clear the local alloc before doing anything
   1269	 * else, so that if we error later during this operation,
   1270	 * local alloc shutdown won't try to double free main bitmap
   1271	 * bits. Make a copy so the sync function knows which bits to
   1272	 * free. */
   1273	alloc_copy = kmemdup(alloc, osb->local_alloc_bh->b_size, GFP_NOFS);
   1274	if (!alloc_copy) {
   1275		status = -ENOMEM;
   1276		mlog_errno(status);
   1277		goto bail;
   1278	}
   1279
   1280	status = ocfs2_journal_access_di(handle,
   1281					 INODE_CACHE(local_alloc_inode),
   1282					 osb->local_alloc_bh,
   1283					 OCFS2_JOURNAL_ACCESS_WRITE);
   1284	if (status < 0) {
   1285		mlog_errno(status);
   1286		goto bail;
   1287	}
   1288
   1289	ocfs2_clear_local_alloc(alloc);
   1290	ocfs2_journal_dirty(handle, osb->local_alloc_bh);
   1291
   1292	status = ocfs2_sync_local_to_main(osb, handle, alloc_copy,
   1293					  main_bm_inode, main_bm_bh);
   1294	if (status < 0) {
   1295		mlog_errno(status);
   1296		goto bail;
   1297	}
   1298
   1299	status = ocfs2_local_alloc_new_window(osb, handle, ac);
   1300	if (status < 0) {
   1301		if (status != -ENOSPC)
   1302			mlog_errno(status);
   1303		goto bail;
   1304	}
   1305
   1306	atomic_inc(&osb->alloc_stats.moves);
   1307
   1308bail:
   1309	if (handle)
   1310		ocfs2_commit_trans(osb, handle);
   1311
   1312	brelse(main_bm_bh);
   1313
   1314	iput(main_bm_inode);
   1315	kfree(alloc_copy);
   1316
   1317	if (ac)
   1318		ocfs2_free_alloc_context(ac);
   1319
   1320	if (status)
   1321		mlog_errno(status);
   1322	return status;
   1323}
   1324