Linux Audio

Check our new training course

Yocto distribution development and maintenance

Need a Yocto distribution for your embedded project?
Loading...
Note: File does not exist in v4.6.
   1// SPDX-License-Identifier: GPL-2.0
   2/*
   3 *
   4 * Copyright (C) 2019-2021 Paragon Software GmbH, All rights reserved.
   5 *
   6 */
   7
   8#include <linux/buffer_head.h>
   9#include <linux/fs.h>
  10#include <linux/mpage.h>
  11#include <linux/namei.h>
  12#include <linux/nls.h>
  13#include <linux/uio.h>
  14#include <linux/writeback.h>
  15
  16#include "debug.h"
  17#include "ntfs.h"
  18#include "ntfs_fs.h"
  19
  20/*
  21 * ntfs_read_mft - Read record and parses MFT.
  22 */
  23static struct inode *ntfs_read_mft(struct inode *inode,
  24				   const struct cpu_str *name,
  25				   const struct MFT_REF *ref)
  26{
  27	int err = 0;
  28	struct ntfs_inode *ni = ntfs_i(inode);
  29	struct super_block *sb = inode->i_sb;
  30	struct ntfs_sb_info *sbi = sb->s_fs_info;
  31	mode_t mode = 0;
  32	struct ATTR_STD_INFO5 *std5 = NULL;
  33	struct ATTR_LIST_ENTRY *le;
  34	struct ATTRIB *attr;
  35	bool is_match = false;
  36	bool is_root = false;
  37	bool is_dir;
  38	unsigned long ino = inode->i_ino;
  39	u32 rp_fa = 0, asize, t32;
  40	u16 roff, rsize, names = 0;
  41	const struct ATTR_FILE_NAME *fname = NULL;
  42	const struct INDEX_ROOT *root;
  43	struct REPARSE_DATA_BUFFER rp; // 0x18 bytes
  44	u64 t64;
  45	struct MFT_REC *rec;
  46	struct runs_tree *run;
  47
  48	inode->i_op = NULL;
  49	/* Setup 'uid' and 'gid' */
  50	inode->i_uid = sbi->options->fs_uid;
  51	inode->i_gid = sbi->options->fs_gid;
  52
  53	err = mi_init(&ni->mi, sbi, ino);
  54	if (err)
  55		goto out;
  56
  57	if (!sbi->mft.ni && ino == MFT_REC_MFT && !sb->s_root) {
  58		t64 = sbi->mft.lbo >> sbi->cluster_bits;
  59		t32 = bytes_to_cluster(sbi, MFT_REC_VOL * sbi->record_size);
  60		sbi->mft.ni = ni;
  61		init_rwsem(&ni->file.run_lock);
  62
  63		if (!run_add_entry(&ni->file.run, 0, t64, t32, true)) {
  64			err = -ENOMEM;
  65			goto out;
  66		}
  67	}
  68
  69	err = mi_read(&ni->mi, ino == MFT_REC_MFT);
  70
  71	if (err)
  72		goto out;
  73
  74	rec = ni->mi.mrec;
  75
  76	if (sbi->flags & NTFS_FLAGS_LOG_REPLAYING) {
  77		;
  78	} else if (ref->seq != rec->seq) {
  79		err = -EINVAL;
  80		ntfs_err(sb, "MFT: r=%lx, expect seq=%x instead of %x!", ino,
  81			 le16_to_cpu(ref->seq), le16_to_cpu(rec->seq));
  82		goto out;
  83	} else if (!is_rec_inuse(rec)) {
  84		err = -ESTALE;
  85		ntfs_err(sb, "Inode r=%x is not in use!", (u32)ino);
  86		goto out;
  87	}
  88
  89	if (le32_to_cpu(rec->total) != sbi->record_size) {
  90		/* Bad inode? */
  91		err = -EINVAL;
  92		goto out;
  93	}
  94
  95	if (!is_rec_base(rec)) {
  96		err = -EINVAL;
  97		goto out;
  98	}
  99
 100	/* Record should contain $I30 root. */
 101	is_dir = rec->flags & RECORD_FLAG_DIR;
 102
 103	inode->i_generation = le16_to_cpu(rec->seq);
 104
 105	/* Enumerate all struct Attributes MFT. */
 106	le = NULL;
 107	attr = NULL;
 108
 109	/*
 110	 * To reduce tab pressure use goto instead of
 111	 * while( (attr = ni_enum_attr_ex(ni, attr, &le, NULL) ))
 112	 */
 113next_attr:
 114	run = NULL;
 115	err = -EINVAL;
 116	attr = ni_enum_attr_ex(ni, attr, &le, NULL);
 117	if (!attr)
 118		goto end_enum;
 119
 120	if (le && le->vcn) {
 121		/* This is non primary attribute segment. Ignore if not MFT. */
 122		if (ino != MFT_REC_MFT || attr->type != ATTR_DATA)
 123			goto next_attr;
 124
 125		run = &ni->file.run;
 126		asize = le32_to_cpu(attr->size);
 127		goto attr_unpack_run;
 128	}
 129
 130	roff = attr->non_res ? 0 : le16_to_cpu(attr->res.data_off);
 131	rsize = attr->non_res ? 0 : le32_to_cpu(attr->res.data_size);
 132	asize = le32_to_cpu(attr->size);
 133
 134	if (le16_to_cpu(attr->name_off) + attr->name_len > asize)
 135		goto out;
 136
 137	if (attr->non_res) {
 138		t64 = le64_to_cpu(attr->nres.alloc_size);
 139		if (le64_to_cpu(attr->nres.data_size) > t64 ||
 140		    le64_to_cpu(attr->nres.valid_size) > t64)
 141			goto out;
 142	}
 143
 144	switch (attr->type) {
 145	case ATTR_STD:
 146		if (attr->non_res ||
 147		    asize < sizeof(struct ATTR_STD_INFO) + roff ||
 148		    rsize < sizeof(struct ATTR_STD_INFO))
 149			goto out;
 150
 151		if (std5)
 152			goto next_attr;
 153
 154		std5 = Add2Ptr(attr, roff);
 155
 156#ifdef STATX_BTIME
 157		nt2kernel(std5->cr_time, &ni->i_crtime);
 158#endif
 159		nt2kernel(std5->a_time, &inode->i_atime);
 160		nt2kernel(std5->c_time, &inode->i_ctime);
 161		nt2kernel(std5->m_time, &inode->i_mtime);
 162
 163		ni->std_fa = std5->fa;
 164
 165		if (asize >= sizeof(struct ATTR_STD_INFO5) + roff &&
 166		    rsize >= sizeof(struct ATTR_STD_INFO5))
 167			ni->std_security_id = std5->security_id;
 168		goto next_attr;
 169
 170	case ATTR_LIST:
 171		if (attr->name_len || le || ino == MFT_REC_LOG)
 172			goto out;
 173
 174		err = ntfs_load_attr_list(ni, attr);
 175		if (err)
 176			goto out;
 177
 178		le = NULL;
 179		attr = NULL;
 180		goto next_attr;
 181
 182	case ATTR_NAME:
 183		if (attr->non_res || asize < SIZEOF_ATTRIBUTE_FILENAME + roff ||
 184		    rsize < SIZEOF_ATTRIBUTE_FILENAME)
 185			goto out;
 186
 187		fname = Add2Ptr(attr, roff);
 188		if (fname->type == FILE_NAME_DOS)
 189			goto next_attr;
 190
 191		names += 1;
 192		if (name && name->len == fname->name_len &&
 193		    !ntfs_cmp_names_cpu(name, (struct le_str *)&fname->name_len,
 194					NULL, false))
 195			is_match = true;
 196
 197		goto next_attr;
 198
 199	case ATTR_DATA:
 200		if (is_dir) {
 201			/* Ignore data attribute in dir record. */
 202			goto next_attr;
 203		}
 204
 205		if (ino == MFT_REC_BADCLUST && !attr->non_res)
 206			goto next_attr;
 207
 208		if (attr->name_len &&
 209		    ((ino != MFT_REC_BADCLUST || !attr->non_res ||
 210		      attr->name_len != ARRAY_SIZE(BAD_NAME) ||
 211		      memcmp(attr_name(attr), BAD_NAME, sizeof(BAD_NAME))) &&
 212		     (ino != MFT_REC_SECURE || !attr->non_res ||
 213		      attr->name_len != ARRAY_SIZE(SDS_NAME) ||
 214		      memcmp(attr_name(attr), SDS_NAME, sizeof(SDS_NAME))))) {
 215			/* File contains stream attribute. Ignore it. */
 216			goto next_attr;
 217		}
 218
 219		if (is_attr_sparsed(attr))
 220			ni->std_fa |= FILE_ATTRIBUTE_SPARSE_FILE;
 221		else
 222			ni->std_fa &= ~FILE_ATTRIBUTE_SPARSE_FILE;
 223
 224		if (is_attr_compressed(attr))
 225			ni->std_fa |= FILE_ATTRIBUTE_COMPRESSED;
 226		else
 227			ni->std_fa &= ~FILE_ATTRIBUTE_COMPRESSED;
 228
 229		if (is_attr_encrypted(attr))
 230			ni->std_fa |= FILE_ATTRIBUTE_ENCRYPTED;
 231		else
 232			ni->std_fa &= ~FILE_ATTRIBUTE_ENCRYPTED;
 233
 234		if (!attr->non_res) {
 235			ni->i_valid = inode->i_size = rsize;
 236			inode_set_bytes(inode, rsize);
 237		}
 238
 239		mode = S_IFREG | (0777 & sbi->options->fs_fmask_inv);
 240
 241		if (!attr->non_res) {
 242			ni->ni_flags |= NI_FLAG_RESIDENT;
 243			goto next_attr;
 244		}
 245
 246		inode_set_bytes(inode, attr_ondisk_size(attr));
 247
 248		ni->i_valid = le64_to_cpu(attr->nres.valid_size);
 249		inode->i_size = le64_to_cpu(attr->nres.data_size);
 250		if (!attr->nres.alloc_size)
 251			goto next_attr;
 252
 253		run = ino == MFT_REC_BITMAP ? &sbi->used.bitmap.run
 254					    : &ni->file.run;
 255		break;
 256
 257	case ATTR_ROOT:
 258		if (attr->non_res)
 259			goto out;
 260
 261		root = Add2Ptr(attr, roff);
 262		is_root = true;
 263
 264		if (attr->name_len != ARRAY_SIZE(I30_NAME) ||
 265		    memcmp(attr_name(attr), I30_NAME, sizeof(I30_NAME)))
 266			goto next_attr;
 267
 268		if (root->type != ATTR_NAME ||
 269		    root->rule != NTFS_COLLATION_TYPE_FILENAME)
 270			goto out;
 271
 272		if (!is_dir)
 273			goto next_attr;
 274
 275		ni->ni_flags |= NI_FLAG_DIR;
 276
 277		err = indx_init(&ni->dir, sbi, attr, INDEX_MUTEX_I30);
 278		if (err)
 279			goto out;
 280
 281		mode = sb->s_root
 282			       ? (S_IFDIR | (0777 & sbi->options->fs_dmask_inv))
 283			       : (S_IFDIR | 0777);
 284		goto next_attr;
 285
 286	case ATTR_ALLOC:
 287		if (!is_root || attr->name_len != ARRAY_SIZE(I30_NAME) ||
 288		    memcmp(attr_name(attr), I30_NAME, sizeof(I30_NAME)))
 289			goto next_attr;
 290
 291		inode->i_size = le64_to_cpu(attr->nres.data_size);
 292		ni->i_valid = le64_to_cpu(attr->nres.valid_size);
 293		inode_set_bytes(inode, le64_to_cpu(attr->nres.alloc_size));
 294
 295		run = &ni->dir.alloc_run;
 296		break;
 297
 298	case ATTR_BITMAP:
 299		if (ino == MFT_REC_MFT) {
 300			if (!attr->non_res)
 301				goto out;
 302#ifndef CONFIG_NTFS3_64BIT_CLUSTER
 303			/* 0x20000000 = 2^32 / 8 */
 304			if (le64_to_cpu(attr->nres.alloc_size) >= 0x20000000)
 305				goto out;
 306#endif
 307			run = &sbi->mft.bitmap.run;
 308			break;
 309		} else if (is_dir && attr->name_len == ARRAY_SIZE(I30_NAME) &&
 310			   !memcmp(attr_name(attr), I30_NAME,
 311				   sizeof(I30_NAME)) &&
 312			   attr->non_res) {
 313			run = &ni->dir.bitmap_run;
 314			break;
 315		}
 316		goto next_attr;
 317
 318	case ATTR_REPARSE:
 319		if (attr->name_len)
 320			goto next_attr;
 321
 322		rp_fa = ni_parse_reparse(ni, attr, &rp);
 323		switch (rp_fa) {
 324		case REPARSE_LINK:
 325			/*
 326			 * Normal symlink.
 327			 * Assume one unicode symbol == one utf8.
 328			 */
 329			inode->i_size = le16_to_cpu(rp.SymbolicLinkReparseBuffer
 330							    .PrintNameLength) /
 331					sizeof(u16);
 332
 333			ni->i_valid = inode->i_size;
 334
 335			/* Clear directory bit. */
 336			if (ni->ni_flags & NI_FLAG_DIR) {
 337				indx_clear(&ni->dir);
 338				memset(&ni->dir, 0, sizeof(ni->dir));
 339				ni->ni_flags &= ~NI_FLAG_DIR;
 340			} else {
 341				run_close(&ni->file.run);
 342			}
 343			mode = S_IFLNK | 0777;
 344			is_dir = false;
 345			if (attr->non_res) {
 346				run = &ni->file.run;
 347				goto attr_unpack_run; // Double break.
 348			}
 349			break;
 350
 351		case REPARSE_COMPRESSED:
 352			break;
 353
 354		case REPARSE_DEDUPLICATED:
 355			break;
 356		}
 357		goto next_attr;
 358
 359	case ATTR_EA_INFO:
 360		if (!attr->name_len &&
 361		    resident_data_ex(attr, sizeof(struct EA_INFO))) {
 362			ni->ni_flags |= NI_FLAG_EA;
 363			/*
 364			 * ntfs_get_wsl_perm updates inode->i_uid, inode->i_gid, inode->i_mode
 365			 */
 366			inode->i_mode = mode;
 367			ntfs_get_wsl_perm(inode);
 368			mode = inode->i_mode;
 369		}
 370		goto next_attr;
 371
 372	default:
 373		goto next_attr;
 374	}
 375
 376attr_unpack_run:
 377	roff = le16_to_cpu(attr->nres.run_off);
 378
 379	if (roff > asize) {
 380		err = -EINVAL;
 381		goto out;
 382	}
 383
 384	t64 = le64_to_cpu(attr->nres.svcn);
 385
 386	err = run_unpack_ex(run, sbi, ino, t64, le64_to_cpu(attr->nres.evcn),
 387			    t64, Add2Ptr(attr, roff), asize - roff);
 388	if (err < 0)
 389		goto out;
 390	err = 0;
 391	goto next_attr;
 392
 393end_enum:
 394
 395	if (!std5)
 396		goto out;
 397
 398	if (!is_match && name) {
 399		/* Reuse rec as buffer for ascii name. */
 400		err = -ENOENT;
 401		goto out;
 402	}
 403
 404	if (std5->fa & FILE_ATTRIBUTE_READONLY)
 405		mode &= ~0222;
 406
 407	if (!names) {
 408		err = -EINVAL;
 409		goto out;
 410	}
 411
 412	if (names != le16_to_cpu(rec->hard_links)) {
 413		/* Correct minor error on the fly. Do not mark inode as dirty. */
 414		rec->hard_links = cpu_to_le16(names);
 415		ni->mi.dirty = true;
 416	}
 417
 418	set_nlink(inode, names);
 419
 420	if (S_ISDIR(mode)) {
 421		ni->std_fa |= FILE_ATTRIBUTE_DIRECTORY;
 422
 423		/*
 424		 * Dot and dot-dot should be included in count but was not
 425		 * included in enumeration.
 426		 * Usually a hard links to directories are disabled.
 427		 */
 428		inode->i_op = &ntfs_dir_inode_operations;
 429		inode->i_fop = &ntfs_dir_operations;
 430		ni->i_valid = 0;
 431	} else if (S_ISLNK(mode)) {
 432		ni->std_fa &= ~FILE_ATTRIBUTE_DIRECTORY;
 433		inode->i_op = &ntfs_link_inode_operations;
 434		inode->i_fop = NULL;
 435		inode_nohighmem(inode);
 436	} else if (S_ISREG(mode)) {
 437		ni->std_fa &= ~FILE_ATTRIBUTE_DIRECTORY;
 438		inode->i_op = &ntfs_file_inode_operations;
 439		inode->i_fop = &ntfs_file_operations;
 440		inode->i_mapping->a_ops =
 441			is_compressed(ni) ? &ntfs_aops_cmpr : &ntfs_aops;
 442		if (ino != MFT_REC_MFT)
 443			init_rwsem(&ni->file.run_lock);
 444	} else if (S_ISCHR(mode) || S_ISBLK(mode) || S_ISFIFO(mode) ||
 445		   S_ISSOCK(mode)) {
 446		inode->i_op = &ntfs_special_inode_operations;
 447		init_special_inode(inode, mode, inode->i_rdev);
 448	} else if (fname && fname->home.low == cpu_to_le32(MFT_REC_EXTEND) &&
 449		   fname->home.seq == cpu_to_le16(MFT_REC_EXTEND)) {
 450		/* Records in $Extend are not a files or general directories. */
 451		inode->i_op = &ntfs_file_inode_operations;
 452	} else {
 453		err = -EINVAL;
 454		goto out;
 455	}
 456
 457	if ((sbi->options->sys_immutable &&
 458	     (std5->fa & FILE_ATTRIBUTE_SYSTEM)) &&
 459	    !S_ISFIFO(mode) && !S_ISSOCK(mode) && !S_ISLNK(mode)) {
 460		inode->i_flags |= S_IMMUTABLE;
 461	} else {
 462		inode->i_flags &= ~S_IMMUTABLE;
 463	}
 464
 465	inode->i_mode = mode;
 466	if (!(ni->ni_flags & NI_FLAG_EA)) {
 467		/* If no xattr then no security (stored in xattr). */
 468		inode->i_flags |= S_NOSEC;
 469	}
 470
 471	if (ino == MFT_REC_MFT && !sb->s_root)
 472		sbi->mft.ni = NULL;
 473
 474	unlock_new_inode(inode);
 475
 476	return inode;
 477
 478out:
 479	if (ino == MFT_REC_MFT && !sb->s_root)
 480		sbi->mft.ni = NULL;
 481
 482	iget_failed(inode);
 483	return ERR_PTR(err);
 484}
 485
 486/*
 487 * ntfs_test_inode
 488 *
 489 * Return: 1 if match.
 490 */
 491static int ntfs_test_inode(struct inode *inode, void *data)
 492{
 493	struct MFT_REF *ref = data;
 494
 495	return ino_get(ref) == inode->i_ino;
 496}
 497
 498static int ntfs_set_inode(struct inode *inode, void *data)
 499{
 500	const struct MFT_REF *ref = data;
 501
 502	inode->i_ino = ino_get(ref);
 503	return 0;
 504}
 505
 506struct inode *ntfs_iget5(struct super_block *sb, const struct MFT_REF *ref,
 507			 const struct cpu_str *name)
 508{
 509	struct inode *inode;
 510
 511	inode = iget5_locked(sb, ino_get(ref), ntfs_test_inode, ntfs_set_inode,
 512			     (void *)ref);
 513	if (unlikely(!inode))
 514		return ERR_PTR(-ENOMEM);
 515
 516	/* If this is a freshly allocated inode, need to read it now. */
 517	if (inode->i_state & I_NEW)
 518		inode = ntfs_read_mft(inode, name, ref);
 519	else if (ref->seq != ntfs_i(inode)->mi.mrec->seq) {
 520		/* Inode overlaps? */
 521		_ntfs_bad_inode(inode);
 522	}
 523
 524	if (IS_ERR(inode) && name)
 525		ntfs_set_state(sb->s_fs_info, NTFS_DIRTY_ERROR);
 526
 527	return inode;
 528}
 529
 530enum get_block_ctx {
 531	GET_BLOCK_GENERAL = 0,
 532	GET_BLOCK_WRITE_BEGIN = 1,
 533	GET_BLOCK_DIRECT_IO_R = 2,
 534	GET_BLOCK_DIRECT_IO_W = 3,
 535	GET_BLOCK_BMAP = 4,
 536};
 537
 538static noinline int ntfs_get_block_vbo(struct inode *inode, u64 vbo,
 539				       struct buffer_head *bh, int create,
 540				       enum get_block_ctx ctx)
 541{
 542	struct super_block *sb = inode->i_sb;
 543	struct ntfs_sb_info *sbi = sb->s_fs_info;
 544	struct ntfs_inode *ni = ntfs_i(inode);
 545	struct page *page = bh->b_page;
 546	u8 cluster_bits = sbi->cluster_bits;
 547	u32 block_size = sb->s_blocksize;
 548	u64 bytes, lbo, valid;
 549	u32 off;
 550	int err;
 551	CLST vcn, lcn, len;
 552	bool new;
 553
 554	/* Clear previous state. */
 555	clear_buffer_new(bh);
 556	clear_buffer_uptodate(bh);
 557
 558	if (is_resident(ni)) {
 559		ni_lock(ni);
 560		err = attr_data_read_resident(ni, page);
 561		ni_unlock(ni);
 562
 563		if (!err)
 564			set_buffer_uptodate(bh);
 565		bh->b_size = block_size;
 566		return err;
 567	}
 568
 569	vcn = vbo >> cluster_bits;
 570	off = vbo & sbi->cluster_mask;
 571	new = false;
 572
 573	err = attr_data_get_block(ni, vcn, 1, &lcn, &len, create ? &new : NULL,
 574				  create && sbi->cluster_size > PAGE_SIZE);
 575	if (err)
 576		goto out;
 577
 578	if (!len)
 579		return 0;
 580
 581	bytes = ((u64)len << cluster_bits) - off;
 582
 583	if (lcn == SPARSE_LCN) {
 584		if (!create) {
 585			if (bh->b_size > bytes)
 586				bh->b_size = bytes;
 587			return 0;
 588		}
 589		WARN_ON(1);
 590	}
 591
 592	if (new)
 593		set_buffer_new(bh);
 594
 595	lbo = ((u64)lcn << cluster_bits) + off;
 596
 597	set_buffer_mapped(bh);
 598	bh->b_bdev = sb->s_bdev;
 599	bh->b_blocknr = lbo >> sb->s_blocksize_bits;
 600
 601	valid = ni->i_valid;
 602
 603	if (ctx == GET_BLOCK_DIRECT_IO_W) {
 604		/* ntfs_direct_IO will update ni->i_valid. */
 605		if (vbo >= valid)
 606			set_buffer_new(bh);
 607	} else if (create) {
 608		/* Normal write. */
 609		if (bytes > bh->b_size)
 610			bytes = bh->b_size;
 611
 612		if (vbo >= valid)
 613			set_buffer_new(bh);
 614
 615		if (vbo + bytes > valid) {
 616			ni->i_valid = vbo + bytes;
 617			mark_inode_dirty(inode);
 618		}
 619	} else if (vbo >= valid) {
 620		/* Read out of valid data. */
 621		clear_buffer_mapped(bh);
 622	} else if (vbo + bytes <= valid) {
 623		/* Normal read. */
 624	} else if (vbo + block_size <= valid) {
 625		/* Normal short read. */
 626		bytes = block_size;
 627	} else {
 628		/*
 629		 * Read across valid size: vbo < valid && valid < vbo + block_size
 630		 */
 631		bytes = block_size;
 632
 633		if (page) {
 634			u32 voff = valid - vbo;
 635
 636			bh->b_size = block_size;
 637			off = vbo & (PAGE_SIZE - 1);
 638			set_bh_page(bh, page, off);
 639			err = bh_read(bh, 0);
 640			if (err < 0)
 641				goto out;
 642			zero_user_segment(page, off + voff, off + block_size);
 643		}
 644	}
 645
 646	if (bh->b_size > bytes)
 647		bh->b_size = bytes;
 648
 649#ifndef __LP64__
 650	if (ctx == GET_BLOCK_DIRECT_IO_W || ctx == GET_BLOCK_DIRECT_IO_R) {
 651		static_assert(sizeof(size_t) < sizeof(loff_t));
 652		if (bytes > 0x40000000u)
 653			bh->b_size = 0x40000000u;
 654	}
 655#endif
 656
 657	return 0;
 658
 659out:
 660	return err;
 661}
 662
 663int ntfs_get_block(struct inode *inode, sector_t vbn,
 664		   struct buffer_head *bh_result, int create)
 665{
 666	return ntfs_get_block_vbo(inode, (u64)vbn << inode->i_blkbits,
 667				  bh_result, create, GET_BLOCK_GENERAL);
 668}
 669
 670static int ntfs_get_block_bmap(struct inode *inode, sector_t vsn,
 671			       struct buffer_head *bh_result, int create)
 672{
 673	return ntfs_get_block_vbo(inode,
 674				  (u64)vsn << inode->i_sb->s_blocksize_bits,
 675				  bh_result, create, GET_BLOCK_BMAP);
 676}
 677
 678static sector_t ntfs_bmap(struct address_space *mapping, sector_t block)
 679{
 680	return generic_block_bmap(mapping, block, ntfs_get_block_bmap);
 681}
 682
 683static int ntfs_read_folio(struct file *file, struct folio *folio)
 684{
 685	struct page *page = &folio->page;
 686	int err;
 687	struct address_space *mapping = page->mapping;
 688	struct inode *inode = mapping->host;
 689	struct ntfs_inode *ni = ntfs_i(inode);
 690
 691	if (is_resident(ni)) {
 692		ni_lock(ni);
 693		err = attr_data_read_resident(ni, page);
 694		ni_unlock(ni);
 695		if (err != E_NTFS_NONRESIDENT) {
 696			unlock_page(page);
 697			return err;
 698		}
 699	}
 700
 701	if (is_compressed(ni)) {
 702		ni_lock(ni);
 703		err = ni_readpage_cmpr(ni, page);
 704		ni_unlock(ni);
 705		return err;
 706	}
 707
 708	/* Normal + sparse files. */
 709	return mpage_read_folio(folio, ntfs_get_block);
 710}
 711
 712static void ntfs_readahead(struct readahead_control *rac)
 713{
 714	struct address_space *mapping = rac->mapping;
 715	struct inode *inode = mapping->host;
 716	struct ntfs_inode *ni = ntfs_i(inode);
 717	u64 valid;
 718	loff_t pos;
 719
 720	if (is_resident(ni)) {
 721		/* No readahead for resident. */
 722		return;
 723	}
 724
 725	if (is_compressed(ni)) {
 726		/* No readahead for compressed. */
 727		return;
 728	}
 729
 730	valid = ni->i_valid;
 731	pos = readahead_pos(rac);
 732
 733	if (valid < i_size_read(inode) && pos <= valid &&
 734	    valid < pos + readahead_length(rac)) {
 735		/* Range cross 'valid'. Read it page by page. */
 736		return;
 737	}
 738
 739	mpage_readahead(rac, ntfs_get_block);
 740}
 741
 742static int ntfs_get_block_direct_IO_R(struct inode *inode, sector_t iblock,
 743				      struct buffer_head *bh_result, int create)
 744{
 745	return ntfs_get_block_vbo(inode, (u64)iblock << inode->i_blkbits,
 746				  bh_result, create, GET_BLOCK_DIRECT_IO_R);
 747}
 748
 749static int ntfs_get_block_direct_IO_W(struct inode *inode, sector_t iblock,
 750				      struct buffer_head *bh_result, int create)
 751{
 752	return ntfs_get_block_vbo(inode, (u64)iblock << inode->i_blkbits,
 753				  bh_result, create, GET_BLOCK_DIRECT_IO_W);
 754}
 755
 756static ssize_t ntfs_direct_IO(struct kiocb *iocb, struct iov_iter *iter)
 757{
 758	struct file *file = iocb->ki_filp;
 759	struct address_space *mapping = file->f_mapping;
 760	struct inode *inode = mapping->host;
 761	struct ntfs_inode *ni = ntfs_i(inode);
 762	loff_t vbo = iocb->ki_pos;
 763	loff_t end;
 764	int wr = iov_iter_rw(iter) & WRITE;
 765	size_t iter_count = iov_iter_count(iter);
 766	loff_t valid;
 767	ssize_t ret;
 768
 769	if (is_resident(ni)) {
 770		/* Switch to buffered write. */
 771		ret = 0;
 772		goto out;
 773	}
 774
 775	ret = blockdev_direct_IO(iocb, inode, iter,
 776				 wr ? ntfs_get_block_direct_IO_W
 777				    : ntfs_get_block_direct_IO_R);
 778
 779	if (ret > 0)
 780		end = vbo + ret;
 781	else if (wr && ret == -EIOCBQUEUED)
 782		end = vbo + iter_count;
 783	else
 784		goto out;
 785
 786	valid = ni->i_valid;
 787	if (wr) {
 788		if (end > valid && !S_ISBLK(inode->i_mode)) {
 789			ni->i_valid = end;
 790			mark_inode_dirty(inode);
 791		}
 792	} else if (vbo < valid && valid < end) {
 793		/* Fix page. */
 794		iov_iter_revert(iter, end - valid);
 795		iov_iter_zero(end - valid, iter);
 796	}
 797
 798out:
 799	return ret;
 800}
 801
 802int ntfs_set_size(struct inode *inode, u64 new_size)
 803{
 804	struct super_block *sb = inode->i_sb;
 805	struct ntfs_sb_info *sbi = sb->s_fs_info;
 806	struct ntfs_inode *ni = ntfs_i(inode);
 807	int err;
 808
 809	/* Check for maximum file size. */
 810	if (is_sparsed(ni) || is_compressed(ni)) {
 811		if (new_size > sbi->maxbytes_sparse) {
 812			err = -EFBIG;
 813			goto out;
 814		}
 815	} else if (new_size > sbi->maxbytes) {
 816		err = -EFBIG;
 817		goto out;
 818	}
 819
 820	ni_lock(ni);
 821	down_write(&ni->file.run_lock);
 822
 823	err = attr_set_size(ni, ATTR_DATA, NULL, 0, &ni->file.run, new_size,
 824			    &ni->i_valid, true, NULL);
 825
 826	up_write(&ni->file.run_lock);
 827	ni_unlock(ni);
 828
 829	mark_inode_dirty(inode);
 830
 831out:
 832	return err;
 833}
 834
 835static int ntfs_writepage(struct page *page, struct writeback_control *wbc)
 836{
 837	struct address_space *mapping = page->mapping;
 838	struct inode *inode = mapping->host;
 839	struct ntfs_inode *ni = ntfs_i(inode);
 840	int err;
 841
 842	if (is_resident(ni)) {
 843		ni_lock(ni);
 844		err = attr_data_write_resident(ni, page);
 845		ni_unlock(ni);
 846		if (err != E_NTFS_NONRESIDENT) {
 847			unlock_page(page);
 848			return err;
 849		}
 850	}
 851
 852	return block_write_full_page(page, ntfs_get_block, wbc);
 853}
 854
 855static int ntfs_writepages(struct address_space *mapping,
 856			   struct writeback_control *wbc)
 857{
 858	/* Redirect call to 'ntfs_writepage' for resident files. */
 859	if (is_resident(ntfs_i(mapping->host)))
 860		return generic_writepages(mapping, wbc);
 861	return mpage_writepages(mapping, wbc, ntfs_get_block);
 862}
 863
 864static int ntfs_get_block_write_begin(struct inode *inode, sector_t vbn,
 865				      struct buffer_head *bh_result, int create)
 866{
 867	return ntfs_get_block_vbo(inode, (u64)vbn << inode->i_blkbits,
 868				  bh_result, create, GET_BLOCK_WRITE_BEGIN);
 869}
 870
 871int ntfs_write_begin(struct file *file, struct address_space *mapping,
 872		     loff_t pos, u32 len, struct page **pagep, void **fsdata)
 873{
 874	int err;
 875	struct inode *inode = mapping->host;
 876	struct ntfs_inode *ni = ntfs_i(inode);
 877
 878	*pagep = NULL;
 879	if (is_resident(ni)) {
 880		struct page *page = grab_cache_page_write_begin(
 881			mapping, pos >> PAGE_SHIFT);
 882
 883		if (!page) {
 884			err = -ENOMEM;
 885			goto out;
 886		}
 887
 888		ni_lock(ni);
 889		err = attr_data_read_resident(ni, page);
 890		ni_unlock(ni);
 891
 892		if (!err) {
 893			*pagep = page;
 894			goto out;
 895		}
 896		unlock_page(page);
 897		put_page(page);
 898
 899		if (err != E_NTFS_NONRESIDENT)
 900			goto out;
 901	}
 902
 903	err = block_write_begin(mapping, pos, len, pagep,
 904				ntfs_get_block_write_begin);
 905
 906out:
 907	return err;
 908}
 909
 910/*
 911 * ntfs_write_end - Address_space_operations::write_end.
 912 */
 913int ntfs_write_end(struct file *file, struct address_space *mapping,
 914		   loff_t pos, u32 len, u32 copied, struct page *page,
 915		   void *fsdata)
 916{
 917	struct inode *inode = mapping->host;
 918	struct ntfs_inode *ni = ntfs_i(inode);
 919	u64 valid = ni->i_valid;
 920	bool dirty = false;
 921	int err;
 922
 923	if (is_resident(ni)) {
 924		ni_lock(ni);
 925		err = attr_data_write_resident(ni, page);
 926		ni_unlock(ni);
 927		if (!err) {
 928			dirty = true;
 929			/* Clear any buffers in page. */
 930			if (page_has_buffers(page)) {
 931				struct buffer_head *head, *bh;
 932
 933				bh = head = page_buffers(page);
 934				do {
 935					clear_buffer_dirty(bh);
 936					clear_buffer_mapped(bh);
 937					set_buffer_uptodate(bh);
 938				} while (head != (bh = bh->b_this_page));
 939			}
 940			SetPageUptodate(page);
 941			err = copied;
 942		}
 943		unlock_page(page);
 944		put_page(page);
 945	} else {
 946		err = generic_write_end(file, mapping, pos, len, copied, page,
 947					fsdata);
 948	}
 949
 950	if (err >= 0) {
 951		if (!(ni->std_fa & FILE_ATTRIBUTE_ARCHIVE)) {
 952			inode->i_ctime = inode->i_mtime = current_time(inode);
 953			ni->std_fa |= FILE_ATTRIBUTE_ARCHIVE;
 954			dirty = true;
 955		}
 956
 957		if (valid != ni->i_valid) {
 958			/* ni->i_valid is changed in ntfs_get_block_vbo. */
 959			dirty = true;
 960		}
 961
 962		if (pos + err > inode->i_size) {
 963			inode->i_size = pos + err;
 964			dirty = true;
 965		}
 966
 967		if (dirty)
 968			mark_inode_dirty(inode);
 969	}
 970
 971	return err;
 972}
 973
 974int reset_log_file(struct inode *inode)
 975{
 976	int err;
 977	loff_t pos = 0;
 978	u32 log_size = inode->i_size;
 979	struct address_space *mapping = inode->i_mapping;
 980
 981	for (;;) {
 982		u32 len;
 983		void *kaddr;
 984		struct page *page;
 985
 986		len = pos + PAGE_SIZE > log_size ? (log_size - pos) : PAGE_SIZE;
 987
 988		err = block_write_begin(mapping, pos, len, &page,
 989					ntfs_get_block_write_begin);
 990		if (err)
 991			goto out;
 992
 993		kaddr = kmap_atomic(page);
 994		memset(kaddr, -1, len);
 995		kunmap_atomic(kaddr);
 996		flush_dcache_page(page);
 997
 998		err = block_write_end(NULL, mapping, pos, len, len, page, NULL);
 999		if (err < 0)
1000			goto out;
1001		pos += len;
1002
1003		if (pos >= log_size)
1004			break;
1005		balance_dirty_pages_ratelimited(mapping);
1006	}
1007out:
1008	mark_inode_dirty_sync(inode);
1009
1010	return err;
1011}
1012
1013int ntfs3_write_inode(struct inode *inode, struct writeback_control *wbc)
1014{
1015	return _ni_write_inode(inode, wbc->sync_mode == WB_SYNC_ALL);
1016}
1017
1018int ntfs_sync_inode(struct inode *inode)
1019{
1020	return _ni_write_inode(inode, 1);
1021}
1022
1023/*
1024 * writeback_inode - Helper function for ntfs_flush_inodes().
1025 *
1026 * This writes both the inode and the file data blocks, waiting
1027 * for in flight data blocks before the start of the call.  It
1028 * does not wait for any io started during the call.
1029 */
1030static int writeback_inode(struct inode *inode)
1031{
1032	int ret = sync_inode_metadata(inode, 0);
1033
1034	if (!ret)
1035		ret = filemap_fdatawrite(inode->i_mapping);
1036	return ret;
1037}
1038
1039/*
1040 * ntfs_flush_inodes
1041 *
1042 * Write data and metadata corresponding to i1 and i2.  The io is
1043 * started but we do not wait for any of it to finish.
1044 *
1045 * filemap_flush() is used for the block device, so if there is a dirty
1046 * page for a block already in flight, we will not wait and start the
1047 * io over again.
1048 */
1049int ntfs_flush_inodes(struct super_block *sb, struct inode *i1,
1050		      struct inode *i2)
1051{
1052	int ret = 0;
1053
1054	if (i1)
1055		ret = writeback_inode(i1);
1056	if (!ret && i2)
1057		ret = writeback_inode(i2);
1058	if (!ret)
1059		ret = sync_blockdev_nowait(sb->s_bdev);
1060	return ret;
1061}
1062
1063int inode_write_data(struct inode *inode, const void *data, size_t bytes)
1064{
1065	pgoff_t idx;
1066
1067	/* Write non resident data. */
1068	for (idx = 0; bytes; idx++) {
1069		size_t op = bytes > PAGE_SIZE ? PAGE_SIZE : bytes;
1070		struct page *page = ntfs_map_page(inode->i_mapping, idx);
1071
1072		if (IS_ERR(page))
1073			return PTR_ERR(page);
1074
1075		lock_page(page);
1076		WARN_ON(!PageUptodate(page));
1077		ClearPageUptodate(page);
1078
1079		memcpy(page_address(page), data, op);
1080
1081		flush_dcache_page(page);
1082		SetPageUptodate(page);
1083		unlock_page(page);
1084
1085		ntfs_unmap_page(page);
1086
1087		bytes -= op;
1088		data = Add2Ptr(data, PAGE_SIZE);
1089	}
1090	return 0;
1091}
1092
1093/*
1094 * ntfs_reparse_bytes
1095 *
1096 * Number of bytes for REPARSE_DATA_BUFFER(IO_REPARSE_TAG_SYMLINK)
1097 * for unicode string of @uni_len length.
1098 */
1099static inline u32 ntfs_reparse_bytes(u32 uni_len)
1100{
1101	/* Header + unicode string + decorated unicode string. */
1102	return sizeof(short) * (2 * uni_len + 4) +
1103	       offsetof(struct REPARSE_DATA_BUFFER,
1104			SymbolicLinkReparseBuffer.PathBuffer);
1105}
1106
1107static struct REPARSE_DATA_BUFFER *
1108ntfs_create_reparse_buffer(struct ntfs_sb_info *sbi, const char *symname,
1109			   u32 size, u16 *nsize)
1110{
1111	int i, err;
1112	struct REPARSE_DATA_BUFFER *rp;
1113	__le16 *rp_name;
1114	typeof(rp->SymbolicLinkReparseBuffer) *rs;
1115
1116	rp = kzalloc(ntfs_reparse_bytes(2 * size + 2), GFP_NOFS);
1117	if (!rp)
1118		return ERR_PTR(-ENOMEM);
1119
1120	rs = &rp->SymbolicLinkReparseBuffer;
1121	rp_name = rs->PathBuffer;
1122
1123	/* Convert link name to UTF-16. */
1124	err = ntfs_nls_to_utf16(sbi, symname, size,
1125				(struct cpu_str *)(rp_name - 1), 2 * size,
1126				UTF16_LITTLE_ENDIAN);
1127	if (err < 0)
1128		goto out;
1129
1130	/* err = the length of unicode name of symlink. */
1131	*nsize = ntfs_reparse_bytes(err);
1132
1133	if (*nsize > sbi->reparse.max_size) {
1134		err = -EFBIG;
1135		goto out;
1136	}
1137
1138	/* Translate Linux '/' into Windows '\'. */
1139	for (i = 0; i < err; i++) {
1140		if (rp_name[i] == cpu_to_le16('/'))
1141			rp_name[i] = cpu_to_le16('\\');
1142	}
1143
1144	rp->ReparseTag = IO_REPARSE_TAG_SYMLINK;
1145	rp->ReparseDataLength =
1146		cpu_to_le16(*nsize - offsetof(struct REPARSE_DATA_BUFFER,
1147					      SymbolicLinkReparseBuffer));
1148
1149	/* PrintName + SubstituteName. */
1150	rs->SubstituteNameOffset = cpu_to_le16(sizeof(short) * err);
1151	rs->SubstituteNameLength = cpu_to_le16(sizeof(short) * err + 8);
1152	rs->PrintNameLength = rs->SubstituteNameOffset;
1153
1154	/*
1155	 * TODO: Use relative path if possible to allow Windows to
1156	 * parse this path.
1157	 * 0-absolute path 1- relative path (SYMLINK_FLAG_RELATIVE).
1158	 */
1159	rs->Flags = 0;
1160
1161	memmove(rp_name + err + 4, rp_name, sizeof(short) * err);
1162
1163	/* Decorate SubstituteName. */
1164	rp_name += err;
1165	rp_name[0] = cpu_to_le16('\\');
1166	rp_name[1] = cpu_to_le16('?');
1167	rp_name[2] = cpu_to_le16('?');
1168	rp_name[3] = cpu_to_le16('\\');
1169
1170	return rp;
1171out:
1172	kfree(rp);
1173	return ERR_PTR(err);
1174}
1175
1176/*
1177 * ntfs_create_inode
1178 *
1179 * Helper function for:
1180 * - ntfs_create
1181 * - ntfs_mknod
1182 * - ntfs_symlink
1183 * - ntfs_mkdir
1184 * - ntfs_atomic_open
1185 * 
1186 * NOTE: if fnd != NULL (ntfs_atomic_open) then @dir is locked
1187 */
1188struct inode *ntfs_create_inode(struct user_namespace *mnt_userns,
1189				struct inode *dir, struct dentry *dentry,
1190				const struct cpu_str *uni, umode_t mode,
1191				dev_t dev, const char *symname, u32 size,
1192				struct ntfs_fnd *fnd)
1193{
1194	int err;
1195	struct super_block *sb = dir->i_sb;
1196	struct ntfs_sb_info *sbi = sb->s_fs_info;
1197	const struct qstr *name = &dentry->d_name;
1198	CLST ino = 0;
1199	struct ntfs_inode *dir_ni = ntfs_i(dir);
1200	struct ntfs_inode *ni = NULL;
1201	struct inode *inode = NULL;
1202	struct ATTRIB *attr;
1203	struct ATTR_STD_INFO5 *std5;
1204	struct ATTR_FILE_NAME *fname;
1205	struct MFT_REC *rec;
1206	u32 asize, dsize, sd_size;
1207	enum FILE_ATTRIBUTE fa;
1208	__le32 security_id = SECURITY_ID_INVALID;
1209	CLST vcn;
1210	const void *sd;
1211	u16 t16, nsize = 0, aid = 0;
1212	struct INDEX_ROOT *root, *dir_root;
1213	struct NTFS_DE *e, *new_de = NULL;
1214	struct REPARSE_DATA_BUFFER *rp = NULL;
1215	bool rp_inserted = false;
1216
1217	if (!fnd)
1218		ni_lock_dir(dir_ni);
1219
1220	dir_root = indx_get_root(&dir_ni->dir, dir_ni, NULL, NULL);
1221	if (!dir_root) {
1222		err = -EINVAL;
1223		goto out1;
1224	}
1225
1226	if (S_ISDIR(mode)) {
1227		/* Use parent's directory attributes. */
1228		fa = dir_ni->std_fa | FILE_ATTRIBUTE_DIRECTORY |
1229		     FILE_ATTRIBUTE_ARCHIVE;
1230		/*
1231		 * By default child directory inherits parent attributes.
1232		 * Root directory is hidden + system.
1233		 * Make an exception for children in root.
1234		 */
1235		if (dir->i_ino == MFT_REC_ROOT)
1236			fa &= ~(FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM);
1237	} else if (S_ISLNK(mode)) {
1238		/* It is good idea that link should be the same type (file/dir) as target */
1239		fa = FILE_ATTRIBUTE_REPARSE_POINT;
1240
1241		/*
1242		 * Linux: there are dir/file/symlink and so on.
1243		 * NTFS: symlinks are "dir + reparse" or "file + reparse"
1244		 * It is good idea to create:
1245		 * dir + reparse if 'symname' points to directory
1246		 * or
1247		 * file + reparse if 'symname' points to file
1248		 * Unfortunately kern_path hangs if symname contains 'dir'.
1249		 */
1250
1251		/*
1252		 *	struct path path;
1253		 *
1254		 *	if (!kern_path(symname, LOOKUP_FOLLOW, &path)){
1255		 *		struct inode *target = d_inode(path.dentry);
1256		 *
1257		 *		if (S_ISDIR(target->i_mode))
1258		 *			fa |= FILE_ATTRIBUTE_DIRECTORY;
1259		 *		// if ( target->i_sb == sb ){
1260		 *		//	use relative path?
1261		 *		// }
1262		 *		path_put(&path);
1263		 *	}
1264		 */
1265	} else if (S_ISREG(mode)) {
1266		if (sbi->options->sparse) {
1267			/* Sparsed regular file, cause option 'sparse'. */
1268			fa = FILE_ATTRIBUTE_SPARSE_FILE |
1269			     FILE_ATTRIBUTE_ARCHIVE;
1270		} else if (dir_ni->std_fa & FILE_ATTRIBUTE_COMPRESSED) {
1271			/* Compressed regular file, if parent is compressed. */
1272			fa = FILE_ATTRIBUTE_COMPRESSED | FILE_ATTRIBUTE_ARCHIVE;
1273		} else {
1274			/* Regular file, default attributes. */
1275			fa = FILE_ATTRIBUTE_ARCHIVE;
1276		}
1277	} else {
1278		fa = FILE_ATTRIBUTE_ARCHIVE;
1279	}
1280
1281	/* If option "hide_dot_files" then set hidden attribute for dot files. */
1282	if (sbi->options->hide_dot_files && name->name[0] == '.')
1283		fa |= FILE_ATTRIBUTE_HIDDEN;
1284
1285	if (!(mode & 0222))
1286		fa |= FILE_ATTRIBUTE_READONLY;
1287
1288	/* Allocate PATH_MAX bytes. */
1289	new_de = __getname();
1290	if (!new_de) {
1291		err = -ENOMEM;
1292		goto out1;
1293	}
1294
1295	/* Mark rw ntfs as dirty. it will be cleared at umount. */
1296	ntfs_set_state(sbi, NTFS_DIRTY_DIRTY);
1297
1298	/* Step 1: allocate and fill new mft record. */
1299	err = ntfs_look_free_mft(sbi, &ino, false, NULL, NULL);
1300	if (err)
1301		goto out2;
1302
1303	ni = ntfs_new_inode(sbi, ino, fa & FILE_ATTRIBUTE_DIRECTORY);
1304	if (IS_ERR(ni)) {
1305		err = PTR_ERR(ni);
1306		ni = NULL;
1307		goto out3;
1308	}
1309	inode = &ni->vfs_inode;
1310	inode_init_owner(mnt_userns, inode, dir, mode);
1311	mode = inode->i_mode;
1312
1313	inode->i_atime = inode->i_mtime = inode->i_ctime = ni->i_crtime =
1314		current_time(inode);
1315
1316	rec = ni->mi.mrec;
1317	rec->hard_links = cpu_to_le16(1);
1318	attr = Add2Ptr(rec, le16_to_cpu(rec->attr_off));
1319
1320	/* Get default security id. */
1321	sd = s_default_security;
1322	sd_size = sizeof(s_default_security);
1323
1324	if (is_ntfs3(sbi)) {
1325		security_id = dir_ni->std_security_id;
1326		if (le32_to_cpu(security_id) < SECURITY_ID_FIRST) {
1327			security_id = sbi->security.def_security_id;
1328
1329			if (security_id == SECURITY_ID_INVALID &&
1330			    !ntfs_insert_security(sbi, sd, sd_size,
1331						  &security_id, NULL))
1332				sbi->security.def_security_id = security_id;
1333		}
1334	}
1335
1336	/* Insert standard info. */
1337	std5 = Add2Ptr(attr, SIZEOF_RESIDENT);
1338
1339	if (security_id == SECURITY_ID_INVALID) {
1340		dsize = sizeof(struct ATTR_STD_INFO);
1341	} else {
1342		dsize = sizeof(struct ATTR_STD_INFO5);
1343		std5->security_id = security_id;
1344		ni->std_security_id = security_id;
1345	}
1346	asize = SIZEOF_RESIDENT + dsize;
1347
1348	attr->type = ATTR_STD;
1349	attr->size = cpu_to_le32(asize);
1350	attr->id = cpu_to_le16(aid++);
1351	attr->res.data_off = SIZEOF_RESIDENT_LE;
1352	attr->res.data_size = cpu_to_le32(dsize);
1353
1354	std5->cr_time = std5->m_time = std5->c_time = std5->a_time =
1355		kernel2nt(&inode->i_atime);
1356
1357	ni->std_fa = fa;
1358	std5->fa = fa;
1359
1360	attr = Add2Ptr(attr, asize);
1361
1362	/* Insert file name. */
1363	err = fill_name_de(sbi, new_de, name, uni);
1364	if (err)
1365		goto out4;
1366
1367	mi_get_ref(&ni->mi, &new_de->ref);
1368
1369	fname = (struct ATTR_FILE_NAME *)(new_de + 1);
1370
1371	if (sbi->options->windows_names &&
1372	    !valid_windows_name(sbi, (struct le_str *)&fname->name_len)) {
1373		err = -EINVAL;
1374		goto out4;
1375	}
1376
1377	mi_get_ref(&dir_ni->mi, &fname->home);
1378	fname->dup.cr_time = fname->dup.m_time = fname->dup.c_time =
1379		fname->dup.a_time = std5->cr_time;
1380	fname->dup.alloc_size = fname->dup.data_size = 0;
1381	fname->dup.fa = std5->fa;
1382	fname->dup.ea_size = fname->dup.reparse = 0;
1383
1384	dsize = le16_to_cpu(new_de->key_size);
1385	asize = ALIGN(SIZEOF_RESIDENT + dsize, 8);
1386
1387	attr->type = ATTR_NAME;
1388	attr->size = cpu_to_le32(asize);
1389	attr->res.data_off = SIZEOF_RESIDENT_LE;
1390	attr->res.flags = RESIDENT_FLAG_INDEXED;
1391	attr->id = cpu_to_le16(aid++);
1392	attr->res.data_size = cpu_to_le32(dsize);
1393	memcpy(Add2Ptr(attr, SIZEOF_RESIDENT), fname, dsize);
1394
1395	attr = Add2Ptr(attr, asize);
1396
1397	if (security_id == SECURITY_ID_INVALID) {
1398		/* Insert security attribute. */
1399		asize = SIZEOF_RESIDENT + ALIGN(sd_size, 8);
1400
1401		attr->type = ATTR_SECURE;
1402		attr->size = cpu_to_le32(asize);
1403		attr->id = cpu_to_le16(aid++);
1404		attr->res.data_off = SIZEOF_RESIDENT_LE;
1405		attr->res.data_size = cpu_to_le32(sd_size);
1406		memcpy(Add2Ptr(attr, SIZEOF_RESIDENT), sd, sd_size);
1407
1408		attr = Add2Ptr(attr, asize);
1409	}
1410
1411	attr->id = cpu_to_le16(aid++);
1412	if (fa & FILE_ATTRIBUTE_DIRECTORY) {
1413		/*
1414		 * Regular directory or symlink to directory.
1415		 * Create root attribute.
1416		 */
1417		dsize = sizeof(struct INDEX_ROOT) + sizeof(struct NTFS_DE);
1418		asize = sizeof(I30_NAME) + SIZEOF_RESIDENT + dsize;
1419
1420		attr->type = ATTR_ROOT;
1421		attr->size = cpu_to_le32(asize);
1422
1423		attr->name_len = ARRAY_SIZE(I30_NAME);
1424		attr->name_off = SIZEOF_RESIDENT_LE;
1425		attr->res.data_off =
1426			cpu_to_le16(sizeof(I30_NAME) + SIZEOF_RESIDENT);
1427		attr->res.data_size = cpu_to_le32(dsize);
1428		memcpy(Add2Ptr(attr, SIZEOF_RESIDENT), I30_NAME,
1429		       sizeof(I30_NAME));
1430
1431		root = Add2Ptr(attr, sizeof(I30_NAME) + SIZEOF_RESIDENT);
1432		memcpy(root, dir_root, offsetof(struct INDEX_ROOT, ihdr));
1433		root->ihdr.de_off =
1434			cpu_to_le32(sizeof(struct INDEX_HDR)); // 0x10
1435		root->ihdr.used = cpu_to_le32(sizeof(struct INDEX_HDR) +
1436					      sizeof(struct NTFS_DE));
1437		root->ihdr.total = root->ihdr.used;
1438
1439		e = Add2Ptr(root, sizeof(struct INDEX_ROOT));
1440		e->size = cpu_to_le16(sizeof(struct NTFS_DE));
1441		e->flags = NTFS_IE_LAST;
1442	} else if (S_ISLNK(mode)) {
1443		/*
1444		 * Symlink to file.
1445		 * Create empty resident data attribute.
1446		 */
1447		asize = SIZEOF_RESIDENT;
1448
1449		/* Insert empty ATTR_DATA */
1450		attr->type = ATTR_DATA;
1451		attr->size = cpu_to_le32(SIZEOF_RESIDENT);
1452		attr->name_off = SIZEOF_RESIDENT_LE;
1453		attr->res.data_off = SIZEOF_RESIDENT_LE;
1454	} else if (S_ISREG(mode)) {
1455		/*
1456		 * Regular file. Create empty non resident data attribute.
1457		 */
1458		attr->type = ATTR_DATA;
1459		attr->non_res = 1;
1460		attr->nres.evcn = cpu_to_le64(-1ll);
1461		if (fa & FILE_ATTRIBUTE_SPARSE_FILE) {
1462			attr->size = cpu_to_le32(SIZEOF_NONRESIDENT_EX + 8);
1463			attr->name_off = SIZEOF_NONRESIDENT_EX_LE;
1464			attr->flags = ATTR_FLAG_SPARSED;
1465			asize = SIZEOF_NONRESIDENT_EX + 8;
1466		} else if (fa & FILE_ATTRIBUTE_COMPRESSED) {
1467			attr->size = cpu_to_le32(SIZEOF_NONRESIDENT_EX + 8);
1468			attr->name_off = SIZEOF_NONRESIDENT_EX_LE;
1469			attr->flags = ATTR_FLAG_COMPRESSED;
1470			attr->nres.c_unit = COMPRESSION_UNIT;
1471			asize = SIZEOF_NONRESIDENT_EX + 8;
1472		} else {
1473			attr->size = cpu_to_le32(SIZEOF_NONRESIDENT + 8);
1474			attr->name_off = SIZEOF_NONRESIDENT_LE;
1475			asize = SIZEOF_NONRESIDENT + 8;
1476		}
1477		attr->nres.run_off = attr->name_off;
1478	} else {
1479		/*
1480		 * Node. Create empty resident data attribute.
1481		 */
1482		attr->type = ATTR_DATA;
1483		attr->size = cpu_to_le32(SIZEOF_RESIDENT);
1484		attr->name_off = SIZEOF_RESIDENT_LE;
1485		if (fa & FILE_ATTRIBUTE_SPARSE_FILE)
1486			attr->flags = ATTR_FLAG_SPARSED;
1487		else if (fa & FILE_ATTRIBUTE_COMPRESSED)
1488			attr->flags = ATTR_FLAG_COMPRESSED;
1489		attr->res.data_off = SIZEOF_RESIDENT_LE;
1490		asize = SIZEOF_RESIDENT;
1491		ni->ni_flags |= NI_FLAG_RESIDENT;
1492	}
1493
1494	if (S_ISDIR(mode)) {
1495		ni->ni_flags |= NI_FLAG_DIR;
1496		err = indx_init(&ni->dir, sbi, attr, INDEX_MUTEX_I30);
1497		if (err)
1498			goto out4;
1499	} else if (S_ISLNK(mode)) {
1500		rp = ntfs_create_reparse_buffer(sbi, symname, size, &nsize);
1501
1502		if (IS_ERR(rp)) {
1503			err = PTR_ERR(rp);
1504			rp = NULL;
1505			goto out4;
1506		}
1507
1508		/*
1509		 * Insert ATTR_REPARSE.
1510		 */
1511		attr = Add2Ptr(attr, asize);
1512		attr->type = ATTR_REPARSE;
1513		attr->id = cpu_to_le16(aid++);
1514
1515		/* Resident or non resident? */
1516		asize = ALIGN(SIZEOF_RESIDENT + nsize, 8);
1517		t16 = PtrOffset(rec, attr);
1518
1519		/*
1520		 * Below function 'ntfs_save_wsl_perm' requires 0x78 bytes.
1521		 * It is good idea to keep extened attributes resident.
1522		 */
1523		if (asize + t16 + 0x78 + 8 > sbi->record_size) {
1524			CLST alen;
1525			CLST clst = bytes_to_cluster(sbi, nsize);
1526
1527			/* Bytes per runs. */
1528			t16 = sbi->record_size - t16 - SIZEOF_NONRESIDENT;
1529
1530			attr->non_res = 1;
1531			attr->nres.evcn = cpu_to_le64(clst - 1);
1532			attr->name_off = SIZEOF_NONRESIDENT_LE;
1533			attr->nres.run_off = attr->name_off;
1534			attr->nres.data_size = cpu_to_le64(nsize);
1535			attr->nres.valid_size = attr->nres.data_size;
1536			attr->nres.alloc_size =
1537				cpu_to_le64(ntfs_up_cluster(sbi, nsize));
1538
1539			err = attr_allocate_clusters(sbi, &ni->file.run, 0, 0,
1540						     clst, NULL, ALLOCATE_DEF,
1541						     &alen, 0, NULL, NULL);
1542			if (err)
1543				goto out5;
1544
1545			err = run_pack(&ni->file.run, 0, clst,
1546				       Add2Ptr(attr, SIZEOF_NONRESIDENT), t16,
1547				       &vcn);
1548			if (err < 0)
1549				goto out5;
1550
1551			if (vcn != clst) {
1552				err = -EINVAL;
1553				goto out5;
1554			}
1555
1556			asize = SIZEOF_NONRESIDENT + ALIGN(err, 8);
1557		} else {
1558			attr->res.data_off = SIZEOF_RESIDENT_LE;
1559			attr->res.data_size = cpu_to_le32(nsize);
1560			memcpy(Add2Ptr(attr, SIZEOF_RESIDENT), rp, nsize);
1561			nsize = 0;
1562		}
1563		/* Size of symlink equals the length of input string. */
1564		inode->i_size = size;
1565
1566		attr->size = cpu_to_le32(asize);
1567
1568		err = ntfs_insert_reparse(sbi, IO_REPARSE_TAG_SYMLINK,
1569					  &new_de->ref);
1570		if (err)
1571			goto out5;
1572
1573		rp_inserted = true;
1574	}
1575
1576	attr = Add2Ptr(attr, asize);
1577	attr->type = ATTR_END;
1578
1579	rec->used = cpu_to_le32(PtrOffset(rec, attr) + 8);
1580	rec->next_attr_id = cpu_to_le16(aid);
1581
1582	/* Step 2: Add new name in index. */
1583	err = indx_insert_entry(&dir_ni->dir, dir_ni, new_de, sbi, fnd, 0);
1584	if (err)
1585		goto out6;
1586
1587	/* Unlock parent directory before ntfs_init_acl. */
1588	if (!fnd)
1589		ni_unlock(dir_ni);
1590
1591	inode->i_generation = le16_to_cpu(rec->seq);
1592
1593	dir->i_mtime = dir->i_ctime = inode->i_atime;
1594
1595	if (S_ISDIR(mode)) {
1596		inode->i_op = &ntfs_dir_inode_operations;
1597		inode->i_fop = &ntfs_dir_operations;
1598	} else if (S_ISLNK(mode)) {
1599		inode->i_op = &ntfs_link_inode_operations;
1600		inode->i_fop = NULL;
1601		inode->i_mapping->a_ops = &ntfs_aops;
1602		inode->i_size = size;
1603		inode_nohighmem(inode);
1604	} else if (S_ISREG(mode)) {
1605		inode->i_op = &ntfs_file_inode_operations;
1606		inode->i_fop = &ntfs_file_operations;
1607		inode->i_mapping->a_ops =
1608			is_compressed(ni) ? &ntfs_aops_cmpr : &ntfs_aops;
1609		init_rwsem(&ni->file.run_lock);
1610	} else {
1611		inode->i_op = &ntfs_special_inode_operations;
1612		init_special_inode(inode, mode, dev);
1613	}
1614
1615#ifdef CONFIG_NTFS3_FS_POSIX_ACL
1616	if (!S_ISLNK(mode) && (sb->s_flags & SB_POSIXACL)) {
1617		err = ntfs_init_acl(mnt_userns, inode, dir);
1618		if (err)
1619			goto out7;
1620	} else
1621#endif
1622	{
1623		inode->i_flags |= S_NOSEC;
1624	}
1625
1626	/* Write non resident data. */
1627	if (nsize) {
1628		err = ntfs_sb_write_run(sbi, &ni->file.run, 0, rp, nsize, 0);
1629		if (err)
1630			goto out7;
1631	}
1632
1633	/*
1634	 * Call 'd_instantiate' after inode->i_op is set
1635	 * but before finish_open.
1636	 */
1637	d_instantiate(dentry, inode);
1638
1639	ntfs_save_wsl_perm(inode);
1640	mark_inode_dirty(dir);
1641	mark_inode_dirty(inode);
1642
1643	/* Normal exit. */
1644	goto out2;
1645
1646out7:
1647
1648	/* Undo 'indx_insert_entry'. */
1649	if (!fnd)
1650		ni_lock_dir(dir_ni);
1651	indx_delete_entry(&dir_ni->dir, dir_ni, new_de + 1,
1652			  le16_to_cpu(new_de->key_size), sbi);
1653	/* ni_unlock(dir_ni); will be called later. */
1654out6:
1655	if (rp_inserted)
1656		ntfs_remove_reparse(sbi, IO_REPARSE_TAG_SYMLINK, &new_de->ref);
1657
1658out5:
1659	if (!S_ISDIR(mode))
1660		run_deallocate(sbi, &ni->file.run, false);
1661
1662out4:
1663	clear_rec_inuse(rec);
1664	clear_nlink(inode);
1665	ni->mi.dirty = false;
1666	discard_new_inode(inode);
1667out3:
1668	ntfs_mark_rec_free(sbi, ino, false);
1669
1670out2:
1671	__putname(new_de);
1672	kfree(rp);
1673
1674out1:
1675	if (err) {
1676		if (!fnd)
1677			ni_unlock(dir_ni);
1678		return ERR_PTR(err);
1679	}
1680
1681	unlock_new_inode(inode);
1682
1683	return inode;
1684}
1685
1686int ntfs_link_inode(struct inode *inode, struct dentry *dentry)
1687{
1688	int err;
1689	struct ntfs_inode *ni = ntfs_i(inode);
1690	struct ntfs_sb_info *sbi = inode->i_sb->s_fs_info;
1691	struct NTFS_DE *de;
1692
1693	/* Allocate PATH_MAX bytes. */
1694	de = __getname();
1695	if (!de)
1696		return -ENOMEM;
1697
1698	/* Mark rw ntfs as dirty. It will be cleared at umount. */
1699	ntfs_set_state(sbi, NTFS_DIRTY_DIRTY);
1700
1701	/* Construct 'de'. */
1702	err = fill_name_de(sbi, de, &dentry->d_name, NULL);
1703	if (err)
1704		goto out;
1705
1706	err = ni_add_name(ntfs_i(d_inode(dentry->d_parent)), ni, de);
1707out:
1708	__putname(de);
1709	return err;
1710}
1711
1712/*
1713 * ntfs_unlink_inode
1714 *
1715 * inode_operations::unlink
1716 * inode_operations::rmdir
1717 */
1718int ntfs_unlink_inode(struct inode *dir, const struct dentry *dentry)
1719{
1720	int err;
1721	struct ntfs_sb_info *sbi = dir->i_sb->s_fs_info;
1722	struct inode *inode = d_inode(dentry);
1723	struct ntfs_inode *ni = ntfs_i(inode);
1724	struct ntfs_inode *dir_ni = ntfs_i(dir);
1725	struct NTFS_DE *de, *de2 = NULL;
1726	int undo_remove;
1727
1728	if (ntfs_is_meta_file(sbi, ni->mi.rno))
1729		return -EINVAL;
1730
1731	/* Allocate PATH_MAX bytes. */
1732	de = __getname();
1733	if (!de)
1734		return -ENOMEM;
1735
1736	ni_lock(ni);
1737
1738	if (S_ISDIR(inode->i_mode) && !dir_is_empty(inode)) {
1739		err = -ENOTEMPTY;
1740		goto out;
1741	}
1742
1743	err = fill_name_de(sbi, de, &dentry->d_name, NULL);
1744	if (err < 0)
1745		goto out;
1746
1747	undo_remove = 0;
1748	err = ni_remove_name(dir_ni, ni, de, &de2, &undo_remove);
1749
1750	if (!err) {
1751		drop_nlink(inode);
1752		dir->i_mtime = dir->i_ctime = current_time(dir);
1753		mark_inode_dirty(dir);
1754		inode->i_ctime = dir->i_ctime;
1755		if (inode->i_nlink)
1756			mark_inode_dirty(inode);
1757	} else if (!ni_remove_name_undo(dir_ni, ni, de, de2, undo_remove)) {
1758		_ntfs_bad_inode(inode);
1759	} else {
1760		if (ni_is_dirty(dir))
1761			mark_inode_dirty(dir);
1762		if (ni_is_dirty(inode))
1763			mark_inode_dirty(inode);
1764	}
1765
1766out:
1767	ni_unlock(ni);
1768	__putname(de);
1769	return err;
1770}
1771
1772void ntfs_evict_inode(struct inode *inode)
1773{
1774	truncate_inode_pages_final(&inode->i_data);
1775
1776	if (inode->i_nlink)
1777		_ni_write_inode(inode, inode_needs_sync(inode));
1778
1779	invalidate_inode_buffers(inode);
1780	clear_inode(inode);
1781
1782	ni_clear(ntfs_i(inode));
1783}
1784
1785/*
1786 * ntfs_translate_junction
1787 *
1788 * Translate a Windows junction target to the Linux equivalent.
1789 * On junctions, targets are always absolute (they include the drive
1790 * letter). We have no way of knowing if the target is for the current
1791 * mounted device or not so we just assume it is.
1792 */
1793static int ntfs_translate_junction(const struct super_block *sb,
1794				   const struct dentry *link_de, char *target,
1795				   int target_len, int target_max)
1796{
1797	int tl_len, err = target_len;
1798	char *link_path_buffer = NULL, *link_path;
1799	char *translated = NULL;
1800	char *target_start;
1801	int copy_len;
1802
1803	link_path_buffer = kmalloc(PATH_MAX, GFP_NOFS);
1804	if (!link_path_buffer) {
1805		err = -ENOMEM;
1806		goto out;
1807	}
1808	/* Get link path, relative to mount point */
1809	link_path = dentry_path_raw(link_de, link_path_buffer, PATH_MAX);
1810	if (IS_ERR(link_path)) {
1811		ntfs_err(sb, "Error getting link path");
1812		err = -EINVAL;
1813		goto out;
1814	}
1815
1816	translated = kmalloc(PATH_MAX, GFP_NOFS);
1817	if (!translated) {
1818		err = -ENOMEM;
1819		goto out;
1820	}
1821
1822	/* Make translated path a relative path to mount point */
1823	strcpy(translated, "./");
1824	++link_path; /* Skip leading / */
1825	for (tl_len = sizeof("./") - 1; *link_path; ++link_path) {
1826		if (*link_path == '/') {
1827			if (PATH_MAX - tl_len < sizeof("../")) {
1828				ntfs_err(sb,
1829					 "Link path %s has too many components",
1830					 link_path);
1831				err = -EINVAL;
1832				goto out;
1833			}
1834			strcpy(translated + tl_len, "../");
1835			tl_len += sizeof("../") - 1;
1836		}
1837	}
1838
1839	/* Skip drive letter */
1840	target_start = target;
1841	while (*target_start && *target_start != ':')
1842		++target_start;
1843
1844	if (!*target_start) {
1845		ntfs_err(sb, "Link target (%s) missing drive separator",
1846			 target);
1847		err = -EINVAL;
1848		goto out;
1849	}
1850
1851	/* Skip drive separator and leading /, if exists */
1852	target_start += 1 + (target_start[1] == '/');
1853	copy_len = target_len - (target_start - target);
1854
1855	if (PATH_MAX - tl_len <= copy_len) {
1856		ntfs_err(sb, "Link target %s too large for buffer (%d <= %d)",
1857			 target_start, PATH_MAX - tl_len, copy_len);
1858		err = -EINVAL;
1859		goto out;
1860	}
1861
1862	/* translated path has a trailing / and target_start does not */
1863	strcpy(translated + tl_len, target_start);
1864	tl_len += copy_len;
1865	if (target_max <= tl_len) {
1866		ntfs_err(sb, "Target path %s too large for buffer (%d <= %d)",
1867			 translated, target_max, tl_len);
1868		err = -EINVAL;
1869		goto out;
1870	}
1871	strcpy(target, translated);
1872	err = tl_len;
1873
1874out:
1875	kfree(link_path_buffer);
1876	kfree(translated);
1877	return err;
1878}
1879
1880static noinline int ntfs_readlink_hlp(const struct dentry *link_de,
1881				      struct inode *inode, char *buffer,
1882				      int buflen)
1883{
1884	int i, err = -EINVAL;
1885	struct ntfs_inode *ni = ntfs_i(inode);
1886	struct super_block *sb = inode->i_sb;
1887	struct ntfs_sb_info *sbi = sb->s_fs_info;
1888	u64 size;
1889	u16 ulen = 0;
1890	void *to_free = NULL;
1891	struct REPARSE_DATA_BUFFER *rp;
1892	const __le16 *uname;
1893	struct ATTRIB *attr;
1894
1895	/* Reparse data present. Try to parse it. */
1896	static_assert(!offsetof(struct REPARSE_DATA_BUFFER, ReparseTag));
1897	static_assert(sizeof(u32) == sizeof(rp->ReparseTag));
1898
1899	*buffer = 0;
1900
1901	attr = ni_find_attr(ni, NULL, NULL, ATTR_REPARSE, NULL, 0, NULL, NULL);
1902	if (!attr)
1903		goto out;
1904
1905	if (!attr->non_res) {
1906		rp = resident_data_ex(attr, sizeof(struct REPARSE_DATA_BUFFER));
1907		if (!rp)
1908			goto out;
1909		size = le32_to_cpu(attr->res.data_size);
1910	} else {
1911		size = le64_to_cpu(attr->nres.data_size);
1912		rp = NULL;
1913	}
1914
1915	if (size > sbi->reparse.max_size || size <= sizeof(u32))
1916		goto out;
1917
1918	if (!rp) {
1919		rp = kmalloc(size, GFP_NOFS);
1920		if (!rp) {
1921			err = -ENOMEM;
1922			goto out;
1923		}
1924		to_free = rp;
1925		/* Read into temporal buffer. */
1926		err = ntfs_read_run_nb(sbi, &ni->file.run, 0, rp, size, NULL);
1927		if (err)
1928			goto out;
1929	}
1930
1931	/* Microsoft Tag. */
1932	switch (rp->ReparseTag) {
1933	case IO_REPARSE_TAG_MOUNT_POINT:
1934		/* Mount points and junctions. */
1935		/* Can we use 'Rp->MountPointReparseBuffer.PrintNameLength'? */
1936		if (size <= offsetof(struct REPARSE_DATA_BUFFER,
1937				     MountPointReparseBuffer.PathBuffer))
1938			goto out;
1939		uname = Add2Ptr(rp,
1940				offsetof(struct REPARSE_DATA_BUFFER,
1941					 MountPointReparseBuffer.PathBuffer) +
1942					le16_to_cpu(rp->MountPointReparseBuffer
1943							    .PrintNameOffset));
1944		ulen = le16_to_cpu(rp->MountPointReparseBuffer.PrintNameLength);
1945		break;
1946
1947	case IO_REPARSE_TAG_SYMLINK:
1948		/* FolderSymbolicLink */
1949		/* Can we use 'Rp->SymbolicLinkReparseBuffer.PrintNameLength'? */
1950		if (size <= offsetof(struct REPARSE_DATA_BUFFER,
1951				     SymbolicLinkReparseBuffer.PathBuffer))
1952			goto out;
1953		uname = Add2Ptr(
1954			rp, offsetof(struct REPARSE_DATA_BUFFER,
1955				     SymbolicLinkReparseBuffer.PathBuffer) +
1956				    le16_to_cpu(rp->SymbolicLinkReparseBuffer
1957							.PrintNameOffset));
1958		ulen = le16_to_cpu(
1959			rp->SymbolicLinkReparseBuffer.PrintNameLength);
1960		break;
1961
1962	case IO_REPARSE_TAG_CLOUD:
1963	case IO_REPARSE_TAG_CLOUD_1:
1964	case IO_REPARSE_TAG_CLOUD_2:
1965	case IO_REPARSE_TAG_CLOUD_3:
1966	case IO_REPARSE_TAG_CLOUD_4:
1967	case IO_REPARSE_TAG_CLOUD_5:
1968	case IO_REPARSE_TAG_CLOUD_6:
1969	case IO_REPARSE_TAG_CLOUD_7:
1970	case IO_REPARSE_TAG_CLOUD_8:
1971	case IO_REPARSE_TAG_CLOUD_9:
1972	case IO_REPARSE_TAG_CLOUD_A:
1973	case IO_REPARSE_TAG_CLOUD_B:
1974	case IO_REPARSE_TAG_CLOUD_C:
1975	case IO_REPARSE_TAG_CLOUD_D:
1976	case IO_REPARSE_TAG_CLOUD_E:
1977	case IO_REPARSE_TAG_CLOUD_F:
1978		err = sizeof("OneDrive") - 1;
1979		if (err > buflen)
1980			err = buflen;
1981		memcpy(buffer, "OneDrive", err);
1982		goto out;
1983
1984	default:
1985		if (IsReparseTagMicrosoft(rp->ReparseTag)) {
1986			/* Unknown Microsoft Tag. */
1987			goto out;
1988		}
1989		if (!IsReparseTagNameSurrogate(rp->ReparseTag) ||
1990		    size <= sizeof(struct REPARSE_POINT)) {
1991			goto out;
1992		}
1993
1994		/* Users tag. */
1995		uname = Add2Ptr(rp, sizeof(struct REPARSE_POINT));
1996		ulen = le16_to_cpu(rp->ReparseDataLength) -
1997		       sizeof(struct REPARSE_POINT);
1998	}
1999
2000	/* Convert nlen from bytes to UNICODE chars. */
2001	ulen >>= 1;
2002
2003	/* Check that name is available. */
2004	if (!ulen || uname + ulen > (__le16 *)Add2Ptr(rp, size))
2005		goto out;
2006
2007	/* If name is already zero terminated then truncate it now. */
2008	if (!uname[ulen - 1])
2009		ulen -= 1;
2010
2011	err = ntfs_utf16_to_nls(sbi, uname, ulen, buffer, buflen);
2012
2013	if (err < 0)
2014		goto out;
2015
2016	/* Translate Windows '\' into Linux '/'. */
2017	for (i = 0; i < err; i++) {
2018		if (buffer[i] == '\\')
2019			buffer[i] = '/';
2020	}
2021
2022	/* Always set last zero. */
2023	buffer[err] = 0;
2024
2025	/* If this is a junction, translate the link target. */
2026	if (rp->ReparseTag == IO_REPARSE_TAG_MOUNT_POINT)
2027		err = ntfs_translate_junction(sb, link_de, buffer, err, buflen);
2028
2029out:
2030	kfree(to_free);
2031	return err;
2032}
2033
2034static const char *ntfs_get_link(struct dentry *de, struct inode *inode,
2035				 struct delayed_call *done)
2036{
2037	int err;
2038	char *ret;
2039
2040	if (!de)
2041		return ERR_PTR(-ECHILD);
2042
2043	ret = kmalloc(PAGE_SIZE, GFP_NOFS);
2044	if (!ret)
2045		return ERR_PTR(-ENOMEM);
2046
2047	err = ntfs_readlink_hlp(de, inode, ret, PAGE_SIZE);
2048	if (err < 0) {
2049		kfree(ret);
2050		return ERR_PTR(err);
2051	}
2052
2053	set_delayed_call(done, kfree_link, ret);
2054
2055	return ret;
2056}
2057
2058// clang-format off
2059const struct inode_operations ntfs_link_inode_operations = {
2060	.get_link	= ntfs_get_link,
2061	.setattr	= ntfs3_setattr,
2062	.listxattr	= ntfs_listxattr,
2063	.permission	= ntfs_permission,
2064};
2065
2066const struct address_space_operations ntfs_aops = {
2067	.read_folio	= ntfs_read_folio,
2068	.readahead	= ntfs_readahead,
2069	.writepage	= ntfs_writepage,
2070	.writepages	= ntfs_writepages,
2071	.write_begin	= ntfs_write_begin,
2072	.write_end	= ntfs_write_end,
2073	.direct_IO	= ntfs_direct_IO,
2074	.bmap		= ntfs_bmap,
2075	.dirty_folio	= block_dirty_folio,
2076	.invalidate_folio = block_invalidate_folio,
2077};
2078
2079const struct address_space_operations ntfs_aops_cmpr = {
2080	.read_folio	= ntfs_read_folio,
2081	.readahead	= ntfs_readahead,
2082};
2083// clang-format on