1/* -*- mode: c; c-basic-offset: 8; -*-
2 * vim: noexpandtab sw=8 ts=8 sts=0:
3 *
4 * file.c
5 *
6 * File open, close, extend, truncate
7 *
8 * Copyright (C) 2002, 2004 Oracle.  All rights reserved.
9 *
10 * This program is free software; you can redistribute it and/or
11 * modify it under the terms of the GNU General Public
12 * License as published by the Free Software Foundation; either
13 * version 2 of the License, or (at your option) any later version.
14 *
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
18 * General Public License for more details.
19 *
20 * You should have received a copy of the GNU General Public
21 * License along with this program; if not, write to the
22 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
23 * Boston, MA 021110-1307, USA.
24 */
25
26#include <linux/capability.h>
27#include <linux/fs.h>
28#include <linux/types.h>
29#include <linux/slab.h>
30#include <linux/highmem.h>
31#include <linux/pagemap.h>
32#include <linux/uio.h>
33#include <linux/sched.h>
34#include <linux/splice.h>
35#include <linux/mount.h>
36#include <linux/writeback.h>
37#include <linux/falloc.h>
38#include <linux/quotaops.h>
39#include <linux/blkdev.h>
40#include <linux/backing-dev.h>
41
42#include <cluster/masklog.h>
43
44#include "ocfs2.h"
45
46#include "alloc.h"
47#include "aops.h"
48#include "dir.h"
49#include "dlmglue.h"
50#include "extent_map.h"
51#include "file.h"
52#include "sysfile.h"
53#include "inode.h"
54#include "ioctl.h"
55#include "journal.h"
56#include "locks.h"
57#include "mmap.h"
58#include "suballoc.h"
59#include "super.h"
60#include "xattr.h"
61#include "acl.h"
62#include "quota.h"
63#include "refcounttree.h"
64#include "ocfs2_trace.h"
65
66#include "buffer_head_io.h"
67
68static int ocfs2_init_file_private(struct inode *inode, struct file *file)
69{
70	struct ocfs2_file_private *fp;
71
72	fp = kzalloc(sizeof(struct ocfs2_file_private), GFP_KERNEL);
73	if (!fp)
74		return -ENOMEM;
75
76	fp->fp_file = file;
77	mutex_init(&fp->fp_mutex);
78	ocfs2_file_lock_res_init(&fp->fp_flock, fp);
79	file->private_data = fp;
80
81	return 0;
82}
83
84static void ocfs2_free_file_private(struct inode *inode, struct file *file)
85{
86	struct ocfs2_file_private *fp = file->private_data;
87	struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
88
89	if (fp) {
90		ocfs2_simple_drop_lockres(osb, &fp->fp_flock);
91		ocfs2_lock_res_free(&fp->fp_flock);
92		kfree(fp);
93		file->private_data = NULL;
94	}
95}
96
97static int ocfs2_file_open(struct inode *inode, struct file *file)
98{
99	int status;
100	int mode = file->f_flags;
101	struct ocfs2_inode_info *oi = OCFS2_I(inode);
102
103	trace_ocfs2_file_open(inode, file, file->f_path.dentry,
104			      (unsigned long long)OCFS2_I(inode)->ip_blkno,
105			      file->f_path.dentry->d_name.len,
106			      file->f_path.dentry->d_name.name, mode);
107
108	if (file->f_mode & FMODE_WRITE) {
109		status = dquot_initialize(inode);
110		if (status)
111			goto leave;
112	}
113
114	spin_lock(&oi->ip_lock);
115
116	/* Check that the inode hasn't been wiped from disk by another
117	 * node. If it hasn't then we're safe as long as we hold the
118	 * spin lock until our increment of open count. */
119	if (OCFS2_I(inode)->ip_flags & OCFS2_INODE_DELETED) {
120		spin_unlock(&oi->ip_lock);
121
122		status = -ENOENT;
123		goto leave;
124	}
125
126	if (mode & O_DIRECT)
127		oi->ip_flags |= OCFS2_INODE_OPEN_DIRECT;
128
129	oi->ip_open_count++;
130	spin_unlock(&oi->ip_lock);
131
132	status = ocfs2_init_file_private(inode, file);
133	if (status) {
134		/*
135		 * We want to set open count back if we're failing the
136		 * open.
137		 */
138		spin_lock(&oi->ip_lock);
139		oi->ip_open_count--;
140		spin_unlock(&oi->ip_lock);
141	}
142
143leave:
144	return status;
145}
146
147static int ocfs2_file_release(struct inode *inode, struct file *file)
148{
149	struct ocfs2_inode_info *oi = OCFS2_I(inode);
150
151	spin_lock(&oi->ip_lock);
152	if (!--oi->ip_open_count)
153		oi->ip_flags &= ~OCFS2_INODE_OPEN_DIRECT;
154
155	trace_ocfs2_file_release(inode, file, file->f_path.dentry,
156				 oi->ip_blkno,
157				 file->f_path.dentry->d_name.len,
158				 file->f_path.dentry->d_name.name,
159				 oi->ip_open_count);
160	spin_unlock(&oi->ip_lock);
161
162	ocfs2_free_file_private(inode, file);
163
164	return 0;
165}
166
167static int ocfs2_dir_open(struct inode *inode, struct file *file)
168{
169	return ocfs2_init_file_private(inode, file);
170}
171
172static int ocfs2_dir_release(struct inode *inode, struct file *file)
173{
174	ocfs2_free_file_private(inode, file);
175	return 0;
176}
177
178static int ocfs2_sync_file(struct file *file, loff_t start, loff_t end,
179			   int datasync)
180{
181	int err = 0;
182	struct inode *inode = file->f_mapping->host;
183	struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
184	struct ocfs2_inode_info *oi = OCFS2_I(inode);
185	journal_t *journal = osb->journal->j_journal;
186	int ret;
187	tid_t commit_tid;
188	bool needs_barrier = false;
189
190	trace_ocfs2_sync_file(inode, file, file->f_path.dentry,
191			      OCFS2_I(inode)->ip_blkno,
192			      file->f_path.dentry->d_name.len,
193			      file->f_path.dentry->d_name.name,
194			      (unsigned long long)datasync);
195
196	if (ocfs2_is_hard_readonly(osb) || ocfs2_is_soft_readonly(osb))
197		return -EROFS;
198
199	err = filemap_write_and_wait_range(inode->i_mapping, start, end);
200	if (err)
201		return err;
202
203	commit_tid = datasync ? oi->i_datasync_tid : oi->i_sync_tid;
204	if (journal->j_flags & JBD2_BARRIER &&
205	    !jbd2_trans_will_send_data_barrier(journal, commit_tid))
206		needs_barrier = true;
207	err = jbd2_complete_transaction(journal, commit_tid);
208	if (needs_barrier) {
209		ret = blkdev_issue_flush(inode->i_sb->s_bdev, GFP_KERNEL, NULL);
210		if (!err)
211			err = ret;
212	}
213
214	if (err)
215		mlog_errno(err);
216
217	return (err < 0) ? -EIO : 0;
218}
219
220int ocfs2_should_update_atime(struct inode *inode,
221			      struct vfsmount *vfsmnt)
222{
223	struct timespec now;
224	struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
225
226	if (ocfs2_is_hard_readonly(osb) || ocfs2_is_soft_readonly(osb))
227		return 0;
228
229	if ((inode->i_flags & S_NOATIME) ||
230	    ((inode->i_sb->s_flags & MS_NODIRATIME) && S_ISDIR(inode->i_mode)))
231		return 0;
232
233	/*
234	 * We can be called with no vfsmnt structure - NFSD will
235	 * sometimes do this.
236	 *
237	 * Note that our action here is different than touch_atime() -
238	 * if we can't tell whether this is a noatime mount, then we
239	 * don't know whether to trust the value of s_atime_quantum.
240	 */
241	if (vfsmnt == NULL)
242		return 0;
243
244	if ((vfsmnt->mnt_flags & MNT_NOATIME) ||
245	    ((vfsmnt->mnt_flags & MNT_NODIRATIME) && S_ISDIR(inode->i_mode)))
246		return 0;
247
248	if (vfsmnt->mnt_flags & MNT_RELATIME) {
249		if ((timespec_compare(&inode->i_atime, &inode->i_mtime) <= 0) ||
250		    (timespec_compare(&inode->i_atime, &inode->i_ctime) <= 0))
251			return 1;
252
253		return 0;
254	}
255
256	now = CURRENT_TIME;
257	if ((now.tv_sec - inode->i_atime.tv_sec <= osb->s_atime_quantum))
258		return 0;
259	else
260		return 1;
261}
262
263int ocfs2_update_inode_atime(struct inode *inode,
264			     struct buffer_head *bh)
265{
266	int ret;
267	struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
268	handle_t *handle;
269	struct ocfs2_dinode *di = (struct ocfs2_dinode *) bh->b_data;
270
271	handle = ocfs2_start_trans(osb, OCFS2_INODE_UPDATE_CREDITS);
272	if (IS_ERR(handle)) {
273		ret = PTR_ERR(handle);
274		mlog_errno(ret);
275		goto out;
276	}
277
278	ret = ocfs2_journal_access_di(handle, INODE_CACHE(inode), bh,
279				      OCFS2_JOURNAL_ACCESS_WRITE);
280	if (ret) {
281		mlog_errno(ret);
282		goto out_commit;
283	}
284
285	/*
286	 * Don't use ocfs2_mark_inode_dirty() here as we don't always
287	 * have i_mutex to guard against concurrent changes to other
288	 * inode fields.
289	 */
290	inode->i_atime = CURRENT_TIME;
291	di->i_atime = cpu_to_le64(inode->i_atime.tv_sec);
292	di->i_atime_nsec = cpu_to_le32(inode->i_atime.tv_nsec);
293	ocfs2_update_inode_fsync_trans(handle, inode, 0);
294	ocfs2_journal_dirty(handle, bh);
295
296out_commit:
297	ocfs2_commit_trans(OCFS2_SB(inode->i_sb), handle);
298out:
299	return ret;
300}
301
302int ocfs2_set_inode_size(handle_t *handle,
303				struct inode *inode,
304				struct buffer_head *fe_bh,
305				u64 new_i_size)
306{
307	int status;
308
309	i_size_write(inode, new_i_size);
310	inode->i_blocks = ocfs2_inode_sector_count(inode);
311	inode->i_ctime = inode->i_mtime = CURRENT_TIME;
312
313	status = ocfs2_mark_inode_dirty(handle, inode, fe_bh);
314	if (status < 0) {
315		mlog_errno(status);
316		goto bail;
317	}
318
319bail:
320	return status;
321}
322
323int ocfs2_simple_size_update(struct inode *inode,
324			     struct buffer_head *di_bh,
325			     u64 new_i_size)
326{
327	int ret;
328	struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
329	handle_t *handle = NULL;
330
331	handle = ocfs2_start_trans(osb, OCFS2_INODE_UPDATE_CREDITS);
332	if (IS_ERR(handle)) {
333		ret = PTR_ERR(handle);
334		mlog_errno(ret);
335		goto out;
336	}
337
338	ret = ocfs2_set_inode_size(handle, inode, di_bh,
339				   new_i_size);
340	if (ret < 0)
341		mlog_errno(ret);
342
343	ocfs2_update_inode_fsync_trans(handle, inode, 0);
344	ocfs2_commit_trans(osb, handle);
345out:
346	return ret;
347}
348
349static int ocfs2_cow_file_pos(struct inode *inode,
350			      struct buffer_head *fe_bh,
351			      u64 offset)
352{
353	int status;
354	u32 phys, cpos = offset >> OCFS2_SB(inode->i_sb)->s_clustersize_bits;
355	unsigned int num_clusters = 0;
356	unsigned int ext_flags = 0;
357
358	/*
359	 * If the new offset is aligned to the range of the cluster, there is
360	 * no space for ocfs2_zero_range_for_truncate to fill, so no need to
361	 * CoW either.
362	 */
363	if ((offset & (OCFS2_SB(inode->i_sb)->s_clustersize - 1)) == 0)
364		return 0;
365
366	status = ocfs2_get_clusters(inode, cpos, &phys,
367				    &num_clusters, &ext_flags);
368	if (status) {
369		mlog_errno(status);
370		goto out;
371	}
372
373	if (!(ext_flags & OCFS2_EXT_REFCOUNTED))
374		goto out;
375
376	return ocfs2_refcount_cow(inode, fe_bh, cpos, 1, cpos+1);
377
378out:
379	return status;
380}
381
382static int ocfs2_orphan_for_truncate(struct ocfs2_super *osb,
383				     struct inode *inode,
384				     struct buffer_head *fe_bh,
385				     u64 new_i_size)
386{
387	int status;
388	handle_t *handle;
389	struct ocfs2_dinode *di;
390	u64 cluster_bytes;
391
392	/*
393	 * We need to CoW the cluster contains the offset if it is reflinked
394	 * since we will call ocfs2_zero_range_for_truncate later which will
395	 * write "0" from offset to the end of the cluster.
396	 */
397	status = ocfs2_cow_file_pos(inode, fe_bh, new_i_size);
398	if (status) {
399		mlog_errno(status);
400		return status;
401	}
402
403	/* TODO: This needs to actually orphan the inode in this
404	 * transaction. */
405
406	handle = ocfs2_start_trans(osb, OCFS2_INODE_UPDATE_CREDITS);
407	if (IS_ERR(handle)) {
408		status = PTR_ERR(handle);
409		mlog_errno(status);
410		goto out;
411	}
412
413	status = ocfs2_journal_access_di(handle, INODE_CACHE(inode), fe_bh,
414					 OCFS2_JOURNAL_ACCESS_WRITE);
415	if (status < 0) {
416		mlog_errno(status);
417		goto out_commit;
418	}
419
420	/*
421	 * Do this before setting i_size.
422	 */
423	cluster_bytes = ocfs2_align_bytes_to_clusters(inode->i_sb, new_i_size);
424	status = ocfs2_zero_range_for_truncate(inode, handle, new_i_size,
425					       cluster_bytes);
426	if (status) {
427		mlog_errno(status);
428		goto out_commit;
429	}
430
431	i_size_write(inode, new_i_size);
432	inode->i_ctime = inode->i_mtime = CURRENT_TIME;
433
434	di = (struct ocfs2_dinode *) fe_bh->b_data;
435	di->i_size = cpu_to_le64(new_i_size);
436	di->i_ctime = di->i_mtime = cpu_to_le64(inode->i_ctime.tv_sec);
437	di->i_ctime_nsec = di->i_mtime_nsec = cpu_to_le32(inode->i_ctime.tv_nsec);
438	ocfs2_update_inode_fsync_trans(handle, inode, 0);
439
440	ocfs2_journal_dirty(handle, fe_bh);
441
442out_commit:
443	ocfs2_commit_trans(osb, handle);
444out:
445	return status;
446}
447
448int ocfs2_truncate_file(struct inode *inode,
449			       struct buffer_head *di_bh,
450			       u64 new_i_size)
451{
452	int status = 0;
453	struct ocfs2_dinode *fe = NULL;
454	struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
455
456	/* We trust di_bh because it comes from ocfs2_inode_lock(), which
457	 * already validated it */
458	fe = (struct ocfs2_dinode *) di_bh->b_data;
459
460	trace_ocfs2_truncate_file((unsigned long long)OCFS2_I(inode)->ip_blkno,
461				  (unsigned long long)le64_to_cpu(fe->i_size),
462				  (unsigned long long)new_i_size);
463
464	mlog_bug_on_msg(le64_to_cpu(fe->i_size) != i_size_read(inode),
465			"Inode %llu, inode i_size = %lld != di "
466			"i_size = %llu, i_flags = 0x%x\n",
467			(unsigned long long)OCFS2_I(inode)->ip_blkno,
468			i_size_read(inode),
469			(unsigned long long)le64_to_cpu(fe->i_size),
470			le32_to_cpu(fe->i_flags));
471
472	if (new_i_size > le64_to_cpu(fe->i_size)) {
473		trace_ocfs2_truncate_file_error(
474			(unsigned long long)le64_to_cpu(fe->i_size),
475			(unsigned long long)new_i_size);
476		status = -EINVAL;
477		mlog_errno(status);
478		goto bail;
479	}
480
481	down_write(&OCFS2_I(inode)->ip_alloc_sem);
482
483	ocfs2_resv_discard(&osb->osb_la_resmap,
484			   &OCFS2_I(inode)->ip_la_data_resv);
485
486	/*
487	 * The inode lock forced other nodes to sync and drop their
488	 * pages, which (correctly) happens even if we have a truncate
489	 * without allocation change - ocfs2 cluster sizes can be much
490	 * greater than page size, so we have to truncate them
491	 * anyway.
492	 */
493	unmap_mapping_range(inode->i_mapping, new_i_size + PAGE_SIZE - 1, 0, 1);
494	truncate_inode_pages(inode->i_mapping, new_i_size);
495
496	if (OCFS2_I(inode)->ip_dyn_features & OCFS2_INLINE_DATA_FL) {
497		status = ocfs2_truncate_inline(inode, di_bh, new_i_size,
498					       i_size_read(inode), 1);
499		if (status)
500			mlog_errno(status);
501
502		goto bail_unlock_sem;
503	}
504
505	/* alright, we're going to need to do a full blown alloc size
506	 * change. Orphan the inode so that recovery can complete the
507	 * truncate if necessary. This does the task of marking
508	 * i_size. */
509	status = ocfs2_orphan_for_truncate(osb, inode, di_bh, new_i_size);
510	if (status < 0) {
511		mlog_errno(status);
512		goto bail_unlock_sem;
513	}
514
515	status = ocfs2_commit_truncate(osb, inode, di_bh);
516	if (status < 0) {
517		mlog_errno(status);
518		goto bail_unlock_sem;
519	}
520
521	/* TODO: orphan dir cleanup here. */
522bail_unlock_sem:
523	up_write(&OCFS2_I(inode)->ip_alloc_sem);
524
525bail:
526	if (!status && OCFS2_I(inode)->ip_clusters == 0)
527		status = ocfs2_try_remove_refcount_tree(inode, di_bh);
528
529	return status;
530}
531
532/*
533 * extend file allocation only here.
534 * we'll update all the disk stuff, and oip->alloc_size
535 *
536 * expect stuff to be locked, a transaction started and enough data /
537 * metadata reservations in the contexts.
538 *
539 * Will return -EAGAIN, and a reason if a restart is needed.
540 * If passed in, *reason will always be set, even in error.
541 */
542int ocfs2_add_inode_data(struct ocfs2_super *osb,
543			 struct inode *inode,
544			 u32 *logical_offset,
545			 u32 clusters_to_add,
546			 int mark_unwritten,
547			 struct buffer_head *fe_bh,
548			 handle_t *handle,
549			 struct ocfs2_alloc_context *data_ac,
550			 struct ocfs2_alloc_context *meta_ac,
551			 enum ocfs2_alloc_restarted *reason_ret)
552{
553	int ret;
554	struct ocfs2_extent_tree et;
555
556	ocfs2_init_dinode_extent_tree(&et, INODE_CACHE(inode), fe_bh);
557	ret = ocfs2_add_clusters_in_btree(handle, &et, logical_offset,
558					  clusters_to_add, mark_unwritten,
559					  data_ac, meta_ac, reason_ret);
560
561	return ret;
562}
563
564static int __ocfs2_extend_allocation(struct inode *inode, u32 logical_start,
565				     u32 clusters_to_add, int mark_unwritten)
566{
567	int status = 0;
568	int restart_func = 0;
569	int credits;
570	u32 prev_clusters;
571	struct buffer_head *bh = NULL;
572	struct ocfs2_dinode *fe = NULL;
573	handle_t *handle = NULL;
574	struct ocfs2_alloc_context *data_ac = NULL;
575	struct ocfs2_alloc_context *meta_ac = NULL;
576	enum ocfs2_alloc_restarted why = RESTART_NONE;
577	struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
578	struct ocfs2_extent_tree et;
579	int did_quota = 0;
580
581	/*
582	 * Unwritten extent only exists for file systems which
583	 * support holes.
584	 */
585	BUG_ON(mark_unwritten && !ocfs2_sparse_alloc(osb));
586
587	status = ocfs2_read_inode_block(inode, &bh);
588	if (status < 0) {
589		mlog_errno(status);
590		goto leave;
591	}
592	fe = (struct ocfs2_dinode *) bh->b_data;
593
594restart_all:
595	BUG_ON(le32_to_cpu(fe->i_clusters) != OCFS2_I(inode)->ip_clusters);
596
597	ocfs2_init_dinode_extent_tree(&et, INODE_CACHE(inode), bh);
598	status = ocfs2_lock_allocators(inode, &et, clusters_to_add, 0,
599				       &data_ac, &meta_ac);
600	if (status) {
601		mlog_errno(status);
602		goto leave;
603	}
604
605	credits = ocfs2_calc_extend_credits(osb->sb, &fe->id2.i_list);
606	handle = ocfs2_start_trans(osb, credits);
607	if (IS_ERR(handle)) {
608		status = PTR_ERR(handle);
609		handle = NULL;
610		mlog_errno(status);
611		goto leave;
612	}
613
614restarted_transaction:
615	trace_ocfs2_extend_allocation(
616		(unsigned long long)OCFS2_I(inode)->ip_blkno,
617		(unsigned long long)i_size_read(inode),
618		le32_to_cpu(fe->i_clusters), clusters_to_add,
619		why, restart_func);
620
621	status = dquot_alloc_space_nodirty(inode,
622			ocfs2_clusters_to_bytes(osb->sb, clusters_to_add));
623	if (status)
624		goto leave;
625	did_quota = 1;
626
627	/* reserve a write to the file entry early on - that we if we
628	 * run out of credits in the allocation path, we can still
629	 * update i_size. */
630	status = ocfs2_journal_access_di(handle, INODE_CACHE(inode), bh,
631					 OCFS2_JOURNAL_ACCESS_WRITE);
632	if (status < 0) {
633		mlog_errno(status);
634		goto leave;
635	}
636
637	prev_clusters = OCFS2_I(inode)->ip_clusters;
638
639	status = ocfs2_add_inode_data(osb,
640				      inode,
641				      &logical_start,
642				      clusters_to_add,
643				      mark_unwritten,
644				      bh,
645				      handle,
646				      data_ac,
647				      meta_ac,
648				      &why);
649	if ((status < 0) && (status != -EAGAIN)) {
650		if (status != -ENOSPC)
651			mlog_errno(status);
652		goto leave;
653	}
654	ocfs2_update_inode_fsync_trans(handle, inode, 1);
655	ocfs2_journal_dirty(handle, bh);
656
657	spin_lock(&OCFS2_I(inode)->ip_lock);
658	clusters_to_add -= (OCFS2_I(inode)->ip_clusters - prev_clusters);
659	spin_unlock(&OCFS2_I(inode)->ip_lock);
660	/* Release unused quota reservation */
661	dquot_free_space(inode,
662			ocfs2_clusters_to_bytes(osb->sb, clusters_to_add));
663	did_quota = 0;
664
665	if (why != RESTART_NONE && clusters_to_add) {
666		if (why == RESTART_META) {
667			restart_func = 1;
668			status = 0;
669		} else {
670			BUG_ON(why != RESTART_TRANS);
671
672			status = ocfs2_allocate_extend_trans(handle, 1);
673			if (status < 0) {
674				/* handle still has to be committed at
675				 * this point. */
676				status = -ENOMEM;
677				mlog_errno(status);
678				goto leave;
679			}
680			goto restarted_transaction;
681		}
682	}
683
684	trace_ocfs2_extend_allocation_end(OCFS2_I(inode)->ip_blkno,
685	     le32_to_cpu(fe->i_clusters),
686	     (unsigned long long)le64_to_cpu(fe->i_size),
687	     OCFS2_I(inode)->ip_clusters,
688	     (unsigned long long)i_size_read(inode));
689
690leave:
691	if (status < 0 && did_quota)
692		dquot_free_space(inode,
693			ocfs2_clusters_to_bytes(osb->sb, clusters_to_add));
694	if (handle) {
695		ocfs2_commit_trans(osb, handle);
696		handle = NULL;
697	}
698	if (data_ac) {
699		ocfs2_free_alloc_context(data_ac);
700		data_ac = NULL;
701	}
702	if (meta_ac) {
703		ocfs2_free_alloc_context(meta_ac);
704		meta_ac = NULL;
705	}
706	if ((!status) && restart_func) {
707		restart_func = 0;
708		goto restart_all;
709	}
710	brelse(bh);
711	bh = NULL;
712
713	return status;
714}
715
716int ocfs2_extend_allocation(struct inode *inode, u32 logical_start,
717		u32 clusters_to_add, int mark_unwritten)
718{
719	return __ocfs2_extend_allocation(inode, logical_start,
720			clusters_to_add, mark_unwritten);
721}
722
723/*
724 * While a write will already be ordering the data, a truncate will not.
725 * Thus, we need to explicitly order the zeroed pages.
726 */
727static handle_t *ocfs2_zero_start_ordered_transaction(struct inode *inode,
728						struct buffer_head *di_bh)
729{
730	struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
731	handle_t *handle = NULL;
732	int ret = 0;
733
734	if (!ocfs2_should_order_data(inode))
735		goto out;
736
737	handle = ocfs2_start_trans(osb, OCFS2_INODE_UPDATE_CREDITS);
738	if (IS_ERR(handle)) {
739		ret = -ENOMEM;
740		mlog_errno(ret);
741		goto out;
742	}
743
744	ret = ocfs2_jbd2_file_inode(handle, inode);
745	if (ret < 0) {
746		mlog_errno(ret);
747		goto out;
748	}
749
750	ret = ocfs2_journal_access_di(handle, INODE_CACHE(inode), di_bh,
751				      OCFS2_JOURNAL_ACCESS_WRITE);
752	if (ret)
753		mlog_errno(ret);
754	ocfs2_update_inode_fsync_trans(handle, inode, 1);
755
756out:
757	if (ret) {
758		if (!IS_ERR(handle))
759			ocfs2_commit_trans(osb, handle);
760		handle = ERR_PTR(ret);
761	}
762	return handle;
763}
764
765/* Some parts of this taken from generic_cont_expand, which turned out
766 * to be too fragile to do exactly what we need without us having to
767 * worry about recursive locking in ->write_begin() and ->write_end(). */
768static int ocfs2_write_zero_page(struct inode *inode, u64 abs_from,
769				 u64 abs_to, struct buffer_head *di_bh)
770{
771	struct address_space *mapping = inode->i_mapping;
772	struct page *page;
773	unsigned long index = abs_from >> PAGE_CACHE_SHIFT;
774	handle_t *handle;
775	int ret = 0;
776	unsigned zero_from, zero_to, block_start, block_end;
777	struct ocfs2_dinode *di = (struct ocfs2_dinode *)di_bh->b_data;
778
779	BUG_ON(abs_from >= abs_to);
780	BUG_ON(abs_to > (((u64)index + 1) << PAGE_CACHE_SHIFT));
781	BUG_ON(abs_from & (inode->i_blkbits - 1));
782
783	handle = ocfs2_zero_start_ordered_transaction(inode, di_bh);
784	if (IS_ERR(handle)) {
785		ret = PTR_ERR(handle);
786		goto out;
787	}
788
789	page = find_or_create_page(mapping, index, GFP_NOFS);
790	if (!page) {
791		ret = -ENOMEM;
792		mlog_errno(ret);
793		goto out_commit_trans;
794	}
795
796	/* Get the offsets within the page that we want to zero */
797	zero_from = abs_from & (PAGE_CACHE_SIZE - 1);
798	zero_to = abs_to & (PAGE_CACHE_SIZE - 1);
799	if (!zero_to)
800		zero_to = PAGE_CACHE_SIZE;
801
802	trace_ocfs2_write_zero_page(
803			(unsigned long long)OCFS2_I(inode)->ip_blkno,
804			(unsigned long long)abs_from,
805			(unsigned long long)abs_to,
806			index, zero_from, zero_to);
807
808	/* We know that zero_from is block aligned */
809	for (block_start = zero_from; block_start < zero_to;
810	     block_start = block_end) {
811		block_end = block_start + (1 << inode->i_blkbits);
812
813		/*
814		 * block_start is block-aligned.  Bump it by one to force
815		 * __block_write_begin and block_commit_write to zero the
816		 * whole block.
817		 */
818		ret = __block_write_begin(page, block_start + 1, 0,
819					  ocfs2_get_block);
820		if (ret < 0) {
821			mlog_errno(ret);
822			goto out_unlock;
823		}
824
825
826		/* must not update i_size! */
827		ret = block_commit_write(page, block_start + 1,
828					 block_start + 1);
829		if (ret < 0)
830			mlog_errno(ret);
831		else
832			ret = 0;
833	}
834
835	/*
836	 * fs-writeback will release the dirty pages without page lock
837	 * whose offset are over inode size, the release happens at
838	 * block_write_full_page().
839	 */
840	i_size_write(inode, abs_to);
841	inode->i_blocks = ocfs2_inode_sector_count(inode);
842	di->i_size = cpu_to_le64((u64)i_size_read(inode));
843	inode->i_mtime = inode->i_ctime = CURRENT_TIME;
844	di->i_mtime = di->i_ctime = cpu_to_le64(inode->i_mtime.tv_sec);
845	di->i_ctime_nsec = cpu_to_le32(inode->i_mtime.tv_nsec);
846	di->i_mtime_nsec = di->i_ctime_nsec;
847	if (handle) {
848		ocfs2_journal_dirty(handle, di_bh);
849		ocfs2_update_inode_fsync_trans(handle, inode, 1);
850	}
851
852out_unlock:
853	unlock_page(page);
854	page_cache_release(page);
855out_commit_trans:
856	if (handle)
857		ocfs2_commit_trans(OCFS2_SB(inode->i_sb), handle);
858out:
859	return ret;
860}
861
862/*
863 * Find the next range to zero.  We do this in terms of bytes because
864 * that's what ocfs2_zero_extend() wants, and it is dealing with the
865 * pagecache.  We may return multiple extents.
866 *
867 * zero_start and zero_end are ocfs2_zero_extend()s current idea of what
868 * needs to be zeroed.  range_start and range_end return the next zeroing
869 * range.  A subsequent call should pass the previous range_end as its
870 * zero_start.  If range_end is 0, there's nothing to do.
871 *
872 * Unwritten extents are skipped over.  Refcounted extents are CoWd.
873 */
874static int ocfs2_zero_extend_get_range(struct inode *inode,
875				       struct buffer_head *di_bh,
876				       u64 zero_start, u64 zero_end,
877				       u64 *range_start, u64 *range_end)
878{
879	int rc = 0, needs_cow = 0;
880	u32 p_cpos, zero_clusters = 0;
881	u32 zero_cpos =
882		zero_start >> OCFS2_SB(inode->i_sb)->s_clustersize_bits;
883	u32 last_cpos = ocfs2_clusters_for_bytes(inode->i_sb, zero_end);
884	unsigned int num_clusters = 0;
885	unsigned int ext_flags = 0;
886
887	while (zero_cpos < last_cpos) {
888		rc = ocfs2_get_clusters(inode, zero_cpos, &p_cpos,
889					&num_clusters, &ext_flags);
890		if (rc) {
891			mlog_errno(rc);
892			goto out;
893		}
894
895		if (p_cpos && !(ext_flags & OCFS2_EXT_UNWRITTEN)) {
896			zero_clusters = num_clusters;
897			if (ext_flags & OCFS2_EXT_REFCOUNTED)
898				needs_cow = 1;
899			break;
900		}
901
902		zero_cpos += num_clusters;
903	}
904	if (!zero_clusters) {
905		*range_end = 0;
906		goto out;
907	}
908
909	while ((zero_cpos + zero_clusters) < last_cpos) {
910		rc = ocfs2_get_clusters(inode, zero_cpos + zero_clusters,
911					&p_cpos, &num_clusters,
912					&ext_flags);
913		if (rc) {
914			mlog_errno(rc);
915			goto out;
916		}
917
918		if (!p_cpos || (ext_flags & OCFS2_EXT_UNWRITTEN))
919			break;
920		if (ext_flags & OCFS2_EXT_REFCOUNTED)
921			needs_cow = 1;
922		zero_clusters += num_clusters;
923	}
924	if ((zero_cpos + zero_clusters) > last_cpos)
925		zero_clusters = last_cpos - zero_cpos;
926
927	if (needs_cow) {
928		rc = ocfs2_refcount_cow(inode, di_bh, zero_cpos,
929					zero_clusters, UINT_MAX);
930		if (rc) {
931			mlog_errno(rc);
932			goto out;
933		}
934	}
935
936	*range_start = ocfs2_clusters_to_bytes(inode->i_sb, zero_cpos);
937	*range_end = ocfs2_clusters_to_bytes(inode->i_sb,
938					     zero_cpos + zero_clusters);
939
940out:
941	return rc;
942}
943
944/*
945 * Zero one range returned from ocfs2_zero_extend_get_range().  The caller
946 * has made sure that the entire range needs zeroing.
947 */
948static int ocfs2_zero_extend_range(struct inode *inode, u64 range_start,
949				   u64 range_end, struct buffer_head *di_bh)
950{
951	int rc = 0;
952	u64 next_pos;
953	u64 zero_pos = range_start;
954
955	trace_ocfs2_zero_extend_range(
956			(unsigned long long)OCFS2_I(inode)->ip_blkno,
957			(unsigned long long)range_start,
958			(unsigned long long)range_end);
959	BUG_ON(range_start >= range_end);
960
961	while (zero_pos < range_end) {
962		next_pos = (zero_pos & PAGE_CACHE_MASK) + PAGE_CACHE_SIZE;
963		if (next_pos > range_end)
964			next_pos = range_end;
965		rc = ocfs2_write_zero_page(inode, zero_pos, next_pos, di_bh);
966		if (rc < 0) {
967			mlog_errno(rc);
968			break;
969		}
970		zero_pos = next_pos;
971
972		/*
973		 * Very large extends have the potential to lock up
974		 * the cpu for extended periods of time.
975		 */
976		cond_resched();
977	}
978
979	return rc;
980}
981
982int ocfs2_zero_extend(struct inode *inode, struct buffer_head *di_bh,
983		      loff_t zero_to_size)
984{
985	int ret = 0;
986	u64 zero_start, range_start = 0, range_end = 0;
987	struct super_block *sb = inode->i_sb;
988
989	zero_start = ocfs2_align_bytes_to_blocks(sb, i_size_read(inode));
990	trace_ocfs2_zero_extend((unsigned long long)OCFS2_I(inode)->ip_blkno,
991				(unsigned long long)zero_start,
992				(unsigned long long)i_size_read(inode));
993	while (zero_start < zero_to_size) {
994		ret = ocfs2_zero_extend_get_range(inode, di_bh, zero_start,
995						  zero_to_size,
996						  &range_start,
997						  &range_end);
998		if (ret) {
999			mlog_errno(ret);
1000			break;
1001		}
1002		if (!range_end)
1003			break;
1004		/* Trim the ends */
1005		if (range_start < zero_start)
1006			range_start = zero_start;
1007		if (range_end > zero_to_size)
1008			range_end = zero_to_size;
1009
1010		ret = ocfs2_zero_extend_range(inode, range_start,
1011					      range_end, di_bh);
1012		if (ret) {
1013			mlog_errno(ret);
1014			break;
1015		}
1016		zero_start = range_end;
1017	}
1018
1019	return ret;
1020}
1021
1022int ocfs2_extend_no_holes(struct inode *inode, struct buffer_head *di_bh,
1023			  u64 new_i_size, u64 zero_to)
1024{
1025	int ret;
1026	u32 clusters_to_add;
1027	struct ocfs2_inode_info *oi = OCFS2_I(inode);
1028
1029	/*
1030	 * Only quota files call this without a bh, and they can't be
1031	 * refcounted.
1032	 */
1033	BUG_ON(!di_bh && (oi->ip_dyn_features & OCFS2_HAS_REFCOUNT_FL));
1034	BUG_ON(!di_bh && !(oi->ip_flags & OCFS2_INODE_SYSTEM_FILE));
1035
1036	clusters_to_add = ocfs2_clusters_for_bytes(inode->i_sb, new_i_size);
1037	if (clusters_to_add < oi->ip_clusters)
1038		clusters_to_add = 0;
1039	else
1040		clusters_to_add -= oi->ip_clusters;
1041
1042	if (clusters_to_add) {
1043		ret = __ocfs2_extend_allocation(inode, oi->ip_clusters,
1044						clusters_to_add, 0);
1045		if (ret) {
1046			mlog_errno(ret);
1047			goto out;
1048		}
1049	}
1050
1051	/*
1052	 * Call this even if we don't add any clusters to the tree. We
1053	 * still need to zero the area between the old i_size and the
1054	 * new i_size.
1055	 */
1056	ret = ocfs2_zero_extend(inode, di_bh, zero_to);
1057	if (ret < 0)
1058		mlog_errno(ret);
1059
1060out:
1061	return ret;
1062}
1063
1064static int ocfs2_extend_file(struct inode *inode,
1065			     struct buffer_head *di_bh,
1066			     u64 new_i_size)
1067{
1068	int ret = 0;
1069	struct ocfs2_inode_info *oi = OCFS2_I(inode);
1070
1071	BUG_ON(!di_bh);
1072
1073	/* setattr sometimes calls us like this. */
1074	if (new_i_size == 0)
1075		goto out;
1076
1077	if (i_size_read(inode) == new_i_size)
1078		goto out;
1079	BUG_ON(new_i_size < i_size_read(inode));
1080
1081	/*
1082	 * The alloc sem blocks people in read/write from reading our
1083	 * allocation until we're done changing it. We depend on
1084	 * i_mutex to block other extend/truncate calls while we're
1085	 * here.  We even have to hold it for sparse files because there
1086	 * might be some tail zeroing.
1087	 */
1088	down_write(&oi->ip_alloc_sem);
1089
1090	if (oi->ip_dyn_features & OCFS2_INLINE_DATA_FL) {
1091		/*
1092		 * We can optimize small extends by keeping the inodes
1093		 * inline data.
1094		 */
1095		if (ocfs2_size_fits_inline_data(di_bh, new_i_size)) {
1096			up_write(&oi->ip_alloc_sem);
1097			goto out_update_size;
1098		}
1099
1100		ret = ocfs2_convert_inline_data_to_extents(inode, di_bh);
1101		if (ret) {
1102			up_write(&oi->ip_alloc_sem);
1103			mlog_errno(ret);
1104			goto out;
1105		}
1106	}
1107
1108	if (ocfs2_sparse_alloc(OCFS2_SB(inode->i_sb)))
1109		ret = ocfs2_zero_extend(inode, di_bh, new_i_size);
1110	else
1111		ret = ocfs2_extend_no_holes(inode, di_bh, new_i_size,
1112					    new_i_size);
1113
1114	up_write(&oi->ip_alloc_sem);
1115
1116	if (ret < 0) {
1117		mlog_errno(ret);
1118		goto out;
1119	}
1120
1121out_update_size:
1122	ret = ocfs2_simple_size_update(inode, di_bh, new_i_size);
1123	if (ret < 0)
1124		mlog_errno(ret);
1125
1126out:
1127	return ret;
1128}
1129
1130int ocfs2_setattr(struct dentry *dentry, struct iattr *attr)
1131{
1132	int status = 0, size_change;
1133	int inode_locked = 0;
1134	struct inode *inode = d_inode(dentry);
1135	struct super_block *sb = inode->i_sb;
1136	struct ocfs2_super *osb = OCFS2_SB(sb);
1137	struct buffer_head *bh = NULL;
1138	handle_t *handle = NULL;
1139	struct dquot *transfer_to[MAXQUOTAS] = { };
1140	int qtype;
1141
1142	trace_ocfs2_setattr(inode, dentry,
1143			    (unsigned long long)OCFS2_I(inode)->ip_blkno,
1144			    dentry->d_name.len, dentry->d_name.name,
1145			    attr->ia_valid, attr->ia_mode,
1146			    from_kuid(&init_user_ns, attr->ia_uid),
1147			    from_kgid(&init_user_ns, attr->ia_gid));
1148
1149	/* ensuring we don't even attempt to truncate a symlink */
1150	if (S_ISLNK(inode->i_mode))
1151		attr->ia_valid &= ~ATTR_SIZE;
1152
1153#define OCFS2_VALID_ATTRS (ATTR_ATIME | ATTR_MTIME | ATTR_CTIME | ATTR_SIZE \
1154			   | ATTR_GID | ATTR_UID | ATTR_MODE)
1155	if (!(attr->ia_valid & OCFS2_VALID_ATTRS))
1156		return 0;
1157
1158	status = inode_change_ok(inode, attr);
1159	if (status)
1160		return status;
1161
1162	if (is_quota_modification(inode, attr)) {
1163		status = dquot_initialize(inode);
1164		if (status)
1165			return status;
1166	}
1167	size_change = S_ISREG(inode->i_mode) && attr->ia_valid & ATTR_SIZE;
1168	if (size_change) {
1169		status = ocfs2_rw_lock(inode, 1);
1170		if (status < 0) {
1171			mlog_errno(status);
1172			goto bail;
1173		}
1174	}
1175
1176	status = ocfs2_inode_lock(inode, &bh, 1);
1177	if (status < 0) {
1178		if (status != -ENOENT)
1179			mlog_errno(status);
1180		goto bail_unlock_rw;
1181	}
1182	inode_locked = 1;
1183
1184	if (size_change) {
1185		status = inode_newsize_ok(inode, attr->ia_size);
1186		if (status)
1187			goto bail_unlock;
1188
1189		inode_dio_wait(inode);
1190
1191		if (i_size_read(inode) >= attr->ia_size) {
1192			if (ocfs2_should_order_data(inode)) {
1193				status = ocfs2_begin_ordered_truncate(inode,
1194								      attr->ia_size);
1195				if (status)
1196					goto bail_unlock;
1197			}
1198			status = ocfs2_truncate_file(inode, bh, attr->ia_size);
1199		} else
1200			status = ocfs2_extend_file(inode, bh, attr->ia_size);
1201		if (status < 0) {
1202			if (status != -ENOSPC)
1203				mlog_errno(status);
1204			status = -ENOSPC;
1205			goto bail_unlock;
1206		}
1207	}
1208
1209	if ((attr->ia_valid & ATTR_UID && !uid_eq(attr->ia_uid, inode->i_uid)) ||
1210	    (attr->ia_valid & ATTR_GID && !gid_eq(attr->ia_gid, inode->i_gid))) {
1211		/*
1212		 * Gather pointers to quota structures so that allocation /
1213		 * freeing of quota structures happens here and not inside
1214		 * dquot_transfer() where we have problems with lock ordering
1215		 */
1216		if (attr->ia_valid & ATTR_UID && !uid_eq(attr->ia_uid, inode->i_uid)
1217		    && OCFS2_HAS_RO_COMPAT_FEATURE(sb,
1218		    OCFS2_FEATURE_RO_COMPAT_USRQUOTA)) {
1219			transfer_to[USRQUOTA] = dqget(sb, make_kqid_uid(attr->ia_uid));
1220			if (IS_ERR(transfer_to[USRQUOTA])) {
1221				status = PTR_ERR(transfer_to[USRQUOTA]);
1222				goto bail_unlock;
1223			}
1224		}
1225		if (attr->ia_valid & ATTR_GID && !gid_eq(attr->ia_gid, inode->i_gid)
1226		    && OCFS2_HAS_RO_COMPAT_FEATURE(sb,
1227		    OCFS2_FEATURE_RO_COMPAT_GRPQUOTA)) {
1228			transfer_to[GRPQUOTA] = dqget(sb, make_kqid_gid(attr->ia_gid));
1229			if (IS_ERR(transfer_to[GRPQUOTA])) {
1230				status = PTR_ERR(transfer_to[GRPQUOTA]);
1231				goto bail_unlock;
1232			}
1233		}
1234		handle = ocfs2_start_trans(osb, OCFS2_INODE_UPDATE_CREDITS +
1235					   2 * ocfs2_quota_trans_credits(sb));
1236		if (IS_ERR(handle)) {
1237			status = PTR_ERR(handle);
1238			mlog_errno(status);
1239			goto bail_unlock;
1240		}
1241		status = __dquot_transfer(inode, transfer_to);
1242		if (status < 0)
1243			goto bail_commit;
1244	} else {
1245		handle = ocfs2_start_trans(osb, OCFS2_INODE_UPDATE_CREDITS);
1246		if (IS_ERR(handle)) {
1247			status = PTR_ERR(handle);
1248			mlog_errno(status);
1249			goto bail_unlock;
1250		}
1251	}
1252
1253	setattr_copy(inode, attr);
1254	mark_inode_dirty(inode);
1255
1256	status = ocfs2_mark_inode_dirty(handle, inode, bh);
1257	if (status < 0)
1258		mlog_errno(status);
1259
1260bail_commit:
1261	ocfs2_commit_trans(osb, handle);
1262bail_unlock:
1263	if (status) {
1264		ocfs2_inode_unlock(inode, 1);
1265		inode_locked = 0;
1266	}
1267bail_unlock_rw:
1268	if (size_change)
1269		ocfs2_rw_unlock(inode, 1);
1270bail:
1271
1272	/* Release quota pointers in case we acquired them */
1273	for (qtype = 0; qtype < OCFS2_MAXQUOTAS; qtype++)
1274		dqput(transfer_to[qtype]);
1275
1276	if (!status && attr->ia_valid & ATTR_MODE) {
1277		status = ocfs2_acl_chmod(inode, bh);
1278		if (status < 0)
1279			mlog_errno(status);
1280	}
1281	if (inode_locked)
1282		ocfs2_inode_unlock(inode, 1);
1283
1284	brelse(bh);
1285	return status;
1286}
1287
1288int ocfs2_getattr(struct vfsmount *mnt,
1289		  struct dentry *dentry,
1290		  struct kstat *stat)
1291{
1292	struct inode *inode = d_inode(dentry);
1293	struct super_block *sb = d_inode(dentry)->i_sb;
1294	struct ocfs2_super *osb = sb->s_fs_info;
1295	int err;
1296
1297	err = ocfs2_inode_revalidate(dentry);
1298	if (err) {
1299		if (err != -ENOENT)
1300			mlog_errno(err);
1301		goto bail;
1302	}
1303
1304	generic_fillattr(inode, stat);
1305
1306	/* We set the blksize from the cluster size for performance */
1307	stat->blksize = osb->s_clustersize;
1308
1309bail:
1310	return err;
1311}
1312
1313int ocfs2_permission(struct inode *inode, int mask)
1314{
1315	int ret;
1316
1317	if (mask & MAY_NOT_BLOCK)
1318		return -ECHILD;
1319
1320	ret = ocfs2_inode_lock(inode, NULL, 0);
1321	if (ret) {
1322		if (ret != -ENOENT)
1323			mlog_errno(ret);
1324		goto out;
1325	}
1326
1327	ret = generic_permission(inode, mask);
1328
1329	ocfs2_inode_unlock(inode, 0);
1330out:
1331	return ret;
1332}
1333
1334static int __ocfs2_write_remove_suid(struct inode *inode,
1335				     struct buffer_head *bh)
1336{
1337	int ret;
1338	handle_t *handle;
1339	struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
1340	struct ocfs2_dinode *di;
1341
1342	trace_ocfs2_write_remove_suid(
1343			(unsigned long long)OCFS2_I(inode)->ip_blkno,
1344			inode->i_mode);
1345
1346	handle = ocfs2_start_trans(osb, OCFS2_INODE_UPDATE_CREDITS);
1347	if (IS_ERR(handle)) {
1348		ret = PTR_ERR(handle);
1349		mlog_errno(ret);
1350		goto out;
1351	}
1352
1353	ret = ocfs2_journal_access_di(handle, INODE_CACHE(inode), bh,
1354				      OCFS2_JOURNAL_ACCESS_WRITE);
1355	if (ret < 0) {
1356		mlog_errno(ret);
1357		goto out_trans;
1358	}
1359
1360	inode->i_mode &= ~S_ISUID;
1361	if ((inode->i_mode & S_ISGID) && (inode->i_mode & S_IXGRP))
1362		inode->i_mode &= ~S_ISGID;
1363
1364	di = (struct ocfs2_dinode *) bh->b_data;
1365	di->i_mode = cpu_to_le16(inode->i_mode);
1366	ocfs2_update_inode_fsync_trans(handle, inode, 0);
1367
1368	ocfs2_journal_dirty(handle, bh);
1369
1370out_trans:
1371	ocfs2_commit_trans(osb, handle);
1372out:
1373	return ret;
1374}
1375
1376/*
1377 * Will look for holes and unwritten extents in the range starting at
1378 * pos for count bytes (inclusive).
1379 */
1380static int ocfs2_check_range_for_holes(struct inode *inode, loff_t pos,
1381				       size_t count)
1382{
1383	int ret = 0;
1384	unsigned int extent_flags;
1385	u32 cpos, clusters, extent_len, phys_cpos;
1386	struct super_block *sb = inode->i_sb;
1387
1388	cpos = pos >> OCFS2_SB(sb)->s_clustersize_bits;
1389	clusters = ocfs2_clusters_for_bytes(sb, pos + count) - cpos;
1390
1391	while (clusters) {
1392		ret = ocfs2_get_clusters(inode, cpos, &phys_cpos, &extent_len,
1393					 &extent_flags);
1394		if (ret < 0) {
1395			mlog_errno(ret);
1396			goto out;
1397		}
1398
1399		if (phys_cpos == 0 || (extent_flags & OCFS2_EXT_UNWRITTEN)) {
1400			ret = 1;
1401			break;
1402		}
1403
1404		if (extent_len > clusters)
1405			extent_len = clusters;
1406
1407		clusters -= extent_len;
1408		cpos += extent_len;
1409	}
1410out:
1411	return ret;
1412}
1413
1414static int ocfs2_write_remove_suid(struct inode *inode)
1415{
1416	int ret;
1417	struct buffer_head *bh = NULL;
1418
1419	ret = ocfs2_read_inode_block(inode, &bh);
1420	if (ret < 0) {
1421		mlog_errno(ret);
1422		goto out;
1423	}
1424
1425	ret =  __ocfs2_write_remove_suid(inode, bh);
1426out:
1427	brelse(bh);
1428	return ret;
1429}
1430
1431/*
1432 * Allocate enough extents to cover the region starting at byte offset
1433 * start for len bytes. Existing extents are skipped, any extents
1434 * added are marked as "unwritten".
1435 */
1436static int ocfs2_allocate_unwritten_extents(struct inode *inode,
1437					    u64 start, u64 len)
1438{
1439	int ret;
1440	u32 cpos, phys_cpos, clusters, alloc_size;
1441	u64 end = start + len;
1442	struct buffer_head *di_bh = NULL;
1443
1444	if (OCFS2_I(inode)->ip_dyn_features & OCFS2_INLINE_DATA_FL) {
1445		ret = ocfs2_read_inode_block(inode, &di_bh);
1446		if (ret) {
1447			mlog_errno(ret);
1448			goto out;
1449		}
1450
1451		/*
1452		 * Nothing to do if the requested reservation range
1453		 * fits within the inode.
1454		 */
1455		if (ocfs2_size_fits_inline_data(di_bh, end))
1456			goto out;
1457
1458		ret = ocfs2_convert_inline_data_to_extents(inode, di_bh);
1459		if (ret) {
1460			mlog_errno(ret);
1461			goto out;
1462		}
1463	}
1464
1465	/*
1466	 * We consider both start and len to be inclusive.
1467	 */
1468	cpos = start >> OCFS2_SB(inode->i_sb)->s_clustersize_bits;
1469	clusters = ocfs2_clusters_for_bytes(inode->i_sb, start + len);
1470	clusters -= cpos;
1471
1472	while (clusters) {
1473		ret = ocfs2_get_clusters(inode, cpos, &phys_cpos,
1474					 &alloc_size, NULL);
1475		if (ret) {
1476			mlog_errno(ret);
1477			goto out;
1478		}
1479
1480		/*
1481		 * Hole or existing extent len can be arbitrary, so
1482		 * cap it to our own allocation request.
1483		 */
1484		if (alloc_size > clusters)
1485			alloc_size = clusters;
1486
1487		if (phys_cpos) {
1488			/*
1489			 * We already have an allocation at this
1490			 * region so we can safely skip it.
1491			 */
1492			goto next;
1493		}
1494
1495		ret = __ocfs2_extend_allocation(inode, cpos, alloc_size, 1);
1496		if (ret) {
1497			if (ret != -ENOSPC)
1498				mlog_errno(ret);
1499			goto out;
1500		}
1501
1502next:
1503		cpos += alloc_size;
1504		clusters -= alloc_size;
1505	}
1506
1507	ret = 0;
1508out:
1509
1510	brelse(di_bh);
1511	return ret;
1512}
1513
1514/*
1515 * Truncate a byte range, avoiding pages within partial clusters. This
1516 * preserves those pages for the zeroing code to write to.
1517 */
1518static void ocfs2_truncate_cluster_pages(struct inode *inode, u64 byte_start,
1519					 u64 byte_len)
1520{
1521	struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
1522	loff_t start, end;
1523	struct address_space *mapping = inode->i_mapping;
1524
1525	start = (loff_t)ocfs2_align_bytes_to_clusters(inode->i_sb, byte_start);
1526	end = byte_start + byte_len;
1527	end = end & ~(osb->s_clustersize - 1);
1528
1529	if (start < end) {
1530		unmap_mapping_range(mapping, start, end - start, 0);
1531		truncate_inode_pages_range(mapping, start, end - 1);
1532	}
1533}
1534
1535static int ocfs2_zero_partial_clusters(struct inode *inode,
1536				       u64 start, u64 len)
1537{
1538	int ret = 0;
1539	u64 tmpend, end = start + len;
1540	struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
1541	unsigned int csize = osb->s_clustersize;
1542	handle_t *handle;
1543
1544	/*
1545	 * The "start" and "end" values are NOT necessarily part of
1546	 * the range whose allocation is being deleted. Rather, this
1547	 * is what the user passed in with the request. We must zero
1548	 * partial clusters here. There's no need to worry about
1549	 * physical allocation - the zeroing code knows to skip holes.
1550	 */
1551	trace_ocfs2_zero_partial_clusters(
1552		(unsigned long long)OCFS2_I(inode)->ip_blkno,
1553		(unsigned long long)start, (unsigned long long)end);
1554
1555	/*
1556	 * If both edges are on a cluster boundary then there's no
1557	 * zeroing required as the region is part of the allocation to
1558	 * be truncated.
1559	 */
1560	if ((start & (csize - 1)) == 0 && (end & (csize - 1)) == 0)
1561		goto out;
1562
1563	handle = ocfs2_start_trans(osb, OCFS2_INODE_UPDATE_CREDITS);
1564	if (IS_ERR(handle)) {
1565		ret = PTR_ERR(handle);
1566		mlog_errno(ret);
1567		goto out;
1568	}
1569
1570	/*
1571	 * We want to get the byte offset of the end of the 1st cluster.
1572	 */
1573	tmpend = (u64)osb->s_clustersize + (start & ~(osb->s_clustersize - 1));
1574	if (tmpend > end)
1575		tmpend = end;
1576
1577	trace_ocfs2_zero_partial_clusters_range1((unsigned long long)start,
1578						 (unsigned long long)tmpend);
1579
1580	ret = ocfs2_zero_range_for_truncate(inode, handle, start, tmpend);
1581	if (ret)
1582		mlog_errno(ret);
1583
1584	if (tmpend < end) {
1585		/*
1586		 * This may make start and end equal, but the zeroing
1587		 * code will skip any work in that case so there's no
1588		 * need to catch it up here.
1589		 */
1590		start = end & ~(osb->s_clustersize - 1);
1591
1592		trace_ocfs2_zero_partial_clusters_range2(
1593			(unsigned long long)start, (unsigned long long)end);
1594
1595		ret = ocfs2_zero_range_for_truncate(inode, handle, start, end);
1596		if (ret)
1597			mlog_errno(ret);
1598	}
1599	ocfs2_update_inode_fsync_trans(handle, inode, 1);
1600
1601	ocfs2_commit_trans(osb, handle);
1602out:
1603	return ret;
1604}
1605
1606static int ocfs2_find_rec(struct ocfs2_extent_list *el, u32 pos)
1607{
1608	int i;
1609	struct ocfs2_extent_rec *rec = NULL;
1610
1611	for (i = le16_to_cpu(el->l_next_free_rec) - 1; i >= 0; i--) {
1612
1613		rec = &el->l_recs[i];
1614
1615		if (le32_to_cpu(rec->e_cpos) < pos)
1616			break;
1617	}
1618
1619	return i;
1620}
1621
1622/*
1623 * Helper to calculate the punching pos and length in one run, we handle the
1624 * following three cases in order:
1625 *
1626 * - remove the entire record
1627 * - remove a partial record
1628 * - no record needs to be removed (hole-punching completed)
1629*/
1630static void ocfs2_calc_trunc_pos(struct inode *inode,
1631				 struct ocfs2_extent_list *el,
1632				 struct ocfs2_extent_rec *rec,
1633				 u32 trunc_start, u32 *trunc_cpos,
1634				 u32 *trunc_len, u32 *trunc_end,
1635				 u64 *blkno, int *done)
1636{
1637	int ret = 0;
1638	u32 coff, range;
1639
1640	range = le32_to_cpu(rec->e_cpos) + ocfs2_rec_clusters(el, rec);
1641
1642	if (le32_to_cpu(rec->e_cpos) >= trunc_start) {
1643		/*
1644		 * remove an entire extent record.
1645		 */
1646		*trunc_cpos = le32_to_cpu(rec->e_cpos);
1647		/*
1648		 * Skip holes if any.
1649		 */
1650		if (range < *trunc_end)
1651			*trunc_end = range;
1652		*trunc_len = *trunc_end - le32_to_cpu(rec->e_cpos);
1653		*blkno = le64_to_cpu(rec->e_blkno);
1654		*trunc_end = le32_to_cpu(rec->e_cpos);
1655	} else if (range > trunc_start) {
1656		/*
1657		 * remove a partial extent record, which means we're
1658		 * removing the last extent record.
1659		 */
1660		*trunc_cpos = trunc_start;
1661		/*
1662		 * skip hole if any.
1663		 */
1664		if (range < *trunc_end)
1665			*trunc_end = range;
1666		*trunc_len = *trunc_end - trunc_start;
1667		coff = trunc_start - le32_to_cpu(rec->e_cpos);
1668		*blkno = le64_to_cpu(rec->e_blkno) +
1669				ocfs2_clusters_to_blocks(inode->i_sb, coff);
1670		*trunc_end = trunc_start;
1671	} else {
1672		/*
1673		 * It may have two following possibilities:
1674		 *
1675		 * - last record has been removed
1676		 * - trunc_start was within a hole
1677		 *
1678		 * both two cases mean the completion of hole punching.
1679		 */
1680		ret = 1;
1681	}
1682
1683	*done = ret;
1684}
1685
1686static int ocfs2_remove_inode_range(struct inode *inode,
1687				    struct buffer_head *di_bh, u64 byte_start,
1688				    u64 byte_len)
1689{
1690	int ret = 0, flags = 0, done = 0, i;
1691	u32 trunc_start, trunc_len, trunc_end, trunc_cpos, phys_cpos;
1692	u32 cluster_in_el;
1693	struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
1694	struct ocfs2_cached_dealloc_ctxt dealloc;
1695	struct address_space *mapping = inode->i_mapping;
1696	struct ocfs2_extent_tree et;
1697	struct ocfs2_path *path = NULL;
1698	struct ocfs2_extent_list *el = NULL;
1699	struct ocfs2_extent_rec *rec = NULL;
1700	struct ocfs2_dinode *di = (struct ocfs2_dinode *)di_bh->b_data;
1701	u64 blkno, refcount_loc = le64_to_cpu(di->i_refcount_loc);
1702
1703	ocfs2_init_dinode_extent_tree(&et, INODE_CACHE(inode), di_bh);
1704	ocfs2_init_dealloc_ctxt(&dealloc);
1705
1706	trace_ocfs2_remove_inode_range(
1707			(unsigned long long)OCFS2_I(inode)->ip_blkno,
1708			(unsigned long long)byte_start,
1709			(unsigned long long)byte_len);
1710
1711	if (byte_len == 0)
1712		return 0;
1713
1714	if (OCFS2_I(inode)->ip_dyn_features & OCFS2_INLINE_DATA_FL) {
1715		ret = ocfs2_truncate_inline(inode, di_bh, byte_start,
1716					    byte_start + byte_len, 0);
1717		if (ret) {
1718			mlog_errno(ret);
1719			goto out;
1720		}
1721		/*
1722		 * There's no need to get fancy with the page cache
1723		 * truncate of an inline-data inode. We're talking
1724		 * about less than a page here, which will be cached
1725		 * in the dinode buffer anyway.
1726		 */
1727		unmap_mapping_range(mapping, 0, 0, 0);
1728		truncate_inode_pages(mapping, 0);
1729		goto out;
1730	}
1731
1732	/*
1733	 * For reflinks, we may need to CoW 2 clusters which might be
1734	 * partially zero'd later, if hole's start and end offset were
1735	 * within one cluster(means is not exactly aligned to clustersize).
1736	 */
1737
1738	if (OCFS2_I(inode)->ip_dyn_features & OCFS2_HAS_REFCOUNT_FL) {
1739
1740		ret = ocfs2_cow_file_pos(inode, di_bh, byte_start);
1741		if (ret) {
1742			mlog_errno(ret);
1743			goto out;
1744		}
1745
1746		ret = ocfs2_cow_file_pos(inode, di_bh, byte_start + byte_len);
1747		if (ret) {
1748			mlog_errno(ret);
1749			goto out;
1750		}
1751	}
1752
1753	trunc_start = ocfs2_clusters_for_bytes(osb->sb, byte_start);
1754	trunc_end = (byte_start + byte_len) >> osb->s_clustersize_bits;
1755	cluster_in_el = trunc_end;
1756
1757	ret = ocfs2_zero_partial_clusters(inode, byte_start, byte_len);
1758	if (ret) {
1759		mlog_errno(ret);
1760		goto out;
1761	}
1762
1763	path = ocfs2_new_path_from_et(&et);
1764	if (!path) {
1765		ret = -ENOMEM;
1766		mlog_errno(ret);
1767		goto out;
1768	}
1769
1770	while (trunc_end > trunc_start) {
1771
1772		ret = ocfs2_find_path(INODE_CACHE(inode), path,
1773				      cluster_in_el);
1774		if (ret) {
1775			mlog_errno(ret);
1776			goto out;
1777		}
1778
1779		el = path_leaf_el(path);
1780
1781		i = ocfs2_find_rec(el, trunc_end);
1782		/*
1783		 * Need to go to previous extent block.
1784		 */
1785		if (i < 0) {
1786			if (path->p_tree_depth == 0)
1787				break;
1788
1789			ret = ocfs2_find_cpos_for_left_leaf(inode->i_sb,
1790							    path,
1791							    &cluster_in_el);
1792			if (ret) {
1793				mlog_errno(ret);
1794				goto out;
1795			}
1796
1797			/*
1798			 * We've reached the leftmost extent block,
1799			 * it's safe to leave.
1800			 */
1801			if (cluster_in_el == 0)
1802				break;
1803
1804			/*
1805			 * The 'pos' searched for previous extent block is
1806			 * always one cluster less than actual trunc_end.
1807			 */
1808			trunc_end = cluster_in_el + 1;
1809
1810			ocfs2_reinit_path(path, 1);
1811
1812			continue;
1813
1814		} else
1815			rec = &el->l_recs[i];
1816
1817		ocfs2_calc_trunc_pos(inode, el, rec, trunc_start, &trunc_cpos,
1818				     &trunc_len, &trunc_end, &blkno, &done);
1819		if (done)
1820			break;
1821
1822		flags = rec->e_flags;
1823		phys_cpos = ocfs2_blocks_to_clusters(inode->i_sb, blkno);
1824
1825		ret = ocfs2_remove_btree_range(inode, &et, trunc_cpos,
1826					       phys_cpos, trunc_len, flags,
1827					       &dealloc, refcount_loc, false);
1828		if (ret < 0) {
1829			mlog_errno(ret);
1830			goto out;
1831		}
1832
1833		cluster_in_el = trunc_end;
1834
1835		ocfs2_reinit_path(path, 1);
1836	}
1837
1838	ocfs2_truncate_cluster_pages(inode, byte_start, byte_len);
1839
1840out:
1841	ocfs2_free_path(path);
1842	ocfs2_schedule_truncate_log_flush(osb, 1);
1843	ocfs2_run_deallocs(osb, &dealloc);
1844
1845	return ret;
1846}
1847
1848/*
1849 * Parts of this function taken from xfs_change_file_space()
1850 */
1851static int __ocfs2_change_file_space(struct file *file, struct inode *inode,
1852				     loff_t f_pos, unsigned int cmd,
1853				     struct ocfs2_space_resv *sr,
1854				     int change_size)
1855{
1856	int ret;
1857	s64 llen;
1858	loff_t size;
1859	struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
1860	struct buffer_head *di_bh = NULL;
1861	handle_t *handle;
1862	unsigned long long max_off = inode->i_sb->s_maxbytes;
1863
1864	if (ocfs2_is_hard_readonly(osb) || ocfs2_is_soft_readonly(osb))
1865		return -EROFS;
1866
1867	mutex_lock(&inode->i_mutex);
1868
1869	/*
1870	 * This prevents concurrent writes on other nodes
1871	 */
1872	ret = ocfs2_rw_lock(inode, 1);
1873	if (ret) {
1874		mlog_errno(ret);
1875		goto out;
1876	}
1877
1878	ret = ocfs2_inode_lock(inode, &di_bh, 1);
1879	if (ret) {
1880		mlog_errno(ret);
1881		goto out_rw_unlock;
1882	}
1883
1884	if (inode->i_flags & (S_IMMUTABLE|S_APPEND)) {
1885		ret = -EPERM;
1886		goto out_inode_unlock;
1887	}
1888
1889	switch (sr->l_whence) {
1890	case 0: /*SEEK_SET*/
1891		break;
1892	case 1: /*SEEK_CUR*/
1893		sr->l_start += f_pos;
1894		break;
1895	case 2: /*SEEK_END*/
1896		sr->l_start += i_size_read(inode);
1897		break;
1898	default:
1899		ret = -EINVAL;
1900		goto out_inode_unlock;
1901	}
1902	sr->l_whence = 0;
1903
1904	llen = sr->l_len > 0 ? sr->l_len - 1 : sr->l_len;
1905
1906	if (sr->l_start < 0
1907	    || sr->l_start > max_off
1908	    || (sr->l_start + llen) < 0
1909	    || (sr->l_start + llen) > max_off) {
1910		ret = -EINVAL;
1911		goto out_inode_unlock;
1912	}
1913	size = sr->l_start + sr->l_len;
1914
1915	if (cmd == OCFS2_IOC_RESVSP || cmd == OCFS2_IOC_RESVSP64 ||
1916	    cmd == OCFS2_IOC_UNRESVSP || cmd == OCFS2_IOC_UNRESVSP64) {
1917		if (sr->l_len <= 0) {
1918			ret = -EINVAL;
1919			goto out_inode_unlock;
1920		}
1921	}
1922
1923	if (file && should_remove_suid(file->f_path.dentry)) {
1924		ret = __ocfs2_write_remove_suid(inode, di_bh);
1925		if (ret) {
1926			mlog_errno(ret);
1927			goto out_inode_unlock;
1928		}
1929	}
1930
1931	down_write(&OCFS2_I(inode)->ip_alloc_sem);
1932	switch (cmd) {
1933	case OCFS2_IOC_RESVSP:
1934	case OCFS2_IOC_RESVSP64:
1935		/*
1936		 * This takes unsigned offsets, but the signed ones we
1937		 * pass have been checked against overflow above.
1938		 */
1939		ret = ocfs2_allocate_unwritten_extents(inode, sr->l_start,
1940						       sr->l_len);
1941		break;
1942	case OCFS2_IOC_UNRESVSP:
1943	case OCFS2_IOC_UNRESVSP64:
1944		ret = ocfs2_remove_inode_range(inode, di_bh, sr->l_start,
1945					       sr->l_len);
1946		break;
1947	default:
1948		ret = -EINVAL;
1949	}
1950	up_write(&OCFS2_I(inode)->ip_alloc_sem);
1951	if (ret) {
1952		mlog_errno(ret);
1953		goto out_inode_unlock;
1954	}
1955
1956	/*
1957	 * We update c/mtime for these changes
1958	 */
1959	handle = ocfs2_start_trans(osb, OCFS2_INODE_UPDATE_CREDITS);
1960	if (IS_ERR(handle)) {
1961		ret = PTR_ERR(handle);
1962		mlog_errno(ret);
1963		goto out_inode_unlock;
1964	}
1965
1966	if (change_size && i_size_read(inode) < size)
1967		i_size_write(inode, size);
1968
1969	inode->i_ctime = inode->i_mtime = CURRENT_TIME;
1970	ret = ocfs2_mark_inode_dirty(handle, inode, di_bh);
1971	if (ret < 0)
1972		mlog_errno(ret);
1973
1974	if (file && (file->f_flags & O_SYNC))
1975		handle->h_sync = 1;
1976
1977	ocfs2_commit_trans(osb, handle);
1978
1979out_inode_unlock:
1980	brelse(di_bh);
1981	ocfs2_inode_unlock(inode, 1);
1982out_rw_unlock:
1983	ocfs2_rw_unlock(inode, 1);
1984
1985out:
1986	mutex_unlock(&inode->i_mutex);
1987	return ret;
1988}
1989
1990int ocfs2_change_file_space(struct file *file, unsigned int cmd,
1991			    struct ocfs2_space_resv *sr)
1992{
1993	struct inode *inode = file_inode(file);
1994	struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
1995	int ret;
1996
1997	if ((cmd == OCFS2_IOC_RESVSP || cmd == OCFS2_IOC_RESVSP64) &&
1998	    !ocfs2_writes_unwritten_extents(osb))
1999		return -ENOTTY;
2000	else if ((cmd == OCFS2_IOC_UNRESVSP || cmd == OCFS2_IOC_UNRESVSP64) &&
2001		 !ocfs2_sparse_alloc(osb))
2002		return -ENOTTY;
2003
2004	if (!S_ISREG(inode->i_mode))
2005		return -EINVAL;
2006
2007	if (!(file->f_mode & FMODE_WRITE))
2008		return -EBADF;
2009
2010	ret = mnt_want_write_file(file);
2011	if (ret)
2012		return ret;
2013	ret = __ocfs2_change_file_space(file, inode, file->f_pos, cmd, sr, 0);
2014	mnt_drop_write_file(file);
2015	return ret;
2016}
2017
2018static long ocfs2_fallocate(struct file *file, int mode, loff_t offset,
2019			    loff_t len)
2020{
2021	struct inode *inode = file_inode(file);
2022	struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
2023	struct ocfs2_space_resv sr;
2024	int change_size = 1;
2025	int cmd = OCFS2_IOC_RESVSP64;
2026
2027	if (mode & ~(FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE))
2028		return -EOPNOTSUPP;
2029	if (!ocfs2_writes_unwritten_extents(osb))
2030		return -EOPNOTSUPP;
2031
2032	if (mode & FALLOC_FL_KEEP_SIZE)
2033		change_size = 0;
2034
2035	if (mode & FALLOC_FL_PUNCH_HOLE)
2036		cmd = OCFS2_IOC_UNRESVSP64;
2037
2038	sr.l_whence = 0;
2039	sr.l_start = (s64)offset;
2040	sr.l_len = (s64)len;
2041
2042	return __ocfs2_change_file_space(NULL, inode, offset, cmd, &sr,
2043					 change_size);
2044}
2045
2046int ocfs2_check_range_for_refcount(struct inode *inode, loff_t pos,
2047				   size_t count)
2048{
2049	int ret = 0;
2050	unsigned int extent_flags;
2051	u32 cpos, clusters, extent_len, phys_cpos;
2052	struct super_block *sb = inode->i_sb;
2053
2054	if (!ocfs2_refcount_tree(OCFS2_SB(inode->i_sb)) ||
2055	    !(OCFS2_I(inode)->ip_dyn_features & OCFS2_HAS_REFCOUNT_FL) ||
2056	    OCFS2_I(inode)->ip_dyn_features & OCFS2_INLINE_DATA_FL)
2057		return 0;
2058
2059	cpos = pos >> OCFS2_SB(sb)->s_clustersize_bits;
2060	clusters = ocfs2_clusters_for_bytes(sb, pos + count) - cpos;
2061
2062	while (clusters) {
2063		ret = ocfs2_get_clusters(inode, cpos, &phys_cpos, &extent_len,
2064					 &extent_flags);
2065		if (ret < 0) {
2066			mlog_errno(ret);
2067			goto out;
2068		}
2069
2070		if (phys_cpos && (extent_flags & OCFS2_EXT_REFCOUNTED)) {
2071			ret = 1;
2072			break;
2073		}
2074
2075		if (extent_len > clusters)
2076			extent_len = clusters;
2077
2078		clusters -= extent_len;
2079		cpos += extent_len;
2080	}
2081out:
2082	return ret;
2083}
2084
2085static int ocfs2_is_io_unaligned(struct inode *inode, size_t count, loff_t pos)
2086{
2087	int blockmask = inode->i_sb->s_blocksize - 1;
2088	loff_t final_size = pos + count;
2089
2090	if ((pos & blockmask) || (final_size & blockmask))
2091		return 1;
2092	return 0;
2093}
2094
2095static int ocfs2_prepare_inode_for_refcount(struct inode *inode,
2096					    struct file *file,
2097					    loff_t pos, size_t count,
2098					    int *meta_level)
2099{
2100	int ret;
2101	struct buffer_head *di_bh = NULL;
2102	u32 cpos = pos >> OCFS2_SB(inode->i_sb)->s_clustersize_bits;
2103	u32 clusters =
2104		ocfs2_clusters_for_bytes(inode->i_sb, pos + count) - cpos;
2105
2106	ret = ocfs2_inode_lock(inode, &di_bh, 1);
2107	if (ret) {
2108		mlog_errno(ret);
2109		goto out;
2110	}
2111
2112	*meta_level = 1;
2113
2114	ret = ocfs2_refcount_cow(inode, di_bh, cpos, clusters, UINT_MAX);
2115	if (ret)
2116		mlog_errno(ret);
2117out:
2118	brelse(di_bh);
2119	return ret;
2120}
2121
2122static int ocfs2_prepare_inode_for_write(struct file *file,
2123					 loff_t pos,
2124					 size_t count,
2125					 int appending,
2126					 int *direct_io,
2127					 int *has_refcount)
2128{
2129	int ret = 0, meta_level = 0;
2130	struct dentry *dentry = file->f_path.dentry;
2131	struct inode *inode = d_inode(dentry);
2132	loff_t end;
2133	struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
2134	int full_coherency = !(osb->s_mount_opt &
2135		OCFS2_MOUNT_COHERENCY_BUFFERED);
2136
2137	/*
2138	 * We start with a read level meta lock and only jump to an ex
2139	 * if we need to make modifications here.
2140	 */
2141	for(;;) {
2142		ret = ocfs2_inode_lock(inode, NULL, meta_level);
2143		if (ret < 0) {
2144			meta_level = -1;
2145			mlog_errno(ret);
2146			goto out;
2147		}
2148
2149		/* Clear suid / sgid if necessary. We do this here
2150		 * instead of later in the write path because
2151		 * remove_suid() calls ->setattr without any hint that
2152		 * we may have already done our cluster locking. Since
2153		 * ocfs2_setattr() *must* take cluster locks to
2154		 * proceed, this will lead us to recursively lock the
2155		 * inode. There's also the dinode i_size state which
2156		 * can be lost via setattr during extending writes (we
2157		 * set inode->i_size at the end of a write. */
2158		if (should_remove_suid(dentry)) {
2159			if (meta_level == 0) {
2160				ocfs2_inode_unlock(inode, meta_level);
2161				meta_level = 1;
2162				continue;
2163			}
2164
2165			ret = ocfs2_write_remove_suid(inode);
2166			if (ret < 0) {
2167				mlog_errno(ret);
2168				goto out_unlock;
2169			}
2170		}
2171
2172		end = pos + count;
2173
2174		ret = ocfs2_check_range_for_refcount(inode, pos, count);
2175		if (ret == 1) {
2176			ocfs2_inode_unlock(inode, meta_level);
2177			meta_level = -1;
2178
2179			ret = ocfs2_prepare_inode_for_refcount(inode,
2180							       file,
2181							       pos,
2182							       count,
2183							       &meta_level);
2184			if (has_refcount)
2185				*has_refcount = 1;
2186			if (direct_io)
2187				*direct_io = 0;
2188		}
2189
2190		if (ret < 0) {
2191			mlog_errno(ret);
2192			goto out_unlock;
2193		}
2194
2195		/*
2196		 * Skip the O_DIRECT checks if we don't need
2197		 * them.
2198		 */
2199		if (!direct_io || !(*direct_io))
2200			break;
2201
2202		/*
2203		 * There's no sane way to do direct writes to an inode
2204		 * with inline data.
2205		 */
2206		if (OCFS2_I(inode)->ip_dyn_features & OCFS2_INLINE_DATA_FL) {
2207			*direct_io = 0;
2208			break;
2209		}
2210
2211		/*
2212		 * Allowing concurrent direct writes means
2213		 * i_size changes wouldn't be synchronized, so
2214		 * one node could wind up truncating another
2215		 * nodes writes.
2216		 */
2217		if (end > i_size_read(inode) && !full_coherency) {
2218			*direct_io = 0;
2219			break;
2220		}
2221
2222		/*
2223		 * Fallback to old way if the feature bit is not set.
2224		 */
2225		if (end > i_size_read(inode) &&
2226				!ocfs2_supports_append_dio(osb)) {
2227			*direct_io = 0;
2228			break;
2229		}
2230
2231		/*
2232		 * We don't fill holes during direct io, so
2233		 * check for them here. If any are found, the
2234		 * caller will have to retake some cluster
2235		 * locks and initiate the io as buffered.
2236		 */
2237		ret = ocfs2_check_range_for_holes(inode, pos, count);
2238		if (ret == 1) {
2239			/*
2240			 * Fallback to old way if the feature bit is not set.
2241			 * Otherwise try dio first and then complete the rest
2242			 * request through buffer io.
2243			 */
2244			if (!ocfs2_supports_append_dio(osb))
2245				*direct_io = 0;
2246			ret = 0;
2247		} else if (ret < 0)
2248			mlog_errno(ret);
2249		break;
2250	}
2251
2252out_unlock:
2253	trace_ocfs2_prepare_inode_for_write(OCFS2_I(inode)->ip_blkno,
2254					    pos, appending, count,
2255					    direct_io, has_refcount);
2256
2257	if (meta_level >= 0)
2258		ocfs2_inode_unlock(inode, meta_level);
2259
2260out:
2261	return ret;
2262}
2263
2264static ssize_t ocfs2_file_write_iter(struct kiocb *iocb,
2265				    struct iov_iter *from)
2266{
2267	int direct_io, appending, rw_level;
2268	int can_do_direct, has_refcount = 0;
2269	ssize_t written = 0;
2270	ssize_t ret;
2271	size_t count = iov_iter_count(from), orig_count;
2272	struct file *file = iocb->ki_filp;
2273	struct inode *inode = file_inode(file);
2274	struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
2275	int full_coherency = !(osb->s_mount_opt &
2276			       OCFS2_MOUNT_COHERENCY_BUFFERED);
2277	int unaligned_dio = 0;
2278	int dropped_dio = 0;
2279	int append_write = ((iocb->ki_pos + count) >=
2280			i_size_read(inode) ? 1 : 0);
2281
2282	trace_ocfs2_file_aio_write(inode, file, file->f_path.dentry,
2283		(unsigned long long)OCFS2_I(inode)->ip_blkno,
2284		file->f_path.dentry->d_name.len,
2285		file->f_path.dentry->d_name.name,
2286		(unsigned int)from->nr_segs);	/* GRRRRR */
2287
2288	if (count == 0)
2289		return 0;
2290
2291	appending = iocb->ki_flags & IOCB_APPEND ? 1 : 0;
2292	direct_io = iocb->ki_flags & IOCB_DIRECT ? 1 : 0;
2293
2294	mutex_lock(&inode->i_mutex);
2295
2296relock:
2297	/*
2298	 * Concurrent O_DIRECT writes are allowed with
2299	 * mount_option "coherency=buffered".
2300	 * For append write, we must take rw EX.
2301	 */
2302	rw_level = (!direct_io || full_coherency || append_write);
2303
2304	ret = ocfs2_rw_lock(inode, rw_level);
2305	if (ret < 0) {
2306		mlog_errno(ret);
2307		goto out_mutex;
2308	}
2309
2310	/*
2311	 * O_DIRECT writes with "coherency=full" need to take EX cluster
2312	 * inode_lock to guarantee coherency.
2313	 */
2314	if (direct_io && full_coherency) {
2315		/*
2316		 * We need to take and drop the inode lock to force
2317		 * other nodes to drop their caches.  Buffered I/O
2318		 * already does this in write_begin().
2319		 */
2320		ret = ocfs2_inode_lock(inode, NULL, 1);
2321		if (ret < 0) {
2322			mlog_errno(ret);
2323			goto out;
2324		}
2325
2326		ocfs2_inode_unlock(inode, 1);
2327	}
2328
2329	orig_count = iov_iter_count(from);
2330	ret = generic_write_checks(iocb, from);
2331	if (ret <= 0) {
2332		if (ret)
2333			mlog_errno(ret);
2334		goto out;
2335	}
2336	count = ret;
2337
2338	can_do_direct = direct_io;
2339	ret = ocfs2_prepare_inode_for_write(file, iocb->ki_pos, count, appending,
2340					    &can_do_direct, &has_refcount);
2341	if (ret < 0) {
2342		mlog_errno(ret);
2343		goto out;
2344	}
2345
2346	if (direct_io && !is_sync_kiocb(iocb))
2347		unaligned_dio = ocfs2_is_io_unaligned(inode, count, iocb->ki_pos);
2348
2349	/*
2350	 * We can't complete the direct I/O as requested, fall back to
2351	 * buffered I/O.
2352	 */
2353	if (direct_io && !can_do_direct) {
2354		ocfs2_rw_unlock(inode, rw_level);
2355
2356		rw_level = -1;
2357
2358		direct_io = 0;
2359		iocb->ki_flags &= ~IOCB_DIRECT;
2360		iov_iter_reexpand(from, orig_count);
2361		dropped_dio = 1;
2362		goto relock;
2363	}
2364
2365	if (unaligned_dio) {
2366		/*
2367		 * Wait on previous unaligned aio to complete before
2368		 * proceeding.
2369		 */
2370		mutex_lock(&OCFS2_I(inode)->ip_unaligned_aio);
2371		/* Mark the iocb as needing an unlock in ocfs2_dio_end_io */
2372		ocfs2_iocb_set_unaligned_aio(iocb);
2373	}
2374
2375	/* communicate with ocfs2_dio_end_io */
2376	ocfs2_iocb_set_rw_locked(iocb, rw_level);
2377
2378	written = __generic_file_write_iter(iocb, from);
2379	/* buffered aio wouldn't have proper lock coverage today */
2380	BUG_ON(written == -EIOCBQUEUED && !(iocb->ki_flags & IOCB_DIRECT));
2381
2382	/*
2383	 * deep in g_f_a_w_n()->ocfs2_direct_IO we pass in a ocfs2_dio_end_io
2384	 * function pointer which is called when o_direct io completes so that
2385	 * it can unlock our rw lock.
2386	 * Unfortunately there are error cases which call end_io and others
2387	 * that don't.  so we don't have to unlock the rw_lock if either an
2388	 * async dio is going to do it in the future or an end_io after an
2389	 * error has already done it.
2390	 */
2391	if ((written == -EIOCBQUEUED) || (!ocfs2_iocb_is_rw_locked(iocb))) {
2392		rw_level = -1;
2393		unaligned_dio = 0;
2394	}
2395
2396	if (unlikely(written <= 0))
2397		goto no_sync;
2398
2399	if (((file->f_flags & O_DSYNC) && !direct_io) ||
2400	    IS_SYNC(inode) || dropped_dio) {
2401		ret = filemap_fdatawrite_range(file->f_mapping,
2402					       iocb->ki_pos - written,
2403					       iocb->ki_pos - 1);
2404		if (ret < 0)
2405			written = ret;
2406
2407		if (!ret) {
2408			ret = jbd2_journal_force_commit(osb->journal->j_journal);
2409			if (ret < 0)
2410				written = ret;
2411		}
2412
2413		if (!ret)
2414			ret = filemap_fdatawait_range(file->f_mapping,
2415						      iocb->ki_pos - written,
2416						      iocb->ki_pos - 1);
2417	}
2418
2419no_sync:
2420	if (unaligned_dio && ocfs2_iocb_is_unaligned_aio(iocb)) {
2421		ocfs2_iocb_clear_unaligned_aio(iocb);
2422		mutex_unlock(&OCFS2_I(inode)->ip_unaligned_aio);
2423	}
2424
2425out:
2426	if (rw_level != -1)
2427		ocfs2_rw_unlock(inode, rw_level);
2428
2429out_mutex:
2430	mutex_unlock(&inode->i_mutex);
2431
2432	if (written)
2433		ret = written;
2434	return ret;
2435}
2436
2437static ssize_t ocfs2_file_splice_read(struct file *in,
2438				      loff_t *ppos,
2439				      struct pipe_inode_info *pipe,
2440				      size_t len,
2441				      unsigned int flags)
2442{
2443	int ret = 0, lock_level = 0;
2444	struct inode *inode = file_inode(in);
2445
2446	trace_ocfs2_file_splice_read(inode, in, in->f_path.dentry,
2447			(unsigned long long)OCFS2_I(inode)->ip_blkno,
2448			in->f_path.dentry->d_name.len,
2449			in->f_path.dentry->d_name.name, len);
2450
2451	/*
2452	 * See the comment in ocfs2_file_read_iter()
2453	 */
2454	ret = ocfs2_inode_lock_atime(inode, in->f_path.mnt, &lock_level);
2455	if (ret < 0) {
2456		mlog_errno(ret);
2457		goto bail;
2458	}
2459	ocfs2_inode_unlock(inode, lock_level);
2460
2461	ret = generic_file_splice_read(in, ppos, pipe, len, flags);
2462
2463bail:
2464	return ret;
2465}
2466
2467static ssize_t ocfs2_file_read_iter(struct kiocb *iocb,
2468				   struct iov_iter *to)
2469{
2470	int ret = 0, rw_level = -1, lock_level = 0;
2471	struct file *filp = iocb->ki_filp;
2472	struct inode *inode = file_inode(filp);
2473
2474	trace_ocfs2_file_aio_read(inode, filp, filp->f_path.dentry,
2475			(unsigned long long)OCFS2_I(inode)->ip_blkno,
2476			filp->f_path.dentry->d_name.len,
2477			filp->f_path.dentry->d_name.name,
2478			to->nr_segs);	/* GRRRRR */
2479
2480
2481	if (!inode) {
2482		ret = -EINVAL;
2483		mlog_errno(ret);
2484		goto bail;
2485	}
2486
2487	/*
2488	 * buffered reads protect themselves in ->readpage().  O_DIRECT reads
2489	 * need locks to protect pending reads from racing with truncate.
2490	 */
2491	if (iocb->ki_flags & IOCB_DIRECT) {
2492		ret = ocfs2_rw_lock(inode, 0);
2493		if (ret < 0) {
2494			mlog_errno(ret);
2495			goto bail;
2496		}
2497		rw_level = 0;
2498		/* communicate with ocfs2_dio_end_io */
2499		ocfs2_iocb_set_rw_locked(iocb, rw_level);
2500	}
2501
2502	/*
2503	 * We're fine letting folks race truncates and extending
2504	 * writes with read across the cluster, just like they can
2505	 * locally. Hence no rw_lock during read.
2506	 *
2507	 * Take and drop the meta data lock to update inode fields
2508	 * like i_size. This allows the checks down below
2509	 * generic_file_aio_read() a chance of actually working.
2510	 */
2511	ret = ocfs2_inode_lock_atime(inode, filp->f_path.mnt, &lock_level);
2512	if (ret < 0) {
2513		mlog_errno(ret);
2514		goto bail;
2515	}
2516	ocfs2_inode_unlock(inode, lock_level);
2517
2518	ret = generic_file_read_iter(iocb, to);
2519	trace_generic_file_aio_read_ret(ret);
2520
2521	/* buffered aio wouldn't have proper lock coverage today */
2522	BUG_ON(ret == -EIOCBQUEUED && !(iocb->ki_flags & IOCB_DIRECT));
2523
2524	/* see ocfs2_file_write_iter */
2525	if (ret == -EIOCBQUEUED || !ocfs2_iocb_is_rw_locked(iocb)) {
2526		rw_level = -1;
2527	}
2528
2529bail:
2530	if (rw_level != -1)
2531		ocfs2_rw_unlock(inode, rw_level);
2532
2533	return ret;
2534}
2535
2536/* Refer generic_file_llseek_unlocked() */
2537static loff_t ocfs2_file_llseek(struct file *file, loff_t offset, int whence)
2538{
2539	struct inode *inode = file->f_mapping->host;
2540	int ret = 0;
2541
2542	mutex_lock(&inode->i_mutex);
2543
2544	switch (whence) {
2545	case SEEK_SET:
2546		break;
2547	case SEEK_END:
2548		/* SEEK_END requires the OCFS2 inode lock for the file
2549		 * because it references the file's size.
2550		 */
2551		ret = ocfs2_inode_lock(inode, NULL, 0);
2552		if (ret < 0) {
2553			mlog_errno(ret);
2554			goto out;
2555		}
2556		offset += i_size_read(inode);
2557		ocfs2_inode_unlock(inode, 0);
2558		break;
2559	case SEEK_CUR:
2560		if (offset == 0) {
2561			offset = file->f_pos;
2562			goto out;
2563		}
2564		offset += file->f_pos;
2565		break;
2566	case SEEK_DATA:
2567	case SEEK_HOLE:
2568		ret = ocfs2_seek_data_hole_offset(file, &offset, whence);
2569		if (ret)
2570			goto out;
2571		break;
2572	default:
2573		ret = -EINVAL;
2574		goto out;
2575	}
2576
2577	offset = vfs_setpos(file, offset, inode->i_sb->s_maxbytes);
2578
2579out:
2580	mutex_unlock(&inode->i_mutex);
2581	if (ret)
2582		return ret;
2583	return offset;
2584}
2585
2586const struct inode_operations ocfs2_file_iops = {
2587	.setattr	= ocfs2_setattr,
2588	.getattr	= ocfs2_getattr,
2589	.permission	= ocfs2_permission,
2590	.setxattr	= generic_setxattr,
2591	.getxattr	= generic_getxattr,
2592	.listxattr	= ocfs2_listxattr,
2593	.removexattr	= generic_removexattr,
2594	.fiemap		= ocfs2_fiemap,
2595	.get_acl	= ocfs2_iop_get_acl,
2596	.set_acl	= ocfs2_iop_set_acl,
2597};
2598
2599const struct inode_operations ocfs2_special_file_iops = {
2600	.setattr	= ocfs2_setattr,
2601	.getattr	= ocfs2_getattr,
2602	.permission	= ocfs2_permission,
2603	.get_acl	= ocfs2_iop_get_acl,
2604	.set_acl	= ocfs2_iop_set_acl,
2605};
2606
2607/*
2608 * Other than ->lock, keep ocfs2_fops and ocfs2_dops in sync with
2609 * ocfs2_fops_no_plocks and ocfs2_dops_no_plocks!
2610 */
2611const struct file_operations ocfs2_fops = {
2612	.llseek		= ocfs2_file_llseek,
2613	.mmap		= ocfs2_mmap,
2614	.fsync		= ocfs2_sync_file,
2615	.release	= ocfs2_file_release,
2616	.open		= ocfs2_file_open,
2617	.read_iter	= ocfs2_file_read_iter,
2618	.write_iter	= ocfs2_file_write_iter,
2619	.unlocked_ioctl	= ocfs2_ioctl,
2620#ifdef CONFIG_COMPAT
2621	.compat_ioctl   = ocfs2_compat_ioctl,
2622#endif
2623	.lock		= ocfs2_lock,
2624	.flock		= ocfs2_flock,
2625	.splice_read	= ocfs2_file_splice_read,
2626	.splice_write	= iter_file_splice_write,
2627	.fallocate	= ocfs2_fallocate,
2628};
2629
2630const struct file_operations ocfs2_dops = {
2631	.llseek		= generic_file_llseek,
2632	.read		= generic_read_dir,
2633	.iterate	= ocfs2_readdir,
2634	.fsync		= ocfs2_sync_file,
2635	.release	= ocfs2_dir_release,
2636	.open		= ocfs2_dir_open,
2637	.unlocked_ioctl	= ocfs2_ioctl,
2638#ifdef CONFIG_COMPAT
2639	.compat_ioctl   = ocfs2_compat_ioctl,
2640#endif
2641	.lock		= ocfs2_lock,
2642	.flock		= ocfs2_flock,
2643};
2644
2645/*
2646 * POSIX-lockless variants of our file_operations.
2647 *
2648 * These will be used if the underlying cluster stack does not support
2649 * posix file locking, if the user passes the "localflocks" mount
2650 * option, or if we have a local-only fs.
2651 *
2652 * ocfs2_flock is in here because all stacks handle UNIX file locks,
2653 * so we still want it in the case of no stack support for
2654 * plocks. Internally, it will do the right thing when asked to ignore
2655 * the cluster.
2656 */
2657const struct file_operations ocfs2_fops_no_plocks = {
2658	.llseek		= ocfs2_file_llseek,
2659	.mmap		= ocfs2_mmap,
2660	.fsync		= ocfs2_sync_file,
2661	.release	= ocfs2_file_release,
2662	.open		= ocfs2_file_open,
2663	.read_iter	= ocfs2_file_read_iter,
2664	.write_iter	= ocfs2_file_write_iter,
2665	.unlocked_ioctl	= ocfs2_ioctl,
2666#ifdef CONFIG_COMPAT
2667	.compat_ioctl   = ocfs2_compat_ioctl,
2668#endif
2669	.flock		= ocfs2_flock,
2670	.splice_read	= ocfs2_file_splice_read,
2671	.splice_write	= iter_file_splice_write,
2672	.fallocate	= ocfs2_fallocate,
2673};
2674
2675const struct file_operations ocfs2_dops_no_plocks = {
2676	.llseek		= generic_file_llseek,
2677	.read		= generic_read_dir,
2678	.iterate	= ocfs2_readdir,
2679	.fsync		= ocfs2_sync_file,
2680	.release	= ocfs2_dir_release,
2681	.open		= ocfs2_dir_open,
2682	.unlocked_ioctl	= ocfs2_ioctl,
2683#ifdef CONFIG_COMPAT
2684	.compat_ioctl   = ocfs2_compat_ioctl,
2685#endif
2686	.flock		= ocfs2_flock,
2687};
2688