1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3 * NTFS kernel file operations.
4 *
5 * Copyright (c) 2001-2015 Anton Altaparmakov and Tuxera Inc.
6 * Copyright (c) 2025 LG Electronics Co., Ltd.
7 */
8
9 #include <linux/writeback.h>
10 #include <linux/blkdev.h>
11 #include <linux/fs.h>
12 #include <linux/iomap.h>
13 #include <linux/uio.h>
14 #include <linux/posix_acl.h>
15 #include <linux/posix_acl_xattr.h>
16 #include <linux/compat.h>
17 #include <linux/falloc.h>
18
19 #include "lcnalloc.h"
20 #include "ntfs.h"
21 #include "reparse.h"
22 #include "ea.h"
23 #include "iomap.h"
24 #include "bitmap.h"
25 #include "volume.h"
26
27 #include <linux/filelock.h>
28
29 /*
30 * ntfs_file_open - called when an inode is about to be opened
31 * @vi: inode to be opened
32 * @filp: file structure describing the inode
33 *
34 * Limit file size to the page cache limit on architectures where unsigned long
35 * is 32-bits. This is the most we can do for now without overflowing the page
36 * cache page index. Doing it this way means we don't run into problems because
37 * of existing too large files. It would be better to allow the user to read
38 * the beginning of the file but I doubt very much anyone is going to hit this
39 * check on a 32-bit architecture, so there is no point in adding the extra
40 * complexity required to support this.
41 *
42 * On 64-bit architectures, the check is hopefully optimized away by the
43 * compiler.
44 *
45 * After the check passes, just call generic_file_open() to do its work.
46 */
ntfs_file_open(struct inode * vi,struct file * filp)47 static int ntfs_file_open(struct inode *vi, struct file *filp)
48 {
49 struct ntfs_inode *ni = NTFS_I(vi);
50
51 if (NVolShutdown(ni->vol))
52 return -EIO;
53
54 if (sizeof(unsigned long) < 8) {
55 if (i_size_read(vi) > MAX_LFS_FILESIZE)
56 return -EOVERFLOW;
57 }
58
59 filp->f_mode |= FMODE_NOWAIT | FMODE_CAN_ODIRECT;
60
61 return generic_file_open(vi, filp);
62 }
63
64 /*
65 * Trim preallocated space on file release.
66 *
67 * When the preallo_size mount option is set (default 64KB), writes extend
68 * allocated_size and runlist in units of preallocated size to reduce
69 * runlist merge overhead for small writes. This can leave
70 * allocated_size > data_size if not all preallocated space is used.
71 *
72 * We perform the trim here because ->release() is called only when
73 * the file is no longer open. At this point, no further writes can occur,
74 * so it is safe to reclaim the unused preallocated space.
75 *
76 * Returns 0 on success, or negative error on failure.
77 */
ntfs_trim_prealloc(struct inode * vi)78 static int ntfs_trim_prealloc(struct inode *vi)
79 {
80 struct ntfs_inode *ni = NTFS_I(vi);
81 struct ntfs_volume *vol = ni->vol;
82 struct runlist_element *rl;
83 s64 aligned_data_size;
84 s64 vcn_ds, vcn_tr;
85 ssize_t rc;
86 int err = 0;
87
88 inode_lock(vi);
89 mutex_lock(&ni->mrec_lock);
90 down_write(&ni->runlist.lock);
91
92 aligned_data_size = round_up(ni->data_size, vol->cluster_size);
93 if (aligned_data_size >= ni->allocated_size)
94 goto out_unlock;
95
96 vcn_ds = ntfs_bytes_to_cluster(vol, aligned_data_size);
97 vcn_tr = -1;
98 rc = ni->runlist.count - 2;
99 rl = ni->runlist.rl;
100
101 while (rc >= 0 && rl[rc].lcn == LCN_HOLE && vcn_ds <= rl[rc].vcn) {
102 vcn_tr = rl[rc].vcn;
103 rc--;
104 }
105
106 if (vcn_tr >= 0) {
107 err = ntfs_rl_truncate_nolock(vol, &ni->runlist, vcn_tr);
108 if (err) {
109 kvfree(ni->runlist.rl);
110 ni->runlist.rl = NULL;
111 ntfs_error(vol->sb, "Preallocated block rollback failed");
112 } else {
113 ni->allocated_size = ntfs_cluster_to_bytes(vol, vcn_tr);
114 err = ntfs_attr_update_mapping_pairs_locked(
115 ni, 0, ni);
116 if (err)
117 ntfs_error(vol->sb,
118 "Failed to rollback mapping pairs for prealloc");
119 }
120 }
121
122 out_unlock:
123 up_write(&ni->runlist.lock);
124 mutex_unlock(&ni->mrec_lock);
125 inode_unlock(vi);
126
127 return err;
128 }
129
ntfs_file_release(struct inode * vi,struct file * filp)130 static int ntfs_file_release(struct inode *vi, struct file *filp)
131 {
132 if (!NInoCompressed(NTFS_I(vi)) &&
133 !NInoWofCompressed(NTFS_I(vi)))
134 return ntfs_trim_prealloc(vi);
135
136 return 0;
137 }
138
139 /*
140 * ntfs_file_fsync - sync a file to disk
141 * @filp: file to be synced
142 * @start: start offset to be synced
143 * @end: end offset to be synced
144 * @datasync: if non-zero only flush user data and not metadata
145 *
146 * Data integrity sync of a file to disk. Used for fsync, fdatasync, and msync
147 * system calls. This function is inspired by fs/buffer.c::file_fsync().
148 *
149 * If @datasync is false, write the mft record and all associated extent mft
150 * records as well as the $DATA attribute and then sync the block device.
151 *
152 * If @datasync is true and the attribute is non-resident, we skip the writing
153 * of the mft record and all associated extent mft records (this might still
154 * happen due to the write_inode_now() call).
155 *
156 * Also, if @datasync is true, we do not wait on the inode to be written out
157 * but we always wait on the page cache pages to be written out.
158 */
ntfs_file_fsync(struct file * filp,loff_t start,loff_t end,int datasync)159 static int ntfs_file_fsync(struct file *filp, loff_t start, loff_t end,
160 int datasync)
161 {
162 struct inode *vi = filp->f_mapping->host;
163 struct ntfs_inode *ni = NTFS_I(vi);
164 struct ntfs_volume *vol = ni->vol;
165 int err, ret = 0;
166 struct inode *parent_vi, *ia_vi;
167 struct ntfs_attr_search_ctx *ctx;
168
169 ntfs_debug("Entering for inode 0x%llx.", ni->mft_no);
170
171 if (NVolShutdown(vol))
172 return -EIO;
173
174 err = file_write_and_wait_range(filp, start, end);
175 if (err)
176 return err;
177
178 if (!datasync || !NInoNonResident(NTFS_I(vi)))
179 ret = __ntfs_write_inode(vi, 1);
180 write_inode_now(vi, !datasync);
181
182 ctx = ntfs_attr_get_search_ctx(ni, NULL);
183 if (!ctx)
184 return -ENOMEM;
185
186 mutex_lock_nested(&ni->mrec_lock, NTFS_INODE_MUTEX_NORMAL_CHILD);
187 while (!(err = ntfs_attr_lookup(AT_UNUSED, NULL, 0, 0, 0, NULL, 0, ctx))) {
188 if (ctx->attr->type == AT_FILE_NAME) {
189 struct file_name_attr *fn = (struct file_name_attr *)((u8 *)ctx->attr +
190 le16_to_cpu(ctx->attr->data.resident.value_offset));
191
192 parent_vi = ntfs_iget(vi->i_sb, MREF_LE(fn->parent_directory));
193 if (IS_ERR(parent_vi))
194 continue;
195 mutex_lock_nested(&NTFS_I(parent_vi)->mrec_lock, NTFS_INODE_MUTEX_NORMAL);
196 ia_vi = ntfs_index_iget(parent_vi, I30, 4);
197 mutex_unlock(&NTFS_I(parent_vi)->mrec_lock);
198 if (IS_ERR(ia_vi)) {
199 iput(parent_vi);
200 continue;
201 }
202 write_inode_now(ia_vi, 1);
203 iput(ia_vi);
204 write_inode_now(parent_vi, 1);
205 iput(parent_vi);
206 } else if (ctx->attr->non_resident) {
207 struct inode *attr_vi;
208 __le16 *name;
209
210 name = (__le16 *)((u8 *)ctx->attr + le16_to_cpu(ctx->attr->name_offset));
211 if (ctx->attr->type == AT_DATA && ctx->attr->name_length == 0)
212 continue;
213
214 attr_vi = ntfs_attr_iget(vi, ctx->attr->type,
215 name, ctx->attr->name_length);
216 if (IS_ERR(attr_vi))
217 continue;
218 spin_lock(&attr_vi->i_lock);
219 if (inode_state_read_once(attr_vi) & I_DIRTY_PAGES) {
220 spin_unlock(&attr_vi->i_lock);
221 filemap_write_and_wait(attr_vi->i_mapping);
222 } else
223 spin_unlock(&attr_vi->i_lock);
224 iput(attr_vi);
225 }
226 }
227 mutex_unlock(&ni->mrec_lock);
228 ntfs_attr_put_search_ctx(ctx);
229
230 write_inode_now(vol->mftbmp_ino, 1);
231 down_write(&vol->lcnbmp_lock);
232 write_inode_now(vol->lcnbmp_ino, 1);
233 up_write(&vol->lcnbmp_lock);
234 write_inode_now(vol->mft_ino, 1);
235
236 /*
237 * NOTE: If we were to use mapping->private_list (see ext2 and
238 * fs/buffer.c) for dirty blocks then we could optimize the below to be
239 * sync_mapping_buffers(vi->i_mapping).
240 */
241 err = sync_blockdev(vi->i_sb->s_bdev);
242 if (unlikely(err && !ret))
243 ret = err;
244 if (likely(!ret))
245 ntfs_debug("Done.");
246 else
247 ntfs_warning(vi->i_sb,
248 "Failed to f%ssync inode 0x%llx. Error %u.",
249 datasync ? "data" : "", ni->mft_no, -ret);
250 if (!ret)
251 blkdev_issue_flush(vi->i_sb->s_bdev);
252 return ret;
253 }
254
ntfs_setattr_size(struct inode * vi,struct iattr * attr)255 static int ntfs_setattr_size(struct inode *vi, struct iattr *attr)
256 {
257 struct ntfs_inode *ni = NTFS_I(vi);
258 int err;
259 loff_t old_size = vi->i_size;
260
261 if (NInoCompressed(ni) || NInoEncrypted(ni) || NInoWofCompressed(ni)) {
262 ntfs_warning(
263 vi->i_sb,
264 "Changes in inode size are not supported yet for %s files.",
265 NInoEncrypted(ni) ? "encrypted" : "compressed");
266 return -EOPNOTSUPP;
267 }
268
269 err = inode_newsize_ok(vi, attr->ia_size);
270 if (err)
271 return err;
272
273 inode_dio_wait(vi);
274
275 /*
276 * Serialize with page faults and pagecache instantiation so that
277 * readers cannot observe the size change until the attribute
278 * updates below have completed.
279 */
280 filemap_invalidate_lock(vi->i_mapping);
281 if (attr->ia_size > old_size) {
282 truncate_pagecache(vi, old_size);
283 i_size_write(vi, attr->ia_size);
284 pagecache_isize_extended(vi, old_size, attr->ia_size);
285 } else {
286 truncate_setsize(vi, attr->ia_size);
287 }
288
289 err = ntfs_truncate_vfs(vi, attr->ia_size, old_size);
290 if (err)
291 i_size_write(vi, old_size);
292 filemap_invalidate_unlock(vi->i_mapping);
293
294 return err;
295 }
296
297 /*
298 * ntfs_setattr
299 *
300 * Called from notify_change() when an attribute is being changed.
301 *
302 * NOTE: Changes in inode size are not supported yet for compressed or
303 * encrypted files.
304 */
ntfs_setattr(struct mnt_idmap * idmap,struct dentry * dentry,struct iattr * attr)305 int ntfs_setattr(struct mnt_idmap *idmap, struct dentry *dentry,
306 struct iattr *attr)
307 {
308 struct inode *vi = d_inode(dentry);
309 int err;
310 unsigned int ia_valid = attr->ia_valid;
311 struct ntfs_inode *ni = NTFS_I(vi);
312 struct ntfs_volume *vol = ni->vol;
313
314 if (NVolShutdown(vol))
315 return -EIO;
316
317 err = setattr_prepare(idmap, dentry, attr);
318 if (err)
319 goto out;
320
321 if ((ia_valid & ATTR_SIZE) &&
322 (NInoCompressed(ni) || NInoEncrypted(ni) ||
323 NInoWofCompressed(ni))) {
324 err = -EOPNOTSUPP;
325 goto out;
326 }
327
328 if (!(vol->vol_flags & VOLUME_IS_DIRTY))
329 ntfs_set_volume_flags(vol, VOLUME_IS_DIRTY);
330
331 if (ia_valid & ATTR_SIZE) {
332 err = ntfs_setattr_size(vi, attr);
333 if (err)
334 goto out;
335
336 ia_valid |= ATTR_MTIME | ATTR_CTIME;
337 }
338
339 setattr_copy(idmap, vi, attr);
340
341 if (vol->sb->s_flags & SB_POSIXACL && !S_ISLNK(vi->i_mode)) {
342 err = posix_acl_chmod(idmap, dentry, vi->i_mode);
343 if (err)
344 goto out;
345 }
346
347 if (0222 & vi->i_mode)
348 ni->flags &= ~FILE_ATTR_READONLY;
349 else
350 ni->flags |= FILE_ATTR_READONLY;
351
352 if (ia_valid & (ATTR_UID | ATTR_GID | ATTR_MODE)) {
353 unsigned int flags = 0;
354
355 if (ia_valid & ATTR_UID)
356 flags |= NTFS_EA_UID;
357 if (ia_valid & ATTR_GID)
358 flags |= NTFS_EA_GID;
359 if (ia_valid & ATTR_MODE)
360 flags |= NTFS_EA_MODE;
361
362 mutex_lock(&ni->mrec_lock);
363 err = ntfs_ea_set_wsl_inode(vi, 0, NULL, flags);
364 mutex_unlock(&ni->mrec_lock);
365 if (err)
366 goto out;
367
368 }
369
370 mark_inode_dirty(vi);
371 out:
372 return err;
373 }
374
ntfs_getattr(struct mnt_idmap * idmap,const struct path * path,struct kstat * stat,unsigned int request_mask,unsigned int query_flags)375 int ntfs_getattr(struct mnt_idmap *idmap, const struct path *path,
376 struct kstat *stat, unsigned int request_mask,
377 unsigned int query_flags)
378 {
379 struct inode *inode = d_backing_inode(path->dentry);
380 struct ntfs_inode *ni = NTFS_I(inode);
381
382 generic_fillattr(idmap, request_mask, inode, stat);
383
384 stat->blksize = NTFS_SB(inode->i_sb)->cluster_size;
385 stat->blocks = (((u64)NTFS_I(inode)->i_dealloc_clusters <<
386 NTFS_SB(inode->i_sb)->cluster_size_bits) >> 9) + inode->i_blocks;
387 stat->result_mask |= STATX_BTIME;
388 stat->btime = NTFS_I(inode)->i_crtime;
389
390 if (NInoCompressed(ni) || NInoWofCompressed(ni))
391 stat->attributes |= STATX_ATTR_COMPRESSED;
392
393 if (NInoEncrypted(ni))
394 stat->attributes |= STATX_ATTR_ENCRYPTED;
395
396 if (inode->i_flags & S_IMMUTABLE)
397 stat->attributes |= STATX_ATTR_IMMUTABLE;
398
399 if (inode->i_flags & S_APPEND)
400 stat->attributes |= STATX_ATTR_APPEND;
401
402 stat->attributes_mask |= STATX_ATTR_COMPRESSED | STATX_ATTR_ENCRYPTED |
403 STATX_ATTR_IMMUTABLE | STATX_ATTR_APPEND;
404
405 /*
406 * If it's a compressed or encrypted file, NTFS currently
407 * does not support DIO. For normal files, we report the bdev
408 * logical block size.
409 */
410 if (request_mask & STATX_DIOALIGN && S_ISREG(inode->i_mode)) {
411 unsigned int align =
412 bdev_logical_block_size(inode->i_sb->s_bdev);
413
414 stat->result_mask |= STATX_DIOALIGN;
415 if (!NInoCompressed(ni) && !NInoEncrypted(ni) &&
416 !NInoWofCompressed(ni)) {
417 stat->dio_mem_align = align;
418 stat->dio_offset_align = align;
419 }
420 }
421
422 return 0;
423 }
424
ntfs_file_llseek(struct file * file,loff_t offset,int whence)425 static loff_t ntfs_file_llseek(struct file *file, loff_t offset, int whence)
426 {
427 struct inode *inode = file->f_mapping->host;
428
429 if (NInoWofCompressed(NTFS_I(inode)) &&
430 (whence == SEEK_HOLE || whence == SEEK_DATA))
431 return -EOPNOTSUPP;
432
433 switch (whence) {
434 case SEEK_HOLE:
435 inode_lock_shared(inode);
436 offset = iomap_seek_hole(inode, offset, &ntfs_seek_iomap_ops);
437 inode_unlock_shared(inode);
438 break;
439 case SEEK_DATA:
440 inode_lock_shared(inode);
441 offset = iomap_seek_data(inode, offset, &ntfs_seek_iomap_ops);
442 inode_unlock_shared(inode);
443 break;
444 default:
445 return generic_file_llseek_size(file, offset, whence,
446 inode->i_sb->s_maxbytes,
447 i_size_read(inode));
448 }
449 if (offset < 0)
450 return offset;
451 return vfs_setpos(file, offset, inode->i_sb->s_maxbytes);
452 }
453
ntfs_file_read_iter(struct kiocb * iocb,struct iov_iter * to)454 static ssize_t ntfs_file_read_iter(struct kiocb *iocb, struct iov_iter *to)
455 {
456 struct inode *vi = file_inode(iocb->ki_filp);
457 struct super_block *sb = vi->i_sb;
458 ssize_t ret;
459
460 if (NVolShutdown(NTFS_SB(sb)))
461 return -EIO;
462
463 if ((NInoCompressed(NTFS_I(vi)) || NInoWofCompressed(NTFS_I(vi))) &&
464 iocb->ki_flags & IOCB_DIRECT)
465 return -EOPNOTSUPP;
466
467 inode_lock_shared(vi);
468
469 if (iocb->ki_flags & IOCB_DIRECT) {
470 size_t count = iov_iter_count(to);
471
472 if ((iocb->ki_pos | count) & (sb->s_blocksize - 1)) {
473 ret = -EINVAL;
474 goto inode_unlock;
475 }
476
477 file_accessed(iocb->ki_filp);
478 ret = iomap_dio_rw(iocb, to, &ntfs_read_iomap_ops, NULL, 0,
479 NULL, 0);
480 } else {
481 ret = generic_file_read_iter(iocb, to);
482 }
483
484 inode_unlock:
485 inode_unlock_shared(vi);
486
487 return ret;
488 }
489
ntfs_file_write_dio_end_io(struct kiocb * iocb,ssize_t size,int error,unsigned int flags)490 static int ntfs_file_write_dio_end_io(struct kiocb *iocb, ssize_t size,
491 int error, unsigned int flags)
492 {
493 struct inode *inode = file_inode(iocb->ki_filp);
494
495 if (error)
496 return error;
497
498 if (size) {
499 if (i_size_read(inode) < iocb->ki_pos + size) {
500 i_size_write(inode, iocb->ki_pos + size);
501 mark_inode_dirty(inode);
502 }
503 }
504
505 return 0;
506 }
507
508 static const struct iomap_dio_ops ntfs_write_dio_ops = {
509 .end_io = ntfs_file_write_dio_end_io,
510 };
511
ntfs_dio_write_iter(struct kiocb * iocb,struct iov_iter * from)512 static ssize_t ntfs_dio_write_iter(struct kiocb *iocb, struct iov_iter *from)
513 {
514 ssize_t ret;
515
516 ret = iomap_dio_rw(iocb, from, &ntfs_dio_iomap_ops,
517 &ntfs_write_dio_ops, 0, NULL, 0);
518 if (ret == -ENOTBLK)
519 ret = 0;
520 else if (ret < 0)
521 goto out;
522
523 if (iov_iter_count(from)) {
524 loff_t offset, end;
525 ssize_t written;
526 int ret2;
527
528 offset = iocb->ki_pos;
529 iocb->ki_flags &= ~IOCB_DIRECT;
530 written = iomap_file_buffered_write(iocb, from,
531 &ntfs_write_iomap_ops, &ntfs_iomap_folio_ops,
532 NULL);
533 if (written < 0) {
534 ret = written;
535 goto out;
536 }
537
538 ret += written;
539 end = iocb->ki_pos + written - 1;
540 ret2 = filemap_write_and_wait_range(iocb->ki_filp->f_mapping,
541 offset, end);
542 if (ret2) {
543 ret = -EIO;
544 goto out;
545 }
546 invalidate_mapping_pages(iocb->ki_filp->f_mapping,
547 offset >> PAGE_SHIFT,
548 end >> PAGE_SHIFT);
549 }
550
551 out:
552 return ret;
553 }
554
ntfs_expand_for_write(struct ntfs_inode * ni,loff_t end)555 static int ntfs_expand_for_write(struct ntfs_inode *ni, loff_t end)
556 {
557 struct ntfs_volume *vol = ni->vol;
558 loff_t prealloc_size = 0;
559 int err;
560
561 if (end <= ni->data_size)
562 return 0;
563
564 if (NInoCompressed(ni)) {
565 if (end > ni->allocated_size)
566 prealloc_size = round_up(end,
567 ni->itype.compressed.block_size);
568 } else if (end > ni->allocated_size &&
569 end < ni->allocated_size + vol->preallocated_size) {
570 prealloc_size = ni->allocated_size + vol->preallocated_size;
571 }
572
573 mutex_lock(&ni->mrec_lock);
574 err = ntfs_attr_expand(ni, end, prealloc_size);
575 mutex_unlock(&ni->mrec_lock);
576
577 return err;
578 }
579
ntfs_file_write_iter(struct kiocb * iocb,struct iov_iter * from)580 static ssize_t ntfs_file_write_iter(struct kiocb *iocb, struct iov_iter *from)
581 {
582 struct file *file = iocb->ki_filp;
583 struct inode *vi = file->f_mapping->host;
584 struct ntfs_inode *ni = NTFS_I(vi);
585 struct ntfs_volume *vol = ni->vol;
586 ssize_t ret;
587 ssize_t count;
588 loff_t pos, end;
589 int err;
590 loff_t old_data_size, old_init_size;
591
592 if (NVolShutdown(vol))
593 return -EIO;
594
595 if (NInoWofCompressed(ni))
596 return -EOPNOTSUPP;
597
598 if (NInoEncrypted(ni)) {
599 ntfs_error(vi->i_sb, "Writing for %s files is not supported yet",
600 NInoCompressed(ni) ? "Compressed" : "Encrypted");
601 return -EOPNOTSUPP;
602 }
603
604 if (NInoCompressed(ni) && iocb->ki_flags & IOCB_DIRECT)
605 return -EOPNOTSUPP;
606
607 if (iocb->ki_flags & IOCB_NOWAIT) {
608 if (!inode_trylock(vi))
609 return -EAGAIN;
610 } else
611 inode_lock(vi);
612
613 ret = generic_write_checks(iocb, from);
614 if (ret <= 0)
615 goto out_lock;
616
617 err = file_modified(iocb->ki_filp);
618 if (err) {
619 ret = err;
620 goto out_lock;
621 }
622
623 if (!(vol->vol_flags & VOLUME_IS_DIRTY))
624 ntfs_set_volume_flags(vol, VOLUME_IS_DIRTY);
625
626 pos = iocb->ki_pos;
627 count = ret;
628 end = pos + count;
629
630 old_data_size = ni->data_size;
631 old_init_size = ni->initialized_size;
632
633 if (end > old_data_size) {
634 ret = ntfs_expand_for_write(ni, end);
635 if (ret < 0)
636 goto out;
637 }
638
639 if (NInoNonResident(ni) && !NInoCompressed(ni) &&
640 end > old_init_size) {
641 ret = ntfs_extend_initialized_size(vi, pos, end);
642 if (ret < 0)
643 goto out;
644 }
645
646 if (NInoNonResident(ni) && NInoCompressed(ni)) {
647 ret = ntfs_compress_write(ni, pos, count, from);
648 if (ret > 0)
649 iocb->ki_pos += ret;
650 goto out;
651 }
652
653 if (NInoNonResident(ni) && iocb->ki_flags & IOCB_DIRECT)
654 ret = ntfs_dio_write_iter(iocb, from);
655 else
656 ret = iomap_file_buffered_write(iocb, from, &ntfs_write_iomap_ops,
657 &ntfs_iomap_folio_ops, NULL);
658 out:
659 if (ret < 0 && ret != -EIOCBQUEUED) {
660 if (ni->initialized_size != old_init_size) {
661 mutex_lock(&ni->mrec_lock);
662 ntfs_attr_set_initialized_size(ni, old_init_size);
663 mutex_unlock(&ni->mrec_lock);
664 }
665 if (ni->data_size != old_data_size) {
666 truncate_setsize(vi, old_data_size);
667 ntfs_attr_truncate(ni, old_data_size);
668 }
669 }
670 out_lock:
671 inode_unlock(vi);
672 if (ret > 0)
673 ret = generic_write_sync(iocb, ret);
674 return ret;
675 }
676
ntfs_filemap_page_mkwrite(struct vm_fault * vmf)677 static vm_fault_t ntfs_filemap_page_mkwrite(struct vm_fault *vmf)
678 {
679 struct inode *inode = file_inode(vmf->vma->vm_file);
680 struct address_space *mapping = inode->i_mapping;
681 vm_fault_t ret;
682
683 if (NInoWofCompressed(NTFS_I(inode)))
684 return VM_FAULT_SIGBUS;
685
686 sb_start_pagefault(inode->i_sb);
687 file_update_time(vmf->vma->vm_file);
688
689 /*
690 * Serialize against truncate/fallocate which hold the lock
691 * exclusively while invalidating pagecache and changing extents.
692 */
693 filemap_invalidate_lock_shared(mapping);
694 ret = iomap_page_mkwrite(vmf, &ntfs_page_mkwrite_iomap_ops, NULL);
695 filemap_invalidate_unlock_shared(mapping);
696
697 sb_end_pagefault(inode->i_sb);
698 return ret;
699 }
700
701 static const struct vm_operations_struct ntfs_file_vm_ops = {
702 .fault = filemap_fault,
703 .map_pages = filemap_map_pages,
704 .page_mkwrite = ntfs_filemap_page_mkwrite,
705 };
706
ntfs_file_mmap_prepare(struct vm_area_desc * desc)707 static int ntfs_file_mmap_prepare(struct vm_area_desc *desc)
708 {
709 struct file *file = desc->file;
710 struct inode *inode = file_inode(file);
711
712 if (NVolShutdown(NTFS_SB(file->f_mapping->host->i_sb)))
713 return -EIO;
714
715 if (NInoCompressed(NTFS_I(inode)) || NInoWofCompressed(NTFS_I(inode)))
716 return -EOPNOTSUPP;
717
718 if (vma_desc_test_all(desc, VMA_SHARED_BIT, VMA_MAYWRITE_BIT)) {
719 struct inode *inode = file_inode(file);
720 loff_t from, to;
721 int err;
722
723 from = ((loff_t)desc->pgoff << PAGE_SHIFT);
724 to = min_t(loff_t, i_size_read(inode),
725 from + desc->end - desc->start);
726
727 if (NTFS_I(inode)->initialized_size < to) {
728 err = ntfs_extend_initialized_size(inode, to, to);
729 if (err)
730 return err;
731 }
732 }
733
734
735 file_accessed(file);
736 desc->vm_ops = &ntfs_file_vm_ops;
737 return 0;
738 }
739
ntfs_fiemap(struct inode * inode,struct fiemap_extent_info * fieinfo,u64 start,u64 len)740 static int ntfs_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
741 u64 start, u64 len)
742 {
743 if (NInoWofCompressed(NTFS_I(inode)))
744 return -EOPNOTSUPP;
745
746 return iomap_fiemap(inode, fieinfo, start, len, &ntfs_read_iomap_ops);
747 }
748
ntfs_get_link(struct dentry * dentry,struct inode * inode,struct delayed_call * done)749 static const char *ntfs_get_link(struct dentry *dentry, struct inode *inode,
750 struct delayed_call *done)
751 {
752 struct ntfs_inode *ni = NTFS_I(inode);
753 char *target;
754 int err;
755
756 if (!dentry)
757 return ERR_PTR(-ECHILD);
758
759 if (!ni->target)
760 return ERR_PTR(-EINVAL);
761
762 if (ni->reparse_tag == IO_REPARSE_TAG_MOUNT_POINT ||
763 (ni->reparse_tag == IO_REPARSE_TAG_SYMLINK &&
764 !(ni->reparse_flags & cpu_to_le32(SYMLINK_FLAG_RELATIVE)))) {
765 if (NVolNativeSymlinkRel(ni->vol)) {
766 err = ntfs_translate_symlink_path(dentry, ni->target, &target);
767 if (err < 0)
768 return ERR_PTR(err);
769 set_delayed_call(done, kfree_link, target);
770 return target;
771 }
772 }
773
774 return ni->target;
775 }
776
ntfs_file_splice_read(struct file * in,loff_t * ppos,struct pipe_inode_info * pipe,size_t len,unsigned int flags)777 static ssize_t ntfs_file_splice_read(struct file *in, loff_t *ppos,
778 struct pipe_inode_info *pipe, size_t len, unsigned int flags)
779 {
780 if (NVolShutdown(NTFS_SB(in->f_mapping->host->i_sb)))
781 return -EIO;
782
783 return filemap_splice_read(in, ppos, pipe, len, flags);
784 }
785
ntfs_ioctl_shutdown(struct super_block * sb,unsigned long arg)786 static int ntfs_ioctl_shutdown(struct super_block *sb, unsigned long arg)
787 {
788 u32 flags;
789
790 if (!capable(CAP_SYS_ADMIN))
791 return -EPERM;
792
793 if (get_user(flags, (__u32 __user *)arg))
794 return -EFAULT;
795
796 return ntfs_force_shutdown(sb, flags);
797 }
798
ntfs_ioctl_get_volume_label(struct file * filp,unsigned long arg)799 static int ntfs_ioctl_get_volume_label(struct file *filp, unsigned long arg)
800 {
801 struct ntfs_volume *vol = NTFS_SB(file_inode(filp)->i_sb);
802 char __user *buf = (char __user *)arg;
803 char label[FSLABEL_MAX];
804 ssize_t len;
805
806 mutex_lock(&vol->volume_label_lock);
807 if (!vol->volume_label) {
808 label[0] = '\0';
809 len = 0;
810 } else {
811 len = strscpy(label, vol->volume_label, sizeof(label));
812 if (len == -E2BIG)
813 len = FSLABEL_MAX - 1;
814 }
815 mutex_unlock(&vol->volume_label_lock);
816
817 if (copy_to_user(buf, label, len + 1))
818 return -EFAULT;
819 return 0;
820 }
821
ntfs_ioctl_set_volume_label(struct file * filp,unsigned long arg)822 static int ntfs_ioctl_set_volume_label(struct file *filp, unsigned long arg)
823 {
824 struct ntfs_volume *vol = NTFS_SB(file_inode(filp)->i_sb);
825 char *label;
826 int ret;
827
828 if (!capable(CAP_SYS_ADMIN))
829 return -EPERM;
830
831 label = strndup_user((const char __user *)arg, FSLABEL_MAX);
832 if (IS_ERR(label))
833 return PTR_ERR(label);
834
835 ret = mnt_want_write_file(filp);
836 if (ret)
837 goto out;
838
839 ret = ntfs_write_volume_label(vol, label);
840 mnt_drop_write_file(filp);
841 out:
842 kfree(label);
843 return ret;
844 }
845
ntfs_ioctl_fitrim(struct ntfs_volume * vol,unsigned long arg)846 static int ntfs_ioctl_fitrim(struct ntfs_volume *vol, unsigned long arg)
847 {
848 struct fstrim_range __user *user_range;
849 struct fstrim_range range;
850 struct block_device *dev;
851 int err;
852
853 if (!capable(CAP_SYS_ADMIN))
854 return -EPERM;
855
856 dev = vol->sb->s_bdev;
857 if (!bdev_max_discard_sectors(dev))
858 return -EOPNOTSUPP;
859
860 user_range = (struct fstrim_range __user *)arg;
861 if (copy_from_user(&range, user_range, sizeof(range)))
862 return -EFAULT;
863
864 if (range.len == 0)
865 return -EINVAL;
866
867 if (range.len < vol->cluster_size)
868 return -EINVAL;
869
870 range.minlen = max_t(u32, range.minlen, bdev_discard_granularity(dev));
871
872 err = ntfs_trim_fs(vol, &range);
873 if (err < 0)
874 return err;
875
876 if (copy_to_user(user_range, &range, sizeof(range)))
877 return -EFAULT;
878
879 return 0;
880 }
881
ntfs_ioctl(struct file * filp,unsigned int cmd,unsigned long arg)882 long ntfs_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
883 {
884 switch (cmd) {
885 case FS_IOC_SHUTDOWN:
886 return ntfs_ioctl_shutdown(file_inode(filp)->i_sb, arg);
887 case FS_IOC_GETFSLABEL:
888 return ntfs_ioctl_get_volume_label(filp, arg);
889 case FS_IOC_SETFSLABEL:
890 return ntfs_ioctl_set_volume_label(filp, arg);
891 case FITRIM:
892 return ntfs_ioctl_fitrim(NTFS_SB(file_inode(filp)->i_sb), arg);
893 default:
894 return -ENOTTY;
895 }
896 }
897
898 #ifdef CONFIG_COMPAT
ntfs_compat_ioctl(struct file * filp,unsigned int cmd,unsigned long arg)899 long ntfs_compat_ioctl(struct file *filp, unsigned int cmd,
900 unsigned long arg)
901 {
902 return ntfs_ioctl(filp, cmd, (unsigned long)compat_ptr(arg));
903 }
904 #endif
905
ntfs_allocate_range(struct ntfs_inode * ni,int mode,loff_t offset,loff_t len)906 static int ntfs_allocate_range(struct ntfs_inode *ni, int mode, loff_t offset,
907 loff_t len)
908 {
909 struct inode *vi = VFS_I(ni);
910 struct ntfs_volume *vol = ni->vol;
911 s64 need_space;
912 loff_t old_size, new_size;
913 s64 start_vcn, end_vcn;
914 int err;
915
916 old_size = i_size_read(vi);
917 new_size = max_t(loff_t, old_size, offset + len);
918 start_vcn = ntfs_bytes_to_cluster(vol, offset);
919 end_vcn = ntfs_bytes_to_cluster(vol, offset + len - 1) + 1;
920
921 err = inode_newsize_ok(vi, new_size);
922 if (err)
923 goto out;
924
925 need_space = ntfs_bytes_to_cluster(vol, ni->allocated_size);
926 if (need_space > start_vcn)
927 need_space = end_vcn - need_space;
928 else
929 need_space = end_vcn - start_vcn;
930 if (need_space > 0 &&
931 need_space > (atomic64_read(&vol->free_clusters) -
932 atomic64_read(&vol->dirty_clusters))) {
933 err = -ENOSPC;
934 goto out;
935 }
936
937 err = ntfs_attr_fallocate(ni, offset, len,
938 mode & FALLOC_FL_KEEP_SIZE ? true : false);
939
940 if (!(mode & FALLOC_FL_KEEP_SIZE) && new_size != old_size)
941 i_size_write(vi, ni->data_size);
942 out:
943 return err;
944 }
945
ntfs_punch_hole(struct ntfs_inode * ni,int mode,loff_t offset,loff_t len)946 static int ntfs_punch_hole(struct ntfs_inode *ni, int mode, loff_t offset,
947 loff_t len)
948 {
949 struct ntfs_volume *vol = ni->vol;
950 struct inode *vi = VFS_I(ni);
951 loff_t end_offset;
952 s64 start_vcn, end_vcn;
953 int err = 0;
954
955 loff_t offset_down = round_down(offset, max_t(unsigned int,
956 vol->cluster_size, PAGE_SIZE));
957
958 if (NVolDisableSparse(vol)) {
959 err = -EOPNOTSUPP;
960 goto out;
961 }
962
963 if (offset >= ni->data_size)
964 goto out;
965
966 if (offset + len > ni->data_size)
967 end_offset = ni->data_size;
968 else
969 end_offset = offset + len;
970
971 err = filemap_write_and_wait_range(vi->i_mapping, offset_down, LLONG_MAX);
972 if (err)
973 goto out;
974 truncate_pagecache(vi, offset_down);
975
976 start_vcn = ntfs_bytes_to_cluster(vol, offset);
977 end_vcn = ntfs_bytes_to_cluster(vol, end_offset - 1) + 1;
978
979 if (offset & vol->cluster_size_mask) {
980 if (offset < ni->initialized_size) {
981 loff_t to;
982
983 to = min_t(loff_t,
984 ntfs_cluster_to_bytes(vol, start_vcn + 1),
985 end_offset);
986 err = iomap_zero_range(vi, offset, to - offset,
987 NULL, &ntfs_seek_iomap_ops,
988 &ntfs_iomap_folio_ops, NULL);
989 if (err < 0)
990 goto out;
991 }
992 if (end_vcn - start_vcn == 1)
993 goto out;
994 start_vcn++;
995 }
996
997 if (end_offset & vol->cluster_size_mask) {
998 loff_t from;
999
1000 from = ntfs_cluster_to_bytes(vol, end_vcn - 1);
1001 if (from < ni->initialized_size) {
1002 err = iomap_zero_range(vi, from, end_offset - from,
1003 NULL, &ntfs_seek_iomap_ops,
1004 &ntfs_iomap_folio_ops, NULL);
1005 if (err < 0)
1006 goto out;
1007 }
1008 if (end_vcn - start_vcn == 1)
1009 goto out;
1010 end_vcn--;
1011 }
1012
1013 mutex_lock_nested(&ni->mrec_lock, NTFS_INODE_MUTEX_NORMAL);
1014 err = ntfs_non_resident_attr_punch_hole(ni, start_vcn,
1015 end_vcn - start_vcn);
1016 mutex_unlock(&ni->mrec_lock);
1017 out:
1018 return err;
1019 }
1020
ntfs_collapse_range(struct ntfs_inode * ni,loff_t offset,loff_t len)1021 static int ntfs_collapse_range(struct ntfs_inode *ni, loff_t offset, loff_t len)
1022 {
1023 struct ntfs_volume *vol = ni->vol;
1024 struct inode *vi = VFS_I(ni);
1025 loff_t old_size, new_size;
1026 s64 start_vcn, end_vcn;
1027 int err;
1028
1029 loff_t offset_down = round_down(offset,
1030 max_t(unsigned long, vol->cluster_size, PAGE_SIZE));
1031
1032 if ((offset & vol->cluster_size_mask) ||
1033 (len & vol->cluster_size_mask) ||
1034 offset >= ni->allocated_size) {
1035 err = -EINVAL;
1036 goto out;
1037 }
1038
1039 old_size = i_size_read(vi);
1040 start_vcn = ntfs_bytes_to_cluster(vol, offset);
1041 end_vcn = ntfs_bytes_to_cluster(vol, offset + len - 1) + 1;
1042
1043 if (ntfs_cluster_to_bytes(vol, end_vcn) > ni->allocated_size)
1044 end_vcn = (round_up(ni->allocated_size - 1,
1045 vol->cluster_size) >> vol->cluster_size_bits) + 1;
1046 new_size = old_size - ntfs_cluster_to_bytes(vol, end_vcn - start_vcn);
1047 if (new_size < 0)
1048 new_size = 0;
1049 err = filemap_write_and_wait_range(vi->i_mapping,
1050 offset_down, LLONG_MAX);
1051 if (err)
1052 goto out;
1053
1054 truncate_pagecache(vi, offset_down);
1055
1056 mutex_lock_nested(&ni->mrec_lock, NTFS_INODE_MUTEX_NORMAL);
1057 err = ntfs_non_resident_attr_collapse_range(ni, start_vcn,
1058 end_vcn - start_vcn);
1059 mutex_unlock(&ni->mrec_lock);
1060
1061 if (new_size != old_size)
1062 i_size_write(vi, ni->data_size);
1063 out:
1064 return err;
1065 }
1066
ntfs_insert_range(struct ntfs_inode * ni,loff_t offset,loff_t len)1067 static int ntfs_insert_range(struct ntfs_inode *ni, loff_t offset, loff_t len)
1068 {
1069 struct ntfs_volume *vol = ni->vol;
1070 struct inode *vi = VFS_I(ni);
1071 loff_t offset_down = round_down(offset,
1072 max_t(unsigned long, vol->cluster_size, PAGE_SIZE));
1073 loff_t alloc_size, end_offset = offset + len;
1074 loff_t old_size, new_size;
1075 s64 start_vcn, end_vcn;
1076 int err;
1077
1078 if (NVolDisableSparse(vol)) {
1079 err = -EOPNOTSUPP;
1080 goto out;
1081 }
1082
1083 if ((offset & vol->cluster_size_mask) ||
1084 (len & vol->cluster_size_mask) ||
1085 offset >= ni->allocated_size) {
1086 err = -EINVAL;
1087 goto out;
1088 }
1089
1090 old_size = i_size_read(vi);
1091 start_vcn = ntfs_bytes_to_cluster(vol, offset);
1092 end_vcn = ntfs_bytes_to_cluster(vol, end_offset - 1) + 1;
1093
1094 new_size = old_size + ntfs_cluster_to_bytes(vol, end_vcn - start_vcn);
1095 alloc_size = ni->allocated_size +
1096 ntfs_cluster_to_bytes(vol, end_vcn - start_vcn);
1097 if (alloc_size < 0) {
1098 err = -EFBIG;
1099 goto out;
1100 }
1101 err = inode_newsize_ok(vi, alloc_size);
1102 if (err)
1103 goto out;
1104
1105 err = filemap_write_and_wait_range(vi->i_mapping,
1106 offset_down, LLONG_MAX);
1107 if (err)
1108 goto out;
1109
1110 truncate_pagecache(vi, offset_down);
1111
1112 mutex_lock_nested(&ni->mrec_lock, NTFS_INODE_MUTEX_NORMAL);
1113 err = ntfs_non_resident_attr_insert_range(ni, start_vcn,
1114 end_vcn - start_vcn);
1115 mutex_unlock(&ni->mrec_lock);
1116
1117 if (new_size != old_size)
1118 i_size_write(vi, ni->data_size);
1119 out:
1120 return err;
1121 }
1122
1123 #define NTFS_FALLOC_FL_SUPPORTED \
1124 (FALLOC_FL_ALLOCATE_RANGE | FALLOC_FL_KEEP_SIZE | \
1125 FALLOC_FL_INSERT_RANGE | FALLOC_FL_PUNCH_HOLE | \
1126 FALLOC_FL_COLLAPSE_RANGE)
1127
ntfs_fallocate(struct file * file,int mode,loff_t offset,loff_t len)1128 static long ntfs_fallocate(struct file *file, int mode, loff_t offset, loff_t len)
1129 {
1130 struct inode *vi = file_inode(file);
1131 struct ntfs_inode *ni = NTFS_I(vi);
1132 struct ntfs_volume *vol = ni->vol;
1133 int err = 0;
1134 loff_t old_size;
1135
1136 if (mode & ~(NTFS_FALLOC_FL_SUPPORTED))
1137 return -EOPNOTSUPP;
1138
1139 if (NInoCompressed(ni) || NInoEncrypted(ni) || NInoWofCompressed(ni))
1140 return -EOPNOTSUPP;
1141
1142 if (!NVolFreeClusterKnown(vol))
1143 wait_event(vol->free_waitq, NVolFreeClusterKnown(vol));
1144
1145 if ((ni->vol->mft_zone_end - ni->vol->mft_zone_start) == 0)
1146 return -ENOSPC;
1147
1148 if (NInoNonResident(ni) && !NInoFullyMapped(ni)) {
1149 down_write(&ni->runlist.lock);
1150 err = ntfs_attr_map_whole_runlist(ni);
1151 up_write(&ni->runlist.lock);
1152 if (err)
1153 return err;
1154 }
1155
1156 if (!(vol->vol_flags & VOLUME_IS_DIRTY)) {
1157 err = ntfs_set_volume_flags(vol, VOLUME_IS_DIRTY);
1158 if (err)
1159 return err;
1160 }
1161
1162 old_size = i_size_read(vi);
1163
1164 inode_lock(vi);
1165 if (NInoCompressed(ni) || NInoEncrypted(ni) || NInoWofCompressed(ni)) {
1166 inode_unlock(vi);
1167 return -EOPNOTSUPP;
1168 }
1169
1170 inode_dio_wait(vi);
1171 /* Take invalidate_lock for all fallocate operations to prevent races */
1172 filemap_invalidate_lock(vi->i_mapping);
1173
1174 switch (mode & FALLOC_FL_MODE_MASK) {
1175 case FALLOC_FL_ALLOCATE_RANGE:
1176 case FALLOC_FL_KEEP_SIZE:
1177 err = ntfs_allocate_range(ni, mode, offset, len);
1178 break;
1179 case FALLOC_FL_PUNCH_HOLE:
1180 err = ntfs_punch_hole(ni, mode, offset, len);
1181 break;
1182 case FALLOC_FL_COLLAPSE_RANGE:
1183 err = ntfs_collapse_range(ni, offset, len);
1184 break;
1185 case FALLOC_FL_INSERT_RANGE:
1186 err = ntfs_insert_range(ni, offset, len);
1187 break;
1188 default:
1189 err = -EOPNOTSUPP;
1190 }
1191
1192 if (err)
1193 goto out;
1194
1195 err = file_modified(file);
1196 out:
1197 if (!err && mode == 0 && NInoNonResident(ni) &&
1198 offset > old_size) {
1199 truncate_pagecache(vi, old_size);
1200 pagecache_isize_extended(vi, old_size, offset);
1201 }
1202
1203 filemap_invalidate_unlock(vi->i_mapping);
1204
1205 if (!err) {
1206 NInoSetFileNameDirty(ni);
1207 inode_set_mtime_to_ts(vi, inode_set_ctime_current(vi));
1208 mark_inode_dirty(vi);
1209 }
1210
1211 inode_unlock(vi);
1212 return err;
1213 }
1214
1215 const struct file_operations ntfs_file_ops = {
1216 .llseek = ntfs_file_llseek,
1217 .read_iter = ntfs_file_read_iter,
1218 .write_iter = ntfs_file_write_iter,
1219 .fsync = ntfs_file_fsync,
1220 .mmap_prepare = ntfs_file_mmap_prepare,
1221 .open = ntfs_file_open,
1222 .release = ntfs_file_release,
1223 .splice_read = ntfs_file_splice_read,
1224 .splice_write = iter_file_splice_write,
1225 .unlocked_ioctl = ntfs_ioctl,
1226 #ifdef CONFIG_COMPAT
1227 .compat_ioctl = ntfs_compat_ioctl,
1228 #endif
1229 .fallocate = ntfs_fallocate,
1230 .setlease = generic_setlease,
1231 };
1232
1233 const struct inode_operations ntfs_file_inode_ops = {
1234 .setattr = ntfs_setattr,
1235 .getattr = ntfs_getattr,
1236 .listxattr = ntfs_listxattr,
1237 .get_acl = ntfs_get_acl,
1238 .set_acl = ntfs_set_acl,
1239 .fiemap = ntfs_fiemap,
1240 };
1241
1242 const struct inode_operations ntfs_symlink_inode_operations = {
1243 .get_link = ntfs_get_link,
1244 .setattr = ntfs_setattr,
1245 .listxattr = ntfs_listxattr,
1246 };
1247
1248 const struct inode_operations ntfs_special_inode_operations = {
1249 .setattr = ntfs_setattr,
1250 .getattr = ntfs_getattr,
1251 .listxattr = ntfs_listxattr,
1252 .get_acl = ntfs_get_acl,
1253 .set_acl = ntfs_set_acl,
1254 };
1255
1256 const struct file_operations ntfs_empty_file_ops = {};
1257
1258 const struct inode_operations ntfs_empty_inode_ops = {};
1259