brintos

brintos / linux-shallow public Read only

0
0
Text · 107.4 KiB · 4fb521d Raw
3833 lines · c
1// SPDX-License-Identifier: GPL-2.02/*3 * Copyright (C) 2007 Oracle.  All rights reserved.4 */5 6#include <linux/fs.h>7#include <linux/pagemap.h>8#include <linux/time.h>9#include <linux/init.h>10#include <linux/string.h>11#include <linux/backing-dev.h>12#include <linux/falloc.h>13#include <linux/writeback.h>14#include <linux/compat.h>15#include <linux/slab.h>16#include <linux/btrfs.h>17#include <linux/uio.h>18#include <linux/iversion.h>19#include <linux/fsverity.h>20#include "ctree.h"21#include "direct-io.h"22#include "disk-io.h"23#include "transaction.h"24#include "btrfs_inode.h"25#include "tree-log.h"26#include "locking.h"27#include "qgroup.h"28#include "compression.h"29#include "delalloc-space.h"30#include "reflink.h"31#include "subpage.h"32#include "fs.h"33#include "accessors.h"34#include "extent-tree.h"35#include "file-item.h"36#include "ioctl.h"37#include "file.h"38#include "super.h"39 40/* simple helper to fault in pages and copy.  This should go away41 * and be replaced with calls into generic code.42 */43static noinline int btrfs_copy_from_user(loff_t pos, size_t write_bytes,44					 struct page **prepared_pages,45					 struct iov_iter *i)46{47	size_t copied = 0;48	size_t total_copied = 0;49	int pg = 0;50	int offset = offset_in_page(pos);51 52	while (write_bytes > 0) {53		size_t count = min_t(size_t,54				     PAGE_SIZE - offset, write_bytes);55		struct page *page = prepared_pages[pg];56		/*57		 * Copy data from userspace to the current page58		 */59		copied = copy_page_from_iter_atomic(page, offset, count, i);60 61		/* Flush processor's dcache for this page */62		flush_dcache_page(page);63 64		/*65		 * if we get a partial write, we can end up with66		 * partially up to date pages.  These add67		 * a lot of complexity, so make sure they don't68		 * happen by forcing this copy to be retried.69		 *70		 * The rest of the btrfs_file_write code will fall71		 * back to page at a time copies after we return 0.72		 */73		if (unlikely(copied < count)) {74			if (!PageUptodate(page)) {75				iov_iter_revert(i, copied);76				copied = 0;77			}78			if (!copied)79				break;80		}81 82		write_bytes -= copied;83		total_copied += copied;84		offset += copied;85		if (offset == PAGE_SIZE) {86			pg++;87			offset = 0;88		}89	}90	return total_copied;91}92 93/*94 * unlocks pages after btrfs_file_write is done with them95 */96static void btrfs_drop_pages(struct btrfs_fs_info *fs_info,97			     struct page **pages, size_t num_pages,98			     u64 pos, u64 copied)99{100	size_t i;101	u64 block_start = round_down(pos, fs_info->sectorsize);102	u64 block_len = round_up(pos + copied, fs_info->sectorsize) - block_start;103 104	ASSERT(block_len <= U32_MAX);105	for (i = 0; i < num_pages; i++) {106		/* page checked is some magic around finding pages that107		 * have been modified without going through btrfs_set_page_dirty108		 * clear it here. There should be no need to mark the pages109		 * accessed as prepare_pages should have marked them accessed110		 * in prepare_pages via find_or_create_page()111		 */112		btrfs_folio_clamp_clear_checked(fs_info, page_folio(pages[i]),113						block_start, block_len);114		unlock_page(pages[i]);115		put_page(pages[i]);116	}117}118 119/*120 * After btrfs_copy_from_user(), update the following things for delalloc:121 * - Mark newly dirtied pages as DELALLOC in the io tree.122 *   Used to advise which range is to be written back.123 * - Mark modified pages as Uptodate/Dirty and not needing COW fixup124 * - Update inode size for past EOF write125 */126int btrfs_dirty_pages(struct btrfs_inode *inode, struct page **pages,127		      size_t num_pages, loff_t pos, size_t write_bytes,128		      struct extent_state **cached, bool noreserve)129{130	struct btrfs_fs_info *fs_info = inode->root->fs_info;131	int ret = 0;132	int i;133	u64 num_bytes;134	u64 start_pos;135	u64 end_of_last_block;136	u64 end_pos = pos + write_bytes;137	loff_t isize = i_size_read(&inode->vfs_inode);138	unsigned int extra_bits = 0;139 140	if (write_bytes == 0)141		return 0;142 143	if (noreserve)144		extra_bits |= EXTENT_NORESERVE;145 146	start_pos = round_down(pos, fs_info->sectorsize);147	num_bytes = round_up(write_bytes + pos - start_pos,148			     fs_info->sectorsize);149	ASSERT(num_bytes <= U32_MAX);150 151	end_of_last_block = start_pos + num_bytes - 1;152 153	/*154	 * The pages may have already been dirty, clear out old accounting so155	 * we can set things up properly156	 */157	clear_extent_bit(&inode->io_tree, start_pos, end_of_last_block,158			 EXTENT_DELALLOC | EXTENT_DO_ACCOUNTING | EXTENT_DEFRAG,159			 cached);160 161	ret = btrfs_set_extent_delalloc(inode, start_pos, end_of_last_block,162					extra_bits, cached);163	if (ret)164		return ret;165 166	for (i = 0; i < num_pages; i++) {167		struct page *p = pages[i];168 169		btrfs_folio_clamp_set_uptodate(fs_info, page_folio(p),170					       start_pos, num_bytes);171		btrfs_folio_clamp_clear_checked(fs_info, page_folio(p),172						start_pos, num_bytes);173		btrfs_folio_clamp_set_dirty(fs_info, page_folio(p),174					    start_pos, num_bytes);175	}176 177	/*178	 * we've only changed i_size in ram, and we haven't updated179	 * the disk i_size.  There is no need to log the inode180	 * at this time.181	 */182	if (end_pos > isize)183		i_size_write(&inode->vfs_inode, end_pos);184	return 0;185}186 187/*188 * this is very complex, but the basic idea is to drop all extents189 * in the range start - end.  hint_block is filled in with a block number190 * that would be a good hint to the block allocator for this file.191 *192 * If an extent intersects the range but is not entirely inside the range193 * it is either truncated or split.  Anything entirely inside the range194 * is deleted from the tree.195 *196 * Note: the VFS' inode number of bytes is not updated, it's up to the caller197 * to deal with that. We set the field 'bytes_found' of the arguments structure198 * with the number of allocated bytes found in the target range, so that the199 * caller can update the inode's number of bytes in an atomic way when200 * replacing extents in a range to avoid races with stat(2).201 */202int btrfs_drop_extents(struct btrfs_trans_handle *trans,203		       struct btrfs_root *root, struct btrfs_inode *inode,204		       struct btrfs_drop_extents_args *args)205{206	struct btrfs_fs_info *fs_info = root->fs_info;207	struct extent_buffer *leaf;208	struct btrfs_file_extent_item *fi;209	struct btrfs_key key;210	struct btrfs_key new_key;211	u64 ino = btrfs_ino(inode);212	u64 search_start = args->start;213	u64 disk_bytenr = 0;214	u64 num_bytes = 0;215	u64 extent_offset = 0;216	u64 extent_end = 0;217	u64 last_end = args->start;218	int del_nr = 0;219	int del_slot = 0;220	int extent_type;221	int recow;222	int ret;223	int modify_tree = -1;224	int update_refs;225	int found = 0;226	struct btrfs_path *path = args->path;227 228	args->bytes_found = 0;229	args->extent_inserted = false;230 231	/* Must always have a path if ->replace_extent is true */232	ASSERT(!(args->replace_extent && !args->path));233 234	if (!path) {235		path = btrfs_alloc_path();236		if (!path) {237			ret = -ENOMEM;238			goto out;239		}240	}241 242	if (args->drop_cache)243		btrfs_drop_extent_map_range(inode, args->start, args->end - 1, false);244 245	if (args->start >= inode->disk_i_size && !args->replace_extent)246		modify_tree = 0;247 248	update_refs = (btrfs_root_id(root) != BTRFS_TREE_LOG_OBJECTID);249	while (1) {250		recow = 0;251		ret = btrfs_lookup_file_extent(trans, root, path, ino,252					       search_start, modify_tree);253		if (ret < 0)254			break;255		if (ret > 0 && path->slots[0] > 0 && search_start == args->start) {256			leaf = path->nodes[0];257			btrfs_item_key_to_cpu(leaf, &key, path->slots[0] - 1);258			if (key.objectid == ino &&259			    key.type == BTRFS_EXTENT_DATA_KEY)260				path->slots[0]--;261		}262		ret = 0;263next_slot:264		leaf = path->nodes[0];265		if (path->slots[0] >= btrfs_header_nritems(leaf)) {266			BUG_ON(del_nr > 0);267			ret = btrfs_next_leaf(root, path);268			if (ret < 0)269				break;270			if (ret > 0) {271				ret = 0;272				break;273			}274			leaf = path->nodes[0];275			recow = 1;276		}277 278		btrfs_item_key_to_cpu(leaf, &key, path->slots[0]);279 280		if (key.objectid > ino)281			break;282		if (WARN_ON_ONCE(key.objectid < ino) ||283		    key.type < BTRFS_EXTENT_DATA_KEY) {284			ASSERT(del_nr == 0);285			path->slots[0]++;286			goto next_slot;287		}288		if (key.type > BTRFS_EXTENT_DATA_KEY || key.offset >= args->end)289			break;290 291		fi = btrfs_item_ptr(leaf, path->slots[0],292				    struct btrfs_file_extent_item);293		extent_type = btrfs_file_extent_type(leaf, fi);294 295		if (extent_type == BTRFS_FILE_EXTENT_REG ||296		    extent_type == BTRFS_FILE_EXTENT_PREALLOC) {297			disk_bytenr = btrfs_file_extent_disk_bytenr(leaf, fi);298			num_bytes = btrfs_file_extent_disk_num_bytes(leaf, fi);299			extent_offset = btrfs_file_extent_offset(leaf, fi);300			extent_end = key.offset +301				btrfs_file_extent_num_bytes(leaf, fi);302		} else if (extent_type == BTRFS_FILE_EXTENT_INLINE) {303			extent_end = key.offset +304				btrfs_file_extent_ram_bytes(leaf, fi);305		} else {306			/* can't happen */307			BUG();308		}309 310		/*311		 * Don't skip extent items representing 0 byte lengths. They312		 * used to be created (bug) if while punching holes we hit313		 * -ENOSPC condition. So if we find one here, just ensure we314		 * delete it, otherwise we would insert a new file extent item315		 * with the same key (offset) as that 0 bytes length file316		 * extent item in the call to setup_items_for_insert() later317		 * in this function.318		 */319		if (extent_end == key.offset && extent_end >= search_start) {320			last_end = extent_end;321			goto delete_extent_item;322		}323 324		if (extent_end <= search_start) {325			path->slots[0]++;326			goto next_slot;327		}328 329		found = 1;330		search_start = max(key.offset, args->start);331		if (recow || !modify_tree) {332			modify_tree = -1;333			btrfs_release_path(path);334			continue;335		}336 337		/*338		 *     | - range to drop - |339		 *  | -------- extent -------- |340		 */341		if (args->start > key.offset && args->end < extent_end) {342			BUG_ON(del_nr > 0);343			if (extent_type == BTRFS_FILE_EXTENT_INLINE) {344				ret = -EOPNOTSUPP;345				break;346			}347 348			memcpy(&new_key, &key, sizeof(new_key));349			new_key.offset = args->start;350			ret = btrfs_duplicate_item(trans, root, path,351						   &new_key);352			if (ret == -EAGAIN) {353				btrfs_release_path(path);354				continue;355			}356			if (ret < 0)357				break;358 359			leaf = path->nodes[0];360			fi = btrfs_item_ptr(leaf, path->slots[0] - 1,361					    struct btrfs_file_extent_item);362			btrfs_set_file_extent_num_bytes(leaf, fi,363							args->start - key.offset);364 365			fi = btrfs_item_ptr(leaf, path->slots[0],366					    struct btrfs_file_extent_item);367 368			extent_offset += args->start - key.offset;369			btrfs_set_file_extent_offset(leaf, fi, extent_offset);370			btrfs_set_file_extent_num_bytes(leaf, fi,371							extent_end - args->start);372			btrfs_mark_buffer_dirty(trans, leaf);373 374			if (update_refs && disk_bytenr > 0) {375				struct btrfs_ref ref = {376					.action = BTRFS_ADD_DELAYED_REF,377					.bytenr = disk_bytenr,378					.num_bytes = num_bytes,379					.parent = 0,380					.owning_root = btrfs_root_id(root),381					.ref_root = btrfs_root_id(root),382				};383				btrfs_init_data_ref(&ref, new_key.objectid,384						    args->start - extent_offset,385						    0, false);386				ret = btrfs_inc_extent_ref(trans, &ref);387				if (ret) {388					btrfs_abort_transaction(trans, ret);389					break;390				}391			}392			key.offset = args->start;393		}394		/*395		 * From here on out we will have actually dropped something, so396		 * last_end can be updated.397		 */398		last_end = extent_end;399 400		/*401		 *  | ---- range to drop ----- |402		 *      | -------- extent -------- |403		 */404		if (args->start <= key.offset && args->end < extent_end) {405			if (extent_type == BTRFS_FILE_EXTENT_INLINE) {406				ret = -EOPNOTSUPP;407				break;408			}409 410			memcpy(&new_key, &key, sizeof(new_key));411			new_key.offset = args->end;412			btrfs_set_item_key_safe(trans, path, &new_key);413 414			extent_offset += args->end - key.offset;415			btrfs_set_file_extent_offset(leaf, fi, extent_offset);416			btrfs_set_file_extent_num_bytes(leaf, fi,417							extent_end - args->end);418			btrfs_mark_buffer_dirty(trans, leaf);419			if (update_refs && disk_bytenr > 0)420				args->bytes_found += args->end - key.offset;421			break;422		}423 424		search_start = extent_end;425		/*426		 *       | ---- range to drop ----- |427		 *  | -------- extent -------- |428		 */429		if (args->start > key.offset && args->end >= extent_end) {430			BUG_ON(del_nr > 0);431			if (extent_type == BTRFS_FILE_EXTENT_INLINE) {432				ret = -EOPNOTSUPP;433				break;434			}435 436			btrfs_set_file_extent_num_bytes(leaf, fi,437							args->start - key.offset);438			btrfs_mark_buffer_dirty(trans, leaf);439			if (update_refs && disk_bytenr > 0)440				args->bytes_found += extent_end - args->start;441			if (args->end == extent_end)442				break;443 444			path->slots[0]++;445			goto next_slot;446		}447 448		/*449		 *  | ---- range to drop ----- |450		 *    | ------ extent ------ |451		 */452		if (args->start <= key.offset && args->end >= extent_end) {453delete_extent_item:454			if (del_nr == 0) {455				del_slot = path->slots[0];456				del_nr = 1;457			} else {458				BUG_ON(del_slot + del_nr != path->slots[0]);459				del_nr++;460			}461 462			if (update_refs &&463			    extent_type == BTRFS_FILE_EXTENT_INLINE) {464				args->bytes_found += extent_end - key.offset;465				extent_end = ALIGN(extent_end,466						   fs_info->sectorsize);467			} else if (update_refs && disk_bytenr > 0) {468				struct btrfs_ref ref = {469					.action = BTRFS_DROP_DELAYED_REF,470					.bytenr = disk_bytenr,471					.num_bytes = num_bytes,472					.parent = 0,473					.owning_root = btrfs_root_id(root),474					.ref_root = btrfs_root_id(root),475				};476				btrfs_init_data_ref(&ref, key.objectid,477						    key.offset - extent_offset,478						    0, false);479				ret = btrfs_free_extent(trans, &ref);480				if (ret) {481					btrfs_abort_transaction(trans, ret);482					break;483				}484				args->bytes_found += extent_end - key.offset;485			}486 487			if (args->end == extent_end)488				break;489 490			if (path->slots[0] + 1 < btrfs_header_nritems(leaf)) {491				path->slots[0]++;492				goto next_slot;493			}494 495			ret = btrfs_del_items(trans, root, path, del_slot,496					      del_nr);497			if (ret) {498				btrfs_abort_transaction(trans, ret);499				break;500			}501 502			del_nr = 0;503			del_slot = 0;504 505			btrfs_release_path(path);506			continue;507		}508 509		BUG();510	}511 512	if (!ret && del_nr > 0) {513		/*514		 * Set path->slots[0] to first slot, so that after the delete515		 * if items are move off from our leaf to its immediate left or516		 * right neighbor leafs, we end up with a correct and adjusted517		 * path->slots[0] for our insertion (if args->replace_extent).518		 */519		path->slots[0] = del_slot;520		ret = btrfs_del_items(trans, root, path, del_slot, del_nr);521		if (ret)522			btrfs_abort_transaction(trans, ret);523	}524 525	leaf = path->nodes[0];526	/*527	 * If btrfs_del_items() was called, it might have deleted a leaf, in528	 * which case it unlocked our path, so check path->locks[0] matches a529	 * write lock.530	 */531	if (!ret && args->replace_extent &&532	    path->locks[0] == BTRFS_WRITE_LOCK &&533	    btrfs_leaf_free_space(leaf) >=534	    sizeof(struct btrfs_item) + args->extent_item_size) {535 536		key.objectid = ino;537		key.type = BTRFS_EXTENT_DATA_KEY;538		key.offset = args->start;539		if (!del_nr && path->slots[0] < btrfs_header_nritems(leaf)) {540			struct btrfs_key slot_key;541 542			btrfs_item_key_to_cpu(leaf, &slot_key, path->slots[0]);543			if (btrfs_comp_cpu_keys(&key, &slot_key) > 0)544				path->slots[0]++;545		}546		btrfs_setup_item_for_insert(trans, root, path, &key,547					    args->extent_item_size);548		args->extent_inserted = true;549	}550 551	if (!args->path)552		btrfs_free_path(path);553	else if (!args->extent_inserted)554		btrfs_release_path(path);555out:556	args->drop_end = found ? min(args->end, last_end) : args->end;557 558	return ret;559}560 561static int extent_mergeable(struct extent_buffer *leaf, int slot,562			    u64 objectid, u64 bytenr, u64 orig_offset,563			    u64 *start, u64 *end)564{565	struct btrfs_file_extent_item *fi;566	struct btrfs_key key;567	u64 extent_end;568 569	if (slot < 0 || slot >= btrfs_header_nritems(leaf))570		return 0;571 572	btrfs_item_key_to_cpu(leaf, &key, slot);573	if (key.objectid != objectid || key.type != BTRFS_EXTENT_DATA_KEY)574		return 0;575 576	fi = btrfs_item_ptr(leaf, slot, struct btrfs_file_extent_item);577	if (btrfs_file_extent_type(leaf, fi) != BTRFS_FILE_EXTENT_REG ||578	    btrfs_file_extent_disk_bytenr(leaf, fi) != bytenr ||579	    btrfs_file_extent_offset(leaf, fi) != key.offset - orig_offset ||580	    btrfs_file_extent_compression(leaf, fi) ||581	    btrfs_file_extent_encryption(leaf, fi) ||582	    btrfs_file_extent_other_encoding(leaf, fi))583		return 0;584 585	extent_end = key.offset + btrfs_file_extent_num_bytes(leaf, fi);586	if ((*start && *start != key.offset) || (*end && *end != extent_end))587		return 0;588 589	*start = key.offset;590	*end = extent_end;591	return 1;592}593 594/*595 * Mark extent in the range start - end as written.596 *597 * This changes extent type from 'pre-allocated' to 'regular'. If only598 * part of extent is marked as written, the extent will be split into599 * two or three.600 */601int btrfs_mark_extent_written(struct btrfs_trans_handle *trans,602			      struct btrfs_inode *inode, u64 start, u64 end)603{604	struct btrfs_root *root = inode->root;605	struct extent_buffer *leaf;606	struct btrfs_path *path;607	struct btrfs_file_extent_item *fi;608	struct btrfs_ref ref = { 0 };609	struct btrfs_key key;610	struct btrfs_key new_key;611	u64 bytenr;612	u64 num_bytes;613	u64 extent_end;614	u64 orig_offset;615	u64 other_start;616	u64 other_end;617	u64 split;618	int del_nr = 0;619	int del_slot = 0;620	int recow;621	int ret = 0;622	u64 ino = btrfs_ino(inode);623 624	path = btrfs_alloc_path();625	if (!path)626		return -ENOMEM;627again:628	recow = 0;629	split = start;630	key.objectid = ino;631	key.type = BTRFS_EXTENT_DATA_KEY;632	key.offset = split;633 634	ret = btrfs_search_slot(trans, root, &key, path, -1, 1);635	if (ret < 0)636		goto out;637	if (ret > 0 && path->slots[0] > 0)638		path->slots[0]--;639 640	leaf = path->nodes[0];641	btrfs_item_key_to_cpu(leaf, &key, path->slots[0]);642	if (key.objectid != ino ||643	    key.type != BTRFS_EXTENT_DATA_KEY) {644		ret = -EINVAL;645		btrfs_abort_transaction(trans, ret);646		goto out;647	}648	fi = btrfs_item_ptr(leaf, path->slots[0],649			    struct btrfs_file_extent_item);650	if (btrfs_file_extent_type(leaf, fi) != BTRFS_FILE_EXTENT_PREALLOC) {651		ret = -EINVAL;652		btrfs_abort_transaction(trans, ret);653		goto out;654	}655	extent_end = key.offset + btrfs_file_extent_num_bytes(leaf, fi);656	if (key.offset > start || extent_end < end) {657		ret = -EINVAL;658		btrfs_abort_transaction(trans, ret);659		goto out;660	}661 662	bytenr = btrfs_file_extent_disk_bytenr(leaf, fi);663	num_bytes = btrfs_file_extent_disk_num_bytes(leaf, fi);664	orig_offset = key.offset - btrfs_file_extent_offset(leaf, fi);665	memcpy(&new_key, &key, sizeof(new_key));666 667	if (start == key.offset && end < extent_end) {668		other_start = 0;669		other_end = start;670		if (extent_mergeable(leaf, path->slots[0] - 1,671				     ino, bytenr, orig_offset,672				     &other_start, &other_end)) {673			new_key.offset = end;674			btrfs_set_item_key_safe(trans, path, &new_key);675			fi = btrfs_item_ptr(leaf, path->slots[0],676					    struct btrfs_file_extent_item);677			btrfs_set_file_extent_generation(leaf, fi,678							 trans->transid);679			btrfs_set_file_extent_num_bytes(leaf, fi,680							extent_end - end);681			btrfs_set_file_extent_offset(leaf, fi,682						     end - orig_offset);683			fi = btrfs_item_ptr(leaf, path->slots[0] - 1,684					    struct btrfs_file_extent_item);685			btrfs_set_file_extent_generation(leaf, fi,686							 trans->transid);687			btrfs_set_file_extent_num_bytes(leaf, fi,688							end - other_start);689			btrfs_mark_buffer_dirty(trans, leaf);690			goto out;691		}692	}693 694	if (start > key.offset && end == extent_end) {695		other_start = end;696		other_end = 0;697		if (extent_mergeable(leaf, path->slots[0] + 1,698				     ino, bytenr, orig_offset,699				     &other_start, &other_end)) {700			fi = btrfs_item_ptr(leaf, path->slots[0],701					    struct btrfs_file_extent_item);702			btrfs_set_file_extent_num_bytes(leaf, fi,703							start - key.offset);704			btrfs_set_file_extent_generation(leaf, fi,705							 trans->transid);706			path->slots[0]++;707			new_key.offset = start;708			btrfs_set_item_key_safe(trans, path, &new_key);709 710			fi = btrfs_item_ptr(leaf, path->slots[0],711					    struct btrfs_file_extent_item);712			btrfs_set_file_extent_generation(leaf, fi,713							 trans->transid);714			btrfs_set_file_extent_num_bytes(leaf, fi,715							other_end - start);716			btrfs_set_file_extent_offset(leaf, fi,717						     start - orig_offset);718			btrfs_mark_buffer_dirty(trans, leaf);719			goto out;720		}721	}722 723	while (start > key.offset || end < extent_end) {724		if (key.offset == start)725			split = end;726 727		new_key.offset = split;728		ret = btrfs_duplicate_item(trans, root, path, &new_key);729		if (ret == -EAGAIN) {730			btrfs_release_path(path);731			goto again;732		}733		if (ret < 0) {734			btrfs_abort_transaction(trans, ret);735			goto out;736		}737 738		leaf = path->nodes[0];739		fi = btrfs_item_ptr(leaf, path->slots[0] - 1,740				    struct btrfs_file_extent_item);741		btrfs_set_file_extent_generation(leaf, fi, trans->transid);742		btrfs_set_file_extent_num_bytes(leaf, fi,743						split - key.offset);744 745		fi = btrfs_item_ptr(leaf, path->slots[0],746				    struct btrfs_file_extent_item);747 748		btrfs_set_file_extent_generation(leaf, fi, trans->transid);749		btrfs_set_file_extent_offset(leaf, fi, split - orig_offset);750		btrfs_set_file_extent_num_bytes(leaf, fi,751						extent_end - split);752		btrfs_mark_buffer_dirty(trans, leaf);753 754		ref.action = BTRFS_ADD_DELAYED_REF;755		ref.bytenr = bytenr;756		ref.num_bytes = num_bytes;757		ref.parent = 0;758		ref.owning_root = btrfs_root_id(root);759		ref.ref_root = btrfs_root_id(root);760		btrfs_init_data_ref(&ref, ino, orig_offset, 0, false);761		ret = btrfs_inc_extent_ref(trans, &ref);762		if (ret) {763			btrfs_abort_transaction(trans, ret);764			goto out;765		}766 767		if (split == start) {768			key.offset = start;769		} else {770			if (start != key.offset) {771				ret = -EINVAL;772				btrfs_abort_transaction(trans, ret);773				goto out;774			}775			path->slots[0]--;776			extent_end = end;777		}778		recow = 1;779	}780 781	other_start = end;782	other_end = 0;783 784	ref.action = BTRFS_DROP_DELAYED_REF;785	ref.bytenr = bytenr;786	ref.num_bytes = num_bytes;787	ref.parent = 0;788	ref.owning_root = btrfs_root_id(root);789	ref.ref_root = btrfs_root_id(root);790	btrfs_init_data_ref(&ref, ino, orig_offset, 0, false);791	if (extent_mergeable(leaf, path->slots[0] + 1,792			     ino, bytenr, orig_offset,793			     &other_start, &other_end)) {794		if (recow) {795			btrfs_release_path(path);796			goto again;797		}798		extent_end = other_end;799		del_slot = path->slots[0] + 1;800		del_nr++;801		ret = btrfs_free_extent(trans, &ref);802		if (ret) {803			btrfs_abort_transaction(trans, ret);804			goto out;805		}806	}807	other_start = 0;808	other_end = start;809	if (extent_mergeable(leaf, path->slots[0] - 1,810			     ino, bytenr, orig_offset,811			     &other_start, &other_end)) {812		if (recow) {813			btrfs_release_path(path);814			goto again;815		}816		key.offset = other_start;817		del_slot = path->slots[0];818		del_nr++;819		ret = btrfs_free_extent(trans, &ref);820		if (ret) {821			btrfs_abort_transaction(trans, ret);822			goto out;823		}824	}825	if (del_nr == 0) {826		fi = btrfs_item_ptr(leaf, path->slots[0],827			   struct btrfs_file_extent_item);828		btrfs_set_file_extent_type(leaf, fi,829					   BTRFS_FILE_EXTENT_REG);830		btrfs_set_file_extent_generation(leaf, fi, trans->transid);831		btrfs_mark_buffer_dirty(trans, leaf);832	} else {833		fi = btrfs_item_ptr(leaf, del_slot - 1,834			   struct btrfs_file_extent_item);835		btrfs_set_file_extent_type(leaf, fi,836					   BTRFS_FILE_EXTENT_REG);837		btrfs_set_file_extent_generation(leaf, fi, trans->transid);838		btrfs_set_file_extent_num_bytes(leaf, fi,839						extent_end - key.offset);840		btrfs_mark_buffer_dirty(trans, leaf);841 842		ret = btrfs_del_items(trans, root, path, del_slot, del_nr);843		if (ret < 0) {844			btrfs_abort_transaction(trans, ret);845			goto out;846		}847	}848out:849	btrfs_free_path(path);850	return ret;851}852 853/*854 * on error we return an unlocked page and the error value855 * on success we return a locked page and 0856 */857static int prepare_uptodate_page(struct inode *inode,858				 struct page *page, u64 pos,859				 bool force_uptodate)860{861	struct folio *folio = page_folio(page);862	int ret = 0;863 864	if (((pos & (PAGE_SIZE - 1)) || force_uptodate) &&865	    !PageUptodate(page)) {866		ret = btrfs_read_folio(NULL, folio);867		if (ret)868			return ret;869		lock_page(page);870		if (!PageUptodate(page)) {871			unlock_page(page);872			return -EIO;873		}874 875		/*876		 * Since btrfs_read_folio() will unlock the folio before it877		 * returns, there is a window where btrfs_release_folio() can be878		 * called to release the page.  Here we check both inode879		 * mapping and PagePrivate() to make sure the page was not880		 * released.881		 *882		 * The private flag check is essential for subpage as we need883		 * to store extra bitmap using folio private.884		 */885		if (page->mapping != inode->i_mapping || !folio_test_private(folio)) {886			unlock_page(page);887			return -EAGAIN;888		}889	}890	return 0;891}892 893static fgf_t get_prepare_fgp_flags(bool nowait)894{895	fgf_t fgp_flags = FGP_LOCK | FGP_ACCESSED | FGP_CREAT;896 897	if (nowait)898		fgp_flags |= FGP_NOWAIT;899 900	return fgp_flags;901}902 903static gfp_t get_prepare_gfp_flags(struct inode *inode, bool nowait)904{905	gfp_t gfp;906 907	gfp = btrfs_alloc_write_mask(inode->i_mapping);908	if (nowait) {909		gfp &= ~__GFP_DIRECT_RECLAIM;910		gfp |= GFP_NOWAIT;911	}912 913	return gfp;914}915 916/*917 * this just gets pages into the page cache and locks them down.918 */919static noinline int prepare_pages(struct inode *inode, struct page **pages,920				  size_t num_pages, loff_t pos,921				  size_t write_bytes, bool force_uptodate,922				  bool nowait)923{924	int i;925	unsigned long index = pos >> PAGE_SHIFT;926	gfp_t mask = get_prepare_gfp_flags(inode, nowait);927	fgf_t fgp_flags = get_prepare_fgp_flags(nowait);928	int ret = 0;929	int faili;930 931	for (i = 0; i < num_pages; i++) {932again:933		pages[i] = pagecache_get_page(inode->i_mapping, index + i,934					      fgp_flags, mask | __GFP_WRITE);935		if (!pages[i]) {936			faili = i - 1;937			if (nowait)938				ret = -EAGAIN;939			else940				ret = -ENOMEM;941			goto fail;942		}943 944		ret = set_page_extent_mapped(pages[i]);945		if (ret < 0) {946			faili = i;947			goto fail;948		}949 950		if (i == 0)951			ret = prepare_uptodate_page(inode, pages[i], pos,952						    force_uptodate);953		if (!ret && i == num_pages - 1)954			ret = prepare_uptodate_page(inode, pages[i],955						    pos + write_bytes, false);956		if (ret) {957			put_page(pages[i]);958			if (!nowait && ret == -EAGAIN) {959				ret = 0;960				goto again;961			}962			faili = i - 1;963			goto fail;964		}965		wait_on_page_writeback(pages[i]);966	}967 968	return 0;969fail:970	while (faili >= 0) {971		unlock_page(pages[faili]);972		put_page(pages[faili]);973		faili--;974	}975	return ret;976 977}978 979/*980 * This function locks the extent and properly waits for data=ordered extents981 * to finish before allowing the pages to be modified if need.982 *983 * The return value:984 * 1 - the extent is locked985 * 0 - the extent is not locked, and everything is OK986 * -EAGAIN - need re-prepare the pages987 * the other < 0 number - Something wrong happens988 */989static noinline int990lock_and_cleanup_extent_if_need(struct btrfs_inode *inode, struct page **pages,991				size_t num_pages, loff_t pos,992				size_t write_bytes,993				u64 *lockstart, u64 *lockend, bool nowait,994				struct extent_state **cached_state)995{996	struct btrfs_fs_info *fs_info = inode->root->fs_info;997	u64 start_pos;998	u64 last_pos;999	int i;1000	int ret = 0;1001 1002	start_pos = round_down(pos, fs_info->sectorsize);1003	last_pos = round_up(pos + write_bytes, fs_info->sectorsize) - 1;1004 1005	if (start_pos < inode->vfs_inode.i_size) {1006		struct btrfs_ordered_extent *ordered;1007 1008		if (nowait) {1009			if (!try_lock_extent(&inode->io_tree, start_pos, last_pos,1010					     cached_state)) {1011				for (i = 0; i < num_pages; i++) {1012					unlock_page(pages[i]);1013					put_page(pages[i]);1014					pages[i] = NULL;1015				}1016 1017				return -EAGAIN;1018			}1019		} else {1020			lock_extent(&inode->io_tree, start_pos, last_pos, cached_state);1021		}1022 1023		ordered = btrfs_lookup_ordered_range(inode, start_pos,1024						     last_pos - start_pos + 1);1025		if (ordered &&1026		    ordered->file_offset + ordered->num_bytes > start_pos &&1027		    ordered->file_offset <= last_pos) {1028			unlock_extent(&inode->io_tree, start_pos, last_pos,1029				      cached_state);1030			for (i = 0; i < num_pages; i++) {1031				unlock_page(pages[i]);1032				put_page(pages[i]);1033			}1034			btrfs_start_ordered_extent(ordered);1035			btrfs_put_ordered_extent(ordered);1036			return -EAGAIN;1037		}1038		if (ordered)1039			btrfs_put_ordered_extent(ordered);1040 1041		*lockstart = start_pos;1042		*lockend = last_pos;1043		ret = 1;1044	}1045 1046	/*1047	 * We should be called after prepare_pages() which should have locked1048	 * all pages in the range.1049	 */1050	for (i = 0; i < num_pages; i++)1051		WARN_ON(!PageLocked(pages[i]));1052 1053	return ret;1054}1055 1056/*1057 * Check if we can do nocow write into the range [@pos, @pos + @write_bytes)1058 *1059 * @pos:         File offset.1060 * @write_bytes: The length to write, will be updated to the nocow writeable1061 *               range.1062 *1063 * This function will flush ordered extents in the range to ensure proper1064 * nocow checks.1065 *1066 * Return:1067 * > 0          If we can nocow, and updates @write_bytes.1068 *  0           If we can't do a nocow write.1069 * -EAGAIN      If we can't do a nocow write because snapshoting of the inode's1070 *              root is in progress.1071 * < 0          If an error happened.1072 *1073 * NOTE: Callers need to call btrfs_check_nocow_unlock() if we return > 0.1074 */1075int btrfs_check_nocow_lock(struct btrfs_inode *inode, loff_t pos,1076			   size_t *write_bytes, bool nowait)1077{1078	struct btrfs_fs_info *fs_info = inode->root->fs_info;1079	struct btrfs_root *root = inode->root;1080	struct extent_state *cached_state = NULL;1081	u64 lockstart, lockend;1082	u64 num_bytes;1083	int ret;1084 1085	if (!(inode->flags & (BTRFS_INODE_NODATACOW | BTRFS_INODE_PREALLOC)))1086		return 0;1087 1088	if (!btrfs_drew_try_write_lock(&root->snapshot_lock))1089		return -EAGAIN;1090 1091	lockstart = round_down(pos, fs_info->sectorsize);1092	lockend = round_up(pos + *write_bytes,1093			   fs_info->sectorsize) - 1;1094	num_bytes = lockend - lockstart + 1;1095 1096	if (nowait) {1097		if (!btrfs_try_lock_ordered_range(inode, lockstart, lockend,1098						  &cached_state)) {1099			btrfs_drew_write_unlock(&root->snapshot_lock);1100			return -EAGAIN;1101		}1102	} else {1103		btrfs_lock_and_flush_ordered_range(inode, lockstart, lockend,1104						   &cached_state);1105	}1106	ret = can_nocow_extent(&inode->vfs_inode, lockstart, &num_bytes,1107			       NULL, nowait, false);1108	if (ret <= 0)1109		btrfs_drew_write_unlock(&root->snapshot_lock);1110	else1111		*write_bytes = min_t(size_t, *write_bytes ,1112				     num_bytes - pos + lockstart);1113	unlock_extent(&inode->io_tree, lockstart, lockend, &cached_state);1114 1115	return ret;1116}1117 1118void btrfs_check_nocow_unlock(struct btrfs_inode *inode)1119{1120	btrfs_drew_write_unlock(&inode->root->snapshot_lock);1121}1122 1123static void update_time_for_write(struct inode *inode)1124{1125	struct timespec64 now, ts;1126 1127	if (IS_NOCMTIME(inode))1128		return;1129 1130	now = current_time(inode);1131	ts = inode_get_mtime(inode);1132	if (!timespec64_equal(&ts, &now))1133		inode_set_mtime_to_ts(inode, now);1134 1135	ts = inode_get_ctime(inode);1136	if (!timespec64_equal(&ts, &now))1137		inode_set_ctime_to_ts(inode, now);1138 1139	if (IS_I_VERSION(inode))1140		inode_inc_iversion(inode);1141}1142 1143int btrfs_write_check(struct kiocb *iocb, struct iov_iter *from, size_t count)1144{1145	struct file *file = iocb->ki_filp;1146	struct inode *inode = file_inode(file);1147	struct btrfs_fs_info *fs_info = inode_to_fs_info(inode);1148	loff_t pos = iocb->ki_pos;1149	int ret;1150	loff_t oldsize;1151	loff_t start_pos;1152 1153	/*1154	 * Quickly bail out on NOWAIT writes if we don't have the nodatacow or1155	 * prealloc flags, as without those flags we always have to COW. We will1156	 * later check if we can really COW into the target range (using1157	 * can_nocow_extent() at btrfs_get_blocks_direct_write()).1158	 */1159	if ((iocb->ki_flags & IOCB_NOWAIT) &&1160	    !(BTRFS_I(inode)->flags & (BTRFS_INODE_NODATACOW | BTRFS_INODE_PREALLOC)))1161		return -EAGAIN;1162 1163	ret = file_remove_privs(file);1164	if (ret)1165		return ret;1166 1167	/*1168	 * We reserve space for updating the inode when we reserve space for the1169	 * extent we are going to write, so we will enospc out there.  We don't1170	 * need to start yet another transaction to update the inode as we will1171	 * update the inode when we finish writing whatever data we write.1172	 */1173	update_time_for_write(inode);1174 1175	start_pos = round_down(pos, fs_info->sectorsize);1176	oldsize = i_size_read(inode);1177	if (start_pos > oldsize) {1178		/* Expand hole size to cover write data, preventing empty gap */1179		loff_t end_pos = round_up(pos + count, fs_info->sectorsize);1180 1181		ret = btrfs_cont_expand(BTRFS_I(inode), oldsize, end_pos);1182		if (ret)1183			return ret;1184	}1185 1186	return 0;1187}1188 1189ssize_t btrfs_buffered_write(struct kiocb *iocb, struct iov_iter *i)1190{1191	struct file *file = iocb->ki_filp;1192	loff_t pos;1193	struct inode *inode = file_inode(file);1194	struct btrfs_fs_info *fs_info = inode_to_fs_info(inode);1195	struct page **pages = NULL;1196	struct extent_changeset *data_reserved = NULL;1197	u64 release_bytes = 0;1198	u64 lockstart;1199	u64 lockend;1200	size_t num_written = 0;1201	int nrptrs;1202	ssize_t ret;1203	bool only_release_metadata = false;1204	bool force_page_uptodate = false;1205	loff_t old_isize = i_size_read(inode);1206	unsigned int ilock_flags = 0;1207	const bool nowait = (iocb->ki_flags & IOCB_NOWAIT);1208	unsigned int bdp_flags = (nowait ? BDP_ASYNC : 0);1209 1210	if (nowait)1211		ilock_flags |= BTRFS_ILOCK_TRY;1212 1213	ret = btrfs_inode_lock(BTRFS_I(inode), ilock_flags);1214	if (ret < 0)1215		return ret;1216 1217	ret = generic_write_checks(iocb, i);1218	if (ret <= 0)1219		goto out;1220 1221	ret = btrfs_write_check(iocb, i, ret);1222	if (ret < 0)1223		goto out;1224 1225	pos = iocb->ki_pos;1226	nrptrs = min(DIV_ROUND_UP(iov_iter_count(i), PAGE_SIZE),1227			PAGE_SIZE / (sizeof(struct page *)));1228	nrptrs = min(nrptrs, current->nr_dirtied_pause - current->nr_dirtied);1229	nrptrs = max(nrptrs, 8);1230	pages = kmalloc_array(nrptrs, sizeof(struct page *), GFP_KERNEL);1231	if (!pages) {1232		ret = -ENOMEM;1233		goto out;1234	}1235 1236	while (iov_iter_count(i) > 0) {1237		struct extent_state *cached_state = NULL;1238		size_t offset = offset_in_page(pos);1239		size_t sector_offset;1240		size_t write_bytes = min(iov_iter_count(i),1241					 nrptrs * (size_t)PAGE_SIZE -1242					 offset);1243		size_t num_pages;1244		size_t reserve_bytes;1245		size_t dirty_pages;1246		size_t copied;1247		size_t dirty_sectors;1248		size_t num_sectors;1249		int extents_locked;1250 1251		/*1252		 * Fault pages before locking them in prepare_pages1253		 * to avoid recursive lock1254		 */1255		if (unlikely(fault_in_iov_iter_readable(i, write_bytes))) {1256			ret = -EFAULT;1257			break;1258		}1259 1260		only_release_metadata = false;1261		sector_offset = pos & (fs_info->sectorsize - 1);1262 1263		extent_changeset_release(data_reserved);1264		ret = btrfs_check_data_free_space(BTRFS_I(inode),1265						  &data_reserved, pos,1266						  write_bytes, nowait);1267		if (ret < 0) {1268			int can_nocow;1269 1270			if (nowait && (ret == -ENOSPC || ret == -EAGAIN)) {1271				ret = -EAGAIN;1272				break;1273			}1274 1275			/*1276			 * If we don't have to COW at the offset, reserve1277			 * metadata only. write_bytes may get smaller than1278			 * requested here.1279			 */1280			can_nocow = btrfs_check_nocow_lock(BTRFS_I(inode), pos,1281							   &write_bytes, nowait);1282			if (can_nocow < 0)1283				ret = can_nocow;1284			if (can_nocow > 0)1285				ret = 0;1286			if (ret)1287				break;1288			only_release_metadata = true;1289		}1290 1291		num_pages = DIV_ROUND_UP(write_bytes + offset, PAGE_SIZE);1292		WARN_ON(num_pages > nrptrs);1293		reserve_bytes = round_up(write_bytes + sector_offset,1294					 fs_info->sectorsize);1295		WARN_ON(reserve_bytes == 0);1296		ret = btrfs_delalloc_reserve_metadata(BTRFS_I(inode),1297						      reserve_bytes,1298						      reserve_bytes, nowait);1299		if (ret) {1300			if (!only_release_metadata)1301				btrfs_free_reserved_data_space(BTRFS_I(inode),1302						data_reserved, pos,1303						write_bytes);1304			else1305				btrfs_check_nocow_unlock(BTRFS_I(inode));1306 1307			if (nowait && ret == -ENOSPC)1308				ret = -EAGAIN;1309			break;1310		}1311 1312		release_bytes = reserve_bytes;1313again:1314		ret = balance_dirty_pages_ratelimited_flags(inode->i_mapping, bdp_flags);1315		if (ret) {1316			btrfs_delalloc_release_extents(BTRFS_I(inode), reserve_bytes);1317			break;1318		}1319 1320		/*1321		 * This is going to setup the pages array with the number of1322		 * pages we want, so we don't really need to worry about the1323		 * contents of pages from loop to loop1324		 */1325		ret = prepare_pages(inode, pages, num_pages,1326				    pos, write_bytes, force_page_uptodate, false);1327		if (ret) {1328			btrfs_delalloc_release_extents(BTRFS_I(inode),1329						       reserve_bytes);1330			break;1331		}1332 1333		extents_locked = lock_and_cleanup_extent_if_need(1334				BTRFS_I(inode), pages,1335				num_pages, pos, write_bytes, &lockstart,1336				&lockend, nowait, &cached_state);1337		if (extents_locked < 0) {1338			if (!nowait && extents_locked == -EAGAIN)1339				goto again;1340 1341			btrfs_delalloc_release_extents(BTRFS_I(inode),1342						       reserve_bytes);1343			ret = extents_locked;1344			break;1345		}1346 1347		copied = btrfs_copy_from_user(pos, write_bytes, pages, i);1348 1349		num_sectors = BTRFS_BYTES_TO_BLKS(fs_info, reserve_bytes);1350		dirty_sectors = round_up(copied + sector_offset,1351					fs_info->sectorsize);1352		dirty_sectors = BTRFS_BYTES_TO_BLKS(fs_info, dirty_sectors);1353 1354		/*1355		 * if we have trouble faulting in the pages, fall1356		 * back to one page at a time1357		 */1358		if (copied < write_bytes)1359			nrptrs = 1;1360 1361		if (copied == 0) {1362			force_page_uptodate = true;1363			dirty_sectors = 0;1364			dirty_pages = 0;1365		} else {1366			force_page_uptodate = false;1367			dirty_pages = DIV_ROUND_UP(copied + offset,1368						   PAGE_SIZE);1369		}1370 1371		if (num_sectors > dirty_sectors) {1372			/* release everything except the sectors we dirtied */1373			release_bytes -= dirty_sectors << fs_info->sectorsize_bits;1374			if (only_release_metadata) {1375				btrfs_delalloc_release_metadata(BTRFS_I(inode),1376							release_bytes, true);1377			} else {1378				u64 __pos;1379 1380				__pos = round_down(pos,1381						   fs_info->sectorsize) +1382					(dirty_pages << PAGE_SHIFT);1383				btrfs_delalloc_release_space(BTRFS_I(inode),1384						data_reserved, __pos,1385						release_bytes, true);1386			}1387		}1388 1389		release_bytes = round_up(copied + sector_offset,1390					fs_info->sectorsize);1391 1392		ret = btrfs_dirty_pages(BTRFS_I(inode), pages,1393					dirty_pages, pos, copied,1394					&cached_state, only_release_metadata);1395 1396		/*1397		 * If we have not locked the extent range, because the range's1398		 * start offset is >= i_size, we might still have a non-NULL1399		 * cached extent state, acquired while marking the extent range1400		 * as delalloc through btrfs_dirty_pages(). Therefore free any1401		 * possible cached extent state to avoid a memory leak.1402		 */1403		if (extents_locked)1404			unlock_extent(&BTRFS_I(inode)->io_tree, lockstart,1405				      lockend, &cached_state);1406		else1407			free_extent_state(cached_state);1408 1409		btrfs_delalloc_release_extents(BTRFS_I(inode), reserve_bytes);1410		if (ret) {1411			btrfs_drop_pages(fs_info, pages, num_pages, pos, copied);1412			break;1413		}1414 1415		release_bytes = 0;1416		if (only_release_metadata)1417			btrfs_check_nocow_unlock(BTRFS_I(inode));1418 1419		btrfs_drop_pages(fs_info, pages, num_pages, pos, copied);1420 1421		cond_resched();1422 1423		pos += copied;1424		num_written += copied;1425	}1426 1427	kfree(pages);1428 1429	if (release_bytes) {1430		if (only_release_metadata) {1431			btrfs_check_nocow_unlock(BTRFS_I(inode));1432			btrfs_delalloc_release_metadata(BTRFS_I(inode),1433					release_bytes, true);1434		} else {1435			btrfs_delalloc_release_space(BTRFS_I(inode),1436					data_reserved,1437					round_down(pos, fs_info->sectorsize),1438					release_bytes, true);1439		}1440	}1441 1442	extent_changeset_free(data_reserved);1443	if (num_written > 0) {1444		pagecache_isize_extended(inode, old_isize, iocb->ki_pos);1445		iocb->ki_pos += num_written;1446	}1447out:1448	btrfs_inode_unlock(BTRFS_I(inode), ilock_flags);1449	return num_written ? num_written : ret;1450}1451 1452static ssize_t btrfs_encoded_write(struct kiocb *iocb, struct iov_iter *from,1453			const struct btrfs_ioctl_encoded_io_args *encoded)1454{1455	struct file *file = iocb->ki_filp;1456	struct inode *inode = file_inode(file);1457	loff_t count;1458	ssize_t ret;1459 1460	btrfs_inode_lock(BTRFS_I(inode), 0);1461	count = encoded->len;1462	ret = generic_write_checks_count(iocb, &count);1463	if (ret == 0 && count != encoded->len) {1464		/*1465		 * The write got truncated by generic_write_checks_count(). We1466		 * can't do a partial encoded write.1467		 */1468		ret = -EFBIG;1469	}1470	if (ret || encoded->len == 0)1471		goto out;1472 1473	ret = btrfs_write_check(iocb, from, encoded->len);1474	if (ret < 0)1475		goto out;1476 1477	ret = btrfs_do_encoded_write(iocb, from, encoded);1478out:1479	btrfs_inode_unlock(BTRFS_I(inode), 0);1480	return ret;1481}1482 1483ssize_t btrfs_do_write_iter(struct kiocb *iocb, struct iov_iter *from,1484			    const struct btrfs_ioctl_encoded_io_args *encoded)1485{1486	struct file *file = iocb->ki_filp;1487	struct btrfs_inode *inode = BTRFS_I(file_inode(file));1488	ssize_t num_written, num_sync;1489 1490	/*1491	 * If the fs flips readonly due to some impossible error, although we1492	 * have opened a file as writable, we have to stop this write operation1493	 * to ensure consistency.1494	 */1495	if (BTRFS_FS_ERROR(inode->root->fs_info))1496		return -EROFS;1497 1498	if (encoded && (iocb->ki_flags & IOCB_NOWAIT))1499		return -EOPNOTSUPP;1500 1501	if (encoded) {1502		num_written = btrfs_encoded_write(iocb, from, encoded);1503		num_sync = encoded->len;1504	} else if (iocb->ki_flags & IOCB_DIRECT) {1505		num_written = btrfs_direct_write(iocb, from);1506		num_sync = num_written;1507	} else {1508		num_written = btrfs_buffered_write(iocb, from);1509		num_sync = num_written;1510	}1511 1512	btrfs_set_inode_last_sub_trans(inode);1513 1514	if (num_sync > 0) {1515		num_sync = generic_write_sync(iocb, num_sync);1516		if (num_sync < 0)1517			num_written = num_sync;1518	}1519 1520	return num_written;1521}1522 1523static ssize_t btrfs_file_write_iter(struct kiocb *iocb, struct iov_iter *from)1524{1525	return btrfs_do_write_iter(iocb, from, NULL);1526}1527 1528int btrfs_release_file(struct inode *inode, struct file *filp)1529{1530	struct btrfs_file_private *private = filp->private_data;1531 1532	if (private) {1533		kfree(private->filldir_buf);1534		free_extent_state(private->llseek_cached_state);1535		kfree(private);1536		filp->private_data = NULL;1537	}1538 1539	/*1540	 * Set by setattr when we are about to truncate a file from a non-zero1541	 * size to a zero size.  This tries to flush down new bytes that may1542	 * have been written if the application were using truncate to replace1543	 * a file in place.1544	 */1545	if (test_and_clear_bit(BTRFS_INODE_FLUSH_ON_CLOSE,1546			       &BTRFS_I(inode)->runtime_flags))1547			filemap_flush(inode->i_mapping);1548	return 0;1549}1550 1551static int start_ordered_ops(struct btrfs_inode *inode, loff_t start, loff_t end)1552{1553	int ret;1554	struct blk_plug plug;1555 1556	/*1557	 * This is only called in fsync, which would do synchronous writes, so1558	 * a plug can merge adjacent IOs as much as possible.  Esp. in case of1559	 * multiple disks using raid profile, a large IO can be split to1560	 * several segments of stripe length (currently 64K).1561	 */1562	blk_start_plug(&plug);1563	ret = btrfs_fdatawrite_range(inode, start, end);1564	blk_finish_plug(&plug);1565 1566	return ret;1567}1568 1569static inline bool skip_inode_logging(const struct btrfs_log_ctx *ctx)1570{1571	struct btrfs_inode *inode = ctx->inode;1572	struct btrfs_fs_info *fs_info = inode->root->fs_info;1573 1574	if (btrfs_inode_in_log(inode, btrfs_get_fs_generation(fs_info)) &&1575	    list_empty(&ctx->ordered_extents))1576		return true;1577 1578	/*1579	 * If we are doing a fast fsync we can not bail out if the inode's1580	 * last_trans is <= then the last committed transaction, because we only1581	 * update the last_trans of the inode during ordered extent completion,1582	 * and for a fast fsync we don't wait for that, we only wait for the1583	 * writeback to complete.1584	 */1585	if (inode->last_trans <= btrfs_get_last_trans_committed(fs_info) &&1586	    (test_bit(BTRFS_INODE_NEEDS_FULL_SYNC, &inode->runtime_flags) ||1587	     list_empty(&ctx->ordered_extents)))1588		return true;1589 1590	return false;1591}1592 1593/*1594 * fsync call for both files and directories.  This logs the inode into1595 * the tree log instead of forcing full commits whenever possible.1596 *1597 * It needs to call filemap_fdatawait so that all ordered extent updates are1598 * in the metadata btree are up to date for copying to the log.1599 *1600 * It drops the inode mutex before doing the tree log commit.  This is an1601 * important optimization for directories because holding the mutex prevents1602 * new operations on the dir while we write to disk.1603 */1604int btrfs_sync_file(struct file *file, loff_t start, loff_t end, int datasync)1605{1606	struct dentry *dentry = file_dentry(file);1607	struct btrfs_inode *inode = BTRFS_I(d_inode(dentry));1608	struct btrfs_root *root = inode->root;1609	struct btrfs_fs_info *fs_info = root->fs_info;1610	struct btrfs_trans_handle *trans;1611	struct btrfs_log_ctx ctx;1612	int ret = 0, err;1613	u64 len;1614	bool full_sync;1615	bool skip_ilock = false;1616 1617	if (current->journal_info == BTRFS_TRANS_DIO_WRITE_STUB) {1618		skip_ilock = true;1619		current->journal_info = NULL;1620		btrfs_assert_inode_locked(inode);1621	}1622 1623	trace_btrfs_sync_file(file, datasync);1624 1625	btrfs_init_log_ctx(&ctx, inode);1626 1627	/*1628	 * Always set the range to a full range, otherwise we can get into1629	 * several problems, from missing file extent items to represent holes1630	 * when not using the NO_HOLES feature, to log tree corruption due to1631	 * races between hole detection during logging and completion of ordered1632	 * extents outside the range, to missing checksums due to ordered extents1633	 * for which we flushed only a subset of their pages.1634	 */1635	start = 0;1636	end = LLONG_MAX;1637	len = (u64)LLONG_MAX + 1;1638 1639	/*1640	 * We write the dirty pages in the range and wait until they complete1641	 * out of the ->i_mutex. If so, we can flush the dirty pages by1642	 * multi-task, and make the performance up.  See1643	 * btrfs_wait_ordered_range for an explanation of the ASYNC check.1644	 */1645	ret = start_ordered_ops(inode, start, end);1646	if (ret)1647		goto out;1648 1649	if (skip_ilock)1650		down_write(&inode->i_mmap_lock);1651	else1652		btrfs_inode_lock(inode, BTRFS_ILOCK_MMAP);1653 1654	atomic_inc(&root->log_batch);1655 1656	/*1657	 * Before we acquired the inode's lock and the mmap lock, someone may1658	 * have dirtied more pages in the target range. We need to make sure1659	 * that writeback for any such pages does not start while we are logging1660	 * the inode, because if it does, any of the following might happen when1661	 * we are not doing a full inode sync:1662	 *1663	 * 1) We log an extent after its writeback finishes but before its1664	 *    checksums are added to the csum tree, leading to -EIO errors1665	 *    when attempting to read the extent after a log replay.1666	 *1667	 * 2) We can end up logging an extent before its writeback finishes.1668	 *    Therefore after the log replay we will have a file extent item1669	 *    pointing to an unwritten extent (and no data checksums as well).1670	 *1671	 * So trigger writeback for any eventual new dirty pages and then we1672	 * wait for all ordered extents to complete below.1673	 */1674	ret = start_ordered_ops(inode, start, end);1675	if (ret) {1676		if (skip_ilock)1677			up_write(&inode->i_mmap_lock);1678		else1679			btrfs_inode_unlock(inode, BTRFS_ILOCK_MMAP);1680		goto out;1681	}1682 1683	/*1684	 * Always check for the full sync flag while holding the inode's lock,1685	 * to avoid races with other tasks. The flag must be either set all the1686	 * time during logging or always off all the time while logging.1687	 * We check the flag here after starting delalloc above, because when1688	 * running delalloc the full sync flag may be set if we need to drop1689	 * extra extent map ranges due to temporary memory allocation failures.1690	 */1691	full_sync = test_bit(BTRFS_INODE_NEEDS_FULL_SYNC, &inode->runtime_flags);1692 1693	/*1694	 * We have to do this here to avoid the priority inversion of waiting on1695	 * IO of a lower priority task while holding a transaction open.1696	 *1697	 * For a full fsync we wait for the ordered extents to complete while1698	 * for a fast fsync we wait just for writeback to complete, and then1699	 * attach the ordered extents to the transaction so that a transaction1700	 * commit waits for their completion, to avoid data loss if we fsync,1701	 * the current transaction commits before the ordered extents complete1702	 * and a power failure happens right after that.1703	 *1704	 * For zoned filesystem, if a write IO uses a ZONE_APPEND command, the1705	 * logical address recorded in the ordered extent may change. We need1706	 * to wait for the IO to stabilize the logical address.1707	 */1708	if (full_sync || btrfs_is_zoned(fs_info)) {1709		ret = btrfs_wait_ordered_range(inode, start, len);1710		clear_bit(BTRFS_INODE_COW_WRITE_ERROR, &inode->runtime_flags);1711	} else {1712		/*1713		 * Get our ordered extents as soon as possible to avoid doing1714		 * checksum lookups in the csum tree, and use instead the1715		 * checksums attached to the ordered extents.1716		 */1717		btrfs_get_ordered_extents_for_logging(inode, &ctx.ordered_extents);1718		ret = filemap_fdatawait_range(inode->vfs_inode.i_mapping, start, end);1719		if (ret)1720			goto out_release_extents;1721 1722		/*1723		 * Check and clear the BTRFS_INODE_COW_WRITE_ERROR now after1724		 * starting and waiting for writeback, because for buffered IO1725		 * it may have been set during the end IO callback1726		 * (end_bbio_data_write() -> btrfs_finish_ordered_extent()) in1727		 * case an error happened and we need to wait for ordered1728		 * extents to complete so that any extent maps that point to1729		 * unwritten locations are dropped and we don't log them.1730		 */1731		if (test_and_clear_bit(BTRFS_INODE_COW_WRITE_ERROR, &inode->runtime_flags))1732			ret = btrfs_wait_ordered_range(inode, start, len);1733	}1734 1735	if (ret)1736		goto out_release_extents;1737 1738	atomic_inc(&root->log_batch);1739 1740	if (skip_inode_logging(&ctx)) {1741		/*1742		 * We've had everything committed since the last time we were1743		 * modified so clear this flag in case it was set for whatever1744		 * reason, it's no longer relevant.1745		 */1746		clear_bit(BTRFS_INODE_NEEDS_FULL_SYNC, &inode->runtime_flags);1747		/*1748		 * An ordered extent might have started before and completed1749		 * already with io errors, in which case the inode was not1750		 * updated and we end up here. So check the inode's mapping1751		 * for any errors that might have happened since we last1752		 * checked called fsync.1753		 */1754		ret = filemap_check_wb_err(inode->vfs_inode.i_mapping, file->f_wb_err);1755		goto out_release_extents;1756	}1757 1758	btrfs_init_log_ctx_scratch_eb(&ctx);1759 1760	/*1761	 * We use start here because we will need to wait on the IO to complete1762	 * in btrfs_sync_log, which could require joining a transaction (for1763	 * example checking cross references in the nocow path).  If we use join1764	 * here we could get into a situation where we're waiting on IO to1765	 * happen that is blocked on a transaction trying to commit.  With start1766	 * we inc the extwriter counter, so we wait for all extwriters to exit1767	 * before we start blocking joiners.  This comment is to keep somebody1768	 * from thinking they are super smart and changing this to1769	 * btrfs_join_transaction *cough*Josef*cough*.1770	 */1771	trans = btrfs_start_transaction(root, 0);1772	if (IS_ERR(trans)) {1773		ret = PTR_ERR(trans);1774		goto out_release_extents;1775	}1776	trans->in_fsync = true;1777 1778	ret = btrfs_log_dentry_safe(trans, dentry, &ctx);1779	/*1780	 * Scratch eb no longer needed, release before syncing log or commit1781	 * transaction, to avoid holding unnecessary memory during such long1782	 * operations.1783	 */1784	if (ctx.scratch_eb) {1785		free_extent_buffer(ctx.scratch_eb);1786		ctx.scratch_eb = NULL;1787	}1788	btrfs_release_log_ctx_extents(&ctx);1789	if (ret < 0) {1790		/* Fallthrough and commit/free transaction. */1791		ret = BTRFS_LOG_FORCE_COMMIT;1792	}1793 1794	/* we've logged all the items and now have a consistent1795	 * version of the file in the log.  It is possible that1796	 * someone will come in and modify the file, but that's1797	 * fine because the log is consistent on disk, and we1798	 * have references to all of the file's extents1799	 *1800	 * It is possible that someone will come in and log the1801	 * file again, but that will end up using the synchronization1802	 * inside btrfs_sync_log to keep things safe.1803	 */1804	if (skip_ilock)1805		up_write(&inode->i_mmap_lock);1806	else1807		btrfs_inode_unlock(inode, BTRFS_ILOCK_MMAP);1808 1809	if (ret == BTRFS_NO_LOG_SYNC) {1810		ret = btrfs_end_transaction(trans);1811		goto out;1812	}1813 1814	/* We successfully logged the inode, attempt to sync the log. */1815	if (!ret) {1816		ret = btrfs_sync_log(trans, root, &ctx);1817		if (!ret) {1818			ret = btrfs_end_transaction(trans);1819			goto out;1820		}1821	}1822 1823	/*1824	 * At this point we need to commit the transaction because we had1825	 * btrfs_need_log_full_commit() or some other error.1826	 *1827	 * If we didn't do a full sync we have to stop the trans handle, wait on1828	 * the ordered extents, start it again and commit the transaction.  If1829	 * we attempt to wait on the ordered extents here we could deadlock with1830	 * something like fallocate() that is holding the extent lock trying to1831	 * start a transaction while some other thread is trying to commit the1832	 * transaction while we (fsync) are currently holding the transaction1833	 * open.1834	 */1835	if (!full_sync) {1836		ret = btrfs_end_transaction(trans);1837		if (ret)1838			goto out;1839		ret = btrfs_wait_ordered_range(inode, start, len);1840		if (ret)1841			goto out;1842 1843		/*1844		 * This is safe to use here because we're only interested in1845		 * making sure the transaction that had the ordered extents is1846		 * committed.  We aren't waiting on anything past this point,1847		 * we're purely getting the transaction and committing it.1848		 */1849		trans = btrfs_attach_transaction_barrier(root);1850		if (IS_ERR(trans)) {1851			ret = PTR_ERR(trans);1852 1853			/*1854			 * We committed the transaction and there's no currently1855			 * running transaction, this means everything we care1856			 * about made it to disk and we are done.1857			 */1858			if (ret == -ENOENT)1859				ret = 0;1860			goto out;1861		}1862	}1863 1864	ret = btrfs_commit_transaction(trans);1865out:1866	free_extent_buffer(ctx.scratch_eb);1867	ASSERT(list_empty(&ctx.list));1868	ASSERT(list_empty(&ctx.conflict_inodes));1869	err = file_check_and_advance_wb_err(file);1870	if (!ret)1871		ret = err;1872	return ret > 0 ? -EIO : ret;1873 1874out_release_extents:1875	btrfs_release_log_ctx_extents(&ctx);1876	if (skip_ilock)1877		up_write(&inode->i_mmap_lock);1878	else1879		btrfs_inode_unlock(inode, BTRFS_ILOCK_MMAP);1880	goto out;1881}1882 1883/*1884 * btrfs_page_mkwrite() is not allowed to change the file size as it gets1885 * called from a page fault handler when a page is first dirtied. Hence we must1886 * be careful to check for EOF conditions here. We set the page up correctly1887 * for a written page which means we get ENOSPC checking when writing into1888 * holes and correct delalloc and unwritten extent mapping on filesystems that1889 * support these features.1890 *1891 * We are not allowed to take the i_mutex here so we have to play games to1892 * protect against truncate races as the page could now be beyond EOF.  Because1893 * truncate_setsize() writes the inode size before removing pages, once we have1894 * the page lock we can determine safely if the page is beyond EOF. If it is not1895 * beyond EOF, then the page is guaranteed safe against truncation until we1896 * unlock the page.1897 */1898static vm_fault_t btrfs_page_mkwrite(struct vm_fault *vmf)1899{1900	struct page *page = vmf->page;1901	struct folio *folio = page_folio(page);1902	struct inode *inode = file_inode(vmf->vma->vm_file);1903	struct btrfs_fs_info *fs_info = inode_to_fs_info(inode);1904	struct extent_io_tree *io_tree = &BTRFS_I(inode)->io_tree;1905	struct btrfs_ordered_extent *ordered;1906	struct extent_state *cached_state = NULL;1907	struct extent_changeset *data_reserved = NULL;1908	unsigned long zero_start;1909	loff_t size;1910	vm_fault_t ret;1911	int ret2;1912	int reserved = 0;1913	u64 reserved_space;1914	u64 page_start;1915	u64 page_end;1916	u64 end;1917 1918	ASSERT(folio_order(folio) == 0);1919 1920	reserved_space = PAGE_SIZE;1921 1922	sb_start_pagefault(inode->i_sb);1923	page_start = folio_pos(folio);1924	page_end = page_start + folio_size(folio) - 1;1925	end = page_end;1926 1927	/*1928	 * Reserving delalloc space after obtaining the page lock can lead to1929	 * deadlock. For example, if a dirty page is locked by this function1930	 * and the call to btrfs_delalloc_reserve_space() ends up triggering1931	 * dirty page write out, then the btrfs_writepages() function could1932	 * end up waiting indefinitely to get a lock on the page currently1933	 * being processed by btrfs_page_mkwrite() function.1934	 */1935	ret2 = btrfs_delalloc_reserve_space(BTRFS_I(inode), &data_reserved,1936					    page_start, reserved_space);1937	if (!ret2) {1938		ret2 = file_update_time(vmf->vma->vm_file);1939		reserved = 1;1940	}1941	if (ret2) {1942		ret = vmf_error(ret2);1943		if (reserved)1944			goto out;1945		goto out_noreserve;1946	}1947 1948	/* Make the VM retry the fault. */1949	ret = VM_FAULT_NOPAGE;1950again:1951	down_read(&BTRFS_I(inode)->i_mmap_lock);1952	folio_lock(folio);1953	size = i_size_read(inode);1954 1955	if ((folio->mapping != inode->i_mapping) ||1956	    (page_start >= size)) {1957		/* Page got truncated out from underneath us. */1958		goto out_unlock;1959	}1960	folio_wait_writeback(folio);1961 1962	lock_extent(io_tree, page_start, page_end, &cached_state);1963	ret2 = set_folio_extent_mapped(folio);1964	if (ret2 < 0) {1965		ret = vmf_error(ret2);1966		unlock_extent(io_tree, page_start, page_end, &cached_state);1967		goto out_unlock;1968	}1969 1970	/*1971	 * We can't set the delalloc bits if there are pending ordered1972	 * extents.  Drop our locks and wait for them to finish.1973	 */1974	ordered = btrfs_lookup_ordered_range(BTRFS_I(inode), page_start, PAGE_SIZE);1975	if (ordered) {1976		unlock_extent(io_tree, page_start, page_end, &cached_state);1977		folio_unlock(folio);1978		up_read(&BTRFS_I(inode)->i_mmap_lock);1979		btrfs_start_ordered_extent(ordered);1980		btrfs_put_ordered_extent(ordered);1981		goto again;1982	}1983 1984	if (folio->index == ((size - 1) >> PAGE_SHIFT)) {1985		reserved_space = round_up(size - page_start, fs_info->sectorsize);1986		if (reserved_space < PAGE_SIZE) {1987			end = page_start + reserved_space - 1;1988			btrfs_delalloc_release_space(BTRFS_I(inode),1989					data_reserved, page_start,1990					PAGE_SIZE - reserved_space, true);1991		}1992	}1993 1994	/*1995	 * page_mkwrite gets called when the page is firstly dirtied after it's1996	 * faulted in, but write(2) could also dirty a page and set delalloc1997	 * bits, thus in this case for space account reason, we still need to1998	 * clear any delalloc bits within this page range since we have to1999	 * reserve data&meta space before lock_page() (see above comments).2000	 */2001	clear_extent_bit(&BTRFS_I(inode)->io_tree, page_start, end,2002			  EXTENT_DELALLOC | EXTENT_DO_ACCOUNTING |2003			  EXTENT_DEFRAG, &cached_state);2004 2005	ret2 = btrfs_set_extent_delalloc(BTRFS_I(inode), page_start, end, 0,2006					&cached_state);2007	if (ret2) {2008		unlock_extent(io_tree, page_start, page_end, &cached_state);2009		ret = VM_FAULT_SIGBUS;2010		goto out_unlock;2011	}2012 2013	/* Page is wholly or partially inside EOF. */2014	if (page_start + folio_size(folio) > size)2015		zero_start = offset_in_folio(folio, size);2016	else2017		zero_start = PAGE_SIZE;2018 2019	if (zero_start != PAGE_SIZE)2020		folio_zero_range(folio, zero_start, folio_size(folio) - zero_start);2021 2022	btrfs_folio_clear_checked(fs_info, folio, page_start, PAGE_SIZE);2023	btrfs_folio_set_dirty(fs_info, folio, page_start, end + 1 - page_start);2024	btrfs_folio_set_uptodate(fs_info, folio, page_start, end + 1 - page_start);2025 2026	btrfs_set_inode_last_sub_trans(BTRFS_I(inode));2027 2028	unlock_extent(io_tree, page_start, page_end, &cached_state);2029	up_read(&BTRFS_I(inode)->i_mmap_lock);2030 2031	btrfs_delalloc_release_extents(BTRFS_I(inode), PAGE_SIZE);2032	sb_end_pagefault(inode->i_sb);2033	extent_changeset_free(data_reserved);2034	return VM_FAULT_LOCKED;2035 2036out_unlock:2037	folio_unlock(folio);2038	up_read(&BTRFS_I(inode)->i_mmap_lock);2039out:2040	btrfs_delalloc_release_extents(BTRFS_I(inode), PAGE_SIZE);2041	btrfs_delalloc_release_space(BTRFS_I(inode), data_reserved, page_start,2042				     reserved_space, (ret != 0));2043out_noreserve:2044	sb_end_pagefault(inode->i_sb);2045	extent_changeset_free(data_reserved);2046	return ret;2047}2048 2049static const struct vm_operations_struct btrfs_file_vm_ops = {2050	.fault		= filemap_fault,2051	.map_pages	= filemap_map_pages,2052	.page_mkwrite	= btrfs_page_mkwrite,2053};2054 2055static int btrfs_file_mmap(struct file	*filp, struct vm_area_struct *vma)2056{2057	struct address_space *mapping = filp->f_mapping;2058 2059	if (!mapping->a_ops->read_folio)2060		return -ENOEXEC;2061 2062	file_accessed(filp);2063	vma->vm_ops = &btrfs_file_vm_ops;2064 2065	return 0;2066}2067 2068static int hole_mergeable(struct btrfs_inode *inode, struct extent_buffer *leaf,2069			  int slot, u64 start, u64 end)2070{2071	struct btrfs_file_extent_item *fi;2072	struct btrfs_key key;2073 2074	if (slot < 0 || slot >= btrfs_header_nritems(leaf))2075		return 0;2076 2077	btrfs_item_key_to_cpu(leaf, &key, slot);2078	if (key.objectid != btrfs_ino(inode) ||2079	    key.type != BTRFS_EXTENT_DATA_KEY)2080		return 0;2081 2082	fi = btrfs_item_ptr(leaf, slot, struct btrfs_file_extent_item);2083 2084	if (btrfs_file_extent_type(leaf, fi) != BTRFS_FILE_EXTENT_REG)2085		return 0;2086 2087	if (btrfs_file_extent_disk_bytenr(leaf, fi))2088		return 0;2089 2090	if (key.offset == end)2091		return 1;2092	if (key.offset + btrfs_file_extent_num_bytes(leaf, fi) == start)2093		return 1;2094	return 0;2095}2096 2097static int fill_holes(struct btrfs_trans_handle *trans,2098		struct btrfs_inode *inode,2099		struct btrfs_path *path, u64 offset, u64 end)2100{2101	struct btrfs_fs_info *fs_info = trans->fs_info;2102	struct btrfs_root *root = inode->root;2103	struct extent_buffer *leaf;2104	struct btrfs_file_extent_item *fi;2105	struct extent_map *hole_em;2106	struct btrfs_key key;2107	int ret;2108 2109	if (btrfs_fs_incompat(fs_info, NO_HOLES))2110		goto out;2111 2112	key.objectid = btrfs_ino(inode);2113	key.type = BTRFS_EXTENT_DATA_KEY;2114	key.offset = offset;2115 2116	ret = btrfs_search_slot(trans, root, &key, path, 0, 1);2117	if (ret <= 0) {2118		/*2119		 * We should have dropped this offset, so if we find it then2120		 * something has gone horribly wrong.2121		 */2122		if (ret == 0)2123			ret = -EINVAL;2124		return ret;2125	}2126 2127	leaf = path->nodes[0];2128	if (hole_mergeable(inode, leaf, path->slots[0] - 1, offset, end)) {2129		u64 num_bytes;2130 2131		path->slots[0]--;2132		fi = btrfs_item_ptr(leaf, path->slots[0],2133				    struct btrfs_file_extent_item);2134		num_bytes = btrfs_file_extent_num_bytes(leaf, fi) +2135			end - offset;2136		btrfs_set_file_extent_num_bytes(leaf, fi, num_bytes);2137		btrfs_set_file_extent_ram_bytes(leaf, fi, num_bytes);2138		btrfs_set_file_extent_offset(leaf, fi, 0);2139		btrfs_set_file_extent_generation(leaf, fi, trans->transid);2140		btrfs_mark_buffer_dirty(trans, leaf);2141		goto out;2142	}2143 2144	if (hole_mergeable(inode, leaf, path->slots[0], offset, end)) {2145		u64 num_bytes;2146 2147		key.offset = offset;2148		btrfs_set_item_key_safe(trans, path, &key);2149		fi = btrfs_item_ptr(leaf, path->slots[0],2150				    struct btrfs_file_extent_item);2151		num_bytes = btrfs_file_extent_num_bytes(leaf, fi) + end -2152			offset;2153		btrfs_set_file_extent_num_bytes(leaf, fi, num_bytes);2154		btrfs_set_file_extent_ram_bytes(leaf, fi, num_bytes);2155		btrfs_set_file_extent_offset(leaf, fi, 0);2156		btrfs_set_file_extent_generation(leaf, fi, trans->transid);2157		btrfs_mark_buffer_dirty(trans, leaf);2158		goto out;2159	}2160	btrfs_release_path(path);2161 2162	ret = btrfs_insert_hole_extent(trans, root, btrfs_ino(inode), offset,2163				       end - offset);2164	if (ret)2165		return ret;2166 2167out:2168	btrfs_release_path(path);2169 2170	hole_em = alloc_extent_map();2171	if (!hole_em) {2172		btrfs_drop_extent_map_range(inode, offset, end - 1, false);2173		btrfs_set_inode_full_sync(inode);2174	} else {2175		hole_em->start = offset;2176		hole_em->len = end - offset;2177		hole_em->ram_bytes = hole_em->len;2178 2179		hole_em->disk_bytenr = EXTENT_MAP_HOLE;2180		hole_em->disk_num_bytes = 0;2181		hole_em->generation = trans->transid;2182 2183		ret = btrfs_replace_extent_map_range(inode, hole_em, true);2184		free_extent_map(hole_em);2185		if (ret)2186			btrfs_set_inode_full_sync(inode);2187	}2188 2189	return 0;2190}2191 2192/*2193 * Find a hole extent on given inode and change start/len to the end of hole2194 * extent.(hole/vacuum extent whose em->start <= start &&2195 *	   em->start + em->len > start)2196 * When a hole extent is found, return 1 and modify start/len.2197 */2198static int find_first_non_hole(struct btrfs_inode *inode, u64 *start, u64 *len)2199{2200	struct btrfs_fs_info *fs_info = inode->root->fs_info;2201	struct extent_map *em;2202	int ret = 0;2203 2204	em = btrfs_get_extent(inode, NULL,2205			      round_down(*start, fs_info->sectorsize),2206			      round_up(*len, fs_info->sectorsize));2207	if (IS_ERR(em))2208		return PTR_ERR(em);2209 2210	/* Hole or vacuum extent(only exists in no-hole mode) */2211	if (em->disk_bytenr == EXTENT_MAP_HOLE) {2212		ret = 1;2213		*len = em->start + em->len > *start + *len ?2214		       0 : *start + *len - em->start - em->len;2215		*start = em->start + em->len;2216	}2217	free_extent_map(em);2218	return ret;2219}2220 2221static void btrfs_punch_hole_lock_range(struct inode *inode,2222					const u64 lockstart,2223					const u64 lockend,2224					struct extent_state **cached_state)2225{2226	/*2227	 * For subpage case, if the range is not at page boundary, we could2228	 * have pages at the leading/tailing part of the range.2229	 * This could lead to dead loop since filemap_range_has_page()2230	 * will always return true.2231	 * So here we need to do extra page alignment for2232	 * filemap_range_has_page().2233	 */2234	const u64 page_lockstart = round_up(lockstart, PAGE_SIZE);2235	const u64 page_lockend = round_down(lockend + 1, PAGE_SIZE) - 1;2236 2237	while (1) {2238		truncate_pagecache_range(inode, lockstart, lockend);2239 2240		lock_extent(&BTRFS_I(inode)->io_tree, lockstart, lockend,2241			    cached_state);2242		/*2243		 * We can't have ordered extents in the range, nor dirty/writeback2244		 * pages, because we have locked the inode's VFS lock in exclusive2245		 * mode, we have locked the inode's i_mmap_lock in exclusive mode,2246		 * we have flushed all delalloc in the range and we have waited2247		 * for any ordered extents in the range to complete.2248		 * We can race with anyone reading pages from this range, so after2249		 * locking the range check if we have pages in the range, and if2250		 * we do, unlock the range and retry.2251		 */2252		if (!filemap_range_has_page(inode->i_mapping, page_lockstart,2253					    page_lockend))2254			break;2255 2256		unlock_extent(&BTRFS_I(inode)->io_tree, lockstart, lockend,2257			      cached_state);2258	}2259 2260	btrfs_assert_inode_range_clean(BTRFS_I(inode), lockstart, lockend);2261}2262 2263static int btrfs_insert_replace_extent(struct btrfs_trans_handle *trans,2264				     struct btrfs_inode *inode,2265				     struct btrfs_path *path,2266				     struct btrfs_replace_extent_info *extent_info,2267				     const u64 replace_len,2268				     const u64 bytes_to_drop)2269{2270	struct btrfs_fs_info *fs_info = trans->fs_info;2271	struct btrfs_root *root = inode->root;2272	struct btrfs_file_extent_item *extent;2273	struct extent_buffer *leaf;2274	struct btrfs_key key;2275	int slot;2276	int ret;2277 2278	if (replace_len == 0)2279		return 0;2280 2281	if (extent_info->disk_offset == 0 &&2282	    btrfs_fs_incompat(fs_info, NO_HOLES)) {2283		btrfs_update_inode_bytes(inode, 0, bytes_to_drop);2284		return 0;2285	}2286 2287	key.objectid = btrfs_ino(inode);2288	key.type = BTRFS_EXTENT_DATA_KEY;2289	key.offset = extent_info->file_offset;2290	ret = btrfs_insert_empty_item(trans, root, path, &key,2291				      sizeof(struct btrfs_file_extent_item));2292	if (ret)2293		return ret;2294	leaf = path->nodes[0];2295	slot = path->slots[0];2296	write_extent_buffer(leaf, extent_info->extent_buf,2297			    btrfs_item_ptr_offset(leaf, slot),2298			    sizeof(struct btrfs_file_extent_item));2299	extent = btrfs_item_ptr(leaf, slot, struct btrfs_file_extent_item);2300	ASSERT(btrfs_file_extent_type(leaf, extent) != BTRFS_FILE_EXTENT_INLINE);2301	btrfs_set_file_extent_offset(leaf, extent, extent_info->data_offset);2302	btrfs_set_file_extent_num_bytes(leaf, extent, replace_len);2303	if (extent_info->is_new_extent)2304		btrfs_set_file_extent_generation(leaf, extent, trans->transid);2305	btrfs_mark_buffer_dirty(trans, leaf);2306	btrfs_release_path(path);2307 2308	ret = btrfs_inode_set_file_extent_range(inode, extent_info->file_offset,2309						replace_len);2310	if (ret)2311		return ret;2312 2313	/* If it's a hole, nothing more needs to be done. */2314	if (extent_info->disk_offset == 0) {2315		btrfs_update_inode_bytes(inode, 0, bytes_to_drop);2316		return 0;2317	}2318 2319	btrfs_update_inode_bytes(inode, replace_len, bytes_to_drop);2320 2321	if (extent_info->is_new_extent && extent_info->insertions == 0) {2322		key.objectid = extent_info->disk_offset;2323		key.type = BTRFS_EXTENT_ITEM_KEY;2324		key.offset = extent_info->disk_len;2325		ret = btrfs_alloc_reserved_file_extent(trans, root,2326						       btrfs_ino(inode),2327						       extent_info->file_offset,2328						       extent_info->qgroup_reserved,2329						       &key);2330	} else {2331		struct btrfs_ref ref = {2332			.action = BTRFS_ADD_DELAYED_REF,2333			.bytenr = extent_info->disk_offset,2334			.num_bytes = extent_info->disk_len,2335			.owning_root = btrfs_root_id(root),2336			.ref_root = btrfs_root_id(root),2337		};2338		u64 ref_offset;2339 2340		ref_offset = extent_info->file_offset - extent_info->data_offset;2341		btrfs_init_data_ref(&ref, btrfs_ino(inode), ref_offset, 0, false);2342		ret = btrfs_inc_extent_ref(trans, &ref);2343	}2344 2345	extent_info->insertions++;2346 2347	return ret;2348}2349 2350/*2351 * The respective range must have been previously locked, as well as the inode.2352 * The end offset is inclusive (last byte of the range).2353 * @extent_info is NULL for fallocate's hole punching and non-NULL when replacing2354 * the file range with an extent.2355 * When not punching a hole, we don't want to end up in a state where we dropped2356 * extents without inserting a new one, so we must abort the transaction to avoid2357 * a corruption.2358 */2359int btrfs_replace_file_extents(struct btrfs_inode *inode,2360			       struct btrfs_path *path, const u64 start,2361			       const u64 end,2362			       struct btrfs_replace_extent_info *extent_info,2363			       struct btrfs_trans_handle **trans_out)2364{2365	struct btrfs_drop_extents_args drop_args = { 0 };2366	struct btrfs_root *root = inode->root;2367	struct btrfs_fs_info *fs_info = root->fs_info;2368	u64 min_size = btrfs_calc_insert_metadata_size(fs_info, 1);2369	u64 ino_size = round_up(inode->vfs_inode.i_size, fs_info->sectorsize);2370	struct btrfs_trans_handle *trans = NULL;2371	struct btrfs_block_rsv *rsv;2372	unsigned int rsv_count;2373	u64 cur_offset;2374	u64 len = end - start;2375	int ret = 0;2376 2377	if (end <= start)2378		return -EINVAL;2379 2380	rsv = btrfs_alloc_block_rsv(fs_info, BTRFS_BLOCK_RSV_TEMP);2381	if (!rsv) {2382		ret = -ENOMEM;2383		goto out;2384	}2385	rsv->size = btrfs_calc_insert_metadata_size(fs_info, 1);2386	rsv->failfast = true;2387 2388	/*2389	 * 1 - update the inode2390	 * 1 - removing the extents in the range2391	 * 1 - adding the hole extent if no_holes isn't set or if we are2392	 *     replacing the range with a new extent2393	 */2394	if (!btrfs_fs_incompat(fs_info, NO_HOLES) || extent_info)2395		rsv_count = 3;2396	else2397		rsv_count = 2;2398 2399	trans = btrfs_start_transaction(root, rsv_count);2400	if (IS_ERR(trans)) {2401		ret = PTR_ERR(trans);2402		trans = NULL;2403		goto out_free;2404	}2405 2406	ret = btrfs_block_rsv_migrate(&fs_info->trans_block_rsv, rsv,2407				      min_size, false);2408	if (WARN_ON(ret))2409		goto out_trans;2410	trans->block_rsv = rsv;2411 2412	cur_offset = start;2413	drop_args.path = path;2414	drop_args.end = end + 1;2415	drop_args.drop_cache = true;2416	while (cur_offset < end) {2417		drop_args.start = cur_offset;2418		ret = btrfs_drop_extents(trans, root, inode, &drop_args);2419		/* If we are punching a hole decrement the inode's byte count */2420		if (!extent_info)2421			btrfs_update_inode_bytes(inode, 0,2422						 drop_args.bytes_found);2423		if (ret != -ENOSPC) {2424			/*2425			 * The only time we don't want to abort is if we are2426			 * attempting to clone a partial inline extent, in which2427			 * case we'll get EOPNOTSUPP.  However if we aren't2428			 * clone we need to abort no matter what, because if we2429			 * got EOPNOTSUPP via prealloc then we messed up and2430			 * need to abort.2431			 */2432			if (ret &&2433			    (ret != -EOPNOTSUPP ||2434			     (extent_info && extent_info->is_new_extent)))2435				btrfs_abort_transaction(trans, ret);2436			break;2437		}2438 2439		trans->block_rsv = &fs_info->trans_block_rsv;2440 2441		if (!extent_info && cur_offset < drop_args.drop_end &&2442		    cur_offset < ino_size) {2443			ret = fill_holes(trans, inode, path, cur_offset,2444					 drop_args.drop_end);2445			if (ret) {2446				/*2447				 * If we failed then we didn't insert our hole2448				 * entries for the area we dropped, so now the2449				 * fs is corrupted, so we must abort the2450				 * transaction.2451				 */2452				btrfs_abort_transaction(trans, ret);2453				break;2454			}2455		} else if (!extent_info && cur_offset < drop_args.drop_end) {2456			/*2457			 * We are past the i_size here, but since we didn't2458			 * insert holes we need to clear the mapped area so we2459			 * know to not set disk_i_size in this area until a new2460			 * file extent is inserted here.2461			 */2462			ret = btrfs_inode_clear_file_extent_range(inode,2463					cur_offset,2464					drop_args.drop_end - cur_offset);2465			if (ret) {2466				/*2467				 * We couldn't clear our area, so we could2468				 * presumably adjust up and corrupt the fs, so2469				 * we need to abort.2470				 */2471				btrfs_abort_transaction(trans, ret);2472				break;2473			}2474		}2475 2476		if (extent_info &&2477		    drop_args.drop_end > extent_info->file_offset) {2478			u64 replace_len = drop_args.drop_end -2479					  extent_info->file_offset;2480 2481			ret = btrfs_insert_replace_extent(trans, inode,	path,2482					extent_info, replace_len,2483					drop_args.bytes_found);2484			if (ret) {2485				btrfs_abort_transaction(trans, ret);2486				break;2487			}2488			extent_info->data_len -= replace_len;2489			extent_info->data_offset += replace_len;2490			extent_info->file_offset += replace_len;2491		}2492 2493		/*2494		 * We are releasing our handle on the transaction, balance the2495		 * dirty pages of the btree inode and flush delayed items, and2496		 * then get a new transaction handle, which may now point to a2497		 * new transaction in case someone else may have committed the2498		 * transaction we used to replace/drop file extent items. So2499		 * bump the inode's iversion and update mtime and ctime except2500		 * if we are called from a dedupe context. This is because a2501		 * power failure/crash may happen after the transaction is2502		 * committed and before we finish replacing/dropping all the2503		 * file extent items we need.2504		 */2505		inode_inc_iversion(&inode->vfs_inode);2506 2507		if (!extent_info || extent_info->update_times)2508			inode_set_mtime_to_ts(&inode->vfs_inode,2509					      inode_set_ctime_current(&inode->vfs_inode));2510 2511		ret = btrfs_update_inode(trans, inode);2512		if (ret)2513			break;2514 2515		btrfs_end_transaction(trans);2516		btrfs_btree_balance_dirty(fs_info);2517 2518		trans = btrfs_start_transaction(root, rsv_count);2519		if (IS_ERR(trans)) {2520			ret = PTR_ERR(trans);2521			trans = NULL;2522			break;2523		}2524 2525		ret = btrfs_block_rsv_migrate(&fs_info->trans_block_rsv,2526					      rsv, min_size, false);2527		if (WARN_ON(ret))2528			break;2529		trans->block_rsv = rsv;2530 2531		cur_offset = drop_args.drop_end;2532		len = end - cur_offset;2533		if (!extent_info && len) {2534			ret = find_first_non_hole(inode, &cur_offset, &len);2535			if (unlikely(ret < 0))2536				break;2537			if (ret && !len) {2538				ret = 0;2539				break;2540			}2541		}2542	}2543 2544	/*2545	 * If we were cloning, force the next fsync to be a full one since we2546	 * we replaced (or just dropped in the case of cloning holes when2547	 * NO_HOLES is enabled) file extent items and did not setup new extent2548	 * maps for the replacement extents (or holes).2549	 */2550	if (extent_info && !extent_info->is_new_extent)2551		btrfs_set_inode_full_sync(inode);2552 2553	if (ret)2554		goto out_trans;2555 2556	trans->block_rsv = &fs_info->trans_block_rsv;2557	/*2558	 * If we are using the NO_HOLES feature we might have had already an2559	 * hole that overlaps a part of the region [lockstart, lockend] and2560	 * ends at (or beyond) lockend. Since we have no file extent items to2561	 * represent holes, drop_end can be less than lockend and so we must2562	 * make sure we have an extent map representing the existing hole (the2563	 * call to __btrfs_drop_extents() might have dropped the existing extent2564	 * map representing the existing hole), otherwise the fast fsync path2565	 * will not record the existence of the hole region2566	 * [existing_hole_start, lockend].2567	 */2568	if (drop_args.drop_end <= end)2569		drop_args.drop_end = end + 1;2570	/*2571	 * Don't insert file hole extent item if it's for a range beyond eof2572	 * (because it's useless) or if it represents a 0 bytes range (when2573	 * cur_offset == drop_end).2574	 */2575	if (!extent_info && cur_offset < ino_size &&2576	    cur_offset < drop_args.drop_end) {2577		ret = fill_holes(trans, inode, path, cur_offset,2578				 drop_args.drop_end);2579		if (ret) {2580			/* Same comment as above. */2581			btrfs_abort_transaction(trans, ret);2582			goto out_trans;2583		}2584	} else if (!extent_info && cur_offset < drop_args.drop_end) {2585		/* See the comment in the loop above for the reasoning here. */2586		ret = btrfs_inode_clear_file_extent_range(inode, cur_offset,2587					drop_args.drop_end - cur_offset);2588		if (ret) {2589			btrfs_abort_transaction(trans, ret);2590			goto out_trans;2591		}2592 2593	}2594	if (extent_info) {2595		ret = btrfs_insert_replace_extent(trans, inode, path,2596				extent_info, extent_info->data_len,2597				drop_args.bytes_found);2598		if (ret) {2599			btrfs_abort_transaction(trans, ret);2600			goto out_trans;2601		}2602	}2603 2604out_trans:2605	if (!trans)2606		goto out_free;2607 2608	trans->block_rsv = &fs_info->trans_block_rsv;2609	if (ret)2610		btrfs_end_transaction(trans);2611	else2612		*trans_out = trans;2613out_free:2614	btrfs_free_block_rsv(fs_info, rsv);2615out:2616	return ret;2617}2618 2619static int btrfs_punch_hole(struct file *file, loff_t offset, loff_t len)2620{2621	struct inode *inode = file_inode(file);2622	struct btrfs_fs_info *fs_info = inode_to_fs_info(inode);2623	struct btrfs_root *root = BTRFS_I(inode)->root;2624	struct extent_state *cached_state = NULL;2625	struct btrfs_path *path;2626	struct btrfs_trans_handle *trans = NULL;2627	u64 lockstart;2628	u64 lockend;2629	u64 tail_start;2630	u64 tail_len;2631	u64 orig_start = offset;2632	int ret = 0;2633	bool same_block;2634	u64 ino_size;2635	bool truncated_block = false;2636	bool updated_inode = false;2637 2638	btrfs_inode_lock(BTRFS_I(inode), BTRFS_ILOCK_MMAP);2639 2640	ret = btrfs_wait_ordered_range(BTRFS_I(inode), offset, len);2641	if (ret)2642		goto out_only_mutex;2643 2644	ino_size = round_up(inode->i_size, fs_info->sectorsize);2645	ret = find_first_non_hole(BTRFS_I(inode), &offset, &len);2646	if (ret < 0)2647		goto out_only_mutex;2648	if (ret && !len) {2649		/* Already in a large hole */2650		ret = 0;2651		goto out_only_mutex;2652	}2653 2654	ret = file_modified(file);2655	if (ret)2656		goto out_only_mutex;2657 2658	lockstart = round_up(offset, fs_info->sectorsize);2659	lockend = round_down(offset + len, fs_info->sectorsize) - 1;2660	same_block = (BTRFS_BYTES_TO_BLKS(fs_info, offset))2661		== (BTRFS_BYTES_TO_BLKS(fs_info, offset + len - 1));2662	/*2663	 * We needn't truncate any block which is beyond the end of the file2664	 * because we are sure there is no data there.2665	 */2666	/*2667	 * Only do this if we are in the same block and we aren't doing the2668	 * entire block.2669	 */2670	if (same_block && len < fs_info->sectorsize) {2671		if (offset < ino_size) {2672			truncated_block = true;2673			ret = btrfs_truncate_block(BTRFS_I(inode), offset, len,2674						   0);2675		} else {2676			ret = 0;2677		}2678		goto out_only_mutex;2679	}2680 2681	/* zero back part of the first block */2682	if (offset < ino_size) {2683		truncated_block = true;2684		ret = btrfs_truncate_block(BTRFS_I(inode), offset, 0, 0);2685		if (ret) {2686			btrfs_inode_unlock(BTRFS_I(inode), BTRFS_ILOCK_MMAP);2687			return ret;2688		}2689	}2690 2691	/* Check the aligned pages after the first unaligned page,2692	 * if offset != orig_start, which means the first unaligned page2693	 * including several following pages are already in holes,2694	 * the extra check can be skipped */2695	if (offset == orig_start) {2696		/* after truncate page, check hole again */2697		len = offset + len - lockstart;2698		offset = lockstart;2699		ret = find_first_non_hole(BTRFS_I(inode), &offset, &len);2700		if (ret < 0)2701			goto out_only_mutex;2702		if (ret && !len) {2703			ret = 0;2704			goto out_only_mutex;2705		}2706		lockstart = offset;2707	}2708 2709	/* Check the tail unaligned part is in a hole */2710	tail_start = lockend + 1;2711	tail_len = offset + len - tail_start;2712	if (tail_len) {2713		ret = find_first_non_hole(BTRFS_I(inode), &tail_start, &tail_len);2714		if (unlikely(ret < 0))2715			goto out_only_mutex;2716		if (!ret) {2717			/* zero the front end of the last page */2718			if (tail_start + tail_len < ino_size) {2719				truncated_block = true;2720				ret = btrfs_truncate_block(BTRFS_I(inode),2721							tail_start + tail_len,2722							0, 1);2723				if (ret)2724					goto out_only_mutex;2725			}2726		}2727	}2728 2729	if (lockend < lockstart) {2730		ret = 0;2731		goto out_only_mutex;2732	}2733 2734	btrfs_punch_hole_lock_range(inode, lockstart, lockend, &cached_state);2735 2736	path = btrfs_alloc_path();2737	if (!path) {2738		ret = -ENOMEM;2739		goto out;2740	}2741 2742	ret = btrfs_replace_file_extents(BTRFS_I(inode), path, lockstart,2743					 lockend, NULL, &trans);2744	btrfs_free_path(path);2745	if (ret)2746		goto out;2747 2748	ASSERT(trans != NULL);2749	inode_inc_iversion(inode);2750	inode_set_mtime_to_ts(inode, inode_set_ctime_current(inode));2751	ret = btrfs_update_inode(trans, BTRFS_I(inode));2752	updated_inode = true;2753	btrfs_end_transaction(trans);2754	btrfs_btree_balance_dirty(fs_info);2755out:2756	unlock_extent(&BTRFS_I(inode)->io_tree, lockstart, lockend,2757		      &cached_state);2758out_only_mutex:2759	if (!updated_inode && truncated_block && !ret) {2760		/*2761		 * If we only end up zeroing part of a page, we still need to2762		 * update the inode item, so that all the time fields are2763		 * updated as well as the necessary btrfs inode in memory fields2764		 * for detecting, at fsync time, if the inode isn't yet in the2765		 * log tree or it's there but not up to date.2766		 */2767		struct timespec64 now = inode_set_ctime_current(inode);2768 2769		inode_inc_iversion(inode);2770		inode_set_mtime_to_ts(inode, now);2771		trans = btrfs_start_transaction(root, 1);2772		if (IS_ERR(trans)) {2773			ret = PTR_ERR(trans);2774		} else {2775			int ret2;2776 2777			ret = btrfs_update_inode(trans, BTRFS_I(inode));2778			ret2 = btrfs_end_transaction(trans);2779			if (!ret)2780				ret = ret2;2781		}2782	}2783	btrfs_inode_unlock(BTRFS_I(inode), BTRFS_ILOCK_MMAP);2784	return ret;2785}2786 2787/* Helper structure to record which range is already reserved */2788struct falloc_range {2789	struct list_head list;2790	u64 start;2791	u64 len;2792};2793 2794/*2795 * Helper function to add falloc range2796 *2797 * Caller should have locked the larger range of extent containing2798 * [start, len)2799 */2800static int add_falloc_range(struct list_head *head, u64 start, u64 len)2801{2802	struct falloc_range *range = NULL;2803 2804	if (!list_empty(head)) {2805		/*2806		 * As fallocate iterates by bytenr order, we only need to check2807		 * the last range.2808		 */2809		range = list_last_entry(head, struct falloc_range, list);2810		if (range->start + range->len == start) {2811			range->len += len;2812			return 0;2813		}2814	}2815 2816	range = kmalloc(sizeof(*range), GFP_KERNEL);2817	if (!range)2818		return -ENOMEM;2819	range->start = start;2820	range->len = len;2821	list_add_tail(&range->list, head);2822	return 0;2823}2824 2825static int btrfs_fallocate_update_isize(struct inode *inode,2826					const u64 end,2827					const int mode)2828{2829	struct btrfs_trans_handle *trans;2830	struct btrfs_root *root = BTRFS_I(inode)->root;2831	int ret;2832	int ret2;2833 2834	if (mode & FALLOC_FL_KEEP_SIZE || end <= i_size_read(inode))2835		return 0;2836 2837	trans = btrfs_start_transaction(root, 1);2838	if (IS_ERR(trans))2839		return PTR_ERR(trans);2840 2841	inode_set_ctime_current(inode);2842	i_size_write(inode, end);2843	btrfs_inode_safe_disk_i_size_write(BTRFS_I(inode), 0);2844	ret = btrfs_update_inode(trans, BTRFS_I(inode));2845	ret2 = btrfs_end_transaction(trans);2846 2847	return ret ? ret : ret2;2848}2849 2850enum {2851	RANGE_BOUNDARY_WRITTEN_EXTENT,2852	RANGE_BOUNDARY_PREALLOC_EXTENT,2853	RANGE_BOUNDARY_HOLE,2854};2855 2856static int btrfs_zero_range_check_range_boundary(struct btrfs_inode *inode,2857						 u64 offset)2858{2859	const u64 sectorsize = inode->root->fs_info->sectorsize;2860	struct extent_map *em;2861	int ret;2862 2863	offset = round_down(offset, sectorsize);2864	em = btrfs_get_extent(inode, NULL, offset, sectorsize);2865	if (IS_ERR(em))2866		return PTR_ERR(em);2867 2868	if (em->disk_bytenr == EXTENT_MAP_HOLE)2869		ret = RANGE_BOUNDARY_HOLE;2870	else if (em->flags & EXTENT_FLAG_PREALLOC)2871		ret = RANGE_BOUNDARY_PREALLOC_EXTENT;2872	else2873		ret = RANGE_BOUNDARY_WRITTEN_EXTENT;2874 2875	free_extent_map(em);2876	return ret;2877}2878 2879static int btrfs_zero_range(struct inode *inode,2880			    loff_t offset,2881			    loff_t len,2882			    const int mode)2883{2884	struct btrfs_fs_info *fs_info = BTRFS_I(inode)->root->fs_info;2885	struct extent_map *em;2886	struct extent_changeset *data_reserved = NULL;2887	int ret;2888	u64 alloc_hint = 0;2889	const u64 sectorsize = fs_info->sectorsize;2890	u64 alloc_start = round_down(offset, sectorsize);2891	u64 alloc_end = round_up(offset + len, sectorsize);2892	u64 bytes_to_reserve = 0;2893	bool space_reserved = false;2894 2895	em = btrfs_get_extent(BTRFS_I(inode), NULL, alloc_start,2896			      alloc_end - alloc_start);2897	if (IS_ERR(em)) {2898		ret = PTR_ERR(em);2899		goto out;2900	}2901 2902	/*2903	 * Avoid hole punching and extent allocation for some cases. More cases2904	 * could be considered, but these are unlikely common and we keep things2905	 * as simple as possible for now. Also, intentionally, if the target2906	 * range contains one or more prealloc extents together with regular2907	 * extents and holes, we drop all the existing extents and allocate a2908	 * new prealloc extent, so that we get a larger contiguous disk extent.2909	 */2910	if (em->start <= alloc_start && (em->flags & EXTENT_FLAG_PREALLOC)) {2911		const u64 em_end = em->start + em->len;2912 2913		if (em_end >= offset + len) {2914			/*2915			 * The whole range is already a prealloc extent,2916			 * do nothing except updating the inode's i_size if2917			 * needed.2918			 */2919			free_extent_map(em);2920			ret = btrfs_fallocate_update_isize(inode, offset + len,2921							   mode);2922			goto out;2923		}2924		/*2925		 * Part of the range is already a prealloc extent, so operate2926		 * only on the remaining part of the range.2927		 */2928		alloc_start = em_end;2929		ASSERT(IS_ALIGNED(alloc_start, sectorsize));2930		len = offset + len - alloc_start;2931		offset = alloc_start;2932		alloc_hint = extent_map_block_start(em) + em->len;2933	}2934	free_extent_map(em);2935 2936	if (BTRFS_BYTES_TO_BLKS(fs_info, offset) ==2937	    BTRFS_BYTES_TO_BLKS(fs_info, offset + len - 1)) {2938		em = btrfs_get_extent(BTRFS_I(inode), NULL, alloc_start, sectorsize);2939		if (IS_ERR(em)) {2940			ret = PTR_ERR(em);2941			goto out;2942		}2943 2944		if (em->flags & EXTENT_FLAG_PREALLOC) {2945			free_extent_map(em);2946			ret = btrfs_fallocate_update_isize(inode, offset + len,2947							   mode);2948			goto out;2949		}2950		if (len < sectorsize && em->disk_bytenr != EXTENT_MAP_HOLE) {2951			free_extent_map(em);2952			ret = btrfs_truncate_block(BTRFS_I(inode), offset, len,2953						   0);2954			if (!ret)2955				ret = btrfs_fallocate_update_isize(inode,2956								   offset + len,2957								   mode);2958			return ret;2959		}2960		free_extent_map(em);2961		alloc_start = round_down(offset, sectorsize);2962		alloc_end = alloc_start + sectorsize;2963		goto reserve_space;2964	}2965 2966	alloc_start = round_up(offset, sectorsize);2967	alloc_end = round_down(offset + len, sectorsize);2968 2969	/*2970	 * For unaligned ranges, check the pages at the boundaries, they might2971	 * map to an extent, in which case we need to partially zero them, or2972	 * they might map to a hole, in which case we need our allocation range2973	 * to cover them.2974	 */2975	if (!IS_ALIGNED(offset, sectorsize)) {2976		ret = btrfs_zero_range_check_range_boundary(BTRFS_I(inode),2977							    offset);2978		if (ret < 0)2979			goto out;2980		if (ret == RANGE_BOUNDARY_HOLE) {2981			alloc_start = round_down(offset, sectorsize);2982			ret = 0;2983		} else if (ret == RANGE_BOUNDARY_WRITTEN_EXTENT) {2984			ret = btrfs_truncate_block(BTRFS_I(inode), offset, 0, 0);2985			if (ret)2986				goto out;2987		} else {2988			ret = 0;2989		}2990	}2991 2992	if (!IS_ALIGNED(offset + len, sectorsize)) {2993		ret = btrfs_zero_range_check_range_boundary(BTRFS_I(inode),2994							    offset + len);2995		if (ret < 0)2996			goto out;2997		if (ret == RANGE_BOUNDARY_HOLE) {2998			alloc_end = round_up(offset + len, sectorsize);2999			ret = 0;3000		} else if (ret == RANGE_BOUNDARY_WRITTEN_EXTENT) {3001			ret = btrfs_truncate_block(BTRFS_I(inode), offset + len,3002						   0, 1);3003			if (ret)3004				goto out;3005		} else {3006			ret = 0;3007		}3008	}3009 3010reserve_space:3011	if (alloc_start < alloc_end) {3012		struct extent_state *cached_state = NULL;3013		const u64 lockstart = alloc_start;3014		const u64 lockend = alloc_end - 1;3015 3016		bytes_to_reserve = alloc_end - alloc_start;3017		ret = btrfs_alloc_data_chunk_ondemand(BTRFS_I(inode),3018						      bytes_to_reserve);3019		if (ret < 0)3020			goto out;3021		space_reserved = true;3022		btrfs_punch_hole_lock_range(inode, lockstart, lockend,3023					    &cached_state);3024		ret = btrfs_qgroup_reserve_data(BTRFS_I(inode), &data_reserved,3025						alloc_start, bytes_to_reserve);3026		if (ret) {3027			unlock_extent(&BTRFS_I(inode)->io_tree, lockstart,3028				      lockend, &cached_state);3029			goto out;3030		}3031		ret = btrfs_prealloc_file_range(inode, mode, alloc_start,3032						alloc_end - alloc_start,3033						fs_info->sectorsize,3034						offset + len, &alloc_hint);3035		unlock_extent(&BTRFS_I(inode)->io_tree, lockstart, lockend,3036			      &cached_state);3037		/* btrfs_prealloc_file_range releases reserved space on error */3038		if (ret) {3039			space_reserved = false;3040			goto out;3041		}3042	}3043	ret = btrfs_fallocate_update_isize(inode, offset + len, mode);3044 out:3045	if (ret && space_reserved)3046		btrfs_free_reserved_data_space(BTRFS_I(inode), data_reserved,3047					       alloc_start, bytes_to_reserve);3048	extent_changeset_free(data_reserved);3049 3050	return ret;3051}3052 3053static long btrfs_fallocate(struct file *file, int mode,3054			    loff_t offset, loff_t len)3055{3056	struct inode *inode = file_inode(file);3057	struct extent_state *cached_state = NULL;3058	struct extent_changeset *data_reserved = NULL;3059	struct falloc_range *range;3060	struct falloc_range *tmp;3061	LIST_HEAD(reserve_list);3062	u64 cur_offset;3063	u64 last_byte;3064	u64 alloc_start;3065	u64 alloc_end;3066	u64 alloc_hint = 0;3067	u64 locked_end;3068	u64 actual_end = 0;3069	u64 data_space_needed = 0;3070	u64 data_space_reserved = 0;3071	u64 qgroup_reserved = 0;3072	struct extent_map *em;3073	int blocksize = BTRFS_I(inode)->root->fs_info->sectorsize;3074	int ret;3075 3076	/* Do not allow fallocate in ZONED mode */3077	if (btrfs_is_zoned(inode_to_fs_info(inode)))3078		return -EOPNOTSUPP;3079 3080	alloc_start = round_down(offset, blocksize);3081	alloc_end = round_up(offset + len, blocksize);3082	cur_offset = alloc_start;3083 3084	/* Make sure we aren't being give some crap mode */3085	if (mode & ~(FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE |3086		     FALLOC_FL_ZERO_RANGE))3087		return -EOPNOTSUPP;3088 3089	if (mode & FALLOC_FL_PUNCH_HOLE)3090		return btrfs_punch_hole(file, offset, len);3091 3092	btrfs_inode_lock(BTRFS_I(inode), BTRFS_ILOCK_MMAP);3093 3094	if (!(mode & FALLOC_FL_KEEP_SIZE) && offset + len > inode->i_size) {3095		ret = inode_newsize_ok(inode, offset + len);3096		if (ret)3097			goto out;3098	}3099 3100	ret = file_modified(file);3101	if (ret)3102		goto out;3103 3104	/*3105	 * TODO: Move these two operations after we have checked3106	 * accurate reserved space, or fallocate can still fail but3107	 * with page truncated or size expanded.3108	 *3109	 * But that's a minor problem and won't do much harm BTW.3110	 */3111	if (alloc_start > inode->i_size) {3112		ret = btrfs_cont_expand(BTRFS_I(inode), i_size_read(inode),3113					alloc_start);3114		if (ret)3115			goto out;3116	} else if (offset + len > inode->i_size) {3117		/*3118		 * If we are fallocating from the end of the file onward we3119		 * need to zero out the end of the block if i_size lands in the3120		 * middle of a block.3121		 */3122		ret = btrfs_truncate_block(BTRFS_I(inode), inode->i_size, 0, 0);3123		if (ret)3124			goto out;3125	}3126 3127	/*3128	 * We have locked the inode at the VFS level (in exclusive mode) and we3129	 * have locked the i_mmap_lock lock (in exclusive mode). Now before3130	 * locking the file range, flush all dealloc in the range and wait for3131	 * all ordered extents in the range to complete. After this we can lock3132	 * the file range and, due to the previous locking we did, we know there3133	 * can't be more delalloc or ordered extents in the range.3134	 */3135	ret = btrfs_wait_ordered_range(BTRFS_I(inode), alloc_start,3136				       alloc_end - alloc_start);3137	if (ret)3138		goto out;3139 3140	if (mode & FALLOC_FL_ZERO_RANGE) {3141		ret = btrfs_zero_range(inode, offset, len, mode);3142		btrfs_inode_unlock(BTRFS_I(inode), BTRFS_ILOCK_MMAP);3143		return ret;3144	}3145 3146	locked_end = alloc_end - 1;3147	lock_extent(&BTRFS_I(inode)->io_tree, alloc_start, locked_end,3148		    &cached_state);3149 3150	btrfs_assert_inode_range_clean(BTRFS_I(inode), alloc_start, locked_end);3151 3152	/* First, check if we exceed the qgroup limit */3153	while (cur_offset < alloc_end) {3154		em = btrfs_get_extent(BTRFS_I(inode), NULL, cur_offset,3155				      alloc_end - cur_offset);3156		if (IS_ERR(em)) {3157			ret = PTR_ERR(em);3158			break;3159		}3160		last_byte = min(extent_map_end(em), alloc_end);3161		actual_end = min_t(u64, extent_map_end(em), offset + len);3162		last_byte = ALIGN(last_byte, blocksize);3163		if (em->disk_bytenr == EXTENT_MAP_HOLE ||3164		    (cur_offset >= inode->i_size &&3165		     !(em->flags & EXTENT_FLAG_PREALLOC))) {3166			const u64 range_len = last_byte - cur_offset;3167 3168			ret = add_falloc_range(&reserve_list, cur_offset, range_len);3169			if (ret < 0) {3170				free_extent_map(em);3171				break;3172			}3173			ret = btrfs_qgroup_reserve_data(BTRFS_I(inode),3174					&data_reserved, cur_offset, range_len);3175			if (ret < 0) {3176				free_extent_map(em);3177				break;3178			}3179			qgroup_reserved += range_len;3180			data_space_needed += range_len;3181		}3182		free_extent_map(em);3183		cur_offset = last_byte;3184	}3185 3186	if (!ret && data_space_needed > 0) {3187		/*3188		 * We are safe to reserve space here as we can't have delalloc3189		 * in the range, see above.3190		 */3191		ret = btrfs_alloc_data_chunk_ondemand(BTRFS_I(inode),3192						      data_space_needed);3193		if (!ret)3194			data_space_reserved = data_space_needed;3195	}3196 3197	/*3198	 * If ret is still 0, means we're OK to fallocate.3199	 * Or just cleanup the list and exit.3200	 */3201	list_for_each_entry_safe(range, tmp, &reserve_list, list) {3202		if (!ret) {3203			ret = btrfs_prealloc_file_range(inode, mode,3204					range->start,3205					range->len, blocksize,3206					offset + len, &alloc_hint);3207			/*3208			 * btrfs_prealloc_file_range() releases space even3209			 * if it returns an error.3210			 */3211			data_space_reserved -= range->len;3212			qgroup_reserved -= range->len;3213		} else if (data_space_reserved > 0) {3214			btrfs_free_reserved_data_space(BTRFS_I(inode),3215					       data_reserved, range->start,3216					       range->len);3217			data_space_reserved -= range->len;3218			qgroup_reserved -= range->len;3219		} else if (qgroup_reserved > 0) {3220			btrfs_qgroup_free_data(BTRFS_I(inode), data_reserved,3221					       range->start, range->len, NULL);3222			qgroup_reserved -= range->len;3223		}3224		list_del(&range->list);3225		kfree(range);3226	}3227	if (ret < 0)3228		goto out_unlock;3229 3230	/*3231	 * We didn't need to allocate any more space, but we still extended the3232	 * size of the file so we need to update i_size and the inode item.3233	 */3234	ret = btrfs_fallocate_update_isize(inode, actual_end, mode);3235out_unlock:3236	unlock_extent(&BTRFS_I(inode)->io_tree, alloc_start, locked_end,3237		      &cached_state);3238out:3239	btrfs_inode_unlock(BTRFS_I(inode), BTRFS_ILOCK_MMAP);3240	extent_changeset_free(data_reserved);3241	return ret;3242}3243 3244/*3245 * Helper for btrfs_find_delalloc_in_range(). Find a subrange in a given range3246 * that has unflushed and/or flushing delalloc. There might be other adjacent3247 * subranges after the one it found, so btrfs_find_delalloc_in_range() keeps3248 * looping while it gets adjacent subranges, and merging them together.3249 */3250static bool find_delalloc_subrange(struct btrfs_inode *inode, u64 start, u64 end,3251				   struct extent_state **cached_state,3252				   bool *search_io_tree,3253				   u64 *delalloc_start_ret, u64 *delalloc_end_ret)3254{3255	u64 len = end + 1 - start;3256	u64 delalloc_len = 0;3257	struct btrfs_ordered_extent *oe;3258	u64 oe_start;3259	u64 oe_end;3260 3261	/*3262	 * Search the io tree first for EXTENT_DELALLOC. If we find any, it3263	 * means we have delalloc (dirty pages) for which writeback has not3264	 * started yet.3265	 */3266	if (*search_io_tree) {3267		spin_lock(&inode->lock);3268		if (inode->delalloc_bytes > 0) {3269			spin_unlock(&inode->lock);3270			*delalloc_start_ret = start;3271			delalloc_len = count_range_bits(&inode->io_tree,3272							delalloc_start_ret, end,3273							len, EXTENT_DELALLOC, 1,3274							cached_state);3275		} else {3276			spin_unlock(&inode->lock);3277		}3278	}3279 3280	if (delalloc_len > 0) {3281		/*3282		 * If delalloc was found then *delalloc_start_ret has a sector size3283		 * aligned value (rounded down).3284		 */3285		*delalloc_end_ret = *delalloc_start_ret + delalloc_len - 1;3286 3287		if (*delalloc_start_ret == start) {3288			/* Delalloc for the whole range, nothing more to do. */3289			if (*delalloc_end_ret == end)3290				return true;3291			/* Else trim our search range for ordered extents. */3292			start = *delalloc_end_ret + 1;3293			len = end + 1 - start;3294		}3295	} else {3296		/* No delalloc, future calls don't need to search again. */3297		*search_io_tree = false;3298	}3299 3300	/*3301	 * Now also check if there's any ordered extent in the range.3302	 * We do this because:3303	 *3304	 * 1) When delalloc is flushed, the file range is locked, we clear the3305	 *    EXTENT_DELALLOC bit from the io tree and create an extent map and3306	 *    an ordered extent for the write. So we might just have been called3307	 *    after delalloc is flushed and before the ordered extent completes3308	 *    and inserts the new file extent item in the subvolume's btree;3309	 *3310	 * 2) We may have an ordered extent created by flushing delalloc for a3311	 *    subrange that starts before the subrange we found marked with3312	 *    EXTENT_DELALLOC in the io tree.3313	 *3314	 * We could also use the extent map tree to find such delalloc that is3315	 * being flushed, but using the ordered extents tree is more efficient3316	 * because it's usually much smaller as ordered extents are removed from3317	 * the tree once they complete. With the extent maps, we mau have them3318	 * in the extent map tree for a very long time, and they were either3319	 * created by previous writes or loaded by read operations.3320	 */3321	oe = btrfs_lookup_first_ordered_range(inode, start, len);3322	if (!oe)3323		return (delalloc_len > 0);3324 3325	/* The ordered extent may span beyond our search range. */3326	oe_start = max(oe->file_offset, start);3327	oe_end = min(oe->file_offset + oe->num_bytes - 1, end);3328 3329	btrfs_put_ordered_extent(oe);3330 3331	/* Don't have unflushed delalloc, return the ordered extent range. */3332	if (delalloc_len == 0) {3333		*delalloc_start_ret = oe_start;3334		*delalloc_end_ret = oe_end;3335		return true;3336	}3337 3338	/*3339	 * We have both unflushed delalloc (io_tree) and an ordered extent.3340	 * If the ranges are adjacent returned a combined range, otherwise3341	 * return the leftmost range.3342	 */3343	if (oe_start < *delalloc_start_ret) {3344		if (oe_end < *delalloc_start_ret)3345			*delalloc_end_ret = oe_end;3346		*delalloc_start_ret = oe_start;3347	} else if (*delalloc_end_ret + 1 == oe_start) {3348		*delalloc_end_ret = oe_end;3349	}3350 3351	return true;3352}3353 3354/*3355 * Check if there's delalloc in a given range.3356 *3357 * @inode:               The inode.3358 * @start:               The start offset of the range. It does not need to be3359 *                       sector size aligned.3360 * @end:                 The end offset (inclusive value) of the search range.3361 *                       It does not need to be sector size aligned.3362 * @cached_state:        Extent state record used for speeding up delalloc3363 *                       searches in the inode's io_tree. Can be NULL.3364 * @delalloc_start_ret:  Output argument, set to the start offset of the3365 *                       subrange found with delalloc (may not be sector size3366 *                       aligned).3367 * @delalloc_end_ret:    Output argument, set to he end offset (inclusive value)3368 *                       of the subrange found with delalloc.3369 *3370 * Returns true if a subrange with delalloc is found within the given range, and3371 * if so it sets @delalloc_start_ret and @delalloc_end_ret with the start and3372 * end offsets of the subrange.3373 */3374bool btrfs_find_delalloc_in_range(struct btrfs_inode *inode, u64 start, u64 end,3375				  struct extent_state **cached_state,3376				  u64 *delalloc_start_ret, u64 *delalloc_end_ret)3377{3378	u64 cur_offset = round_down(start, inode->root->fs_info->sectorsize);3379	u64 prev_delalloc_end = 0;3380	bool search_io_tree = true;3381	bool ret = false;3382 3383	while (cur_offset <= end) {3384		u64 delalloc_start;3385		u64 delalloc_end;3386		bool delalloc;3387 3388		delalloc = find_delalloc_subrange(inode, cur_offset, end,3389						  cached_state, &search_io_tree,3390						  &delalloc_start,3391						  &delalloc_end);3392		if (!delalloc)3393			break;3394 3395		if (prev_delalloc_end == 0) {3396			/* First subrange found. */3397			*delalloc_start_ret = max(delalloc_start, start);3398			*delalloc_end_ret = delalloc_end;3399			ret = true;3400		} else if (delalloc_start == prev_delalloc_end + 1) {3401			/* Subrange adjacent to the previous one, merge them. */3402			*delalloc_end_ret = delalloc_end;3403		} else {3404			/* Subrange not adjacent to the previous one, exit. */3405			break;3406		}3407 3408		prev_delalloc_end = delalloc_end;3409		cur_offset = delalloc_end + 1;3410		cond_resched();3411	}3412 3413	return ret;3414}3415 3416/*3417 * Check if there's a hole or delalloc range in a range representing a hole (or3418 * prealloc extent) found in the inode's subvolume btree.3419 *3420 * @inode:      The inode.3421 * @whence:     Seek mode (SEEK_DATA or SEEK_HOLE).3422 * @start:      Start offset of the hole region. It does not need to be sector3423 *              size aligned.3424 * @end:        End offset (inclusive value) of the hole region. It does not3425 *              need to be sector size aligned.3426 * @start_ret:  Return parameter, used to set the start of the subrange in the3427 *              hole that matches the search criteria (seek mode), if such3428 *              subrange is found (return value of the function is true).3429 *              The value returned here may not be sector size aligned.3430 *3431 * Returns true if a subrange matching the given seek mode is found, and if one3432 * is found, it updates @start_ret with the start of the subrange.3433 */3434static bool find_desired_extent_in_hole(struct btrfs_inode *inode, int whence,3435					struct extent_state **cached_state,3436					u64 start, u64 end, u64 *start_ret)3437{3438	u64 delalloc_start;3439	u64 delalloc_end;3440	bool delalloc;3441 3442	delalloc = btrfs_find_delalloc_in_range(inode, start, end, cached_state,3443						&delalloc_start, &delalloc_end);3444	if (delalloc && whence == SEEK_DATA) {3445		*start_ret = delalloc_start;3446		return true;3447	}3448 3449	if (delalloc && whence == SEEK_HOLE) {3450		/*3451		 * We found delalloc but it starts after out start offset. So we3452		 * have a hole between our start offset and the delalloc start.3453		 */3454		if (start < delalloc_start) {3455			*start_ret = start;3456			return true;3457		}3458		/*3459		 * Delalloc range starts at our start offset.3460		 * If the delalloc range's length is smaller than our range,3461		 * then it means we have a hole that starts where the delalloc3462		 * subrange ends.3463		 */3464		if (delalloc_end < end) {3465			*start_ret = delalloc_end + 1;3466			return true;3467		}3468 3469		/* There's delalloc for the whole range. */3470		return false;3471	}3472 3473	if (!delalloc && whence == SEEK_HOLE) {3474		*start_ret = start;3475		return true;3476	}3477 3478	/*3479	 * No delalloc in the range and we are seeking for data. The caller has3480	 * to iterate to the next extent item in the subvolume btree.3481	 */3482	return false;3483}3484 3485static loff_t find_desired_extent(struct file *file, loff_t offset, int whence)3486{3487	struct btrfs_inode *inode = BTRFS_I(file->f_mapping->host);3488	struct btrfs_file_private *private;3489	struct btrfs_fs_info *fs_info = inode->root->fs_info;3490	struct extent_state *cached_state = NULL;3491	struct extent_state **delalloc_cached_state;3492	const loff_t i_size = i_size_read(&inode->vfs_inode);3493	const u64 ino = btrfs_ino(inode);3494	struct btrfs_root *root = inode->root;3495	struct btrfs_path *path;3496	struct btrfs_key key;3497	u64 last_extent_end;3498	u64 lockstart;3499	u64 lockend;3500	u64 start;3501	int ret;3502	bool found = false;3503 3504	if (i_size == 0 || offset >= i_size)3505		return -ENXIO;3506 3507	/*3508	 * Quick path. If the inode has no prealloc extents and its number of3509	 * bytes used matches its i_size, then it can not have holes.3510	 */3511	if (whence == SEEK_HOLE &&3512	    !(inode->flags & BTRFS_INODE_PREALLOC) &&3513	    inode_get_bytes(&inode->vfs_inode) == i_size)3514		return i_size;3515 3516	spin_lock(&inode->lock);3517	private = file->private_data;3518	spin_unlock(&inode->lock);3519 3520	if (private && private->owner_task != current) {3521		/*3522		 * Not allocated by us, don't use it as its cached state is used3523		 * by the task that allocated it and we don't want neither to3524		 * mess with it nor get incorrect results because it reflects an3525		 * invalid state for the current task.3526		 */3527		private = NULL;3528	} else if (!private) {3529		private = kzalloc(sizeof(*private), GFP_KERNEL);3530		/*3531		 * No worries if memory allocation failed.3532		 * The private structure is used only for speeding up multiple3533		 * lseek SEEK_HOLE/DATA calls to a file when there's delalloc,3534		 * so everything will still be correct.3535		 */3536		if (private) {3537			bool free = false;3538 3539			private->owner_task = current;3540 3541			spin_lock(&inode->lock);3542			if (file->private_data)3543				free = true;3544			else3545				file->private_data = private;3546			spin_unlock(&inode->lock);3547 3548			if (free) {3549				kfree(private);3550				private = NULL;3551			}3552		}3553	}3554 3555	if (private)3556		delalloc_cached_state = &private->llseek_cached_state;3557	else3558		delalloc_cached_state = NULL;3559 3560	/*3561	 * offset can be negative, in this case we start finding DATA/HOLE from3562	 * the very start of the file.3563	 */3564	start = max_t(loff_t, 0, offset);3565 3566	lockstart = round_down(start, fs_info->sectorsize);3567	lockend = round_up(i_size, fs_info->sectorsize);3568	if (lockend <= lockstart)3569		lockend = lockstart + fs_info->sectorsize;3570	lockend--;3571 3572	path = btrfs_alloc_path();3573	if (!path)3574		return -ENOMEM;3575	path->reada = READA_FORWARD;3576 3577	key.objectid = ino;3578	key.type = BTRFS_EXTENT_DATA_KEY;3579	key.offset = start;3580 3581	last_extent_end = lockstart;3582 3583	lock_extent(&inode->io_tree, lockstart, lockend, &cached_state);3584 3585	ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);3586	if (ret < 0) {3587		goto out;3588	} else if (ret > 0 && path->slots[0] > 0) {3589		btrfs_item_key_to_cpu(path->nodes[0], &key, path->slots[0] - 1);3590		if (key.objectid == ino && key.type == BTRFS_EXTENT_DATA_KEY)3591			path->slots[0]--;3592	}3593 3594	while (start < i_size) {3595		struct extent_buffer *leaf = path->nodes[0];3596		struct btrfs_file_extent_item *extent;3597		u64 extent_end;3598		u8 type;3599 3600		if (path->slots[0] >= btrfs_header_nritems(leaf)) {3601			ret = btrfs_next_leaf(root, path);3602			if (ret < 0)3603				goto out;3604			else if (ret > 0)3605				break;3606 3607			leaf = path->nodes[0];3608		}3609 3610		btrfs_item_key_to_cpu(leaf, &key, path->slots[0]);3611		if (key.objectid != ino || key.type != BTRFS_EXTENT_DATA_KEY)3612			break;3613 3614		extent_end = btrfs_file_extent_end(path);3615 3616		/*3617		 * In the first iteration we may have a slot that points to an3618		 * extent that ends before our start offset, so skip it.3619		 */3620		if (extent_end <= start) {3621			path->slots[0]++;3622			continue;3623		}3624 3625		/* We have an implicit hole, NO_HOLES feature is likely set. */3626		if (last_extent_end < key.offset) {3627			u64 search_start = last_extent_end;3628			u64 found_start;3629 3630			/*3631			 * First iteration, @start matches @offset and it's3632			 * within the hole.3633			 */3634			if (start == offset)3635				search_start = offset;3636 3637			found = find_desired_extent_in_hole(inode, whence,3638							    delalloc_cached_state,3639							    search_start,3640							    key.offset - 1,3641							    &found_start);3642			if (found) {3643				start = found_start;3644				break;3645			}3646			/*3647			 * Didn't find data or a hole (due to delalloc) in the3648			 * implicit hole range, so need to analyze the extent.3649			 */3650		}3651 3652		extent = btrfs_item_ptr(leaf, path->slots[0],3653					struct btrfs_file_extent_item);3654		type = btrfs_file_extent_type(leaf, extent);3655 3656		/*3657		 * Can't access the extent's disk_bytenr field if this is an3658		 * inline extent, since at that offset, it's where the extent3659		 * data starts.3660		 */3661		if (type == BTRFS_FILE_EXTENT_PREALLOC ||3662		    (type == BTRFS_FILE_EXTENT_REG &&3663		     btrfs_file_extent_disk_bytenr(leaf, extent) == 0)) {3664			/*3665			 * Explicit hole or prealloc extent, search for delalloc.3666			 * A prealloc extent is treated like a hole.3667			 */3668			u64 search_start = key.offset;3669			u64 found_start;3670 3671			/*3672			 * First iteration, @start matches @offset and it's3673			 * within the hole.3674			 */3675			if (start == offset)3676				search_start = offset;3677 3678			found = find_desired_extent_in_hole(inode, whence,3679							    delalloc_cached_state,3680							    search_start,3681							    extent_end - 1,3682							    &found_start);3683			if (found) {3684				start = found_start;3685				break;3686			}3687			/*3688			 * Didn't find data or a hole (due to delalloc) in the3689			 * implicit hole range, so need to analyze the next3690			 * extent item.3691			 */3692		} else {3693			/*3694			 * Found a regular or inline extent.3695			 * If we are seeking for data, adjust the start offset3696			 * and stop, we're done.3697			 */3698			if (whence == SEEK_DATA) {3699				start = max_t(u64, key.offset, offset);3700				found = true;3701				break;3702			}3703			/*3704			 * Else, we are seeking for a hole, check the next file3705			 * extent item.3706			 */3707		}3708 3709		start = extent_end;3710		last_extent_end = extent_end;3711		path->slots[0]++;3712		if (fatal_signal_pending(current)) {3713			ret = -EINTR;3714			goto out;3715		}3716		cond_resched();3717	}3718 3719	/* We have an implicit hole from the last extent found up to i_size. */3720	if (!found && start < i_size) {3721		found = find_desired_extent_in_hole(inode, whence,3722						    delalloc_cached_state, start,3723						    i_size - 1, &start);3724		if (!found)3725			start = i_size;3726	}3727 3728out:3729	unlock_extent(&inode->io_tree, lockstart, lockend, &cached_state);3730	btrfs_free_path(path);3731 3732	if (ret < 0)3733		return ret;3734 3735	if (whence == SEEK_DATA && start >= i_size)3736		return -ENXIO;3737 3738	return min_t(loff_t, start, i_size);3739}3740 3741static loff_t btrfs_file_llseek(struct file *file, loff_t offset, int whence)3742{3743	struct inode *inode = file->f_mapping->host;3744 3745	switch (whence) {3746	default:3747		return generic_file_llseek(file, offset, whence);3748	case SEEK_DATA:3749	case SEEK_HOLE:3750		btrfs_inode_lock(BTRFS_I(inode), BTRFS_ILOCK_SHARED);3751		offset = find_desired_extent(file, offset, whence);3752		btrfs_inode_unlock(BTRFS_I(inode), BTRFS_ILOCK_SHARED);3753		break;3754	}3755 3756	if (offset < 0)3757		return offset;3758 3759	return vfs_setpos(file, offset, inode->i_sb->s_maxbytes);3760}3761 3762static int btrfs_file_open(struct inode *inode, struct file *filp)3763{3764	int ret;3765 3766	filp->f_mode |= FMODE_NOWAIT | FMODE_CAN_ODIRECT;3767 3768	ret = fsverity_file_open(inode, filp);3769	if (ret)3770		return ret;3771	return generic_file_open(inode, filp);3772}3773 3774static ssize_t btrfs_file_read_iter(struct kiocb *iocb, struct iov_iter *to)3775{3776	ssize_t ret = 0;3777 3778	if (iocb->ki_flags & IOCB_DIRECT) {3779		ret = btrfs_direct_read(iocb, to);3780		if (ret < 0 || !iov_iter_count(to) ||3781		    iocb->ki_pos >= i_size_read(file_inode(iocb->ki_filp)))3782			return ret;3783	}3784 3785	return filemap_read(iocb, to, ret);3786}3787 3788const struct file_operations btrfs_file_operations = {3789	.llseek		= btrfs_file_llseek,3790	.read_iter      = btrfs_file_read_iter,3791	.splice_read	= filemap_splice_read,3792	.write_iter	= btrfs_file_write_iter,3793	.splice_write	= iter_file_splice_write,3794	.mmap		= btrfs_file_mmap,3795	.open		= btrfs_file_open,3796	.release	= btrfs_release_file,3797	.get_unmapped_area = thp_get_unmapped_area,3798	.fsync		= btrfs_sync_file,3799	.fallocate	= btrfs_fallocate,3800	.unlocked_ioctl	= btrfs_ioctl,3801#ifdef CONFIG_COMPAT3802	.compat_ioctl	= btrfs_compat_ioctl,3803#endif3804	.remap_file_range = btrfs_remap_file_range,3805	.fop_flags	= FOP_BUFFER_RASYNC | FOP_BUFFER_WASYNC,3806};3807 3808int btrfs_fdatawrite_range(struct btrfs_inode *inode, loff_t start, loff_t end)3809{3810	struct address_space *mapping = inode->vfs_inode.i_mapping;3811	int ret;3812 3813	/*3814	 * So with compression we will find and lock a dirty page and clear the3815	 * first one as dirty, setup an async extent, and immediately return3816	 * with the entire range locked but with nobody actually marked with3817	 * writeback.  So we can't just filemap_write_and_wait_range() and3818	 * expect it to work since it will just kick off a thread to do the3819	 * actual work.  So we need to call filemap_fdatawrite_range _again_3820	 * since it will wait on the page lock, which won't be unlocked until3821	 * after the pages have been marked as writeback and so we're good to go3822	 * from there.  We have to do this otherwise we'll miss the ordered3823	 * extents and that results in badness.  Please Josef, do not think you3824	 * know better and pull this out at some point in the future, it is3825	 * right and you are wrong.3826	 */3827	ret = filemap_fdatawrite_range(mapping, start, end);3828	if (!ret && test_bit(BTRFS_INODE_HAS_ASYNC_EXTENT, &inode->runtime_flags))3829		ret = filemap_fdatawrite_range(mapping, start, end);3830 3831	return ret;3832}3833