1/* -*- mode: c; c-basic-offset: 8; -*-
2 * vim: noexpandtab sw=8 ts=8 sts=0:
3 *
4 * refcounttree.c
5 *
6 * Copyright (C) 2009 Oracle.  All rights reserved.
7 *
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public
10 * License version 2 as published by the Free Software Foundation.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15 * General Public License for more details.
16 */
17
18#include <linux/sort.h>
19#include <cluster/masklog.h>
20#include "ocfs2.h"
21#include "inode.h"
22#include "alloc.h"
23#include "suballoc.h"
24#include "journal.h"
25#include "uptodate.h"
26#include "super.h"
27#include "buffer_head_io.h"
28#include "blockcheck.h"
29#include "refcounttree.h"
30#include "sysfile.h"
31#include "dlmglue.h"
32#include "extent_map.h"
33#include "aops.h"
34#include "xattr.h"
35#include "namei.h"
36#include "ocfs2_trace.h"
37
38#include <linux/bio.h>
39#include <linux/blkdev.h>
40#include <linux/slab.h>
41#include <linux/writeback.h>
42#include <linux/pagevec.h>
43#include <linux/swap.h>
44#include <linux/security.h>
45#include <linux/fsnotify.h>
46#include <linux/quotaops.h>
47#include <linux/namei.h>
48#include <linux/mount.h>
49#include <linux/posix_acl.h>
50
51struct ocfs2_cow_context {
52	struct inode *inode;
53	u32 cow_start;
54	u32 cow_len;
55	struct ocfs2_extent_tree data_et;
56	struct ocfs2_refcount_tree *ref_tree;
57	struct buffer_head *ref_root_bh;
58	struct ocfs2_alloc_context *meta_ac;
59	struct ocfs2_alloc_context *data_ac;
60	struct ocfs2_cached_dealloc_ctxt dealloc;
61	void *cow_object;
62	struct ocfs2_post_refcount *post_refcount;
63	int extra_credits;
64	int (*get_clusters)(struct ocfs2_cow_context *context,
65			    u32 v_cluster, u32 *p_cluster,
66			    u32 *num_clusters,
67			    unsigned int *extent_flags);
68	int (*cow_duplicate_clusters)(handle_t *handle,
69				      struct inode *inode,
70				      u32 cpos, u32 old_cluster,
71				      u32 new_cluster, u32 new_len);
72};
73
74static inline struct ocfs2_refcount_tree *
75cache_info_to_refcount(struct ocfs2_caching_info *ci)
76{
77	return container_of(ci, struct ocfs2_refcount_tree, rf_ci);
78}
79
80static int ocfs2_validate_refcount_block(struct super_block *sb,
81					 struct buffer_head *bh)
82{
83	int rc;
84	struct ocfs2_refcount_block *rb =
85		(struct ocfs2_refcount_block *)bh->b_data;
86
87	trace_ocfs2_validate_refcount_block((unsigned long long)bh->b_blocknr);
88
89	BUG_ON(!buffer_uptodate(bh));
90
91	/*
92	 * If the ecc fails, we return the error but otherwise
93	 * leave the filesystem running.  We know any error is
94	 * local to this block.
95	 */
96	rc = ocfs2_validate_meta_ecc(sb, bh->b_data, &rb->rf_check);
97	if (rc) {
98		mlog(ML_ERROR, "Checksum failed for refcount block %llu\n",
99		     (unsigned long long)bh->b_blocknr);
100		return rc;
101	}
102
103
104	if (!OCFS2_IS_VALID_REFCOUNT_BLOCK(rb)) {
105		ocfs2_error(sb,
106			    "Refcount block #%llu has bad signature %.*s",
107			    (unsigned long long)bh->b_blocknr, 7,
108			    rb->rf_signature);
109		return -EINVAL;
110	}
111
112	if (le64_to_cpu(rb->rf_blkno) != bh->b_blocknr) {
113		ocfs2_error(sb,
114			    "Refcount block #%llu has an invalid rf_blkno "
115			    "of %llu",
116			    (unsigned long long)bh->b_blocknr,
117			    (unsigned long long)le64_to_cpu(rb->rf_blkno));
118		return -EINVAL;
119	}
120
121	if (le32_to_cpu(rb->rf_fs_generation) != OCFS2_SB(sb)->fs_generation) {
122		ocfs2_error(sb,
123			    "Refcount block #%llu has an invalid "
124			    "rf_fs_generation of #%u",
125			    (unsigned long long)bh->b_blocknr,
126			    le32_to_cpu(rb->rf_fs_generation));
127		return -EINVAL;
128	}
129
130	return 0;
131}
132
133static int ocfs2_read_refcount_block(struct ocfs2_caching_info *ci,
134				     u64 rb_blkno,
135				     struct buffer_head **bh)
136{
137	int rc;
138	struct buffer_head *tmp = *bh;
139
140	rc = ocfs2_read_block(ci, rb_blkno, &tmp,
141			      ocfs2_validate_refcount_block);
142
143	/* If ocfs2_read_block() got us a new bh, pass it up. */
144	if (!rc && !*bh)
145		*bh = tmp;
146
147	return rc;
148}
149
150static u64 ocfs2_refcount_cache_owner(struct ocfs2_caching_info *ci)
151{
152	struct ocfs2_refcount_tree *rf = cache_info_to_refcount(ci);
153
154	return rf->rf_blkno;
155}
156
157static struct super_block *
158ocfs2_refcount_cache_get_super(struct ocfs2_caching_info *ci)
159{
160	struct ocfs2_refcount_tree *rf = cache_info_to_refcount(ci);
161
162	return rf->rf_sb;
163}
164
165static void ocfs2_refcount_cache_lock(struct ocfs2_caching_info *ci)
166{
167	struct ocfs2_refcount_tree *rf = cache_info_to_refcount(ci);
168
169	spin_lock(&rf->rf_lock);
170}
171
172static void ocfs2_refcount_cache_unlock(struct ocfs2_caching_info *ci)
173{
174	struct ocfs2_refcount_tree *rf = cache_info_to_refcount(ci);
175
176	spin_unlock(&rf->rf_lock);
177}
178
179static void ocfs2_refcount_cache_io_lock(struct ocfs2_caching_info *ci)
180{
181	struct ocfs2_refcount_tree *rf = cache_info_to_refcount(ci);
182
183	mutex_lock(&rf->rf_io_mutex);
184}
185
186static void ocfs2_refcount_cache_io_unlock(struct ocfs2_caching_info *ci)
187{
188	struct ocfs2_refcount_tree *rf = cache_info_to_refcount(ci);
189
190	mutex_unlock(&rf->rf_io_mutex);
191}
192
193static const struct ocfs2_caching_operations ocfs2_refcount_caching_ops = {
194	.co_owner		= ocfs2_refcount_cache_owner,
195	.co_get_super		= ocfs2_refcount_cache_get_super,
196	.co_cache_lock		= ocfs2_refcount_cache_lock,
197	.co_cache_unlock	= ocfs2_refcount_cache_unlock,
198	.co_io_lock		= ocfs2_refcount_cache_io_lock,
199	.co_io_unlock		= ocfs2_refcount_cache_io_unlock,
200};
201
202static struct ocfs2_refcount_tree *
203ocfs2_find_refcount_tree(struct ocfs2_super *osb, u64 blkno)
204{
205	struct rb_node *n = osb->osb_rf_lock_tree.rb_node;
206	struct ocfs2_refcount_tree *tree = NULL;
207
208	while (n) {
209		tree = rb_entry(n, struct ocfs2_refcount_tree, rf_node);
210
211		if (blkno < tree->rf_blkno)
212			n = n->rb_left;
213		else if (blkno > tree->rf_blkno)
214			n = n->rb_right;
215		else
216			return tree;
217	}
218
219	return NULL;
220}
221
222/* osb_lock is already locked. */
223static void ocfs2_insert_refcount_tree(struct ocfs2_super *osb,
224				       struct ocfs2_refcount_tree *new)
225{
226	u64 rf_blkno = new->rf_blkno;
227	struct rb_node *parent = NULL;
228	struct rb_node **p = &osb->osb_rf_lock_tree.rb_node;
229	struct ocfs2_refcount_tree *tmp;
230
231	while (*p) {
232		parent = *p;
233
234		tmp = rb_entry(parent, struct ocfs2_refcount_tree,
235			       rf_node);
236
237		if (rf_blkno < tmp->rf_blkno)
238			p = &(*p)->rb_left;
239		else if (rf_blkno > tmp->rf_blkno)
240			p = &(*p)->rb_right;
241		else {
242			/* This should never happen! */
243			mlog(ML_ERROR, "Duplicate refcount block %llu found!\n",
244			     (unsigned long long)rf_blkno);
245			BUG();
246		}
247	}
248
249	rb_link_node(&new->rf_node, parent, p);
250	rb_insert_color(&new->rf_node, &osb->osb_rf_lock_tree);
251}
252
253static void ocfs2_free_refcount_tree(struct ocfs2_refcount_tree *tree)
254{
255	ocfs2_metadata_cache_exit(&tree->rf_ci);
256	ocfs2_simple_drop_lockres(OCFS2_SB(tree->rf_sb), &tree->rf_lockres);
257	ocfs2_lock_res_free(&tree->rf_lockres);
258	kfree(tree);
259}
260
261static inline void
262ocfs2_erase_refcount_tree_from_list_no_lock(struct ocfs2_super *osb,
263					struct ocfs2_refcount_tree *tree)
264{
265	rb_erase(&tree->rf_node, &osb->osb_rf_lock_tree);
266	if (osb->osb_ref_tree_lru && osb->osb_ref_tree_lru == tree)
267		osb->osb_ref_tree_lru = NULL;
268}
269
270static void ocfs2_erase_refcount_tree_from_list(struct ocfs2_super *osb,
271					struct ocfs2_refcount_tree *tree)
272{
273	spin_lock(&osb->osb_lock);
274	ocfs2_erase_refcount_tree_from_list_no_lock(osb, tree);
275	spin_unlock(&osb->osb_lock);
276}
277
278static void ocfs2_kref_remove_refcount_tree(struct kref *kref)
279{
280	struct ocfs2_refcount_tree *tree =
281		container_of(kref, struct ocfs2_refcount_tree, rf_getcnt);
282
283	ocfs2_free_refcount_tree(tree);
284}
285
286static inline void
287ocfs2_refcount_tree_get(struct ocfs2_refcount_tree *tree)
288{
289	kref_get(&tree->rf_getcnt);
290}
291
292static inline void
293ocfs2_refcount_tree_put(struct ocfs2_refcount_tree *tree)
294{
295	kref_put(&tree->rf_getcnt, ocfs2_kref_remove_refcount_tree);
296}
297
298static inline void ocfs2_init_refcount_tree_ci(struct ocfs2_refcount_tree *new,
299					       struct super_block *sb)
300{
301	ocfs2_metadata_cache_init(&new->rf_ci, &ocfs2_refcount_caching_ops);
302	mutex_init(&new->rf_io_mutex);
303	new->rf_sb = sb;
304	spin_lock_init(&new->rf_lock);
305}
306
307static inline void ocfs2_init_refcount_tree_lock(struct ocfs2_super *osb,
308					struct ocfs2_refcount_tree *new,
309					u64 rf_blkno, u32 generation)
310{
311	init_rwsem(&new->rf_sem);
312	ocfs2_refcount_lock_res_init(&new->rf_lockres, osb,
313				     rf_blkno, generation);
314}
315
316static struct ocfs2_refcount_tree*
317ocfs2_allocate_refcount_tree(struct ocfs2_super *osb, u64 rf_blkno)
318{
319	struct ocfs2_refcount_tree *new;
320
321	new = kzalloc(sizeof(struct ocfs2_refcount_tree), GFP_NOFS);
322	if (!new)
323		return NULL;
324
325	new->rf_blkno = rf_blkno;
326	kref_init(&new->rf_getcnt);
327	ocfs2_init_refcount_tree_ci(new, osb->sb);
328
329	return new;
330}
331
332static int ocfs2_get_refcount_tree(struct ocfs2_super *osb, u64 rf_blkno,
333				   struct ocfs2_refcount_tree **ret_tree)
334{
335	int ret = 0;
336	struct ocfs2_refcount_tree *tree, *new = NULL;
337	struct buffer_head *ref_root_bh = NULL;
338	struct ocfs2_refcount_block *ref_rb;
339
340	spin_lock(&osb->osb_lock);
341	if (osb->osb_ref_tree_lru &&
342	    osb->osb_ref_tree_lru->rf_blkno == rf_blkno)
343		tree = osb->osb_ref_tree_lru;
344	else
345		tree = ocfs2_find_refcount_tree(osb, rf_blkno);
346	if (tree)
347		goto out;
348
349	spin_unlock(&osb->osb_lock);
350
351	new = ocfs2_allocate_refcount_tree(osb, rf_blkno);
352	if (!new) {
353		ret = -ENOMEM;
354		mlog_errno(ret);
355		return ret;
356	}
357	/*
358	 * We need the generation to create the refcount tree lock and since
359	 * it isn't changed during the tree modification, we are safe here to
360	 * read without protection.
361	 * We also have to purge the cache after we create the lock since the
362	 * refcount block may have the stale data. It can only be trusted when
363	 * we hold the refcount lock.
364	 */
365	ret = ocfs2_read_refcount_block(&new->rf_ci, rf_blkno, &ref_root_bh);
366	if (ret) {
367		mlog_errno(ret);
368		ocfs2_metadata_cache_exit(&new->rf_ci);
369		kfree(new);
370		return ret;
371	}
372
373	ref_rb = (struct ocfs2_refcount_block *)ref_root_bh->b_data;
374	new->rf_generation = le32_to_cpu(ref_rb->rf_generation);
375	ocfs2_init_refcount_tree_lock(osb, new, rf_blkno,
376				      new->rf_generation);
377	ocfs2_metadata_cache_purge(&new->rf_ci);
378
379	spin_lock(&osb->osb_lock);
380	tree = ocfs2_find_refcount_tree(osb, rf_blkno);
381	if (tree)
382		goto out;
383
384	ocfs2_insert_refcount_tree(osb, new);
385
386	tree = new;
387	new = NULL;
388
389out:
390	*ret_tree = tree;
391
392	osb->osb_ref_tree_lru = tree;
393
394	spin_unlock(&osb->osb_lock);
395
396	if (new)
397		ocfs2_free_refcount_tree(new);
398
399	brelse(ref_root_bh);
400	return ret;
401}
402
403static int ocfs2_get_refcount_block(struct inode *inode, u64 *ref_blkno)
404{
405	int ret;
406	struct buffer_head *di_bh = NULL;
407	struct ocfs2_dinode *di;
408
409	ret = ocfs2_read_inode_block(inode, &di_bh);
410	if (ret) {
411		mlog_errno(ret);
412		goto out;
413	}
414
415	BUG_ON(!(OCFS2_I(inode)->ip_dyn_features & OCFS2_HAS_REFCOUNT_FL));
416
417	di = (struct ocfs2_dinode *)di_bh->b_data;
418	*ref_blkno = le64_to_cpu(di->i_refcount_loc);
419	brelse(di_bh);
420out:
421	return ret;
422}
423
424static int __ocfs2_lock_refcount_tree(struct ocfs2_super *osb,
425				      struct ocfs2_refcount_tree *tree, int rw)
426{
427	int ret;
428
429	ret = ocfs2_refcount_lock(tree, rw);
430	if (ret) {
431		mlog_errno(ret);
432		goto out;
433	}
434
435	if (rw)
436		down_write(&tree->rf_sem);
437	else
438		down_read(&tree->rf_sem);
439
440out:
441	return ret;
442}
443
444/*
445 * Lock the refcount tree pointed by ref_blkno and return the tree.
446 * In most case, we lock the tree and read the refcount block.
447 * So read it here if the caller really needs it.
448 *
449 * If the tree has been re-created by other node, it will free the
450 * old one and re-create it.
451 */
452int ocfs2_lock_refcount_tree(struct ocfs2_super *osb,
453			     u64 ref_blkno, int rw,
454			     struct ocfs2_refcount_tree **ret_tree,
455			     struct buffer_head **ref_bh)
456{
457	int ret, delete_tree = 0;
458	struct ocfs2_refcount_tree *tree = NULL;
459	struct buffer_head *ref_root_bh = NULL;
460	struct ocfs2_refcount_block *rb;
461
462again:
463	ret = ocfs2_get_refcount_tree(osb, ref_blkno, &tree);
464	if (ret) {
465		mlog_errno(ret);
466		return ret;
467	}
468
469	ocfs2_refcount_tree_get(tree);
470
471	ret = __ocfs2_lock_refcount_tree(osb, tree, rw);
472	if (ret) {
473		mlog_errno(ret);
474		ocfs2_refcount_tree_put(tree);
475		goto out;
476	}
477
478	ret = ocfs2_read_refcount_block(&tree->rf_ci, tree->rf_blkno,
479					&ref_root_bh);
480	if (ret) {
481		mlog_errno(ret);
482		ocfs2_unlock_refcount_tree(osb, tree, rw);
483		ocfs2_refcount_tree_put(tree);
484		goto out;
485	}
486
487	rb = (struct ocfs2_refcount_block *)ref_root_bh->b_data;
488	/*
489	 * If the refcount block has been freed and re-created, we may need
490	 * to recreate the refcount tree also.
491	 *
492	 * Here we just remove the tree from the rb-tree, and the last
493	 * kref holder will unlock and delete this refcount_tree.
494	 * Then we goto "again" and ocfs2_get_refcount_tree will create
495	 * the new refcount tree for us.
496	 */
497	if (tree->rf_generation != le32_to_cpu(rb->rf_generation)) {
498		if (!tree->rf_removed) {
499			ocfs2_erase_refcount_tree_from_list(osb, tree);
500			tree->rf_removed = 1;
501			delete_tree = 1;
502		}
503
504		ocfs2_unlock_refcount_tree(osb, tree, rw);
505		/*
506		 * We get an extra reference when we create the refcount
507		 * tree, so another put will destroy it.
508		 */
509		if (delete_tree)
510			ocfs2_refcount_tree_put(tree);
511		brelse(ref_root_bh);
512		ref_root_bh = NULL;
513		goto again;
514	}
515
516	*ret_tree = tree;
517	if (ref_bh) {
518		*ref_bh = ref_root_bh;
519		ref_root_bh = NULL;
520	}
521out:
522	brelse(ref_root_bh);
523	return ret;
524}
525
526void ocfs2_unlock_refcount_tree(struct ocfs2_super *osb,
527				struct ocfs2_refcount_tree *tree, int rw)
528{
529	if (rw)
530		up_write(&tree->rf_sem);
531	else
532		up_read(&tree->rf_sem);
533
534	ocfs2_refcount_unlock(tree, rw);
535	ocfs2_refcount_tree_put(tree);
536}
537
538void ocfs2_purge_refcount_trees(struct ocfs2_super *osb)
539{
540	struct rb_node *node;
541	struct ocfs2_refcount_tree *tree;
542	struct rb_root *root = &osb->osb_rf_lock_tree;
543
544	while ((node = rb_last(root)) != NULL) {
545		tree = rb_entry(node, struct ocfs2_refcount_tree, rf_node);
546
547		trace_ocfs2_purge_refcount_trees(
548				(unsigned long long) tree->rf_blkno);
549
550		rb_erase(&tree->rf_node, root);
551		ocfs2_free_refcount_tree(tree);
552	}
553}
554
555/*
556 * Create a refcount tree for an inode.
557 * We take for granted that the inode is already locked.
558 */
559static int ocfs2_create_refcount_tree(struct inode *inode,
560				      struct buffer_head *di_bh)
561{
562	int ret;
563	handle_t *handle = NULL;
564	struct ocfs2_alloc_context *meta_ac = NULL;
565	struct ocfs2_dinode *di = (struct ocfs2_dinode *)di_bh->b_data;
566	struct ocfs2_inode_info *oi = OCFS2_I(inode);
567	struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
568	struct buffer_head *new_bh = NULL;
569	struct ocfs2_refcount_block *rb;
570	struct ocfs2_refcount_tree *new_tree = NULL, *tree = NULL;
571	u16 suballoc_bit_start;
572	u32 num_got;
573	u64 suballoc_loc, first_blkno;
574
575	BUG_ON(oi->ip_dyn_features & OCFS2_HAS_REFCOUNT_FL);
576
577	trace_ocfs2_create_refcount_tree(
578		(unsigned long long)OCFS2_I(inode)->ip_blkno);
579
580	ret = ocfs2_reserve_new_metadata_blocks(osb, 1, &meta_ac);
581	if (ret) {
582		mlog_errno(ret);
583		goto out;
584	}
585
586	handle = ocfs2_start_trans(osb, OCFS2_REFCOUNT_TREE_CREATE_CREDITS);
587	if (IS_ERR(handle)) {
588		ret = PTR_ERR(handle);
589		mlog_errno(ret);
590		goto out;
591	}
592
593	ret = ocfs2_journal_access_di(handle, INODE_CACHE(inode), di_bh,
594				      OCFS2_JOURNAL_ACCESS_WRITE);
595	if (ret) {
596		mlog_errno(ret);
597		goto out_commit;
598	}
599
600	ret = ocfs2_claim_metadata(handle, meta_ac, 1, &suballoc_loc,
601				   &suballoc_bit_start, &num_got,
602				   &first_blkno);
603	if (ret) {
604		mlog_errno(ret);
605		goto out_commit;
606	}
607
608	new_tree = ocfs2_allocate_refcount_tree(osb, first_blkno);
609	if (!new_tree) {
610		ret = -ENOMEM;
611		mlog_errno(ret);
612		goto out_commit;
613	}
614
615	new_bh = sb_getblk(inode->i_sb, first_blkno);
616	if (!new_bh) {
617		ret = -ENOMEM;
618		mlog_errno(ret);
619		goto out_commit;
620	}
621	ocfs2_set_new_buffer_uptodate(&new_tree->rf_ci, new_bh);
622
623	ret = ocfs2_journal_access_rb(handle, &new_tree->rf_ci, new_bh,
624				      OCFS2_JOURNAL_ACCESS_CREATE);
625	if (ret) {
626		mlog_errno(ret);
627		goto out_commit;
628	}
629
630	/* Initialize ocfs2_refcount_block. */
631	rb = (struct ocfs2_refcount_block *)new_bh->b_data;
632	memset(rb, 0, inode->i_sb->s_blocksize);
633	strcpy((void *)rb, OCFS2_REFCOUNT_BLOCK_SIGNATURE);
634	rb->rf_suballoc_slot = cpu_to_le16(meta_ac->ac_alloc_slot);
635	rb->rf_suballoc_loc = cpu_to_le64(suballoc_loc);
636	rb->rf_suballoc_bit = cpu_to_le16(suballoc_bit_start);
637	rb->rf_fs_generation = cpu_to_le32(osb->fs_generation);
638	rb->rf_blkno = cpu_to_le64(first_blkno);
639	rb->rf_count = cpu_to_le32(1);
640	rb->rf_records.rl_count =
641			cpu_to_le16(ocfs2_refcount_recs_per_rb(osb->sb));
642	spin_lock(&osb->osb_lock);
643	rb->rf_generation = osb->s_next_generation++;
644	spin_unlock(&osb->osb_lock);
645
646	ocfs2_journal_dirty(handle, new_bh);
647
648	spin_lock(&oi->ip_lock);
649	oi->ip_dyn_features |= OCFS2_HAS_REFCOUNT_FL;
650	di->i_dyn_features = cpu_to_le16(oi->ip_dyn_features);
651	di->i_refcount_loc = cpu_to_le64(first_blkno);
652	spin_unlock(&oi->ip_lock);
653
654	trace_ocfs2_create_refcount_tree_blkno((unsigned long long)first_blkno);
655
656	ocfs2_journal_dirty(handle, di_bh);
657
658	/*
659	 * We have to init the tree lock here since it will use
660	 * the generation number to create it.
661	 */
662	new_tree->rf_generation = le32_to_cpu(rb->rf_generation);
663	ocfs2_init_refcount_tree_lock(osb, new_tree, first_blkno,
664				      new_tree->rf_generation);
665
666	spin_lock(&osb->osb_lock);
667	tree = ocfs2_find_refcount_tree(osb, first_blkno);
668
669	/*
670	 * We've just created a new refcount tree in this block.  If
671	 * we found a refcount tree on the ocfs2_super, it must be
672	 * one we just deleted.  We free the old tree before
673	 * inserting the new tree.
674	 */
675	BUG_ON(tree && tree->rf_generation == new_tree->rf_generation);
676	if (tree)
677		ocfs2_erase_refcount_tree_from_list_no_lock(osb, tree);
678	ocfs2_insert_refcount_tree(osb, new_tree);
679	spin_unlock(&osb->osb_lock);
680	new_tree = NULL;
681	if (tree)
682		ocfs2_refcount_tree_put(tree);
683
684out_commit:
685	ocfs2_commit_trans(osb, handle);
686
687out:
688	if (new_tree) {
689		ocfs2_metadata_cache_exit(&new_tree->rf_ci);
690		kfree(new_tree);
691	}
692
693	brelse(new_bh);
694	if (meta_ac)
695		ocfs2_free_alloc_context(meta_ac);
696
697	return ret;
698}
699
700static int ocfs2_set_refcount_tree(struct inode *inode,
701				   struct buffer_head *di_bh,
702				   u64 refcount_loc)
703{
704	int ret;
705	handle_t *handle = NULL;
706	struct ocfs2_dinode *di = (struct ocfs2_dinode *)di_bh->b_data;
707	struct ocfs2_inode_info *oi = OCFS2_I(inode);
708	struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
709	struct buffer_head *ref_root_bh = NULL;
710	struct ocfs2_refcount_block *rb;
711	struct ocfs2_refcount_tree *ref_tree;
712
713	BUG_ON(oi->ip_dyn_features & OCFS2_HAS_REFCOUNT_FL);
714
715	ret = ocfs2_lock_refcount_tree(osb, refcount_loc, 1,
716				       &ref_tree, &ref_root_bh);
717	if (ret) {
718		mlog_errno(ret);
719		return ret;
720	}
721
722	handle = ocfs2_start_trans(osb, OCFS2_REFCOUNT_TREE_SET_CREDITS);
723	if (IS_ERR(handle)) {
724		ret = PTR_ERR(handle);
725		mlog_errno(ret);
726		goto out;
727	}
728
729	ret = ocfs2_journal_access_di(handle, INODE_CACHE(inode), di_bh,
730				      OCFS2_JOURNAL_ACCESS_WRITE);
731	if (ret) {
732		mlog_errno(ret);
733		goto out_commit;
734	}
735
736	ret = ocfs2_journal_access_rb(handle, &ref_tree->rf_ci, ref_root_bh,
737				      OCFS2_JOURNAL_ACCESS_WRITE);
738	if (ret) {
739		mlog_errno(ret);
740		goto out_commit;
741	}
742
743	rb = (struct ocfs2_refcount_block *)ref_root_bh->b_data;
744	le32_add_cpu(&rb->rf_count, 1);
745
746	ocfs2_journal_dirty(handle, ref_root_bh);
747
748	spin_lock(&oi->ip_lock);
749	oi->ip_dyn_features |= OCFS2_HAS_REFCOUNT_FL;
750	di->i_dyn_features = cpu_to_le16(oi->ip_dyn_features);
751	di->i_refcount_loc = cpu_to_le64(refcount_loc);
752	spin_unlock(&oi->ip_lock);
753	ocfs2_journal_dirty(handle, di_bh);
754
755out_commit:
756	ocfs2_commit_trans(osb, handle);
757out:
758	ocfs2_unlock_refcount_tree(osb, ref_tree, 1);
759	brelse(ref_root_bh);
760
761	return ret;
762}
763
764int ocfs2_remove_refcount_tree(struct inode *inode, struct buffer_head *di_bh)
765{
766	int ret, delete_tree = 0;
767	handle_t *handle = NULL;
768	struct ocfs2_dinode *di = (struct ocfs2_dinode *)di_bh->b_data;
769	struct ocfs2_inode_info *oi = OCFS2_I(inode);
770	struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
771	struct ocfs2_refcount_block *rb;
772	struct inode *alloc_inode = NULL;
773	struct buffer_head *alloc_bh = NULL;
774	struct buffer_head *blk_bh = NULL;
775	struct ocfs2_refcount_tree *ref_tree;
776	int credits = OCFS2_REFCOUNT_TREE_REMOVE_CREDITS;
777	u64 blk = 0, bg_blkno = 0, ref_blkno = le64_to_cpu(di->i_refcount_loc);
778	u16 bit = 0;
779
780	if (!(oi->ip_dyn_features & OCFS2_HAS_REFCOUNT_FL))
781		return 0;
782
783	BUG_ON(!ref_blkno);
784	ret = ocfs2_lock_refcount_tree(osb, ref_blkno, 1, &ref_tree, &blk_bh);
785	if (ret) {
786		mlog_errno(ret);
787		return ret;
788	}
789
790	rb = (struct ocfs2_refcount_block *)blk_bh->b_data;
791
792	/*
793	 * If we are the last user, we need to free the block.
794	 * So lock the allocator ahead.
795	 */
796	if (le32_to_cpu(rb->rf_count) == 1) {
797		blk = le64_to_cpu(rb->rf_blkno);
798		bit = le16_to_cpu(rb->rf_suballoc_bit);
799		if (rb->rf_suballoc_loc)
800			bg_blkno = le64_to_cpu(rb->rf_suballoc_loc);
801		else
802			bg_blkno = ocfs2_which_suballoc_group(blk, bit);
803
804		alloc_inode = ocfs2_get_system_file_inode(osb,
805					EXTENT_ALLOC_SYSTEM_INODE,
806					le16_to_cpu(rb->rf_suballoc_slot));
807		if (!alloc_inode) {
808			ret = -ENOMEM;
809			mlog_errno(ret);
810			goto out;
811		}
812		mutex_lock(&alloc_inode->i_mutex);
813
814		ret = ocfs2_inode_lock(alloc_inode, &alloc_bh, 1);
815		if (ret) {
816			mlog_errno(ret);
817			goto out_mutex;
818		}
819
820		credits += OCFS2_SUBALLOC_FREE;
821	}
822
823	handle = ocfs2_start_trans(osb, credits);
824	if (IS_ERR(handle)) {
825		ret = PTR_ERR(handle);
826		mlog_errno(ret);
827		goto out_unlock;
828	}
829
830	ret = ocfs2_journal_access_di(handle, INODE_CACHE(inode), di_bh,
831				      OCFS2_JOURNAL_ACCESS_WRITE);
832	if (ret) {
833		mlog_errno(ret);
834		goto out_commit;
835	}
836
837	ret = ocfs2_journal_access_rb(handle, &ref_tree->rf_ci, blk_bh,
838				      OCFS2_JOURNAL_ACCESS_WRITE);
839	if (ret) {
840		mlog_errno(ret);
841		goto out_commit;
842	}
843
844	spin_lock(&oi->ip_lock);
845	oi->ip_dyn_features &= ~OCFS2_HAS_REFCOUNT_FL;
846	di->i_dyn_features = cpu_to_le16(oi->ip_dyn_features);
847	di->i_refcount_loc = 0;
848	spin_unlock(&oi->ip_lock);
849	ocfs2_journal_dirty(handle, di_bh);
850
851	le32_add_cpu(&rb->rf_count , -1);
852	ocfs2_journal_dirty(handle, blk_bh);
853
854	if (!rb->rf_count) {
855		delete_tree = 1;
856		ocfs2_erase_refcount_tree_from_list(osb, ref_tree);
857		ret = ocfs2_free_suballoc_bits(handle, alloc_inode,
858					       alloc_bh, bit, bg_blkno, 1);
859		if (ret)
860			mlog_errno(ret);
861	}
862
863out_commit:
864	ocfs2_commit_trans(osb, handle);
865out_unlock:
866	if (alloc_inode) {
867		ocfs2_inode_unlock(alloc_inode, 1);
868		brelse(alloc_bh);
869	}
870out_mutex:
871	if (alloc_inode) {
872		mutex_unlock(&alloc_inode->i_mutex);
873		iput(alloc_inode);
874	}
875out:
876	ocfs2_unlock_refcount_tree(osb, ref_tree, 1);
877	if (delete_tree)
878		ocfs2_refcount_tree_put(ref_tree);
879	brelse(blk_bh);
880
881	return ret;
882}
883
884static void ocfs2_find_refcount_rec_in_rl(struct ocfs2_caching_info *ci,
885					  struct buffer_head *ref_leaf_bh,
886					  u64 cpos, unsigned int len,
887					  struct ocfs2_refcount_rec *ret_rec,
888					  int *index)
889{
890	int i = 0;
891	struct ocfs2_refcount_block *rb =
892		(struct ocfs2_refcount_block *)ref_leaf_bh->b_data;
893	struct ocfs2_refcount_rec *rec = NULL;
894
895	for (; i < le16_to_cpu(rb->rf_records.rl_used); i++) {
896		rec = &rb->rf_records.rl_recs[i];
897
898		if (le64_to_cpu(rec->r_cpos) +
899		    le32_to_cpu(rec->r_clusters) <= cpos)
900			continue;
901		else if (le64_to_cpu(rec->r_cpos) > cpos)
902			break;
903
904		/* ok, cpos fail in this rec. Just return. */
905		if (ret_rec)
906			*ret_rec = *rec;
907		goto out;
908	}
909
910	if (ret_rec) {
911		/* We meet with a hole here, so fake the rec. */
912		ret_rec->r_cpos = cpu_to_le64(cpos);
913		ret_rec->r_refcount = 0;
914		if (i < le16_to_cpu(rb->rf_records.rl_used) &&
915		    le64_to_cpu(rec->r_cpos) < cpos + len)
916			ret_rec->r_clusters =
917				cpu_to_le32(le64_to_cpu(rec->r_cpos) - cpos);
918		else
919			ret_rec->r_clusters = cpu_to_le32(len);
920	}
921
922out:
923	*index = i;
924}
925
926/*
927 * Try to remove refcount tree. The mechanism is:
928 * 1) Check whether i_clusters == 0, if no, exit.
929 * 2) check whether we have i_xattr_loc in dinode. if yes, exit.
930 * 3) Check whether we have inline xattr stored outside, if yes, exit.
931 * 4) Remove the tree.
932 */
933int ocfs2_try_remove_refcount_tree(struct inode *inode,
934				   struct buffer_head *di_bh)
935{
936	int ret;
937	struct ocfs2_inode_info *oi = OCFS2_I(inode);
938	struct ocfs2_dinode *di = (struct ocfs2_dinode *)di_bh->b_data;
939
940	down_write(&oi->ip_xattr_sem);
941	down_write(&oi->ip_alloc_sem);
942
943	if (oi->ip_clusters)
944		goto out;
945
946	if ((oi->ip_dyn_features & OCFS2_HAS_XATTR_FL) && di->i_xattr_loc)
947		goto out;
948
949	if (oi->ip_dyn_features & OCFS2_INLINE_XATTR_FL &&
950	    ocfs2_has_inline_xattr_value_outside(inode, di))
951		goto out;
952
953	ret = ocfs2_remove_refcount_tree(inode, di_bh);
954	if (ret)
955		mlog_errno(ret);
956out:
957	up_write(&oi->ip_alloc_sem);
958	up_write(&oi->ip_xattr_sem);
959	return 0;
960}
961
962/*
963 * Find the end range for a leaf refcount block indicated by
964 * el->l_recs[index].e_blkno.
965 */
966static int ocfs2_get_refcount_cpos_end(struct ocfs2_caching_info *ci,
967				       struct buffer_head *ref_root_bh,
968				       struct ocfs2_extent_block *eb,
969				       struct ocfs2_extent_list *el,
970				       int index,  u32 *cpos_end)
971{
972	int ret, i, subtree_root;
973	u32 cpos;
974	u64 blkno;
975	struct super_block *sb = ocfs2_metadata_cache_get_super(ci);
976	struct ocfs2_path *left_path = NULL, *right_path = NULL;
977	struct ocfs2_extent_tree et;
978	struct ocfs2_extent_list *tmp_el;
979
980	if (index < le16_to_cpu(el->l_next_free_rec) - 1) {
981		/*
982		 * We have a extent rec after index, so just use the e_cpos
983		 * of the next extent rec.
984		 */
985		*cpos_end = le32_to_cpu(el->l_recs[index+1].e_cpos);
986		return 0;
987	}
988
989	if (!eb || (eb && !eb->h_next_leaf_blk)) {
990		/*
991		 * We are the last extent rec, so any high cpos should
992		 * be stored in this leaf refcount block.
993		 */
994		*cpos_end = UINT_MAX;
995		return 0;
996	}
997
998	/*
999	 * If the extent block isn't the last one, we have to find
1000	 * the subtree root between this extent block and the next
1001	 * leaf extent block and get the corresponding e_cpos from
1002	 * the subroot. Otherwise we may corrupt the b-tree.
1003	 */
1004	ocfs2_init_refcount_extent_tree(&et, ci, ref_root_bh);
1005
1006	left_path = ocfs2_new_path_from_et(&et);
1007	if (!left_path) {
1008		ret = -ENOMEM;
1009		mlog_errno(ret);
1010		goto out;
1011	}
1012
1013	cpos = le32_to_cpu(eb->h_list.l_recs[index].e_cpos);
1014	ret = ocfs2_find_path(ci, left_path, cpos);
1015	if (ret) {
1016		mlog_errno(ret);
1017		goto out;
1018	}
1019
1020	right_path = ocfs2_new_path_from_path(left_path);
1021	if (!right_path) {
1022		ret = -ENOMEM;
1023		mlog_errno(ret);
1024		goto out;
1025	}
1026
1027	ret = ocfs2_find_cpos_for_right_leaf(sb, left_path, &cpos);
1028	if (ret) {
1029		mlog_errno(ret);
1030		goto out;
1031	}
1032
1033	ret = ocfs2_find_path(ci, right_path, cpos);
1034	if (ret) {
1035		mlog_errno(ret);
1036		goto out;
1037	}
1038
1039	subtree_root = ocfs2_find_subtree_root(&et, left_path,
1040					       right_path);
1041
1042	tmp_el = left_path->p_node[subtree_root].el;
1043	blkno = left_path->p_node[subtree_root+1].bh->b_blocknr;
1044	for (i = 0; i < le16_to_cpu(tmp_el->l_next_free_rec); i++) {
1045		if (le64_to_cpu(tmp_el->l_recs[i].e_blkno) == blkno) {
1046			*cpos_end = le32_to_cpu(tmp_el->l_recs[i+1].e_cpos);
1047			break;
1048		}
1049	}
1050
1051	BUG_ON(i == le16_to_cpu(tmp_el->l_next_free_rec));
1052
1053out:
1054	ocfs2_free_path(left_path);
1055	ocfs2_free_path(right_path);
1056	return ret;
1057}
1058
1059/*
1060 * Given a cpos and len, try to find the refcount record which contains cpos.
1061 * 1. If cpos can be found in one refcount record, return the record.
1062 * 2. If cpos can't be found, return a fake record which start from cpos
1063 *    and end at a small value between cpos+len and start of the next record.
1064 *    This fake record has r_refcount = 0.
1065 */
1066static int ocfs2_get_refcount_rec(struct ocfs2_caching_info *ci,
1067				  struct buffer_head *ref_root_bh,
1068				  u64 cpos, unsigned int len,
1069				  struct ocfs2_refcount_rec *ret_rec,
1070				  int *index,
1071				  struct buffer_head **ret_bh)
1072{
1073	int ret = 0, i, found;
1074	u32 low_cpos, uninitialized_var(cpos_end);
1075	struct ocfs2_extent_list *el;
1076	struct ocfs2_extent_rec *rec = NULL;
1077	struct ocfs2_extent_block *eb = NULL;
1078	struct buffer_head *eb_bh = NULL, *ref_leaf_bh = NULL;
1079	struct super_block *sb = ocfs2_metadata_cache_get_super(ci);
1080	struct ocfs2_refcount_block *rb =
1081			(struct ocfs2_refcount_block *)ref_root_bh->b_data;
1082
1083	if (!(le32_to_cpu(rb->rf_flags) & OCFS2_REFCOUNT_TREE_FL)) {
1084		ocfs2_find_refcount_rec_in_rl(ci, ref_root_bh, cpos, len,
1085					      ret_rec, index);
1086		*ret_bh = ref_root_bh;
1087		get_bh(ref_root_bh);
1088		return 0;
1089	}
1090
1091	el = &rb->rf_list;
1092	low_cpos = cpos & OCFS2_32BIT_POS_MASK;
1093
1094	if (el->l_tree_depth) {
1095		ret = ocfs2_find_leaf(ci, el, low_cpos, &eb_bh);
1096		if (ret) {
1097			mlog_errno(ret);
1098			goto out;
1099		}
1100
1101		eb = (struct ocfs2_extent_block *) eb_bh->b_data;
1102		el = &eb->h_list;
1103
1104		if (el->l_tree_depth) {
1105			ocfs2_error(sb,
1106			"refcount tree %llu has non zero tree "
1107			"depth in leaf btree tree block %llu\n",
1108			(unsigned long long)ocfs2_metadata_cache_owner(ci),
1109			(unsigned long long)eb_bh->b_blocknr);
1110			ret = -EROFS;
1111			goto out;
1112		}
1113	}
1114
1115	found = 0;
1116	for (i = le16_to_cpu(el->l_next_free_rec) - 1; i >= 0; i--) {
1117		rec = &el->l_recs[i];
1118
1119		if (le32_to_cpu(rec->e_cpos) <= low_cpos) {
1120			found = 1;
1121			break;
1122		}
1123	}
1124
1125	if (found) {
1126		ret = ocfs2_get_refcount_cpos_end(ci, ref_root_bh,
1127						  eb, el, i, &cpos_end);
1128		if (ret) {
1129			mlog_errno(ret);
1130			goto out;
1131		}
1132
1133		if (cpos_end < low_cpos + len)
1134			len = cpos_end - low_cpos;
1135	}
1136
1137	ret = ocfs2_read_refcount_block(ci, le64_to_cpu(rec->e_blkno),
1138					&ref_leaf_bh);
1139	if (ret) {
1140		mlog_errno(ret);
1141		goto out;
1142	}
1143
1144	ocfs2_find_refcount_rec_in_rl(ci, ref_leaf_bh, cpos, len,
1145				      ret_rec, index);
1146	*ret_bh = ref_leaf_bh;
1147out:
1148	brelse(eb_bh);
1149	return ret;
1150}
1151
1152enum ocfs2_ref_rec_contig {
1153	REF_CONTIG_NONE = 0,
1154	REF_CONTIG_LEFT,
1155	REF_CONTIG_RIGHT,
1156	REF_CONTIG_LEFTRIGHT,
1157};
1158
1159static enum ocfs2_ref_rec_contig
1160	ocfs2_refcount_rec_adjacent(struct ocfs2_refcount_block *rb,
1161				    int index)
1162{
1163	if ((rb->rf_records.rl_recs[index].r_refcount ==
1164	    rb->rf_records.rl_recs[index + 1].r_refcount) &&
1165	    (le64_to_cpu(rb->rf_records.rl_recs[index].r_cpos) +
1166	    le32_to_cpu(rb->rf_records.rl_recs[index].r_clusters) ==
1167	    le64_to_cpu(rb->rf_records.rl_recs[index + 1].r_cpos)))
1168		return REF_CONTIG_RIGHT;
1169
1170	return REF_CONTIG_NONE;
1171}
1172
1173static enum ocfs2_ref_rec_contig
1174	ocfs2_refcount_rec_contig(struct ocfs2_refcount_block *rb,
1175				  int index)
1176{
1177	enum ocfs2_ref_rec_contig ret = REF_CONTIG_NONE;
1178
1179	if (index < le16_to_cpu(rb->rf_records.rl_used) - 1)
1180		ret = ocfs2_refcount_rec_adjacent(rb, index);
1181
1182	if (index > 0) {
1183		enum ocfs2_ref_rec_contig tmp;
1184
1185		tmp = ocfs2_refcount_rec_adjacent(rb, index - 1);
1186
1187		if (tmp == REF_CONTIG_RIGHT) {
1188			if (ret == REF_CONTIG_RIGHT)
1189				ret = REF_CONTIG_LEFTRIGHT;
1190			else
1191				ret = REF_CONTIG_LEFT;
1192		}
1193	}
1194
1195	return ret;
1196}
1197
1198static void ocfs2_rotate_refcount_rec_left(struct ocfs2_refcount_block *rb,
1199					   int index)
1200{
1201	BUG_ON(rb->rf_records.rl_recs[index].r_refcount !=
1202	       rb->rf_records.rl_recs[index+1].r_refcount);
1203
1204	le32_add_cpu(&rb->rf_records.rl_recs[index].r_clusters,
1205		     le32_to_cpu(rb->rf_records.rl_recs[index+1].r_clusters));
1206
1207	if (index < le16_to_cpu(rb->rf_records.rl_used) - 2)
1208		memmove(&rb->rf_records.rl_recs[index + 1],
1209			&rb->rf_records.rl_recs[index + 2],
1210			sizeof(struct ocfs2_refcount_rec) *
1211			(le16_to_cpu(rb->rf_records.rl_used) - index - 2));
1212
1213	memset(&rb->rf_records.rl_recs[le16_to_cpu(rb->rf_records.rl_used) - 1],
1214	       0, sizeof(struct ocfs2_refcount_rec));
1215	le16_add_cpu(&rb->rf_records.rl_used, -1);
1216}
1217
1218/*
1219 * Merge the refcount rec if we are contiguous with the adjacent recs.
1220 */
1221static void ocfs2_refcount_rec_merge(struct ocfs2_refcount_block *rb,
1222				     int index)
1223{
1224	enum ocfs2_ref_rec_contig contig =
1225				ocfs2_refcount_rec_contig(rb, index);
1226
1227	if (contig == REF_CONTIG_NONE)
1228		return;
1229
1230	if (contig == REF_CONTIG_LEFT || contig == REF_CONTIG_LEFTRIGHT) {
1231		BUG_ON(index == 0);
1232		index--;
1233	}
1234
1235	ocfs2_rotate_refcount_rec_left(rb, index);
1236
1237	if (contig == REF_CONTIG_LEFTRIGHT)
1238		ocfs2_rotate_refcount_rec_left(rb, index);
1239}
1240
1241/*
1242 * Change the refcount indexed by "index" in ref_bh.
1243 * If refcount reaches 0, remove it.
1244 */
1245static int ocfs2_change_refcount_rec(handle_t *handle,
1246				     struct ocfs2_caching_info *ci,
1247				     struct buffer_head *ref_leaf_bh,
1248				     int index, int merge, int change)
1249{
1250	int ret;
1251	struct ocfs2_refcount_block *rb =
1252			(struct ocfs2_refcount_block *)ref_leaf_bh->b_data;
1253	struct ocfs2_refcount_list *rl = &rb->rf_records;
1254	struct ocfs2_refcount_rec *rec = &rl->rl_recs[index];
1255
1256	ret = ocfs2_journal_access_rb(handle, ci, ref_leaf_bh,
1257				      OCFS2_JOURNAL_ACCESS_WRITE);
1258	if (ret) {
1259		mlog_errno(ret);
1260		goto out;
1261	}
1262
1263	trace_ocfs2_change_refcount_rec(
1264		(unsigned long long)ocfs2_metadata_cache_owner(ci),
1265		index, le32_to_cpu(rec->r_refcount), change);
1266	le32_add_cpu(&rec->r_refcount, change);
1267
1268	if (!rec->r_refcount) {
1269		if (index != le16_to_cpu(rl->rl_used) - 1) {
1270			memmove(rec, rec + 1,
1271				(le16_to_cpu(rl->rl_used) - index - 1) *
1272				sizeof(struct ocfs2_refcount_rec));
1273			memset(&rl->rl_recs[le16_to_cpu(rl->rl_used) - 1],
1274			       0, sizeof(struct ocfs2_refcount_rec));
1275		}
1276
1277		le16_add_cpu(&rl->rl_used, -1);
1278	} else if (merge)
1279		ocfs2_refcount_rec_merge(rb, index);
1280
1281	ocfs2_journal_dirty(handle, ref_leaf_bh);
1282out:
1283	return ret;
1284}
1285
1286static int ocfs2_expand_inline_ref_root(handle_t *handle,
1287					struct ocfs2_caching_info *ci,
1288					struct buffer_head *ref_root_bh,
1289					struct buffer_head **ref_leaf_bh,
1290					struct ocfs2_alloc_context *meta_ac)
1291{
1292	int ret;
1293	u16 suballoc_bit_start;
1294	u32 num_got;
1295	u64 suballoc_loc, blkno;
1296	struct super_block *sb = ocfs2_metadata_cache_get_super(ci);
1297	struct buffer_head *new_bh = NULL;
1298	struct ocfs2_refcount_block *new_rb;
1299	struct ocfs2_refcount_block *root_rb =
1300			(struct ocfs2_refcount_block *)ref_root_bh->b_data;
1301
1302	ret = ocfs2_journal_access_rb(handle, ci, ref_root_bh,
1303				      OCFS2_JOURNAL_ACCESS_WRITE);
1304	if (ret) {
1305		mlog_errno(ret);
1306		goto out;
1307	}
1308
1309	ret = ocfs2_claim_metadata(handle, meta_ac, 1, &suballoc_loc,
1310				   &suballoc_bit_start, &num_got,
1311				   &blkno);
1312	if (ret) {
1313		mlog_errno(ret);
1314		goto out;
1315	}
1316
1317	new_bh = sb_getblk(sb, blkno);
1318	if (new_bh == NULL) {
1319		ret = -ENOMEM;
1320		mlog_errno(ret);
1321		goto out;
1322	}
1323	ocfs2_set_new_buffer_uptodate(ci, new_bh);
1324
1325	ret = ocfs2_journal_access_rb(handle, ci, new_bh,
1326				      OCFS2_JOURNAL_ACCESS_CREATE);
1327	if (ret) {
1328		mlog_errno(ret);
1329		goto out;
1330	}
1331
1332	/*
1333	 * Initialize ocfs2_refcount_block.
1334	 * It should contain the same information as the old root.
1335	 * so just memcpy it and change the corresponding field.
1336	 */
1337	memcpy(new_bh->b_data, ref_root_bh->b_data, sb->s_blocksize);
1338
1339	new_rb = (struct ocfs2_refcount_block *)new_bh->b_data;
1340	new_rb->rf_suballoc_slot = cpu_to_le16(meta_ac->ac_alloc_slot);
1341	new_rb->rf_suballoc_loc = cpu_to_le64(suballoc_loc);
1342	new_rb->rf_suballoc_bit = cpu_to_le16(suballoc_bit_start);
1343	new_rb->rf_blkno = cpu_to_le64(blkno);
1344	new_rb->rf_cpos = cpu_to_le32(0);
1345	new_rb->rf_parent = cpu_to_le64(ref_root_bh->b_blocknr);
1346	new_rb->rf_flags = cpu_to_le32(OCFS2_REFCOUNT_LEAF_FL);
1347	ocfs2_journal_dirty(handle, new_bh);
1348
1349	/* Now change the root. */
1350	memset(&root_rb->rf_list, 0, sb->s_blocksize -
1351	       offsetof(struct ocfs2_refcount_block, rf_list));
1352	root_rb->rf_list.l_count = cpu_to_le16(ocfs2_extent_recs_per_rb(sb));
1353	root_rb->rf_clusters = cpu_to_le32(1);
1354	root_rb->rf_list.l_next_free_rec = cpu_to_le16(1);
1355	root_rb->rf_list.l_recs[0].e_blkno = cpu_to_le64(blkno);
1356	root_rb->rf_list.l_recs[0].e_leaf_clusters = cpu_to_le16(1);
1357	root_rb->rf_flags = cpu_to_le32(OCFS2_REFCOUNT_TREE_FL);
1358
1359	ocfs2_journal_dirty(handle, ref_root_bh);
1360
1361	trace_ocfs2_expand_inline_ref_root((unsigned long long)blkno,
1362		le16_to_cpu(new_rb->rf_records.rl_used));
1363
1364	*ref_leaf_bh = new_bh;
1365	new_bh = NULL;
1366out:
1367	brelse(new_bh);
1368	return ret;
1369}
1370
1371static int ocfs2_refcount_rec_no_intersect(struct ocfs2_refcount_rec *prev,
1372					   struct ocfs2_refcount_rec *next)
1373{
1374	if (ocfs2_get_ref_rec_low_cpos(prev) + le32_to_cpu(prev->r_clusters) <=
1375		ocfs2_get_ref_rec_low_cpos(next))
1376		return 1;
1377
1378	return 0;
1379}
1380
1381static int cmp_refcount_rec_by_low_cpos(const void *a, const void *b)
1382{
1383	const struct ocfs2_refcount_rec *l = a, *r = b;
1384	u32 l_cpos = ocfs2_get_ref_rec_low_cpos(l);
1385	u32 r_cpos = ocfs2_get_ref_rec_low_cpos(r);
1386
1387	if (l_cpos > r_cpos)
1388		return 1;
1389	if (l_cpos < r_cpos)
1390		return -1;
1391	return 0;
1392}
1393
1394static int cmp_refcount_rec_by_cpos(const void *a, const void *b)
1395{
1396	const struct ocfs2_refcount_rec *l = a, *r = b;
1397	u64 l_cpos = le64_to_cpu(l->r_cpos);
1398	u64 r_cpos = le64_to_cpu(r->r_cpos);
1399
1400	if (l_cpos > r_cpos)
1401		return 1;
1402	if (l_cpos < r_cpos)
1403		return -1;
1404	return 0;
1405}
1406
1407static void swap_refcount_rec(void *a, void *b, int size)
1408{
1409	struct ocfs2_refcount_rec *l = a, *r = b, tmp;
1410
1411	tmp = *l;
1412	*l = *r;
1413	*r = tmp;
1414}
1415
1416/*
1417 * The refcount cpos are ordered by their 64bit cpos,
1418 * But we will use the low 32 bit to be the e_cpos in the b-tree.
1419 * So we need to make sure that this pos isn't intersected with others.
1420 *
1421 * Note: The refcount block is already sorted by their low 32 bit cpos,
1422 *       So just try the middle pos first, and we will exit when we find
1423 *       the good position.
1424 */
1425static int ocfs2_find_refcount_split_pos(struct ocfs2_refcount_list *rl,
1426					 u32 *split_pos, int *split_index)
1427{
1428	int num_used = le16_to_cpu(rl->rl_used);
1429	int delta, middle = num_used / 2;
1430
1431	for (delta = 0; delta < middle; delta++) {
1432		/* Let's check delta earlier than middle */
1433		if (ocfs2_refcount_rec_no_intersect(
1434					&rl->rl_recs[middle - delta - 1],
1435					&rl->rl_recs[middle - delta])) {
1436			*split_index = middle - delta;
1437			break;
1438		}
1439
1440		/* For even counts, don't walk off the end */
1441		if ((middle + delta + 1) == num_used)
1442			continue;
1443
1444		/* Now try delta past middle */
1445		if (ocfs2_refcount_rec_no_intersect(
1446					&rl->rl_recs[middle + delta],
1447					&rl->rl_recs[middle + delta + 1])) {
1448			*split_index = middle + delta + 1;
1449			break;
1450		}
1451	}
1452
1453	if (delta >= middle)
1454		return -ENOSPC;
1455
1456	*split_pos = ocfs2_get_ref_rec_low_cpos(&rl->rl_recs[*split_index]);
1457	return 0;
1458}
1459
1460static int ocfs2_divide_leaf_refcount_block(struct buffer_head *ref_leaf_bh,
1461					    struct buffer_head *new_bh,
1462					    u32 *split_cpos)
1463{
1464	int split_index = 0, num_moved, ret;
1465	u32 cpos = 0;
1466	struct ocfs2_refcount_block *rb =
1467			(struct ocfs2_refcount_block *)ref_leaf_bh->b_data;
1468	struct ocfs2_refcount_list *rl = &rb->rf_records;
1469	struct ocfs2_refcount_block *new_rb =
1470			(struct ocfs2_refcount_block *)new_bh->b_data;
1471	struct ocfs2_refcount_list *new_rl = &new_rb->rf_records;
1472
1473	trace_ocfs2_divide_leaf_refcount_block(
1474		(unsigned long long)ref_leaf_bh->b_blocknr,
1475		le16_to_cpu(rl->rl_count), le16_to_cpu(rl->rl_used));
1476
1477	/*
1478	 * XXX: Improvement later.
1479	 * If we know all the high 32 bit cpos is the same, no need to sort.
1480	 *
1481	 * In order to make the whole process safe, we do:
1482	 * 1. sort the entries by their low 32 bit cpos first so that we can
1483	 *    find the split cpos easily.
1484	 * 2. call ocfs2_insert_extent to insert the new refcount block.
1485	 * 3. move the refcount rec to the new block.
1486	 * 4. sort the entries by their 64 bit cpos.
1487	 * 5. dirty the new_rb and rb.
1488	 */
1489	sort(&rl->rl_recs, le16_to_cpu(rl->rl_used),
1490	     sizeof(struct ocfs2_refcount_rec),
1491	     cmp_refcount_rec_by_low_cpos, swap_refcount_rec);
1492
1493	ret = ocfs2_find_refcount_split_pos(rl, &cpos, &split_index);
1494	if (ret) {
1495		mlog_errno(ret);
1496		return ret;
1497	}
1498
1499	new_rb->rf_cpos = cpu_to_le32(cpos);
1500
1501	/* move refcount records starting from split_index to the new block. */
1502	num_moved = le16_to_cpu(rl->rl_used) - split_index;
1503	memcpy(new_rl->rl_recs, &rl->rl_recs[split_index],
1504	       num_moved * sizeof(struct ocfs2_refcount_rec));
1505
1506	/*ok, remove the entries we just moved over to the other block. */
1507	memset(&rl->rl_recs[split_index], 0,
1508	       num_moved * sizeof(struct ocfs2_refcount_rec));
1509
1510	/* change old and new rl_used accordingly. */
1511	le16_add_cpu(&rl->rl_used, -num_moved);
1512	new_rl->rl_used = cpu_to_le16(num_moved);
1513
1514	sort(&rl->rl_recs, le16_to_cpu(rl->rl_used),
1515	     sizeof(struct ocfs2_refcount_rec),
1516	     cmp_refcount_rec_by_cpos, swap_refcount_rec);
1517
1518	sort(&new_rl->rl_recs, le16_to_cpu(new_rl->rl_used),
1519	     sizeof(struct ocfs2_refcount_rec),
1520	     cmp_refcount_rec_by_cpos, swap_refcount_rec);
1521
1522	*split_cpos = cpos;
1523	return 0;
1524}
1525
1526static int ocfs2_new_leaf_refcount_block(handle_t *handle,
1527					 struct ocfs2_caching_info *ci,
1528					 struct buffer_head *ref_root_bh,
1529					 struct buffer_head *ref_leaf_bh,
1530					 struct ocfs2_alloc_context *meta_ac)
1531{
1532	int ret;
1533	u16 suballoc_bit_start;
1534	u32 num_got, new_cpos;
1535	u64 suballoc_loc, blkno;
1536	struct super_block *sb = ocfs2_metadata_cache_get_super(ci);
1537	struct ocfs2_refcount_block *root_rb =
1538			(struct ocfs2_refcount_block *)ref_root_bh->b_data;
1539	struct buffer_head *new_bh = NULL;
1540	struct ocfs2_refcount_block *new_rb;
1541	struct ocfs2_extent_tree ref_et;
1542
1543	BUG_ON(!(le32_to_cpu(root_rb->rf_flags) & OCFS2_REFCOUNT_TREE_FL));
1544
1545	ret = ocfs2_journal_access_rb(handle, ci, ref_root_bh,
1546				      OCFS2_JOURNAL_ACCESS_WRITE);
1547	if (ret) {
1548		mlog_errno(ret);
1549		goto out;
1550	}
1551
1552	ret = ocfs2_journal_access_rb(handle, ci, ref_leaf_bh,
1553				      OCFS2_JOURNAL_ACCESS_WRITE);
1554	if (ret) {
1555		mlog_errno(ret);
1556		goto out;
1557	}
1558
1559	ret = ocfs2_claim_metadata(handle, meta_ac, 1, &suballoc_loc,
1560				   &suballoc_bit_start, &num_got,
1561				   &blkno);
1562	if (ret) {
1563		mlog_errno(ret);
1564		goto out;
1565	}
1566
1567	new_bh = sb_getblk(sb, blkno);
1568	if (new_bh == NULL) {
1569		ret = -ENOMEM;
1570		mlog_errno(ret);
1571		goto out;
1572	}
1573	ocfs2_set_new_buffer_uptodate(ci, new_bh);
1574
1575	ret = ocfs2_journal_access_rb(handle, ci, new_bh,
1576				      OCFS2_JOURNAL_ACCESS_CREATE);
1577	if (ret) {
1578		mlog_errno(ret);
1579		goto out;
1580	}
1581
1582	/* Initialize ocfs2_refcount_block. */
1583	new_rb = (struct ocfs2_refcount_block *)new_bh->b_data;
1584	memset(new_rb, 0, sb->s_blocksize);
1585	strcpy((void *)new_rb, OCFS2_REFCOUNT_BLOCK_SIGNATURE);
1586	new_rb->rf_suballoc_slot = cpu_to_le16(meta_ac->ac_alloc_slot);
1587	new_rb->rf_suballoc_loc = cpu_to_le64(suballoc_loc);
1588	new_rb->rf_suballoc_bit = cpu_to_le16(suballoc_bit_start);
1589	new_rb->rf_fs_generation = cpu_to_le32(OCFS2_SB(sb)->fs_generation);
1590	new_rb->rf_blkno = cpu_to_le64(blkno);
1591	new_rb->rf_parent = cpu_to_le64(ref_root_bh->b_blocknr);
1592	new_rb->rf_flags = cpu_to_le32(OCFS2_REFCOUNT_LEAF_FL);
1593	new_rb->rf_records.rl_count =
1594				cpu_to_le16(ocfs2_refcount_recs_per_rb(sb));
1595	new_rb->rf_generation = root_rb->rf_generation;
1596
1597	ret = ocfs2_divide_leaf_refcount_block(ref_leaf_bh, new_bh, &new_cpos);
1598	if (ret) {
1599		mlog_errno(ret);
1600		goto out;
1601	}
1602
1603	ocfs2_journal_dirty(handle, ref_leaf_bh);
1604	ocfs2_journal_dirty(handle, new_bh);
1605
1606	ocfs2_init_refcount_extent_tree(&ref_et, ci, ref_root_bh);
1607
1608	trace_ocfs2_new_leaf_refcount_block(
1609			(unsigned long long)new_bh->b_blocknr, new_cpos);
1610
1611	/* Insert the new leaf block with the specific offset cpos. */
1612	ret = ocfs2_insert_extent(handle, &ref_et, new_cpos, new_bh->b_blocknr,
1613				  1, 0, meta_ac);
1614	if (ret)
1615		mlog_errno(ret);
1616
1617out:
1618	brelse(new_bh);
1619	return ret;
1620}
1621
1622static int ocfs2_expand_refcount_tree(handle_t *handle,
1623				      struct ocfs2_caching_info *ci,
1624				      struct buffer_head *ref_root_bh,
1625				      struct buffer_head *ref_leaf_bh,
1626				      struct ocfs2_alloc_context *meta_ac)
1627{
1628	int ret;
1629	struct buffer_head *expand_bh = NULL;
1630
1631	if (ref_root_bh == ref_leaf_bh) {
1632		/*
1633		 * the old root bh hasn't been expanded to a b-tree,
1634		 * so expand it first.
1635		 */
1636		ret = ocfs2_expand_inline_ref_root(handle, ci, ref_root_bh,
1637						   &expand_bh, meta_ac);
1638		if (ret) {
1639			mlog_errno(ret);
1640			goto out;
1641		}
1642	} else {
1643		expand_bh = ref_leaf_bh;
1644		get_bh(expand_bh);
1645	}
1646
1647
1648	/* Now add a new refcount block into the tree.*/
1649	ret = ocfs2_new_leaf_refcount_block(handle, ci, ref_root_bh,
1650					    expand_bh, meta_ac);
1651	if (ret)
1652		mlog_errno(ret);
1653out:
1654	brelse(expand_bh);
1655	return ret;
1656}
1657
1658/*
1659 * Adjust the extent rec in b-tree representing ref_leaf_bh.
1660 *
1661 * Only called when we have inserted a new refcount rec at index 0
1662 * which means ocfs2_extent_rec.e_cpos may need some change.
1663 */
1664static int ocfs2_adjust_refcount_rec(handle_t *handle,
1665				     struct ocfs2_caching_info *ci,
1666				     struct buffer_head *ref_root_bh,
1667				     struct buffer_head *ref_leaf_bh,
1668				     struct ocfs2_refcount_rec *rec)
1669{
1670	int ret = 0, i;
1671	u32 new_cpos, old_cpos;
1672	struct ocfs2_path *path = NULL;
1673	struct ocfs2_extent_tree et;
1674	struct ocfs2_refcount_block *rb =
1675		(struct ocfs2_refcount_block *)ref_root_bh->b_data;
1676	struct ocfs2_extent_list *el;
1677
1678	if (!(le32_to_cpu(rb->rf_flags) & OCFS2_REFCOUNT_TREE_FL))
1679		goto out;
1680
1681	rb = (struct ocfs2_refcount_block *)ref_leaf_bh->b_data;
1682	old_cpos = le32_to_cpu(rb->rf_cpos);
1683	new_cpos = le64_to_cpu(rec->r_cpos) & OCFS2_32BIT_POS_MASK;
1684	if (old_cpos <= new_cpos)
1685		goto out;
1686
1687	ocfs2_init_refcount_extent_tree(&et, ci, ref_root_bh);
1688
1689	path = ocfs2_new_path_from_et(&et);
1690	if (!path) {
1691		ret = -ENOMEM;
1692		mlog_errno(ret);
1693		goto out;
1694	}
1695
1696	ret = ocfs2_find_path(ci, path, old_cpos);
1697	if (ret) {
1698		mlog_errno(ret);
1699		goto out;
1700	}
1701
1702	/*
1703	 * 2 more credits, one for the leaf refcount block, one for
1704	 * the extent block contains the extent rec.
1705	 */
1706	ret = ocfs2_extend_trans(handle, 2);
1707	if (ret < 0) {
1708		mlog_errno(ret);
1709		goto out;
1710	}
1711
1712	ret = ocfs2_journal_access_rb(handle, ci, ref_leaf_bh,
1713				      OCFS2_JOURNAL_ACCESS_WRITE);
1714	if (ret < 0) {
1715		mlog_errno(ret);
1716		goto out;
1717	}
1718
1719	ret = ocfs2_journal_access_eb(handle, ci, path_leaf_bh(path),
1720				      OCFS2_JOURNAL_ACCESS_WRITE);
1721	if (ret < 0) {
1722		mlog_errno(ret);
1723		goto out;
1724	}
1725
1726	/* change the leaf extent block first. */
1727	el = path_leaf_el(path);
1728
1729	for (i = 0; i < le16_to_cpu(el->l_next_free_rec); i++)
1730		if (le32_to_cpu(el->l_recs[i].e_cpos) == old_cpos)
1731			break;
1732
1733	BUG_ON(i == le16_to_cpu(el->l_next_free_rec));
1734
1735	el->l_recs[i].e_cpos = cpu_to_le32(new_cpos);
1736
1737	/* change the r_cpos in the leaf block. */
1738	rb->rf_cpos = cpu_to_le32(new_cpos);
1739
1740	ocfs2_journal_dirty(handle, path_leaf_bh(path));
1741	ocfs2_journal_dirty(handle, ref_leaf_bh);
1742
1743out:
1744	ocfs2_free_path(path);
1745	return ret;
1746}
1747
1748static int ocfs2_insert_refcount_rec(handle_t *handle,
1749				     struct ocfs2_caching_info *ci,
1750				     struct buffer_head *ref_root_bh,
1751				     struct buffer_head *ref_leaf_bh,
1752				     struct ocfs2_refcount_rec *rec,
1753				     int index, int merge,
1754				     struct ocfs2_alloc_context *meta_ac)
1755{
1756	int ret;
1757	struct ocfs2_refcount_block *rb =
1758			(struct ocfs2_refcount_block *)ref_leaf_bh->b_data;
1759	struct ocfs2_refcount_list *rf_list = &rb->rf_records;
1760	struct buffer_head *new_bh = NULL;
1761
1762	BUG_ON(le32_to_cpu(rb->rf_flags) & OCFS2_REFCOUNT_TREE_FL);
1763
1764	if (rf_list->rl_used == rf_list->rl_count) {
1765		u64 cpos = le64_to_cpu(rec->r_cpos);
1766		u32 len = le32_to_cpu(rec->r_clusters);
1767
1768		ret = ocfs2_expand_refcount_tree(handle, ci, ref_root_bh,
1769						 ref_leaf_bh, meta_ac);
1770		if (ret) {
1771			mlog_errno(ret);
1772			goto out;
1773		}
1774
1775		ret = ocfs2_get_refcount_rec(ci, ref_root_bh,
1776					     cpos, len, NULL, &index,
1777					     &new_bh);
1778		if (ret) {
1779			mlog_errno(ret);
1780			goto out;
1781		}
1782
1783		ref_leaf_bh = new_bh;
1784		rb = (struct ocfs2_refcount_block *)ref_leaf_bh->b_data;
1785		rf_list = &rb->rf_records;
1786	}
1787
1788	ret = ocfs2_journal_access_rb(handle, ci, ref_leaf_bh,
1789				      OCFS2_JOURNAL_ACCESS_WRITE);
1790	if (ret) {
1791		mlog_errno(ret);
1792		goto out;
1793	}
1794
1795	if (index < le16_to_cpu(rf_list->rl_used))
1796		memmove(&rf_list->rl_recs[index + 1],
1797			&rf_list->rl_recs[index],
1798			(le16_to_cpu(rf_list->rl_used) - index) *
1799			 sizeof(struct ocfs2_refcount_rec));
1800
1801	trace_ocfs2_insert_refcount_rec(
1802		(unsigned long long)ref_leaf_bh->b_blocknr, index,
1803		(unsigned long long)le64_to_cpu(rec->r_cpos),
1804		le32_to_cpu(rec->r_clusters), le32_to_cpu(rec->r_refcount));
1805
1806	rf_list->rl_recs[index] = *rec;
1807
1808	le16_add_cpu(&rf_list->rl_used, 1);
1809
1810	if (merge)
1811		ocfs2_refcount_rec_merge(rb, index);
1812
1813	ocfs2_journal_dirty(handle, ref_leaf_bh);
1814
1815	if (index == 0) {
1816		ret = ocfs2_adjust_refcount_rec(handle, ci,
1817						ref_root_bh,
1818						ref_leaf_bh, rec);
1819		if (ret)
1820			mlog_errno(ret);
1821	}
1822out:
1823	brelse(new_bh);
1824	return ret;
1825}
1826
1827/*
1828 * Split the refcount_rec indexed by "index" in ref_leaf_bh.
1829 * This is much simple than our b-tree code.
1830 * split_rec is the new refcount rec we want to insert.
1831 * If split_rec->r_refcount > 0, we are changing the refcount(in case we
1832 * increase refcount or decrease a refcount to non-zero).
1833 * If split_rec->r_refcount == 0, we are punching a hole in current refcount
1834 * rec( in case we decrease a refcount to zero).
1835 */
1836static int ocfs2_split_refcount_rec(handle_t *handle,
1837				    struct ocfs2_caching_info *ci,
1838				    struct buffer_head *ref_root_bh,
1839				    struct buffer_head *ref_leaf_bh,
1840				    struct ocfs2_refcount_rec *split_rec,
1841				    int index, int merge,
1842				    struct ocfs2_alloc_context *meta_ac,
1843				    struct ocfs2_cached_dealloc_ctxt *dealloc)
1844{
1845	int ret, recs_need;
1846	u32 len;
1847	struct ocfs2_refcount_block *rb =
1848			(struct ocfs2_refcount_block *)ref_leaf_bh->b_data;
1849	struct ocfs2_refcount_list *rf_list = &rb->rf_records;
1850	struct ocfs2_refcount_rec *orig_rec = &rf_list->rl_recs[index];
1851	struct ocfs2_refcount_rec *tail_rec = NULL;
1852	struct buffer_head *new_bh = NULL;
1853
1854	BUG_ON(le32_to_cpu(rb->rf_flags) & OCFS2_REFCOUNT_TREE_FL);
1855
1856	trace_ocfs2_split_refcount_rec(le64_to_cpu(orig_rec->r_cpos),
1857		le32_to_cpu(orig_rec->r_clusters),
1858		le32_to_cpu(orig_rec->r_refcount),
1859		le64_to_cpu(split_rec->r_cpos),
1860		le32_to_cpu(split_rec->r_clusters),
1861		le32_to_cpu(split_rec->r_refcount));
1862
1863	/*
1864	 * If we just need to split the header or tail clusters,
1865	 * no more recs are needed, just split is OK.
1866	 * Otherwise we at least need one new recs.
1867	 */
1868	if (!split_rec->r_refcount &&
1869	    (split_rec->r_cpos == orig_rec->r_cpos ||
1870	     le64_to_cpu(split_rec->r_cpos) +
1871	     le32_to_cpu(split_rec->r_clusters) ==
1872	     le64_to_cpu(orig_rec->r_cpos) + le32_to_cpu(orig_rec->r_clusters)))
1873		recs_need = 0;
1874	else
1875		recs_need = 1;
1876
1877	/*
1878	 * We need one more rec if we split in the middle and the new rec have
1879	 * some refcount in it.
1880	 */
1881	if (split_rec->r_refcount &&
1882	    (split_rec->r_cpos != orig_rec->r_cpos &&
1883	     le64_to_cpu(split_rec->r_cpos) +
1884	     le32_to_cpu(split_rec->r_clusters) !=
1885	     le64_to_cpu(orig_rec->r_cpos) + le32_to_cpu(orig_rec->r_clusters)))
1886		recs_need++;
1887
1888	/* If the leaf block don't have enough record, expand it. */
1889	if (le16_to_cpu(rf_list->rl_used) + recs_need >
1890					 le16_to_cpu(rf_list->rl_count)) {
1891		struct ocfs2_refcount_rec tmp_rec;
1892		u64 cpos = le64_to_cpu(orig_rec->r_cpos);
1893		len = le32_to_cpu(orig_rec->r_clusters);
1894		ret = ocfs2_expand_refcount_tree(handle, ci, ref_root_bh,
1895						 ref_leaf_bh, meta_ac);
1896		if (ret) {
1897			mlog_errno(ret);
1898			goto out;
1899		}
1900
1901		/*
1902		 * We have to re-get it since now cpos may be moved to
1903		 * another leaf block.
1904		 */
1905		ret = ocfs2_get_refcount_rec(ci, ref_root_bh,
1906					     cpos, len, &tmp_rec, &index,
1907					     &new_bh);
1908		if (ret) {
1909			mlog_errno(ret);
1910			goto out;
1911		}
1912
1913		ref_leaf_bh = new_bh;
1914		rb = (struct ocfs2_refcount_block *)ref_leaf_bh->b_data;
1915		rf_list = &rb->rf_records;
1916		orig_rec = &rf_list->rl_recs[index];
1917	}
1918
1919	ret = ocfs2_journal_access_rb(handle, ci, ref_leaf_bh,
1920				      OCFS2_JOURNAL_ACCESS_WRITE);
1921	if (ret) {
1922		mlog_errno(ret);
1923		goto out;
1924	}
1925
1926	/*
1927	 * We have calculated out how many new records we need and store
1928	 * in recs_need, so spare enough space first by moving the records
1929	 * after "index" to the end.
1930	 */
1931	if (index != le16_to_cpu(rf_list->rl_used) - 1)
1932		memmove(&rf_list->rl_recs[index + 1 + recs_need],
1933			&rf_list->rl_recs[index + 1],
1934			(le16_to_cpu(rf_list->rl_used) - index - 1) *
1935			 sizeof(struct ocfs2_refcount_rec));
1936
1937	len = (le64_to_cpu(orig_rec->r_cpos) +
1938	      le32_to_cpu(orig_rec->r_clusters)) -
1939	      (le64_to_cpu(split_rec->r_cpos) +
1940	      le32_to_cpu(split_rec->r_clusters));
1941
1942	/*
1943	 * If we have "len", the we will split in the tail and move it
1944	 * to the end of the space we have just spared.
1945	 */
1946	if (len) {
1947		tail_rec = &rf_list->rl_recs[index + recs_need];
1948
1949		memcpy(tail_rec, orig_rec, sizeof(struct ocfs2_refcount_rec));
1950		le64_add_cpu(&tail_rec->r_cpos,
1951			     le32_to_cpu(tail_rec->r_clusters) - len);
1952		tail_rec->r_clusters = cpu_to_le32(len);
1953	}
1954
1955	/*
1956	 * If the split pos isn't the same as the original one, we need to
1957	 * split in the head.
1958	 *
1959	 * Note: We have the chance that split_rec.r_refcount = 0,
1960	 * recs_need = 0 and len > 0, which means we just cut the head from
1961	 * the orig_rec and in that case we have done some modification in
1962	 * orig_rec above, so the check for r_cpos is faked.
1963	 */
1964	if (split_rec->r_cpos != orig_rec->r_cpos && tail_rec != orig_rec) {
1965		len = le64_to_cpu(split_rec->r_cpos) -
1966		      le64_to_cpu(orig_rec->r_cpos);
1967		orig_rec->r_clusters = cpu_to_le32(len);
1968		index++;
1969	}
1970
1971	le16_add_cpu(&rf_list->rl_used, recs_need);
1972
1973	if (split_rec->r_refcount) {
1974		rf_list->rl_recs[index] = *split_rec;
1975		trace_ocfs2_split_refcount_rec_insert(
1976			(unsigned long long)ref_leaf_bh->b_blocknr, index,
1977			(unsigned long long)le64_to_cpu(split_rec->r_cpos),
1978			le32_to_cpu(split_rec->r_clusters),
1979			le32_to_cpu(split_rec->r_refcount));
1980
1981		if (merge)
1982			ocfs2_refcount_rec_merge(rb, index);
1983	}
1984
1985	ocfs2_journal_dirty(handle, ref_leaf_bh);
1986
1987out:
1988	brelse(new_bh);
1989	return ret;
1990}
1991
1992static int __ocfs2_increase_refcount(handle_t *handle,
1993				     struct ocfs2_caching_info *ci,
1994				     struct buffer_head *ref_root_bh,
1995				     u64 cpos, u32 len, int merge,
1996				     struct ocfs2_alloc_context *meta_ac,
1997				     struct ocfs2_cached_dealloc_ctxt *dealloc)
1998{
1999	int ret = 0, index;
2000	struct buffer_head *ref_leaf_bh = NULL;
2001	struct ocfs2_refcount_rec rec;
2002	unsigned int set_len = 0;
2003
2004	trace_ocfs2_increase_refcount_begin(
2005	     (unsigned long long)ocfs2_metadata_cache_owner(ci),
2006	     (unsigned long long)cpos, len);
2007
2008	while (len) {
2009		ret = ocfs2_get_refcount_rec(ci, ref_root_bh,
2010					     cpos, len, &rec, &index,
2011					     &ref_leaf_bh);
2012		if (ret) {
2013			mlog_errno(ret);
2014			goto out;
2015		}
2016
2017		set_len = le32_to_cpu(rec.r_clusters);
2018
2019		/*
2020		 * Here we may meet with 3 situations:
2021		 *
2022		 * 1. If we find an already existing record, and the length
2023		 *    is the same, cool, we just need to increase the r_refcount
2024		 *    and it is OK.
2025		 * 2. If we find a hole, just insert it with r_refcount = 1.
2026		 * 3. If we are in the middle of one extent record, split
2027		 *    it.
2028		 */
2029		if (rec.r_refcount && le64_to_cpu(rec.r_cpos) == cpos &&
2030		    set_len <= len) {
2031			trace_ocfs2_increase_refcount_change(
2032				(unsigned long long)cpos, set_len,
2033				le32_to_cpu(rec.r_refcount));
2034			ret = ocfs2_change_refcount_rec(handle, ci,
2035							ref_leaf_bh, index,
2036							merge, 1);
2037			if (ret) {
2038				mlog_errno(ret);
2039				goto out;
2040			}
2041		} else if (!rec.r_refcount) {
2042			rec.r_refcount = cpu_to_le32(1);
2043
2044			trace_ocfs2_increase_refcount_insert(
2045			     (unsigned long long)le64_to_cpu(rec.r_cpos),
2046			     set_len);
2047			ret = ocfs2_insert_refcount_rec(handle, ci, ref_root_bh,
2048							ref_leaf_bh,
2049							&rec, index,
2050							merge, meta_ac);
2051			if (ret) {
2052				mlog_errno(ret);
2053				goto out;
2054			}
2055		} else  {
2056			set_len = min((u64)(cpos + len),
2057				      le64_to_cpu(rec.r_cpos) + set_len) - cpos;
2058			rec.r_cpos = cpu_to_le64(cpos);
2059			rec.r_clusters = cpu_to_le32(set_len);
2060			le32_add_cpu(&rec.r_refcount, 1);
2061
2062			trace_ocfs2_increase_refcount_split(
2063			     (unsigned long long)le64_to_cpu(rec.r_cpos),
2064			     set_len, le32_to_cpu(rec.r_refcount));
2065			ret = ocfs2_split_refcount_rec(handle, ci,
2066						       ref_root_bh, ref_leaf_bh,
2067						       &rec, index, merge,
2068						       meta_ac, dealloc);
2069			if (ret) {
2070				mlog_errno(ret);
2071				goto out;
2072			}
2073		}
2074
2075		cpos += set_len;
2076		len -= set_len;
2077		brelse(ref_leaf_bh);
2078		ref_leaf_bh = NULL;
2079	}
2080
2081out:
2082	brelse(ref_leaf_bh);
2083	return ret;
2084}
2085
2086static int ocfs2_remove_refcount_extent(handle_t *handle,
2087				struct ocfs2_caching_info *ci,
2088				struct buffer_head *ref_root_bh,
2089				struct buffer_head *ref_leaf_bh,
2090				struct ocfs2_alloc_context *meta_ac,
2091				struct ocfs2_cached_dealloc_ctxt *dealloc)
2092{
2093	int ret;
2094	struct super_block *sb = ocfs2_metadata_cache_get_super(ci);
2095	struct ocfs2_refcount_block *rb =
2096			(struct ocfs2_refcount_block *)ref_leaf_bh->b_data;
2097	struct ocfs2_extent_tree et;
2098
2099	BUG_ON(rb->rf_records.rl_used);
2100
2101	trace_ocfs2_remove_refcount_extent(
2102		(unsigned long long)ocfs2_metadata_cache_owner(ci),
2103		(unsigned long long)ref_leaf_bh->b_blocknr,
2104		le32_to_cpu(rb->rf_cpos));
2105
2106	ocfs2_init_refcount_extent_tree(&et, ci, ref_root_bh);
2107	ret = ocfs2_remove_extent(handle, &et, le32_to_cpu(rb->rf_cpos),
2108				  1, meta_ac, dealloc);
2109	if (ret) {
2110		mlog_errno(ret);
2111		goto out;
2112	}
2113
2114	ocfs2_remove_from_cache(ci, ref_leaf_bh);
2115
2116	/*
2117	 * add the freed block to the dealloc so that it will be freed
2118	 * when we run dealloc.
2119	 */
2120	ret = ocfs2_cache_block_dealloc(dealloc, EXTENT_ALLOC_SYSTEM_INODE,
2121					le16_to_cpu(rb->rf_suballoc_slot),
2122					le64_to_cpu(rb->rf_suballoc_loc),
2123					le64_to_cpu(rb->rf_blkno),
2124					le16_to_cpu(rb->rf_suballoc_bit));
2125	if (ret) {
2126		mlog_errno(ret);
2127		goto out;
2128	}
2129
2130	ret = ocfs2_journal_access_rb(handle, ci, ref_root_bh,
2131				      OCFS2_JOURNAL_ACCESS_WRITE);
2132	if (ret) {
2133		mlog_errno(ret);
2134		goto out;
2135	}
2136
2137	rb = (struct ocfs2_refcount_block *)ref_root_bh->b_data;
2138
2139	le32_add_cpu(&rb->rf_clusters, -1);
2140
2141	/*
2142	 * check whether we need to restore the root refcount block if
2143	 * there is no leaf extent block at atll.
2144	 */
2145	if (!rb->rf_list.l_next_free_rec) {
2146		BUG_ON(rb->rf_clusters);
2147
2148		trace_ocfs2_restore_refcount_block(
2149		     (unsigned long long)ref_root_bh->b_blocknr);
2150
2151		rb->rf_flags = 0;
2152		rb->rf_parent = 0;
2153		rb->rf_cpos = 0;
2154		memset(&rb->rf_records, 0, sb->s_blocksize -
2155		       offsetof(struct ocfs2_refcount_block, rf_records));
2156		rb->rf_records.rl_count =
2157				cpu_to_le16(ocfs2_refcount_recs_per_rb(sb));
2158	}
2159
2160	ocfs2_journal_dirty(handle, ref_root_bh);
2161
2162out:
2163	return ret;
2164}
2165
2166int ocfs2_increase_refcount(handle_t *handle,
2167			    struct ocfs2_caching_info *ci,
2168			    struct buffer_head *ref_root_bh,
2169			    u64 cpos, u32 len,
2170			    struct ocfs2_alloc_context *meta_ac,
2171			    struct ocfs2_cached_dealloc_ctxt *dealloc)
2172{
2173	return __ocfs2_increase_refcount(handle, ci, ref_root_bh,
2174					 cpos, len, 1,
2175					 meta_ac, dealloc);
2176}
2177
2178static int ocfs2_decrease_refcount_rec(handle_t *handle,
2179				struct ocfs2_caching_info *ci,
2180				struct buffer_head *ref_root_bh,
2181				struct buffer_head *ref_leaf_bh,
2182				int index, u64 cpos, unsigned int len,
2183				struct ocfs2_alloc_context *meta_ac,
2184				struct ocfs2_cached_dealloc_ctxt *dealloc)
2185{
2186	int ret;
2187	struct ocfs2_refcount_block *rb =
2188			(struct ocfs2_refcount_block *)ref_leaf_bh->b_data;
2189	struct ocfs2_refcount_rec *rec = &rb->rf_records.rl_recs[index];
2190
2191	BUG_ON(cpos < le64_to_cpu(rec->r_cpos));
2192	BUG_ON(cpos + len >
2193	       le64_to_cpu(rec->r_cpos) + le32_to_cpu(rec->r_clusters));
2194
2195	trace_ocfs2_decrease_refcount_rec(
2196		(unsigned long long)ocfs2_metadata_cache_owner(ci),
2197		(unsigned long long)cpos, len);
2198
2199	if (cpos == le64_to_cpu(rec->r_cpos) &&
2200	    len == le32_to_cpu(rec->r_clusters))
2201		ret = ocfs2_change_refcount_rec(handle, ci,
2202						ref_leaf_bh, index, 1, -1);
2203	else {
2204		struct ocfs2_refcount_rec split = *rec;
2205		split.r_cpos = cpu_to_le64(cpos);
2206		split.r_clusters = cpu_to_le32(len);
2207
2208		le32_add_cpu(&split.r_refcount, -1);
2209
2210		ret = ocfs2_split_refcount_rec(handle, ci,
2211					       ref_root_bh, ref_leaf_bh,
2212					       &split, index, 1,
2213					       meta_ac, dealloc);
2214	}
2215
2216	if (ret) {
2217		mlog_errno(ret);
2218		goto out;
2219	}
2220
2221	/* Remove the leaf refcount block if it contains no refcount record. */
2222	if (!rb->rf_records.rl_used && ref_leaf_bh != ref_root_bh) {
2223		ret = ocfs2_remove_refcount_extent(handle, ci, ref_root_bh,
2224						   ref_leaf_bh, meta_ac,
2225						   dealloc);
2226		if (ret)
2227			mlog_errno(ret);
2228	}
2229
2230out:
2231	return ret;
2232}
2233
2234static int __ocfs2_decrease_refcount(handle_t *handle,
2235				     struct ocfs2_caching_info *ci,
2236				     struct buffer_head *ref_root_bh,
2237				     u64 cpos, u32 len,
2238				     struct ocfs2_alloc_context *meta_ac,
2239				     struct ocfs2_cached_dealloc_ctxt *dealloc,
2240				     int delete)
2241{
2242	int ret = 0, index = 0;
2243	struct ocfs2_refcount_rec rec;
2244	unsigned int r_count = 0, r_len;
2245	struct super_block *sb = ocfs2_metadata_cache_get_super(ci);
2246	struct buffer_head *ref_leaf_bh = NULL;
2247
2248	trace_ocfs2_decrease_refcount(
2249		(unsigned long long)ocfs2_metadata_cache_owner(ci),
2250		(unsigned long long)cpos, len, delete);
2251
2252	while (len) {
2253		ret = ocfs2_get_refcount_rec(ci, ref_root_bh,
2254					     cpos, len, &rec, &index,
2255					     &ref_leaf_bh);
2256		if (ret) {
2257			mlog_errno(ret);
2258			goto out;
2259		}
2260
2261		r_count = le32_to_cpu(rec.r_refcount);
2262		BUG_ON(r_count == 0);
2263		if (!delete)
2264			BUG_ON(r_count > 1);
2265
2266		r_len = min((u64)(cpos + len), le64_to_cpu(rec.r_cpos) +
2267			      le32_to_cpu(rec.r_clusters)) - cpos;
2268
2269		ret = ocfs2_decrease_refcount_rec(handle, ci, ref_root_bh,
2270						  ref_leaf_bh, index,
2271						  cpos, r_len,
2272						  meta_ac, dealloc);
2273		if (ret) {
2274			mlog_errno(ret);
2275			goto out;
2276		}
2277
2278		if (le32_to_cpu(rec.r_refcount) == 1 && delete) {
2279			ret = ocfs2_cache_cluster_dealloc(dealloc,
2280					  ocfs2_clusters_to_blocks(sb, cpos),
2281							  r_len);
2282			if (ret) {
2283				mlog_errno(ret);
2284				goto out;
2285			}
2286		}
2287
2288		cpos += r_len;
2289		len -= r_len;
2290		brelse(ref_leaf_bh);
2291		ref_leaf_bh = NULL;
2292	}
2293
2294out:
2295	brelse(ref_leaf_bh);
2296	return ret;
2297}
2298
2299/* Caller must hold refcount tree lock. */
2300int ocfs2_decrease_refcount(struct inode *inode,
2301			    handle_t *handle, u32 cpos, u32 len,
2302			    struct ocfs2_alloc_context *meta_ac,
2303			    struct ocfs2_cached_dealloc_ctxt *dealloc,
2304			    int delete)
2305{
2306	int ret;
2307	u64 ref_blkno;
2308	struct ocfs2_inode_info *oi = OCFS2_I(inode);
2309	struct buffer_head *ref_root_bh = NULL;
2310	struct ocfs2_refcount_tree *tree;
2311
2312	BUG_ON(!(oi->ip_dyn_features & OCFS2_HAS_REFCOUNT_FL));
2313
2314	ret = ocfs2_get_refcount_block(inode, &ref_blkno);
2315	if (ret) {
2316		mlog_errno(ret);
2317		goto out;
2318	}
2319
2320	ret = ocfs2_get_refcount_tree(OCFS2_SB(inode->i_sb), ref_blkno, &tree);
2321	if (ret) {
2322		mlog_errno(ret);
2323		goto out;
2324	}
2325
2326	ret = ocfs2_read_refcount_block(&tree->rf_ci, tree->rf_blkno,
2327					&ref_root_bh);
2328	if (ret) {
2329		mlog_errno(ret);
2330		goto out;
2331	}
2332
2333	ret = __ocfs2_decrease_refcount(handle, &tree->rf_ci, ref_root_bh,
2334					cpos, len, meta_ac, dealloc, delete);
2335	if (ret)
2336		mlog_errno(ret);
2337out:
2338	brelse(ref_root_bh);
2339	return ret;
2340}
2341
2342/*
2343 * Mark the already-existing extent at cpos as refcounted for len clusters.
2344 * This adds the refcount extent flag.
2345 *
2346 * If the existing extent is larger than the request, initiate a
2347 * split. An attempt will be made at merging with adjacent extents.
2348 *
2349 * The caller is responsible for passing down meta_ac if we'll need it.
2350 */
2351static int ocfs2_mark_extent_refcounted(struct inode *inode,
2352				struct ocfs2_extent_tree *et,
2353				handle_t *handle, u32 cpos,
2354				u32 len, u32 phys,
2355				struct ocfs2_alloc_context *meta_ac,
2356				struct ocfs2_cached_dealloc_ctxt *dealloc)
2357{
2358	int ret;
2359
2360	trace_ocfs2_mark_extent_refcounted(OCFS2_I(inode)->ip_blkno,
2361					   cpos, len, phys);
2362
2363	if (!ocfs2_refcount_tree(OCFS2_SB(inode->i_sb))) {
2364		ocfs2_error(inode->i_sb, "Inode %lu want to use refcount "
2365			    "tree, but the feature bit is not set in the "
2366			    "super block.", inode->i_ino);
2367		ret = -EROFS;
2368		goto out;
2369	}
2370
2371	ret = ocfs2_change_extent_flag(handle, et, cpos,
2372				       len, phys, meta_ac, dealloc,
2373				       OCFS2_EXT_REFCOUNTED, 0);
2374	if (ret)
2375		mlog_errno(ret);
2376
2377out:
2378	return ret;
2379}
2380
2381/*
2382 * Given some contiguous physical clusters, calculate what we need
2383 * for modifying their refcount.
2384 */
2385static int ocfs2_calc_refcount_meta_credits(struct super_block *sb,
2386					    struct ocfs2_caching_info *ci,
2387					    struct buffer_head *ref_root_bh,
2388					    u64 start_cpos,
2389					    u32 clusters,
2390					    int *meta_add,
2391					    int *credits)
2392{
2393	int ret = 0, index, ref_blocks = 0, recs_add = 0;
2394	u64 cpos = start_cpos;
2395	struct ocfs2_refcount_block *rb;
2396	struct ocfs2_refcount_rec rec;
2397	struct buffer_head *ref_leaf_bh = NULL, *prev_bh = NULL;
2398	u32 len;
2399
2400	while (clusters) {
2401		ret = ocfs2_get_refcount_rec(ci, ref_root_bh,
2402					     cpos, clusters, &rec,
2403					     &index, &ref_leaf_bh);
2404		if (ret) {
2405			mlog_errno(ret);
2406			goto out;
2407		}
2408
2409		if (ref_leaf_bh != prev_bh) {
2410			/*
2411			 * Now we encounter a new leaf block, so calculate
2412			 * whether we need to extend the old leaf.
2413			 */
2414			if (prev_bh) {
2415				rb = (struct ocfs2_refcount_block *)
2416							prev_bh->b_data;
2417
2418				if (le16_to_cpu(rb->rf_records.rl_used) +
2419				    recs_add >
2420				    le16_to_cpu(rb->rf_records.rl_count))
2421					ref_blocks++;
2422			}
2423
2424			recs_add = 0;
2425			*credits += 1;
2426			brelse(prev_bh);
2427			prev_bh = ref_leaf_bh;
2428			get_bh(prev_bh);
2429		}
2430
2431		trace_ocfs2_calc_refcount_meta_credits_iterate(
2432				recs_add, (unsigned long long)cpos, clusters,
2433				(unsigned long long)le64_to_cpu(rec.r_cpos),
2434				le32_to_cpu(rec.r_clusters),
2435				le32_to_cpu(rec.r_refcount), index);
2436
2437		len = min((u64)cpos + clusters, le64_to_cpu(rec.r_cpos) +
2438			  le32_to_cpu(rec.r_clusters)) - cpos;
2439		/*
2440		 * We record all the records which will be inserted to the
2441		 * same refcount block, so that we can tell exactly whether
2442		 * we need a new refcount block or not.
2443		 *
2444		 * If we will insert a new one, this is easy and only happens
2445		 * during adding refcounted flag to the extent, so we don't
2446		 * have a chance of spliting. We just need one record.
2447		 *
2448		 * If the refcount rec already exists, that would be a little
2449		 * complicated. we may have to:
2450		 * 1) split at the beginning if the start pos isn't aligned.
2451		 *    we need 1 more record in this case.
2452		 * 2) split int the end if the end pos isn't aligned.
2453		 *    we need 1 more record in this case.
2454		 * 3) split in the middle because of file system fragmentation.
2455		 *    we need 2 more records in this case(we can't detect this
2456		 *    beforehand, so always think of the worst case).
2457		 */
2458		if (rec.r_refcount) {
2459			recs_add += 2;
2460			/* Check whether we need a split at the beginning. */
2461			if (cpos == start_cpos &&
2462			    cpos != le64_to_cpu(rec.r_cpos))
2463				recs_add++;
2464
2465			/* Check whether we need a split in the end. */
2466			if (cpos + clusters < le64_to_cpu(rec.r_cpos) +
2467			    le32_to_cpu(rec.r_clusters))
2468				recs_add++;
2469		} else
2470			recs_add++;
2471
2472		brelse(ref_leaf_bh);
2473		ref_leaf_bh = NULL;
2474		clusters -= len;
2475		cpos += len;
2476	}
2477
2478	if (prev_bh) {
2479		rb = (struct ocfs2_refcount_block *)prev_bh->b_data;
2480
2481		if (le16_to_cpu(rb->rf_records.rl_used) + recs_add >
2482		    le16_to_cpu(rb->rf_records.rl_count))
2483			ref_blocks++;
2484
2485		*credits += 1;
2486	}
2487
2488	if (!ref_blocks)
2489		goto out;
2490
2491	*meta_add += ref_blocks;
2492	*credits += ref_blocks;
2493
2494	/*
2495	 * So we may need ref_blocks to insert into the tree.
2496	 * That also means we need to change the b-tree and add that number
2497	 * of records since we never merge them.
2498	 * We need one more block for expansion since the new created leaf
2499	 * block is also full and needs split.
2500	 */
2501	rb = (struct ocfs2_refcount_block *)ref_root_bh->b_data;
2502	if (le32_to_cpu(rb->rf_flags) & OCFS2_REFCOUNT_TREE_FL) {
2503		struct ocfs2_extent_tree et;
2504
2505		ocfs2_init_refcount_extent_tree(&et, ci, ref_root_bh);
2506		*meta_add += ocfs2_extend_meta_needed(et.et_root_el);
2507		*credits += ocfs2_calc_extend_credits(sb,
2508						      et.et_root_el);
2509	} else {
2510		*credits += OCFS2_EXPAND_REFCOUNT_TREE_CREDITS;
2511		*meta_add += 1;
2512	}
2513
2514out:
2515
2516	trace_ocfs2_calc_refcount_meta_credits(
2517		(unsigned long long)start_cpos, clusters,
2518		*meta_add, *credits);
2519	brelse(ref_leaf_bh);
2520	brelse(prev_bh);
2521	return ret;
2522}
2523
2524/*
2525 * For refcount tree, we will decrease some contiguous clusters
2526 * refcount count, so just go through it to see how many blocks
2527 * we gonna touch and whether we need to create new blocks.
2528 *
2529 * Normally the refcount blocks store these refcount should be
2530 * contiguous also, so that we can get the number easily.
2531 * We will at most add split 2 refcount records and 2 more
2532 * refcount blocks, so just check it in a rough way.
2533 *
2534 * Caller must hold refcount tree lock.
2535 */
2536int ocfs2_prepare_refcount_change_for_del(struct inode *inode,
2537					  u64 refcount_loc,
2538					  u64 phys_blkno,
2539					  u32 clusters,
2540					  int *credits,
2541					  int *ref_blocks)
2542{
2543	int ret;
2544	struct ocfs2_inode_info *oi = OCFS2_I(inode);
2545	struct buffer_head *ref_root_bh = NULL;
2546	struct ocfs2_refcount_tree *tree;
2547	u64 start_cpos = ocfs2_blocks_to_clusters(inode->i_sb, phys_blkno);
2548
2549	if (!ocfs2_refcount_tree(OCFS2_SB(inode->i_sb))) {
2550		ocfs2_error(inode->i_sb, "Inode %lu want to use refcount "
2551			    "tree, but the feature bit is not set in the "
2552			    "super block.", inode->i_ino);
2553		ret = -EROFS;
2554		goto out;
2555	}
2556
2557	BUG_ON(!(oi->ip_dyn_features & OCFS2_HAS_REFCOUNT_FL));
2558
2559	ret = ocfs2_get_refcount_tree(OCFS2_SB(inode->i_sb),
2560				      refcount_loc, &tree);
2561	if (ret) {
2562		mlog_errno(ret);
2563		goto out;
2564	}
2565
2566	ret = ocfs2_read_refcount_block(&tree->rf_ci, refcount_loc,
2567					&ref_root_bh);
2568	if (ret) {
2569		mlog_errno(ret);
2570		goto out;
2571	}
2572
2573	ret = ocfs2_calc_refcount_meta_credits(inode->i_sb,
2574					       &tree->rf_ci,
2575					       ref_root_bh,
2576					       start_cpos, clusters,
2577					       ref_blocks, credits);
2578	if (ret) {
2579		mlog_errno(ret);
2580		goto out;
2581	}
2582
2583	trace_ocfs2_prepare_refcount_change_for_del(*ref_blocks, *credits);
2584
2585out:
2586	brelse(ref_root_bh);
2587	return ret;
2588}
2589
2590#define	MAX_CONTIG_BYTES	1048576
2591
2592static inline unsigned int ocfs2_cow_contig_clusters(struct super_block *sb)
2593{
2594	return ocfs2_clusters_for_bytes(sb, MAX_CONTIG_BYTES);
2595}
2596
2597static inline unsigned int ocfs2_cow_contig_mask(struct super_block *sb)
2598{
2599	return ~(ocfs2_cow_contig_clusters(sb) - 1);
2600}
2601
2602/*
2603 * Given an extent that starts at 'start' and an I/O that starts at 'cpos',
2604 * find an offset (start + (n * contig_clusters)) that is closest to cpos
2605 * while still being less than or equal to it.
2606 *
2607 * The goal is to break the extent at a multiple of contig_clusters.
2608 */
2609static inline unsigned int ocfs2_cow_align_start(struct super_block *sb,
2610						 unsigned int start,
2611						 unsigned int cpos)
2612{
2613	BUG_ON(start > cpos);
2614
2615	return start + ((cpos - start) & ocfs2_cow_contig_mask(sb));
2616}
2617
2618/*
2619 * Given a cluster count of len, pad it out so that it is a multiple
2620 * of contig_clusters.
2621 */
2622static inline unsigned int ocfs2_cow_align_length(struct super_block *sb,
2623						  unsigned int len)
2624{
2625	unsigned int padded =
2626		(len + (ocfs2_cow_contig_clusters(sb) - 1)) &
2627		ocfs2_cow_contig_mask(sb);
2628
2629	/* Did we wrap? */
2630	if (padded < len)
2631		padded = UINT_MAX;
2632
2633	return padded;
2634}
2635
2636/*
2637 * Calculate out the start and number of virtual clusters we need to to CoW.
2638 *
2639 * cpos is vitual start cluster position we want to do CoW in a
2640 * file and write_len is the cluster length.
2641 * max_cpos is the place where we want to stop CoW intentionally.
2642 *
2643 * Normal we will start CoW from the beginning of extent record cotaining cpos.
2644 * We try to break up extents on boundaries of MAX_CONTIG_BYTES so that we
2645 * get good I/O from the resulting extent tree.
2646 */
2647static int ocfs2_refcount_cal_cow_clusters(struct inode *inode,
2648					   struct ocfs2_extent_list *el,
2649					   u32 cpos,
2650					   u32 write_len,
2651					   u32 max_cpos,
2652					   u32 *cow_start,
2653					   u32 *cow_len)
2654{
2655	int ret = 0;
2656	int tree_height = le16_to_cpu(el->l_tree_depth), i;
2657	struct buffer_head *eb_bh = NULL;
2658	struct ocfs2_extent_block *eb = NULL;
2659	struct ocfs2_extent_rec *rec;
2660	unsigned int want_clusters, rec_end = 0;
2661	int contig_clusters = ocfs2_cow_contig_clusters(inode->i_sb);
2662	int leaf_clusters;
2663
2664	BUG_ON(cpos + write_len > max_cpos);
2665
2666	if (tree_height > 0) {
2667		ret = ocfs2_find_leaf(INODE_CACHE(inode), el, cpos, &eb_bh);
2668		if (ret) {
2669			mlog_errno(ret);
2670			goto out;
2671		}
2672
2673		eb = (struct ocfs2_extent_block *) eb_bh->b_data;
2674		el = &eb->h_list;
2675
2676		if (el->l_tree_depth) {
2677			ocfs2_error(inode->i_sb,
2678				    "Inode %lu has non zero tree depth in "
2679				    "leaf block %llu\n", inode->i_ino,
2680				    (unsigned long long)eb_bh->b_blocknr);
2681			ret = -EROFS;
2682			goto out;
2683		}
2684	}
2685
2686	*cow_len = 0;
2687	for (i = 0; i < le16_to_cpu(el->l_next_free_rec); i++) {
2688		rec = &el->l_recs[i];
2689
2690		if (ocfs2_is_empty_extent(rec)) {
2691			mlog_bug_on_msg(i != 0, "Inode %lu has empty record in "
2692					"index %d\n", inode->i_ino, i);
2693			continue;
2694		}
2695
2696		if (le32_to_cpu(rec->e_cpos) +
2697		    le16_to_cpu(rec->e_leaf_clusters) <= cpos)
2698			continue;
2699
2700		if (*cow_len == 0) {
2701			/*
2702			 * We should find a refcounted record in the
2703			 * first pass.
2704			 */
2705			BUG_ON(!(rec->e_flags & OCFS2_EXT_REFCOUNTED));
2706			*cow_start = le32_to_cpu(rec->e_cpos);
2707		}
2708
2709		/*
2710		 * If we encounter a hole, a non-refcounted record or
2711		 * pass the max_cpos, stop the search.
2712		 */
2713		if ((!(rec->e_flags & OCFS2_EXT_REFCOUNTED)) ||
2714		    (*cow_len && rec_end != le32_to_cpu(rec->e_cpos)) ||
2715		    (max_cpos <= le32_to_cpu(rec->e_cpos)))
2716			break;
2717
2718		leaf_clusters = le16_to_cpu(rec->e_leaf_clusters);
2719		rec_end = le32_to_cpu(rec->e_cpos) + leaf_clusters;
2720		if (rec_end > max_cpos) {
2721			rec_end = max_cpos;
2722			leaf_clusters = rec_end - le32_to_cpu(rec->e_cpos);
2723		}
2724
2725		/*
2726		 * How many clusters do we actually need from
2727		 * this extent?  First we see how many we actually
2728		 * need to complete the write.  If that's smaller
2729		 * than contig_clusters, we try for contig_clusters.
2730		 */
2731		if (!*cow_len)
2732			want_clusters = write_len;
2733		else
2734			want_clusters = (cpos + write_len) -
2735				(*cow_start + *cow_len);
2736		if (want_clusters < contig_clusters)
2737			want_clusters = contig_clusters;
2738
2739		/*
2740		 * If the write does not cover the whole extent, we
2741		 * need to calculate how we're going to split the extent.
2742		 * We try to do it on contig_clusters boundaries.
2743		 *
2744		 * Any extent smaller than contig_clusters will be
2745		 * CoWed in its entirety.
2746		 */
2747		if (leaf_clusters <= contig_clusters)
2748			*cow_len += leaf_clusters;
2749		else if (*cow_len || (*cow_start == cpos)) {
2750			/*
2751			 * This extent needs to be CoW'd from its
2752			 * beginning, so all we have to do is compute
2753			 * how many clusters to grab.  We align
2754			 * want_clusters to the edge of contig_clusters
2755			 * to get better I/O.
2756			 */
2757			want_clusters = ocfs2_cow_align_length(inode->i_sb,
2758							       want_clusters);
2759
2760			if (leaf_clusters < want_clusters)
2761				*cow_len += leaf_clusters;
2762			else
2763				*cow_len += want_clusters;
2764		} else if ((*cow_start + contig_clusters) >=
2765			   (cpos + write_len)) {
2766			/*
2767			 * Breaking off contig_clusters at the front
2768			 * of the extent will cover our write.  That's
2769			 * easy.
2770			 */
2771			*cow_len = contig_clusters;
2772		} else if ((rec_end - cpos) <= contig_clusters) {
2773			/*
2774			 * Breaking off contig_clusters at the tail of
2775			 * this extent will cover cpos.
2776			 */
2777			*cow_start = rec_end - contig_clusters;
2778			*cow_len = contig_clusters;
2779		} else if ((rec_end - cpos) <= want_clusters) {
2780			/*
2781			 * While we can't fit the entire write in this
2782			 * extent, we know that the write goes from cpos
2783			 * to the end of the extent.  Break that off.
2784			 * We try to break it at some multiple of
2785			 * contig_clusters from the front of the extent.
2786			 * Failing that (ie, cpos is within
2787			 * contig_clusters of the front), we'll CoW the
2788			 * entire extent.
2789			 */
2790			*cow_start = ocfs2_cow_align_start(inode->i_sb,
2791							   *cow_start, cpos);
2792			*cow_len = rec_end - *cow_start;
2793		} else {
2794			/*
2795			 * Ok, the entire write lives in the middle of
2796			 * this extent.  Let's try to slice the extent up
2797			 * nicely.  Optimally, our CoW region starts at
2798			 * m*contig_clusters from the beginning of the
2799			 * extent and goes for n*contig_clusters,
2800			 * covering the entire write.
2801			 */
2802			*cow_start = ocfs2_cow_align_start(inode->i_sb,
2803							   *cow_start, cpos);
2804
2805			want_clusters = (cpos + write_len) - *cow_start;
2806			want_clusters = ocfs2_cow_align_length(inode->i_sb,
2807							       want_clusters);
2808			if (*cow_start + want_clusters <= rec_end)
2809				*cow_len = want_clusters;
2810			else
2811				*cow_len = rec_end - *cow_start;
2812		}
2813
2814		/* Have we covered our entire write yet? */
2815		if ((*cow_start + *cow_len) >= (cpos + write_len))
2816			break;
2817
2818		/*
2819		 * If we reach the end of the extent block and don't get enough
2820		 * clusters, continue with the next extent block if possible.
2821		 */
2822		if (i + 1 == le16_to_cpu(el->l_next_free_rec) &&
2823		    eb && eb->h_next_leaf_blk) {
2824			brelse(eb_bh);
2825			eb_bh = NULL;
2826
2827			ret = ocfs2_read_extent_block(INODE_CACHE(inode),
2828					       le64_to_cpu(eb->h_next_leaf_blk),
2829					       &eb_bh);
2830			if (ret) {
2831				mlog_errno(ret);
2832				goto out;
2833			}
2834
2835			eb = (struct ocfs2_extent_block *) eb_bh->b_data;
2836			el = &eb->h_list;
2837			i = -1;
2838		}
2839	}
2840
2841out:
2842	brelse(eb_bh);
2843	return ret;
2844}
2845
2846/*
2847 * Prepare meta_ac, data_ac and calculate credits when we want to add some
2848 * num_clusters in data_tree "et" and change the refcount for the old
2849 * clusters(starting form p_cluster) in the refcount tree.
2850 *
2851 * Note:
2852 * 1. since we may split the old tree, so we at most will need num_clusters + 2
2853 *    more new leaf records.
2854 * 2. In some case, we may not need to reserve new clusters(e.g, reflink), so
2855 *    just give data_ac = NULL.
2856 */
2857static int ocfs2_lock_refcount_allocators(struct super_block *sb,
2858					u32 p_cluster, u32 num_clusters,
2859					struct ocfs2_extent_tree *et,
2860					struct ocfs2_caching_info *ref_ci,
2861					struct buffer_head *ref_root_bh,
2862					struct ocfs2_alloc_context **meta_ac,
2863					struct ocfs2_alloc_context **data_ac,
2864					int *credits)
2865{
2866	int ret = 0, meta_add = 0;
2867	int num_free_extents = ocfs2_num_free_extents(OCFS2_SB(sb), et);
2868
2869	if (num_free_extents < 0) {
2870		ret = num_free_extents;
2871		mlog_errno(ret);
2872		goto out;
2873	}
2874
2875	if (num_free_extents < num_clusters + 2)
2876		meta_add =
2877			ocfs2_extend_meta_needed(et->et_root_el);
2878
2879	*credits += ocfs2_calc_extend_credits(sb, et->et_root_el);
2880
2881	ret = ocfs2_calc_refcount_meta_credits(sb, ref_ci, ref_root_bh,
2882					       p_cluster, num_clusters,
2883					       &meta_add, credits);
2884	if (ret) {
2885		mlog_errno(ret);
2886		goto out;
2887	}
2888
2889	trace_ocfs2_lock_refcount_allocators(meta_add, *credits);
2890	ret = ocfs2_reserve_new_metadata_blocks(OCFS2_SB(sb), meta_add,
2891						meta_ac);
2892	if (ret) {
2893		mlog_errno(ret);
2894		goto out;
2895	}
2896
2897	if (data_ac) {
2898		ret = ocfs2_reserve_clusters(OCFS2_SB(sb), num_clusters,
2899					     data_ac);
2900		if (ret)
2901			mlog_errno(ret);
2902	}
2903
2904out:
2905	if (ret) {
2906		if (*meta_ac) {
2907			ocfs2_free_alloc_context(*meta_ac);
2908			*meta_ac = NULL;
2909		}
2910	}
2911
2912	return ret;
2913}
2914
2915static int ocfs2_clear_cow_buffer(handle_t *handle, struct buffer_head *bh)
2916{
2917	BUG_ON(buffer_dirty(bh));
2918
2919	clear_buffer_mapped(bh);
2920
2921	return 0;
2922}
2923
2924int ocfs2_duplicate_clusters_by_page(handle_t *handle,
2925				     struct inode *inode,
2926				     u32 cpos, u32 old_cluster,
2927				     u32 new_cluster, u32 new_len)
2928{
2929	int ret = 0, partial;
2930	struct super_block *sb = inode->i_sb;
2931	u64 new_block = ocfs2_clusters_to_blocks(sb, new_cluster);
2932	struct page *page;
2933	pgoff_t page_index;
2934	unsigned int from, to, readahead_pages;
2935	loff_t offset, end, map_end;
2936	struct address_space *mapping = inode->i_mapping;
2937
2938	trace_ocfs2_duplicate_clusters_by_page(cpos, old_cluster,
2939					       new_cluster, new_len);
2940
2941	readahead_pages =
2942		(ocfs2_cow_contig_clusters(sb) <<
2943		 OCFS2_SB(sb)->s_clustersize_bits) >> PAGE_CACHE_SHIFT;
2944	offset = ((loff_t)cpos) << OCFS2_SB(sb)->s_clustersize_bits;
2945	end = offset + (new_len << OCFS2_SB(sb)->s_clustersize_bits);
2946	/*
2947	 * We only duplicate pages until we reach the page contains i_size - 1.
2948	 * So trim 'end' to i_size.
2949	 */
2950	if (end > i_size_read(inode))
2951		end = i_size_read(inode);
2952
2953	while (offset < end) {
2954		page_index = offset >> PAGE_CACHE_SHIFT;
2955		map_end = ((loff_t)page_index + 1) << PAGE_CACHE_SHIFT;
2956		if (map_end > end)
2957			map_end = end;
2958
2959		/* from, to is the offset within the page. */
2960		from = offset & (PAGE_CACHE_SIZE - 1);
2961		to = PAGE_CACHE_SIZE;
2962		if (map_end & (PAGE_CACHE_SIZE - 1))
2963			to = map_end & (PAGE_CACHE_SIZE - 1);
2964
2965		page = find_or_create_page(mapping, page_index, GFP_NOFS);
2966		if (!page) {
2967			ret = -ENOMEM;
2968			mlog_errno(ret);
2969			break;
2970		}
2971
2972		/*
2973		 * In case PAGE_CACHE_SIZE <= CLUSTER_SIZE, This page
2974		 * can't be dirtied before we CoW it out.
2975		 */
2976		if (PAGE_CACHE_SIZE <= OCFS2_SB(sb)->s_clustersize)
2977			BUG_ON(PageDirty(page));
2978
2979		if (!PageUptodate(page)) {
2980			ret = block_read_full_page(page, ocfs2_get_block);
2981			if (ret) {
2982				mlog_errno(ret);
2983				goto unlock;
2984			}
2985			lock_page(page);
2986		}
2987
2988		if (page_has_buffers(page)) {
2989			ret = walk_page_buffers(handle, page_buffers(page),
2990						from, to, &partial,
2991						ocfs2_clear_cow_buffer);
2992			if (ret) {
2993				mlog_errno(ret);
2994				goto unlock;
2995			}
2996		}
2997
2998		ocfs2_map_and_dirty_page(inode,
2999					 handle, from, to,
3000					 page, 0, &new_block);
3001		mark_page_accessed(page);
3002unlock:
3003		unlock_page(page);
3004		page_cache_release(page);
3005		page = NULL;
3006		offset = map_end;
3007		if (ret)
3008			break;
3009	}
3010
3011	return ret;
3012}
3013
3014int ocfs2_duplicate_clusters_by_jbd(handle_t *handle,
3015				    struct inode *inode,
3016				    u32 cpos, u32 old_cluster,
3017				    u32 new_cluster, u32 new_len)
3018{
3019	int ret = 0;
3020	struct super_block *sb = inode->i_sb;
3021	struct ocfs2_caching_info *ci = INODE_CACHE(inode);
3022	int i, blocks = ocfs2_clusters_to_blocks(sb, new_len);
3023	u64 old_block = ocfs2_clusters_to_blocks(sb, old_cluster);
3024	u64 new_block = ocfs2_clusters_to_blocks(sb, new_cluster);
3025	struct ocfs2_super *osb = OCFS2_SB(sb);
3026	struct buffer_head *old_bh = NULL;
3027	struct buffer_head *new_bh = NULL;
3028
3029	trace_ocfs2_duplicate_clusters_by_page(cpos, old_cluster,
3030					       new_cluster, new_len);
3031
3032	for (i = 0; i < blocks; i++, old_block++, new_block++) {
3033		new_bh = sb_getblk(osb->sb, new_block);
3034		if (new_bh == NULL) {
3035			ret = -ENOMEM;
3036			mlog_errno(ret);
3037			break;
3038		}
3039
3040		ocfs2_set_new_buffer_uptodate(ci, new_bh);
3041
3042		ret = ocfs2_read_block(ci, old_block, &old_bh, NULL);
3043		if (ret) {
3044			mlog_errno(ret);
3045			break;
3046		}
3047
3048		ret = ocfs2_journal_access(handle, ci, new_bh,
3049					   OCFS2_JOURNAL_ACCESS_CREATE);
3050		if (ret) {
3051			mlog_errno(ret);
3052			break;
3053		}
3054
3055		memcpy(new_bh->b_data, old_bh->b_data, sb->s_blocksize);
3056		ocfs2_journal_dirty(handle, new_bh);
3057
3058		brelse(new_bh);
3059		brelse(old_bh);
3060		new_bh = NULL;
3061		old_bh = NULL;
3062	}
3063
3064	brelse(new_bh);
3065	brelse(old_bh);
3066	return ret;
3067}
3068
3069static int ocfs2_clear_ext_refcount(handle_t *handle,
3070				    struct ocfs2_extent_tree *et,
3071				    u32 cpos, u32 p_cluster, u32 len,
3072				    unsigned int ext_flags,
3073				    struct ocfs2_alloc_context *meta_ac,
3074				    struct ocfs2_cached_dealloc_ctxt *dealloc)
3075{
3076	int ret, index;
3077	struct ocfs2_extent_rec replace_rec;
3078	struct ocfs2_path *path = NULL;
3079	struct ocfs2_extent_list *el;
3080	struct super_block *sb = ocfs2_metadata_cache_get_super(et->et_ci);
3081	u64 ino = ocfs2_metadata_cache_owner(et->et_ci);
3082
3083	trace_ocfs2_clear_ext_refcount((unsigned long long)ino,
3084				       cpos, len, p_cluster, ext_flags);
3085
3086	memset(&replace_rec, 0, sizeof(replace_rec));
3087	replace_rec.e_cpos = cpu_to_le32(cpos);
3088	replace_rec.e_leaf_clusters = cpu_to_le16(len);
3089	replace_rec.e_blkno = cpu_to_le64(ocfs2_clusters_to_blocks(sb,
3090								   p_cluster));
3091	replace_rec.e_flags = ext_flags;
3092	replace_rec.e_flags &= ~OCFS2_EXT_REFCOUNTED;
3093
3094	path = ocfs2_new_path_from_et(et);
3095	if (!path) {
3096		ret = -ENOMEM;
3097		mlog_errno(ret);
3098		goto out;
3099	}
3100
3101	ret = ocfs2_find_path(et->et_ci, path, cpos);
3102	if (ret) {
3103		mlog_errno(ret);
3104		goto out;
3105	}
3106
3107	el = path_leaf_el(path);
3108
3109	index = ocfs2_search_extent_list(el, cpos);
3110	if (index == -1) {
3111		ocfs2_error(sb,
3112			    "Inode %llu has an extent at cpos %u which can no "
3113			    "longer be found.\n",
3114			    (unsigned long long)ino, cpos);
3115		ret = -EROFS;
3116		goto out;
3117	}
3118
3119	ret = ocfs2_split_extent(handle, et, path, index,
3120				 &replace_rec, meta_ac, dealloc);
3121	if (ret)
3122		mlog_errno(ret);
3123
3124out:
3125	ocfs2_free_path(path);
3126	return ret;
3127}
3128
3129static int ocfs2_replace_clusters(handle_t *handle,
3130				  struct ocfs2_cow_context *context,
3131				  u32 cpos, u32 old,
3132				  u32 new, u32 len,
3133				  unsigned int ext_flags)
3134{
3135	int ret;
3136	struct ocfs2_caching_info *ci = context->data_et.et_ci;
3137	u64 ino = ocfs2_metadata_cache_owner(ci);
3138
3139	trace_ocfs2_replace_clusters((unsigned long long)ino,
3140				     cpos, old, new, len, ext_flags);
3141
3142	/*If the old clusters is unwritten, no need to duplicate. */
3143	if (!(ext_flags & OCFS2_EXT_UNWRITTEN)) {
3144		ret = context->cow_duplicate_clusters(handle, context->inode,
3145						      cpos, old, new, len);
3146		if (ret) {
3147			mlog_errno(ret);
3148			goto out;
3149		}
3150	}
3151
3152	ret = ocfs2_clear_ext_refcount(handle, &context->data_et,
3153				       cpos, new, len, ext_flags,
3154				       context->meta_ac, &context->dealloc);
3155	if (ret)
3156		mlog_errno(ret);
3157out:
3158	return ret;
3159}
3160
3161int ocfs2_cow_sync_writeback(struct super_block *sb,
3162			     struct inode *inode,
3163			     u32 cpos, u32 num_clusters)
3164{
3165	int ret = 0;
3166	loff_t offset, end, map_end;
3167	pgoff_t page_index;
3168	struct page *page;
3169
3170	if (ocfs2_should_order_data(inode))
3171		return 0;
3172
3173	offset = ((loff_t)cpos) << OCFS2_SB(sb)->s_clustersize_bits;
3174	end = offset + (num_clusters << OCFS2_SB(sb)->s_clustersize_bits);
3175
3176	ret = filemap_fdatawrite_range(inode->i_mapping,
3177				       offset, end - 1);
3178	if (ret < 0) {
3179		mlog_errno(ret);
3180		return ret;
3181	}
3182
3183	while (offset < end) {
3184		page_index = offset >> PAGE_CACHE_SHIFT;
3185		map_end = ((loff_t)page_index + 1) << PAGE_CACHE_SHIFT;
3186		if (map_end > end)
3187			map_end = end;
3188
3189		page = find_or_create_page(inode->i_mapping,
3190					   page_index, GFP_NOFS);
3191		BUG_ON(!page);
3192
3193		wait_on_page_writeback(page);
3194		if (PageError(page)) {
3195			ret = -EIO;
3196			mlog_errno(ret);
3197		} else
3198			mark_page_accessed(page);
3199
3200		unlock_page(page);
3201		page_cache_release(page);
3202		page = NULL;
3203		offset = map_end;
3204		if (ret)
3205			break;
3206	}
3207
3208	return ret;
3209}
3210
3211static int ocfs2_di_get_clusters(struct ocfs2_cow_context *context,
3212				 u32 v_cluster, u32 *p_cluster,
3213				 u32 *num_clusters,
3214				 unsigned int *extent_flags)
3215{
3216	return ocfs2_get_clusters(context->inode, v_cluster, p_cluster,
3217				  num_clusters, extent_flags);
3218}
3219
3220static int ocfs2_make_clusters_writable(struct super_block *sb,
3221					struct ocfs2_cow_context *context,
3222					u32 cpos, u32 p_cluster,
3223					u32 num_clusters, unsigned int e_flags)
3224{
3225	int ret, delete, index, credits =  0;
3226	u32 new_bit, new_len, orig_num_clusters;
3227	unsigned int set_len;
3228	struct ocfs2_super *osb = OCFS2_SB(sb);
3229	handle_t *handle;
3230	struct buffer_head *ref_leaf_bh = NULL;
3231	struct ocfs2_caching_info *ref_ci = &context->ref_tree->rf_ci;
3232	struct ocfs2_refcount_rec rec;
3233
3234	trace_ocfs2_make_clusters_writable(cpos, p_cluster,
3235					   num_clusters, e_flags);
3236
3237	ret = ocfs2_lock_refcount_allocators(sb, p_cluster, num_clusters,
3238					     &context->data_et,
3239					     ref_ci,
3240					     context->ref_root_bh,
3241					     &context->meta_ac,
3242					     &context->data_ac, &credits);
3243	if (ret) {
3244		mlog_errno(ret);
3245		return ret;
3246	}
3247
3248	if (context->post_refcount)
3249		credits += context->post_refcount->credits;
3250
3251	credits += context->extra_credits;
3252	handle = ocfs2_start_trans(osb, credits);
3253	if (IS_ERR(handle)) {
3254		ret = PTR_ERR(handle);
3255		mlog_errno(ret);
3256		goto out;
3257	}
3258
3259	orig_num_clusters = num_clusters;
3260
3261	while (num_clusters) {
3262		ret = ocfs2_get_refcount_rec(ref_ci, context->ref_root_bh,
3263					     p_cluster, num_clusters,
3264					     &rec, &index, &ref_leaf_bh);
3265		if (ret) {
3266			mlog_errno(ret);
3267			goto out_commit;
3268		}
3269
3270		BUG_ON(!rec.r_refcount);
3271		set_len = min((u64)p_cluster + num_clusters,
3272			      le64_to_cpu(rec.r_cpos) +
3273			      le32_to_cpu(rec.r_clusters)) - p_cluster;
3274
3275		/*
3276		 * There are many different situation here.
3277		 * 1. If refcount == 1, remove the flag and don't COW.
3278		 * 2. If refcount > 1, allocate clusters.
3279		 *    Here we may not allocate r_len once at a time, so continue
3280		 *    until we reach num_clusters.
3281		 */
3282		if (le32_to_cpu(rec.r_refcount) == 1) {
3283			delete = 0;
3284			ret = ocfs2_clear_ext_refcount(handle,
3285						       &context->data_et,
3286						       cpos, p_cluster,
3287						       set_len, e_flags,
3288						       context->meta_ac,
3289						       &context->dealloc);
3290			if (ret) {
3291				mlog_errno(ret);
3292				goto out_commit;
3293			}
3294		} else {
3295			delete = 1;
3296
3297			ret = __ocfs2_claim_clusters(handle,
3298						     context->data_ac,
3299						     1, set_len,
3300						     &new_bit, &new_len);
3301			if (ret) {
3302				mlog_errno(ret);
3303				goto out_commit;
3304			}
3305
3306			ret = ocfs2_replace_clusters(handle, context,
3307						     cpos, p_cluster, new_bit,
3308						     new_len, e_flags);
3309			if (ret) {
3310				mlog_errno(ret);
3311				goto out_commit;
3312			}
3313			set_len = new_len;
3314		}
3315
3316		ret = __ocfs2_decrease_refcount(handle, ref_ci,
3317						context->ref_root_bh,
3318						p_cluster, set_len,
3319						context->meta_ac,
3320						&context->dealloc, delete);
3321		if (ret) {
3322			mlog_errno(ret);
3323			goto out_commit;
3324		}
3325
3326		cpos += set_len;
3327		p_cluster += set_len;
3328		num_clusters -= set_len;
3329		brelse(ref_leaf_bh);
3330		ref_leaf_bh = NULL;
3331	}
3332
3333	/* handle any post_cow action. */
3334	if (context->post_refcount && context->post_refcount->func) {
3335		ret = context->post_refcount->func(context->inode, handle,
3336						context->post_refcount->para);
3337		if (ret) {
3338			mlog_errno(ret);
3339			goto out_commit;
3340		}
3341	}
3342
3343	/*
3344	 * Here we should write the new page out first if we are
3345	 * in write-back mode.
3346	 */
3347	if (context->get_clusters == ocfs2_di_get_clusters) {
3348		ret = ocfs2_cow_sync_writeback(sb, context->inode, cpos,
3349					       orig_num_clusters);
3350		if (ret)
3351			mlog_errno(ret);
3352	}
3353
3354out_commit:
3355	ocfs2_commit_trans(osb, handle);
3356
3357out:
3358	if (context->data_ac) {
3359		ocfs2_free_alloc_context(context->data_ac);
3360		context->data_ac = NULL;
3361	}
3362	if (context->meta_ac) {
3363		ocfs2_free_alloc_context(context->meta_ac);
3364		context->meta_ac = NULL;
3365	}
3366	brelse(ref_leaf_bh);
3367
3368	return ret;
3369}
3370
3371static int ocfs2_replace_cow(struct ocfs2_cow_context *context)
3372{
3373	int ret = 0;
3374	struct inode *inode = context->inode;
3375	u32 cow_start = context->cow_start, cow_len = context->cow_len;
3376	u32 p_cluster, num_clusters;
3377	unsigned int ext_flags;
3378	struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
3379
3380	if (!ocfs2_refcount_tree(OCFS2_SB(inode->i_sb))) {
3381		ocfs2_error(inode->i_sb, "Inode %lu want to use refcount "
3382			    "tree, but the feature bit is not set in the "
3383			    "super block.", inode->i_ino);
3384		return -EROFS;
3385	}
3386
3387	ocfs2_init_dealloc_ctxt(&context->dealloc);
3388
3389	while (cow_len) {
3390		ret = context->get_clusters(context, cow_start, &p_cluster,
3391					    &num_clusters, &ext_flags);
3392		if (ret) {
3393			mlog_errno(ret);
3394			break;
3395		}
3396
3397		BUG_ON(!(ext_flags & OCFS2_EXT_REFCOUNTED));
3398
3399		if (cow_len < num_clusters)
3400			num_clusters = cow_len;
3401
3402		ret = ocfs2_make_clusters_writable(inode->i_sb, context,
3403						   cow_start, p_cluster,
3404						   num_clusters, ext_flags);
3405		if (ret) {
3406			mlog_errno(ret);
3407			break;
3408		}
3409
3410		cow_len -= num_clusters;
3411		cow_start += num_clusters;
3412	}
3413
3414	if (ocfs2_dealloc_has_cluster(&context->dealloc)) {
3415		ocfs2_schedule_truncate_log_flush(osb, 1);
3416		ocfs2_run_deallocs(osb, &context->dealloc);
3417	}
3418
3419	return ret;
3420}
3421
3422/*
3423 * Starting at cpos, try to CoW write_len clusters.  Don't CoW
3424 * past max_cpos.  This will stop when it runs into a hole or an
3425 * unrefcounted extent.
3426 */
3427static int ocfs2_refcount_cow_hunk(struct inode *inode,
3428				   struct buffer_head *di_bh,
3429				   u32 cpos, u32 write_len, u32 max_cpos)
3430{
3431	int ret;
3432	u32 cow_start = 0, cow_len = 0;
3433	struct ocfs2_inode_info *oi = OCFS2_I(inode);
3434	struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
3435	struct ocfs2_dinode *di = (struct ocfs2_dinode *)di_bh->b_data;
3436	struct buffer_head *ref_root_bh = NULL;
3437	struct ocfs2_refcount_tree *ref_tree;
3438	struct ocfs2_cow_context *context = NULL;
3439
3440	BUG_ON(!(oi->ip_dyn_features & OCFS2_HAS_REFCOUNT_FL));
3441
3442	ret = ocfs2_refcount_cal_cow_clusters(inode, &di->id2.i_list,
3443					      cpos, write_len, max_cpos,
3444					      &cow_start, &cow_len);
3445	if (ret) {
3446		mlog_errno(ret);
3447		goto out;
3448	}
3449
3450	trace_ocfs2_refcount_cow_hunk(OCFS2_I(inode)->ip_blkno,
3451				      cpos, write_len, max_cpos,
3452				      cow_start, cow_len);
3453
3454	BUG_ON(cow_len == 0);
3455
3456	context = kzalloc(sizeof(struct ocfs2_cow_context), GFP_NOFS);
3457	if (!context) {
3458		ret = -ENOMEM;
3459		mlog_errno(ret);
3460		goto out;
3461	}
3462
3463	ret = ocfs2_lock_refcount_tree(osb, le64_to_cpu(di->i_refcount_loc),
3464				       1, &ref_tree, &ref_root_bh);
3465	if (ret) {
3466		mlog_errno(ret);
3467		goto out;
3468	}
3469
3470	context->inode = inode;
3471	context->cow_start = cow_start;
3472	context->cow_len = cow_len;
3473	context->ref_tree = ref_tree;
3474	context->ref_root_bh = ref_root_bh;
3475	context->cow_duplicate_clusters = ocfs2_duplicate_clusters_by_page;
3476	context->get_clusters = ocfs2_di_get_clusters;
3477
3478	ocfs2_init_dinode_extent_tree(&context->data_et,
3479				      INODE_CACHE(inode), di_bh);
3480
3481	ret = ocfs2_replace_cow(context);
3482	if (ret)
3483		mlog_errno(ret);
3484
3485	/*
3486	 * truncate the extent map here since no matter whether we meet with
3487	 * any error during the action, we shouldn't trust cached extent map
3488	 * any more.
3489	 */
3490	ocfs2_extent_map_trunc(inode, cow_start);
3491
3492	ocfs2_unlock_refcount_tree(osb, ref_tree, 1);
3493	brelse(ref_root_bh);
3494out:
3495	kfree(context);
3496	return ret;
3497}
3498
3499/*
3500 * CoW any and all clusters between cpos and cpos+write_len.
3501 * Don't CoW past max_cpos.  If this returns successfully, all
3502 * clusters between cpos and cpos+write_len are safe to modify.
3503 */
3504int ocfs2_refcount_cow(struct inode *inode,
3505		       struct buffer_head *di_bh,
3506		       u32 cpos, u32 write_len, u32 max_cpos)
3507{
3508	int ret = 0;
3509	u32 p_cluster, num_clusters;
3510	unsigned int ext_flags;
3511
3512	while (write_len) {
3513		ret = ocfs2_get_clusters(inode, cpos, &p_cluster,
3514					 &num_clusters, &ext_flags);
3515		if (ret) {
3516			mlog_errno(ret);
3517			break;
3518		}
3519
3520		if (write_len < num_clusters)
3521			num_clusters = write_len;
3522
3523		if (ext_flags & OCFS2_EXT_REFCOUNTED) {
3524			ret = ocfs2_refcount_cow_hunk(inode, di_bh, cpos,
3525						      num_clusters, max_cpos);
3526			if (ret) {
3527				mlog_errno(ret);
3528				break;
3529			}
3530		}
3531
3532		write_len -= num_clusters;
3533		cpos += num_clusters;
3534	}
3535
3536	return ret;
3537}
3538
3539static int ocfs2_xattr_value_get_clusters(struct ocfs2_cow_context *context,
3540					  u32 v_cluster, u32 *p_cluster,
3541					  u32 *num_clusters,
3542					  unsigned int *extent_flags)
3543{
3544	struct inode *inode = context->inode;
3545	struct ocfs2_xattr_value_root *xv = context->cow_object;
3546
3547	return ocfs2_xattr_get_clusters(inode, v_cluster, p_cluster,
3548					num_clusters, &xv->xr_list,
3549					extent_flags);
3550}
3551
3552/*
3553 * Given a xattr value root, calculate the most meta/credits we need for
3554 * refcount tree change if we truncate it to 0.
3555 */
3556int ocfs2_refcounted_xattr_delete_need(struct inode *inode,
3557				       struct ocfs2_caching_info *ref_ci,
3558				       struct buffer_head *ref_root_bh,
3559				       struct ocfs2_xattr_value_root *xv,
3560				       int *meta_add, int *credits)
3561{
3562	int ret = 0, index, ref_blocks = 0;
3563	u32 p_cluster, num_clusters;
3564	u32 cpos = 0, clusters = le32_to_cpu(xv->xr_clusters);
3565	struct ocfs2_refcount_block *rb;
3566	struct ocfs2_refcount_rec rec;
3567	struct buffer_head *ref_leaf_bh = NULL;
3568
3569	while (cpos < clusters) {
3570		ret = ocfs2_xattr_get_clusters(inode, cpos, &p_cluster,
3571					       &num_clusters, &xv->xr_list,
3572					       NULL);
3573		if (ret) {
3574			mlog_errno(ret);
3575			goto out;
3576		}
3577
3578		cpos += num_clusters;
3579
3580		while (num_clusters) {
3581			ret = ocfs2_get_refcount_rec(ref_ci, ref_root_bh,
3582						     p_cluster, num_clusters,
3583						     &rec, &index,
3584						     &ref_leaf_bh);
3585			if (ret) {
3586				mlog_errno(ret);
3587				goto out;
3588			}
3589
3590			BUG_ON(!rec.r_refcount);
3591
3592			rb = (struct ocfs2_refcount_block *)ref_leaf_bh->b_data;
3593
3594			/*
3595			 * We really don't know whether the other clusters is in
3596			 * this refcount block or not, so just take the worst
3597			 * case that all the clusters are in this block and each
3598			 * one will split a refcount rec, so totally we need
3599			 * clusters * 2 new refcount rec.
3600			 */
3601			if (le16_to_cpu(rb->rf_records.rl_used) + clusters * 2 >
3602			    le16_to_cpu(rb->rf_records.rl_count))
3603				ref_blocks++;
3604
3605			*credits += 1;
3606			brelse(ref_leaf_bh);
3607			ref_leaf_bh = NULL;
3608
3609			if (num_clusters <= le32_to_cpu(rec.r_clusters))
3610				break;
3611			else
3612				num_clusters -= le32_to_cpu(rec.r_clusters);
3613			p_cluster += num_clusters;
3614		}
3615	}
3616
3617	*meta_add += ref_blocks;
3618	if (!ref_blocks)
3619		goto out;
3620
3621	rb = (struct ocfs2_refcount_block *)ref_root_bh->b_data;
3622	if (le32_to_cpu(rb->rf_flags) & OCFS2_REFCOUNT_TREE_FL)
3623		*credits += OCFS2_EXPAND_REFCOUNT_TREE_CREDITS;
3624	else {
3625		struct ocfs2_extent_tree et;
3626
3627		ocfs2_init_refcount_extent_tree(&et, ref_ci, ref_root_bh);
3628		*credits += ocfs2_calc_extend_credits(inode->i_sb,
3629						      et.et_root_el);
3630	}
3631
3632out:
3633	brelse(ref_leaf_bh);
3634	return ret;
3635}
3636
3637/*
3638 * Do CoW for xattr.
3639 */
3640int ocfs2_refcount_cow_xattr(struct inode *inode,
3641			     struct ocfs2_dinode *di,
3642			     struct ocfs2_xattr_value_buf *vb,
3643			     struct ocfs2_refcount_tree *ref_tree,
3644			     struct buffer_head *ref_root_bh,
3645			     u32 cpos, u32 write_len,
3646			     struct ocfs2_post_refcount *post)
3647{
3648	int ret;
3649	struct ocfs2_xattr_value_root *xv = vb->vb_xv;
3650	struct ocfs2_inode_info *oi = OCFS2_I(inode);
3651	struct ocfs2_cow_context *context = NULL;
3652	u32 cow_start, cow_len;
3653
3654	BUG_ON(!(oi->ip_dyn_features & OCFS2_HAS_REFCOUNT_FL));
3655
3656	ret = ocfs2_refcount_cal_cow_clusters(inode, &xv->xr_list,
3657					      cpos, write_len, UINT_MAX,
3658					      &cow_start, &cow_len);
3659	if (ret) {
3660		mlog_errno(ret);
3661		goto out;
3662	}
3663
3664	BUG_ON(cow_len == 0);
3665
3666	context = kzalloc(sizeof(struct ocfs2_cow_context), GFP_NOFS);
3667	if (!context) {
3668		ret = -ENOMEM;
3669		mlog_errno(ret);
3670		goto out;
3671	}
3672
3673	context->inode = inode;
3674	context->cow_start = cow_start;
3675	context->cow_len = cow_len;
3676	context->ref_tree = ref_tree;
3677	context->ref_root_bh = ref_root_bh;
3678	context->cow_object = xv;
3679
3680	context->cow_duplicate_clusters = ocfs2_duplicate_clusters_by_jbd;
3681	/* We need the extra credits for duplicate_clusters by jbd. */
3682	context->extra_credits =
3683		ocfs2_clusters_to_blocks(inode->i_sb, 1) * cow_len;
3684	context->get_clusters = ocfs2_xattr_value_get_clusters;
3685	context->post_refcount = post;
3686
3687	ocfs2_init_xattr_value_extent_tree(&context->data_et,
3688					   INODE_CACHE(inode), vb);
3689
3690	ret = ocfs2_replace_cow(context);
3691	if (ret)
3692		mlog_errno(ret);
3693
3694out:
3695	kfree(context);
3696	return ret;
3697}
3698
3699/*
3700 * Insert a new extent into refcount tree and mark a extent rec
3701 * as refcounted in the dinode tree.
3702 */
3703int ocfs2_add_refcount_flag(struct inode *inode,
3704			    struct ocfs2_extent_tree *data_et,
3705			    struct ocfs2_caching_info *ref_ci,
3706			    struct buffer_head *ref_root_bh,
3707			    u32 cpos, u32 p_cluster, u32 num_clusters,
3708			    struct ocfs2_cached_dealloc_ctxt *dealloc,
3709			    struct ocfs2_post_refcount *post)
3710{
3711	int ret;
3712	handle_t *handle;
3713	int credits = 1, ref_blocks = 0;
3714	struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
3715	struct ocfs2_alloc_context *meta_ac = NULL;
3716
3717	ret = ocfs2_calc_refcount_meta_credits(inode->i_sb,
3718					       ref_ci, ref_root_bh,
3719					       p_cluster, num_clusters,
3720					       &ref_blocks, &credits);
3721	if (ret) {
3722		mlog_errno(ret);
3723		goto out;
3724	}
3725
3726	trace_ocfs2_add_refcount_flag(ref_blocks, credits);
3727
3728	if (ref_blocks) {
3729		ret = ocfs2_reserve_new_metadata_blocks(OCFS2_SB(inode->i_sb),
3730							ref_blocks, &meta_ac);
3731		if (ret) {
3732			mlog_errno(ret);
3733			goto out;
3734		}
3735	}
3736
3737	if (post)
3738		credits += post->credits;
3739
3740	handle = ocfs2_start_trans(osb, credits);
3741	if (IS_ERR(handle)) {
3742		ret = PTR_ERR(handle);
3743		mlog_errno(ret);
3744		goto out;
3745	}
3746
3747	ret = ocfs2_mark_extent_refcounted(inode, data_et, handle,
3748					   cpos, num_clusters, p_cluster,
3749					   meta_ac, dealloc);
3750	if (ret) {
3751		mlog_errno(ret);
3752		goto out_commit;
3753	}
3754
3755	ret = __ocfs2_increase_refcount(handle, ref_ci, ref_root_bh,
3756					p_cluster, num_clusters, 0,
3757					meta_ac, dealloc);
3758	if (ret) {
3759		mlog_errno(ret);
3760		goto out_commit;
3761	}
3762
3763	if (post && post->func) {
3764		ret = post->func(inode, handle, post->para);
3765		if (ret)
3766			mlog_errno(ret);
3767	}
3768
3769out_commit:
3770	ocfs2_commit_trans(osb, handle);
3771out:
3772	if (meta_ac)
3773		ocfs2_free_alloc_context(meta_ac);
3774	return ret;
3775}
3776
3777static int ocfs2_change_ctime(struct inode *inode,
3778			      struct buffer_head *di_bh)
3779{
3780	int ret;
3781	handle_t *handle;
3782	struct ocfs2_dinode *di = (struct ocfs2_dinode *)di_bh->b_data;
3783
3784	handle = ocfs2_start_trans(OCFS2_SB(inode->i_sb),
3785				   OCFS2_INODE_UPDATE_CREDITS);
3786	if (IS_ERR(handle)) {
3787		ret = PTR_ERR(handle);
3788		mlog_errno(ret);
3789		goto out;
3790	}
3791
3792	ret = ocfs2_journal_access_di(handle, INODE_CACHE(inode), di_bh,
3793				      OCFS2_JOURNAL_ACCESS_WRITE);
3794	if (ret) {
3795		mlog_errno(ret);
3796		goto out_commit;
3797	}
3798
3799	inode->i_ctime = CURRENT_TIME;
3800	di->i_ctime = cpu_to_le64(inode->i_ctime.tv_sec);
3801	di->i_ctime_nsec = cpu_to_le32(inode->i_ctime.tv_nsec);
3802
3803	ocfs2_journal_dirty(handle, di_bh);
3804
3805out_commit:
3806	ocfs2_commit_trans(OCFS2_SB(inode->i_sb), handle);
3807out:
3808	return ret;
3809}
3810
3811static int ocfs2_attach_refcount_tree(struct inode *inode,
3812				      struct buffer_head *di_bh)
3813{
3814	int ret, data_changed = 0;
3815	struct buffer_head *ref_root_bh = NULL;
3816	struct ocfs2_inode_info *oi = OCFS2_I(inode);
3817	struct ocfs2_dinode *di = (struct ocfs2_dinode *)di_bh->b_data;
3818	struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
3819	struct ocfs2_refcount_tree *ref_tree;
3820	unsigned int ext_flags;
3821	loff_t size;
3822	u32 cpos, num_clusters, clusters, p_cluster;
3823	struct ocfs2_cached_dealloc_ctxt dealloc;
3824	struct ocfs2_extent_tree di_et;
3825
3826	ocfs2_init_dealloc_ctxt(&dealloc);
3827
3828	if (!(oi->ip_dyn_features & OCFS2_HAS_REFCOUNT_FL)) {
3829		ret = ocfs2_create_refcount_tree(inode, di_bh);
3830		if (ret) {
3831			mlog_errno(ret);
3832			goto out;
3833		}
3834	}
3835
3836	BUG_ON(!di->i_refcount_loc);
3837	ret = ocfs2_lock_refcount_tree(osb,
3838				       le64_to_cpu(di->i_refcount_loc), 1,
3839				       &ref_tree, &ref_root_bh);
3840	if (ret) {
3841		mlog_errno(ret);
3842		goto out;
3843	}
3844
3845	if (oi->ip_dyn_features & OCFS2_INLINE_DATA_FL)
3846		goto attach_xattr;
3847
3848	ocfs2_init_dinode_extent_tree(&di_et, INODE_CACHE(inode), di_bh);
3849
3850	size = i_size_read(inode);
3851	clusters = ocfs2_clusters_for_bytes(inode->i_sb, size);
3852
3853	cpos = 0;
3854	while (cpos < clusters) {
3855		ret = ocfs2_get_clusters(inode, cpos, &p_cluster,
3856					 &num_clusters, &ext_flags);
3857		if (ret) {
3858			mlog_errno(ret);
3859			goto unlock;
3860		}
3861		if (p_cluster && !(ext_flags & OCFS2_EXT_REFCOUNTED)) {
3862			ret = ocfs2_add_refcount_flag(inode, &di_et,
3863						      &ref_tree->rf_ci,
3864						      ref_root_bh, cpos,
3865						      p_cluster, num_clusters,
3866						      &dealloc, NULL);
3867			if (ret) {
3868				mlog_errno(ret);
3869				goto unlock;
3870			}
3871
3872			data_changed = 1;
3873		}
3874		cpos += num_clusters;
3875	}
3876
3877attach_xattr:
3878	if (oi->ip_dyn_features & OCFS2_HAS_XATTR_FL) {
3879		ret = ocfs2_xattr_attach_refcount_tree(inode, di_bh,
3880						       &ref_tree->rf_ci,
3881						       ref_root_bh,
3882						       &dealloc);
3883		if (ret) {
3884			mlog_errno(ret);
3885			goto unlock;
3886		}
3887	}
3888
3889	if (data_changed) {
3890		ret = ocfs2_change_ctime(inode, di_bh);
3891		if (ret)
3892			mlog_errno(ret);
3893	}
3894
3895unlock:
3896	ocfs2_unlock_refcount_tree(osb, ref_tree, 1);
3897	brelse(ref_root_bh);
3898
3899	if (!ret && ocfs2_dealloc_has_cluster(&dealloc)) {
3900		ocfs2_schedule_truncate_log_flush(osb, 1);
3901		ocfs2_run_deallocs(osb, &dealloc);
3902	}
3903out:
3904	/*
3905	 * Empty the extent map so that we may get the right extent
3906	 * record from the disk.
3907	 */
3908	ocfs2_extent_map_trunc(inode, 0);
3909
3910	return ret;
3911}
3912
3913static int ocfs2_add_refcounted_extent(struct inode *inode,
3914				   struct ocfs2_extent_tree *et,
3915				   struct ocfs2_caching_info *ref_ci,
3916				   struct buffer_head *ref_root_bh,
3917				   u32 cpos, u32 p_cluster, u32 num_clusters,
3918				   unsigned int ext_flags,
3919				   struct ocfs2_cached_dealloc_ctxt *dealloc)
3920{
3921	int ret;
3922	handle_t *handle;
3923	int credits = 0;
3924	struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
3925	struct ocfs2_alloc_context *meta_ac = NULL;
3926
3927	ret = ocfs2_lock_refcount_allocators(inode->i_sb,
3928					     p_cluster, num_clusters,
3929					     et, ref_ci,
3930					     ref_root_bh, &meta_ac,
3931					     NULL, &credits);
3932	if (ret) {
3933		mlog_errno(ret);
3934		goto out;
3935	}
3936
3937	handle = ocfs2_start_trans(osb, credits);
3938	if (IS_ERR(handle)) {
3939		ret = PTR_ERR(handle);
3940		mlog_errno(ret);
3941		goto out;
3942	}
3943
3944	ret = ocfs2_insert_extent(handle, et, cpos,
3945			ocfs2_clusters_to_blocks(inode->i_sb, p_cluster),
3946			num_clusters, ext_flags, meta_ac);
3947	if (ret) {
3948		mlog_errno(ret);
3949		goto out_commit;
3950	}
3951
3952	ret = ocfs2_increase_refcount(handle, ref_ci, ref_root_bh,
3953				      p_cluster, num_clusters,
3954				      meta_ac, dealloc);
3955	if (ret)
3956		mlog_errno(ret);
3957
3958out_commit:
3959	ocfs2_commit_trans(osb, handle);
3960out:
3961	if (meta_ac)
3962		ocfs2_free_alloc_context(meta_ac);
3963	return ret;
3964}
3965
3966static int ocfs2_duplicate_inline_data(struct inode *s_inode,
3967				       struct buffer_head *s_bh,
3968				       struct inode *t_inode,
3969				       struct buffer_head *t_bh)
3970{
3971	int ret;
3972	handle_t *handle;
3973	struct ocfs2_super *osb = OCFS2_SB(s_inode->i_sb);
3974	struct ocfs2_dinode *s_di = (struct ocfs2_dinode *)s_bh->b_data;
3975	struct ocfs2_dinode *t_di = (struct ocfs2_dinode *)t_bh->b_data;
3976
3977	BUG_ON(!(OCFS2_I(s_inode)->ip_dyn_features & OCFS2_INLINE_DATA_FL));
3978
3979	handle = ocfs2_start_trans(osb, OCFS2_INODE_UPDATE_CREDITS);
3980	if (IS_ERR(handle)) {
3981		ret = PTR_ERR(handle);
3982		mlog_errno(ret);
3983		goto out;
3984	}
3985
3986	ret = ocfs2_journal_access_di(handle, INODE_CACHE(t_inode), t_bh,
3987				      OCFS2_JOURNAL_ACCESS_WRITE);
3988	if (ret) {
3989		mlog_errno(ret);
3990		goto out_commit;
3991	}
3992
3993	t_di->id2.i_data.id_count = s_di->id2.i_data.id_count;
3994	memcpy(t_di->id2.i_data.id_data, s_di->id2.i_data.id_data,
3995	       le16_to_cpu(s_di->id2.i_data.id_count));
3996	spin_lock(&OCFS2_I(t_inode)->ip_lock);
3997	OCFS2_I(t_inode)->ip_dyn_features |= OCFS2_INLINE_DATA_FL;
3998	t_di->i_dyn_features = cpu_to_le16(OCFS2_I(t_inode)->ip_dyn_features);
3999	spin_unlock(&OCFS2_I(t_inode)->ip_lock);
4000
4001	ocfs2_journal_dirty(handle, t_bh);
4002
4003out_commit:
4004	ocfs2_commit_trans(osb, handle);
4005out:
4006	return ret;
4007}
4008
4009static int ocfs2_duplicate_extent_list(struct inode *s_inode,
4010				struct inode *t_inode,
4011				struct buffer_head *t_bh,
4012				struct ocfs2_caching_info *ref_ci,
4013				struct buffer_head *ref_root_bh,
4014				struct ocfs2_cached_dealloc_ctxt *dealloc)
4015{
4016	int ret = 0;
4017	u32 p_cluster, num_clusters, clusters, cpos;
4018	loff_t size;
4019	unsigned int ext_flags;
4020	struct ocfs2_extent_tree et;
4021
4022	ocfs2_init_dinode_extent_tree(&et, INODE_CACHE(t_inode), t_bh);
4023
4024	size = i_size_read(s_inode);
4025	clusters = ocfs2_clusters_for_bytes(s_inode->i_sb, size);
4026
4027	cpos = 0;
4028	while (cpos < clusters) {
4029		ret = ocfs2_get_clusters(s_inode, cpos, &p_cluster,
4030					 &num_clusters, &ext_flags);
4031		if (ret) {
4032			mlog_errno(ret);
4033			goto out;
4034		}
4035		if (p_cluster) {
4036			ret = ocfs2_add_refcounted_extent(t_inode, &et,
4037							  ref_ci, ref_root_bh,
4038							  cpos, p_cluster,
4039							  num_clusters,
4040							  ext_flags,
4041							  dealloc);
4042			if (ret) {
4043				mlog_errno(ret);
4044				goto out;
4045			}
4046		}
4047
4048		cpos += num_clusters;
4049	}
4050
4051out:
4052	return ret;
4053}
4054
4055/*
4056 * change the new file's attributes to the src.
4057 *
4058 * reflink creates a snapshot of a file, that means the attributes
4059 * must be identical except for three exceptions - nlink, ino, and ctime.
4060 */
4061static int ocfs2_complete_reflink(struct inode *s_inode,
4062				  struct buffer_head *s_bh,
4063				  struct inode *t_inode,
4064				  struct buffer_head *t_bh,
4065				  bool preserve)
4066{
4067	int ret;
4068	handle_t *handle;
4069	struct ocfs2_dinode *s_di = (struct ocfs2_dinode *)s_bh->b_data;
4070	struct ocfs2_dinode *di = (struct ocfs2_dinode *)t_bh->b_data;
4071	loff_t size = i_size_read(s_inode);
4072
4073	handle = ocfs2_start_trans(OCFS2_SB(t_inode->i_sb),
4074				   OCFS2_INODE_UPDATE_CREDITS);
4075	if (IS_ERR(handle)) {
4076		ret = PTR_ERR(handle);
4077		mlog_errno(ret);
4078		return ret;
4079	}
4080
4081	ret = ocfs2_journal_access_di(handle, INODE_CACHE(t_inode), t_bh,
4082				      OCFS2_JOURNAL_ACCESS_WRITE);
4083	if (ret) {
4084		mlog_errno(ret);
4085		goto out_commit;
4086	}
4087
4088	spin_lock(&OCFS2_I(t_inode)->ip_lock);
4089	OCFS2_I(t_inode)->ip_clusters = OCFS2_I(s_inode)->ip_clusters;
4090	OCFS2_I(t_inode)->ip_attr = OCFS2_I(s_inode)->ip_attr;
4091	OCFS2_I(t_inode)->ip_dyn_features = OCFS2_I(s_inode)->ip_dyn_features;
4092	spin_unlock(&OCFS2_I(t_inode)->ip_lock);
4093	i_size_write(t_inode, size);
4094	t_inode->i_blocks = s_inode->i_blocks;
4095
4096	di->i_xattr_inline_size = s_di->i_xattr_inline_size;
4097	di->i_clusters = s_di->i_clusters;
4098	di->i_size = s_di->i_size;
4099	di->i_dyn_features = s_di->i_dyn_features;
4100	di->i_attr = s_di->i_attr;
4101
4102	if (preserve) {
4103		t_inode->i_uid = s_inode->i_uid;
4104		t_inode->i_gid = s_inode->i_gid;
4105		t_inode->i_mode = s_inode->i_mode;
4106		di->i_uid = s_di->i_uid;
4107		di->i_gid = s_di->i_gid;
4108		di->i_mode = s_di->i_mode;
4109
4110		/*
4111		 * update time.
4112		 * we want mtime to appear identical to the source and
4113		 * update ctime.
4114		 */
4115		t_inode->i_ctime = CURRENT_TIME;
4116
4117		di->i_ctime = cpu_to_le64(t_inode->i_ctime.tv_sec);
4118		di->i_ctime_nsec = cpu_to_le32(t_inode->i_ctime.tv_nsec);
4119
4120		t_inode->i_mtime = s_inode->i_mtime;
4121		di->i_mtime = s_di->i_mtime;
4122		di->i_mtime_nsec = s_di->i_mtime_nsec;
4123	}
4124
4125	ocfs2_journal_dirty(handle, t_bh);
4126
4127out_commit:
4128	ocfs2_commit_trans(OCFS2_SB(t_inode->i_sb), handle);
4129	return ret;
4130}
4131
4132static int ocfs2_create_reflink_node(struct inode *s_inode,
4133				     struct buffer_head *s_bh,
4134				     struct inode *t_inode,
4135				     struct buffer_head *t_bh,
4136				     bool preserve)
4137{
4138	int ret;
4139	struct buffer_head *ref_root_bh = NULL;
4140	struct ocfs2_cached_dealloc_ctxt dealloc;
4141	struct ocfs2_super *osb = OCFS2_SB(s_inode->i_sb);
4142	struct ocfs2_refcount_block *rb;
4143	struct ocfs2_dinode *di = (struct ocfs2_dinode *)s_bh->b_data;
4144	struct ocfs2_refcount_tree *ref_tree;
4145
4146	ocfs2_init_dealloc_ctxt(&dealloc);
4147
4148	ret = ocfs2_set_refcount_tree(t_inode, t_bh,
4149				      le64_to_cpu(di->i_refcount_loc));
4150	if (ret) {
4151		mlog_errno(ret);
4152		goto out;
4153	}
4154
4155	if (OCFS2_I(s_inode)->ip_dyn_features & OCFS2_INLINE_DATA_FL) {
4156		ret = ocfs2_duplicate_inline_data(s_inode, s_bh,
4157						  t_inode, t_bh);
4158		if (ret)
4159			mlog_errno(ret);
4160		goto out;
4161	}
4162
4163	ret = ocfs2_lock_refcount_tree(osb, le64_to_cpu(di->i_refcount_loc),
4164				       1, &ref_tree, &ref_root_bh);
4165	if (ret) {
4166		mlog_errno(ret);
4167		goto out;
4168	}
4169	rb = (struct ocfs2_refcount_block *)ref_root_bh->b_data;
4170
4171	ret = ocfs2_duplicate_extent_list(s_inode, t_inode, t_bh,
4172					  &ref_tree->rf_ci, ref_root_bh,
4173					  &dealloc);
4174	if (ret) {
4175		mlog_errno(ret);
4176		goto out_unlock_refcount;
4177	}
4178
4179out_unlock_refcount:
4180	ocfs2_unlock_refcount_tree(osb, ref_tree, 1);
4181	brelse(ref_root_bh);
4182out:
4183	if (ocfs2_dealloc_has_cluster(&dealloc)) {
4184		ocfs2_schedule_truncate_log_flush(osb, 1);
4185		ocfs2_run_deallocs(osb, &dealloc);
4186	}
4187
4188	return ret;
4189}
4190
4191static int __ocfs2_reflink(struct dentry *old_dentry,
4192			   struct buffer_head *old_bh,
4193			   struct inode *new_inode,
4194			   bool preserve)
4195{
4196	int ret;
4197	struct inode *inode = d_inode(old_dentry);
4198	struct buffer_head *new_bh = NULL;
4199
4200	if (OCFS2_I(inode)->ip_flags & OCFS2_INODE_SYSTEM_FILE) {
4201		ret = -EINVAL;
4202		mlog_errno(ret);
4203		goto out;
4204	}
4205
4206	ret = filemap_fdatawrite(inode->i_mapping);
4207	if (ret) {
4208		mlog_errno(ret);
4209		goto out;
4210	}
4211
4212	ret = ocfs2_attach_refcount_tree(inode, old_bh);
4213	if (ret) {
4214		mlog_errno(ret);
4215		goto out;
4216	}
4217
4218	mutex_lock_nested(&new_inode->i_mutex, I_MUTEX_CHILD);
4219	ret = ocfs2_inode_lock_nested(new_inode, &new_bh, 1,
4220				      OI_LS_REFLINK_TARGET);
4221	if (ret) {
4222		mlog_errno(ret);
4223		goto out_unlock;
4224	}
4225
4226	ret = ocfs2_create_reflink_node(inode, old_bh,
4227					new_inode, new_bh, preserve);
4228	if (ret) {
4229		mlog_errno(ret);
4230		goto inode_unlock;
4231	}
4232
4233	if (OCFS2_I(inode)->ip_dyn_features & OCFS2_HAS_XATTR_FL) {
4234		ret = ocfs2_reflink_xattrs(inode, old_bh,
4235					   new_inode, new_bh,
4236					   preserve);
4237		if (ret) {
4238			mlog_errno(ret);
4239			goto inode_unlock;
4240		}
4241	}
4242
4243	ret = ocfs2_complete_reflink(inode, old_bh,
4244				     new_inode, new_bh, preserve);
4245	if (ret)
4246		mlog_errno(ret);
4247
4248inode_unlock:
4249	ocfs2_inode_unlock(new_inode, 1);
4250	brelse(new_bh);
4251out_unlock:
4252	mutex_unlock(&new_inode->i_mutex);
4253out:
4254	if (!ret) {
4255		ret = filemap_fdatawait(inode->i_mapping);
4256		if (ret)
4257			mlog_errno(ret);
4258	}
4259	return ret;
4260}
4261
4262static int ocfs2_reflink(struct dentry *old_dentry, struct inode *dir,
4263			 struct dentry *new_dentry, bool preserve)
4264{
4265	int error;
4266	struct inode *inode = d_inode(old_dentry);
4267	struct buffer_head *old_bh = NULL;
4268	struct inode *new_orphan_inode = NULL;
4269
4270	if (!ocfs2_refcount_tree(OCFS2_SB(inode->i_sb)))
4271		return -EOPNOTSUPP;
4272
4273
4274	error = ocfs2_create_inode_in_orphan(dir, inode->i_mode,
4275					     &new_orphan_inode);
4276	if (error) {
4277		mlog_errno(error);
4278		goto out;
4279	}
4280
4281	error = ocfs2_rw_lock(inode, 1);
4282	if (error) {
4283		mlog_errno(error);
4284		goto out;
4285	}
4286
4287	error = ocfs2_inode_lock(inode, &old_bh, 1);
4288	if (error) {
4289		mlog_errno(error);
4290		ocfs2_rw_unlock(inode, 1);
4291		goto out;
4292	}
4293
4294	down_write(&OCFS2_I(inode)->ip_xattr_sem);
4295	down_write(&OCFS2_I(inode)->ip_alloc_sem);
4296	error = __ocfs2_reflink(old_dentry, old_bh,
4297				new_orphan_inode, preserve);
4298	up_write(&OCFS2_I(inode)->ip_alloc_sem);
4299	up_write(&OCFS2_I(inode)->ip_xattr_sem);
4300
4301	ocfs2_inode_unlock(inode, 1);
4302	ocfs2_rw_unlock(inode, 1);
4303	brelse(old_bh);
4304
4305	if (error) {
4306		mlog_errno(error);
4307		goto out;
4308	}
4309
4310	/* If the security isn't preserved, we need to re-initialize them. */
4311	if (!preserve) {
4312		error = ocfs2_init_security_and_acl(dir, new_orphan_inode,
4313						    &new_dentry->d_name);
4314		if (error)
4315			mlog_errno(error);
4316	}
4317out:
4318	if (!error) {
4319		error = ocfs2_mv_orphaned_inode_to_new(dir, new_orphan_inode,
4320						       new_dentry);
4321		if (error)
4322			mlog_errno(error);
4323	}
4324
4325	if (new_orphan_inode) {
4326		/*
4327		 * We need to open_unlock the inode no matter whether we
4328		 * succeed or not, so that other nodes can delete it later.
4329		 */
4330		ocfs2_open_unlock(new_orphan_inode);
4331		if (error)
4332			iput(new_orphan_inode);
4333	}
4334
4335	return error;
4336}
4337
4338/*
4339 * Below here are the bits used by OCFS2_IOC_REFLINK() to fake
4340 * sys_reflink().  This will go away when vfs_reflink() exists in
4341 * fs/namei.c.
4342 */
4343
4344/* copied from may_create in VFS. */
4345static inline int ocfs2_may_create(struct inode *dir, struct dentry *child)
4346{
4347	if (d_really_is_positive(child))
4348		return -EEXIST;
4349	if (IS_DEADDIR(dir))
4350		return -ENOENT;
4351	return inode_permission(dir, MAY_WRITE | MAY_EXEC);
4352}
4353
4354/**
4355 * ocfs2_vfs_reflink - Create a reference-counted link
4356 *
4357 * @old_dentry:        source dentry + inode
4358 * @dir:       directory to create the target
4359 * @new_dentry:        target dentry
4360 * @preserve:  if true, preserve all file attributes
4361 */
4362static int ocfs2_vfs_reflink(struct dentry *old_dentry, struct inode *dir,
4363			     struct dentry *new_dentry, bool preserve)
4364{
4365	struct inode *inode = d_inode(old_dentry);
4366	int error;
4367
4368	if (!inode)
4369		return -ENOENT;
4370
4371	error = ocfs2_may_create(dir, new_dentry);
4372	if (error)
4373		return error;
4374
4375	if (dir->i_sb != inode->i_sb)
4376		return -EXDEV;
4377
4378	/*
4379	 * A reflink to an append-only or immutable file cannot be created.
4380	 */
4381	if (IS_APPEND(inode) || IS_IMMUTABLE(inode))
4382		return -EPERM;
4383
4384	/* Only regular files can be reflinked. */
4385	if (!S_ISREG(inode->i_mode))
4386		return -EPERM;
4387
4388	/*
4389	 * If the caller wants to preserve ownership, they require the
4390	 * rights to do so.
4391	 */
4392	if (preserve) {
4393		if (!uid_eq(current_fsuid(), inode->i_uid) && !capable(CAP_CHOWN))
4394			return -EPERM;
4395		if (!in_group_p(inode->i_gid) && !capable(CAP_CHOWN))
4396			return -EPERM;
4397	}
4398
4399	/*
4400	 * If the caller is modifying any aspect of the attributes, they
4401	 * are not creating a snapshot.  They need read permission on the
4402	 * file.
4403	 */
4404	if (!preserve) {
4405		error = inode_permission(inode, MAY_READ);
4406		if (error)
4407			return error;
4408	}
4409
4410	mutex_lock(&inode->i_mutex);
4411	dquot_initialize(dir);
4412	error = ocfs2_reflink(old_dentry, dir, new_dentry, preserve);
4413	mutex_unlock(&inode->i_mutex);
4414	if (!error)
4415		fsnotify_create(dir, new_dentry);
4416	return error;
4417}
4418/*
4419 * Most codes are copied from sys_linkat.
4420 */
4421int ocfs2_reflink_ioctl(struct inode *inode,
4422			const char __user *oldname,
4423			const char __user *newname,
4424			bool preserve)
4425{
4426	struct dentry *new_dentry;
4427	struct path old_path, new_path;
4428	int error;
4429
4430	if (!ocfs2_refcount_tree(OCFS2_SB(inode->i_sb)))
4431		return -EOPNOTSUPP;
4432
4433	error = user_path_at(AT_FDCWD, oldname, 0, &old_path);
4434	if (error) {
4435		mlog_errno(error);
4436		return error;
4437	}
4438
4439	new_dentry = user_path_create(AT_FDCWD, newname, &new_path, 0);
4440	error = PTR_ERR(new_dentry);
4441	if (IS_ERR(new_dentry)) {
4442		mlog_errno(error);
4443		goto out;
4444	}
4445
4446	error = -EXDEV;
4447	if (old_path.mnt != new_path.mnt) {
4448		mlog_errno(error);
4449		goto out_dput;
4450	}
4451
4452	error = ocfs2_vfs_reflink(old_path.dentry,
4453				  d_inode(new_path.dentry),
4454				  new_dentry, preserve);
4455out_dput:
4456	done_path_create(&new_path, new_dentry);
4457out:
4458	path_put(&old_path);
4459
4460	return error;
4461}
4462