Handle possible null pointers from malloc/strdup/strndup()
[zfs.git] / module / os / linux / zfs / zpl_file.c
blob25fc6b223297d1d3208410873dabf5907f3d38a0
1 /*
2 * CDDL HEADER START
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or https://opensource.org/licenses/CDDL-1.0.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
19 * CDDL HEADER END
22 * Copyright (c) 2011, Lawrence Livermore National Security, LLC.
23 * Copyright (c) 2015 by Chunwei Chen. All rights reserved.
27 #ifdef CONFIG_COMPAT
28 #include <linux/compat.h>
29 #endif
30 #include <linux/fs.h>
31 #include <sys/file.h>
32 #include <sys/dmu_objset.h>
33 #include <sys/zfs_znode.h>
34 #include <sys/zfs_vfsops.h>
35 #include <sys/zfs_vnops.h>
36 #include <sys/zfs_project.h>
37 #if defined(HAVE_VFS_SET_PAGE_DIRTY_NOBUFFERS) || \
38 defined(HAVE_VFS_FILEMAP_DIRTY_FOLIO)
39 #include <linux/pagemap.h>
40 #endif
41 #ifdef HAVE_FILE_FADVISE
42 #include <linux/fadvise.h>
43 #endif
44 #ifdef HAVE_VFS_FILEMAP_DIRTY_FOLIO
45 #include <linux/writeback.h>
46 #endif
49 * When using fallocate(2) to preallocate space, inflate the requested
50 * capacity check by 10% to account for the required metadata blocks.
52 static unsigned int zfs_fallocate_reserve_percent = 110;
54 static int
55 zpl_open(struct inode *ip, struct file *filp)
57 cred_t *cr = CRED();
58 int error;
59 fstrans_cookie_t cookie;
61 error = generic_file_open(ip, filp);
62 if (error)
63 return (error);
65 crhold(cr);
66 cookie = spl_fstrans_mark();
67 error = -zfs_open(ip, filp->f_mode, filp->f_flags, cr);
68 spl_fstrans_unmark(cookie);
69 crfree(cr);
70 ASSERT3S(error, <=, 0);
72 return (error);
75 static int
76 zpl_release(struct inode *ip, struct file *filp)
78 cred_t *cr = CRED();
79 int error;
80 fstrans_cookie_t cookie;
82 cookie = spl_fstrans_mark();
83 if (ITOZ(ip)->z_atime_dirty)
84 zfs_mark_inode_dirty(ip);
86 crhold(cr);
87 error = -zfs_close(ip, filp->f_flags, cr);
88 spl_fstrans_unmark(cookie);
89 crfree(cr);
90 ASSERT3S(error, <=, 0);
92 return (error);
95 static int
96 zpl_iterate(struct file *filp, zpl_dir_context_t *ctx)
98 cred_t *cr = CRED();
99 int error;
100 fstrans_cookie_t cookie;
102 crhold(cr);
103 cookie = spl_fstrans_mark();
104 error = -zfs_readdir(file_inode(filp), ctx, cr);
105 spl_fstrans_unmark(cookie);
106 crfree(cr);
107 ASSERT3S(error, <=, 0);
109 return (error);
112 #if !defined(HAVE_VFS_ITERATE) && !defined(HAVE_VFS_ITERATE_SHARED)
113 static int
114 zpl_readdir(struct file *filp, void *dirent, filldir_t filldir)
116 zpl_dir_context_t ctx =
117 ZPL_DIR_CONTEXT_INIT(dirent, filldir, filp->f_pos);
118 int error;
120 error = zpl_iterate(filp, &ctx);
121 filp->f_pos = ctx.pos;
123 return (error);
125 #endif /* !HAVE_VFS_ITERATE && !HAVE_VFS_ITERATE_SHARED */
127 #if defined(HAVE_FSYNC_WITHOUT_DENTRY)
129 * Linux 2.6.35 - 3.0 API,
130 * As of 2.6.35 the dentry argument to the fops->fsync() hook was deemed
131 * redundant. The dentry is still accessible via filp->f_path.dentry,
132 * and we are guaranteed that filp will never be NULL.
134 static int
135 zpl_fsync(struct file *filp, int datasync)
137 struct inode *inode = filp->f_mapping->host;
138 cred_t *cr = CRED();
139 int error;
140 fstrans_cookie_t cookie;
142 crhold(cr);
143 cookie = spl_fstrans_mark();
144 error = -zfs_fsync(ITOZ(inode), datasync, cr);
145 spl_fstrans_unmark(cookie);
146 crfree(cr);
147 ASSERT3S(error, <=, 0);
149 return (error);
152 #ifdef HAVE_FILE_AIO_FSYNC
153 static int
154 zpl_aio_fsync(struct kiocb *kiocb, int datasync)
156 return (zpl_fsync(kiocb->ki_filp, datasync));
158 #endif
160 #elif defined(HAVE_FSYNC_RANGE)
162 * Linux 3.1 API,
163 * As of 3.1 the responsibility to call filemap_write_and_wait_range() has
164 * been pushed down in to the .fsync() vfs hook. Additionally, the i_mutex
165 * lock is no longer held by the caller, for zfs we don't require the lock
166 * to be held so we don't acquire it.
168 static int
169 zpl_fsync(struct file *filp, loff_t start, loff_t end, int datasync)
171 struct inode *inode = filp->f_mapping->host;
172 znode_t *zp = ITOZ(inode);
173 zfsvfs_t *zfsvfs = ITOZSB(inode);
174 cred_t *cr = CRED();
175 int error;
176 fstrans_cookie_t cookie;
179 * The variables z_sync_writes_cnt and z_async_writes_cnt work in
180 * tandem so that sync writes can detect if there are any non-sync
181 * writes going on and vice-versa. The "vice-versa" part to this logic
182 * is located in zfs_putpage() where non-sync writes check if there are
183 * any ongoing sync writes. If any sync and non-sync writes overlap,
184 * we do a commit to complete the non-sync writes since the latter can
185 * potentially take several seconds to complete and thus block sync
186 * writes in the upcoming call to filemap_write_and_wait_range().
188 atomic_inc_32(&zp->z_sync_writes_cnt);
190 * If the following check does not detect an overlapping non-sync write
191 * (say because it's just about to start), then it is guaranteed that
192 * the non-sync write will detect this sync write. This is because we
193 * always increment z_sync_writes_cnt / z_async_writes_cnt before doing
194 * the check on z_async_writes_cnt / z_sync_writes_cnt here and in
195 * zfs_putpage() respectively.
197 if (atomic_load_32(&zp->z_async_writes_cnt) > 0) {
198 if ((error = zpl_enter(zfsvfs, FTAG)) != 0) {
199 atomic_dec_32(&zp->z_sync_writes_cnt);
200 return (error);
202 zil_commit(zfsvfs->z_log, zp->z_id);
203 zpl_exit(zfsvfs, FTAG);
206 error = filemap_write_and_wait_range(inode->i_mapping, start, end);
209 * The sync write is not complete yet but we decrement
210 * z_sync_writes_cnt since zfs_fsync() increments and decrements
211 * it internally. If a non-sync write starts just after the decrement
212 * operation but before we call zfs_fsync(), it may not detect this
213 * overlapping sync write but it does not matter since we have already
214 * gone past filemap_write_and_wait_range() and we won't block due to
215 * the non-sync write.
217 atomic_dec_32(&zp->z_sync_writes_cnt);
219 if (error)
220 return (error);
222 crhold(cr);
223 cookie = spl_fstrans_mark();
224 error = -zfs_fsync(zp, datasync, cr);
225 spl_fstrans_unmark(cookie);
226 crfree(cr);
227 ASSERT3S(error, <=, 0);
229 return (error);
232 #ifdef HAVE_FILE_AIO_FSYNC
233 static int
234 zpl_aio_fsync(struct kiocb *kiocb, int datasync)
236 return (zpl_fsync(kiocb->ki_filp, kiocb->ki_pos, -1, datasync));
238 #endif
240 #else
241 #error "Unsupported fops->fsync() implementation"
242 #endif
244 static inline int
245 zfs_io_flags(struct kiocb *kiocb)
247 int flags = 0;
249 #if defined(IOCB_DSYNC)
250 if (kiocb->ki_flags & IOCB_DSYNC)
251 flags |= O_DSYNC;
252 #endif
253 #if defined(IOCB_SYNC)
254 if (kiocb->ki_flags & IOCB_SYNC)
255 flags |= O_SYNC;
256 #endif
257 #if defined(IOCB_APPEND)
258 if (kiocb->ki_flags & IOCB_APPEND)
259 flags |= O_APPEND;
260 #endif
261 #if defined(IOCB_DIRECT)
262 if (kiocb->ki_flags & IOCB_DIRECT)
263 flags |= O_DIRECT;
264 #endif
265 return (flags);
269 * If relatime is enabled, call file_accessed() if zfs_relatime_need_update()
270 * is true. This is needed since datasets with inherited "relatime" property
271 * aren't necessarily mounted with the MNT_RELATIME flag (e.g. after
272 * `zfs set relatime=...`), which is what relatime test in VFS by
273 * relatime_need_update() is based on.
275 static inline void
276 zpl_file_accessed(struct file *filp)
278 struct inode *ip = filp->f_mapping->host;
280 if (!IS_NOATIME(ip) && ITOZSB(ip)->z_relatime) {
281 if (zfs_relatime_need_update(ip))
282 file_accessed(filp);
283 } else {
284 file_accessed(filp);
288 #if defined(HAVE_VFS_RW_ITERATE)
291 * When HAVE_VFS_IOV_ITER is defined the iov_iter structure supports
292 * iovecs, kvevs, bvecs and pipes, plus all the required interfaces to
293 * manipulate the iov_iter are available. In which case the full iov_iter
294 * can be attached to the uio and correctly handled in the lower layers.
295 * Otherwise, for older kernels extract the iovec and pass it instead.
297 static void
298 zpl_uio_init(zfs_uio_t *uio, struct kiocb *kiocb, struct iov_iter *to,
299 loff_t pos, ssize_t count, size_t skip)
301 #if defined(HAVE_VFS_IOV_ITER)
302 zfs_uio_iov_iter_init(uio, to, pos, count, skip);
303 #else
304 #ifdef HAVE_IOV_ITER_TYPE
305 zfs_uio_iovec_init(uio, to->iov, to->nr_segs, pos,
306 iov_iter_type(to) & ITER_KVEC ? UIO_SYSSPACE : UIO_USERSPACE,
307 count, skip);
308 #else
309 zfs_uio_iovec_init(uio, to->iov, to->nr_segs, pos,
310 to->type & ITER_KVEC ? UIO_SYSSPACE : UIO_USERSPACE,
311 count, skip);
312 #endif
313 #endif
316 static ssize_t
317 zpl_iter_read(struct kiocb *kiocb, struct iov_iter *to)
319 cred_t *cr = CRED();
320 fstrans_cookie_t cookie;
321 struct file *filp = kiocb->ki_filp;
322 ssize_t count = iov_iter_count(to);
323 zfs_uio_t uio;
325 zpl_uio_init(&uio, kiocb, to, kiocb->ki_pos, count, 0);
327 crhold(cr);
328 cookie = spl_fstrans_mark();
330 int error = -zfs_read(ITOZ(filp->f_mapping->host), &uio,
331 filp->f_flags | zfs_io_flags(kiocb), cr);
333 spl_fstrans_unmark(cookie);
334 crfree(cr);
336 if (error < 0)
337 return (error);
339 ssize_t read = count - uio.uio_resid;
340 kiocb->ki_pos += read;
342 zpl_file_accessed(filp);
344 return (read);
347 static inline ssize_t
348 zpl_generic_write_checks(struct kiocb *kiocb, struct iov_iter *from,
349 size_t *countp)
351 #ifdef HAVE_GENERIC_WRITE_CHECKS_KIOCB
352 ssize_t ret = generic_write_checks(kiocb, from);
353 if (ret <= 0)
354 return (ret);
356 *countp = ret;
357 #else
358 struct file *file = kiocb->ki_filp;
359 struct address_space *mapping = file->f_mapping;
360 struct inode *ip = mapping->host;
361 int isblk = S_ISBLK(ip->i_mode);
363 *countp = iov_iter_count(from);
364 ssize_t ret = generic_write_checks(file, &kiocb->ki_pos, countp, isblk);
365 if (ret)
366 return (ret);
367 #endif
369 return (0);
372 static ssize_t
373 zpl_iter_write(struct kiocb *kiocb, struct iov_iter *from)
375 cred_t *cr = CRED();
376 fstrans_cookie_t cookie;
377 struct file *filp = kiocb->ki_filp;
378 struct inode *ip = filp->f_mapping->host;
379 zfs_uio_t uio;
380 size_t count = 0;
381 ssize_t ret;
383 ret = zpl_generic_write_checks(kiocb, from, &count);
384 if (ret)
385 return (ret);
387 zpl_uio_init(&uio, kiocb, from, kiocb->ki_pos, count, from->iov_offset);
389 crhold(cr);
390 cookie = spl_fstrans_mark();
392 int error = -zfs_write(ITOZ(ip), &uio,
393 filp->f_flags | zfs_io_flags(kiocb), cr);
395 spl_fstrans_unmark(cookie);
396 crfree(cr);
398 if (error < 0)
399 return (error);
401 ssize_t wrote = count - uio.uio_resid;
402 kiocb->ki_pos += wrote;
404 return (wrote);
407 #else /* !HAVE_VFS_RW_ITERATE */
409 static ssize_t
410 zpl_aio_read(struct kiocb *kiocb, const struct iovec *iov,
411 unsigned long nr_segs, loff_t pos)
413 cred_t *cr = CRED();
414 fstrans_cookie_t cookie;
415 struct file *filp = kiocb->ki_filp;
416 size_t count;
417 ssize_t ret;
419 ret = generic_segment_checks(iov, &nr_segs, &count, VERIFY_WRITE);
420 if (ret)
421 return (ret);
423 zfs_uio_t uio;
424 zfs_uio_iovec_init(&uio, iov, nr_segs, kiocb->ki_pos, UIO_USERSPACE,
425 count, 0);
427 crhold(cr);
428 cookie = spl_fstrans_mark();
430 int error = -zfs_read(ITOZ(filp->f_mapping->host), &uio,
431 filp->f_flags | zfs_io_flags(kiocb), cr);
433 spl_fstrans_unmark(cookie);
434 crfree(cr);
436 if (error < 0)
437 return (error);
439 ssize_t read = count - uio.uio_resid;
440 kiocb->ki_pos += read;
442 zpl_file_accessed(filp);
444 return (read);
447 static ssize_t
448 zpl_aio_write(struct kiocb *kiocb, const struct iovec *iov,
449 unsigned long nr_segs, loff_t pos)
451 cred_t *cr = CRED();
452 fstrans_cookie_t cookie;
453 struct file *filp = kiocb->ki_filp;
454 struct inode *ip = filp->f_mapping->host;
455 size_t count;
456 ssize_t ret;
458 ret = generic_segment_checks(iov, &nr_segs, &count, VERIFY_READ);
459 if (ret)
460 return (ret);
462 ret = generic_write_checks(filp, &pos, &count, S_ISBLK(ip->i_mode));
463 if (ret)
464 return (ret);
466 kiocb->ki_pos = pos;
468 zfs_uio_t uio;
469 zfs_uio_iovec_init(&uio, iov, nr_segs, kiocb->ki_pos, UIO_USERSPACE,
470 count, 0);
472 crhold(cr);
473 cookie = spl_fstrans_mark();
475 int error = -zfs_write(ITOZ(ip), &uio,
476 filp->f_flags | zfs_io_flags(kiocb), cr);
478 spl_fstrans_unmark(cookie);
479 crfree(cr);
481 if (error < 0)
482 return (error);
484 ssize_t wrote = count - uio.uio_resid;
485 kiocb->ki_pos += wrote;
487 return (wrote);
489 #endif /* HAVE_VFS_RW_ITERATE */
491 #if defined(HAVE_VFS_RW_ITERATE)
492 static ssize_t
493 zpl_direct_IO_impl(int rw, struct kiocb *kiocb, struct iov_iter *iter)
495 if (rw == WRITE)
496 return (zpl_iter_write(kiocb, iter));
497 else
498 return (zpl_iter_read(kiocb, iter));
500 #if defined(HAVE_VFS_DIRECT_IO_ITER)
501 static ssize_t
502 zpl_direct_IO(struct kiocb *kiocb, struct iov_iter *iter)
504 return (zpl_direct_IO_impl(iov_iter_rw(iter), kiocb, iter));
506 #elif defined(HAVE_VFS_DIRECT_IO_ITER_OFFSET)
507 static ssize_t
508 zpl_direct_IO(struct kiocb *kiocb, struct iov_iter *iter, loff_t pos)
510 ASSERT3S(pos, ==, kiocb->ki_pos);
511 return (zpl_direct_IO_impl(iov_iter_rw(iter), kiocb, iter));
513 #elif defined(HAVE_VFS_DIRECT_IO_ITER_RW_OFFSET)
514 static ssize_t
515 zpl_direct_IO(int rw, struct kiocb *kiocb, struct iov_iter *iter, loff_t pos)
517 ASSERT3S(pos, ==, kiocb->ki_pos);
518 return (zpl_direct_IO_impl(rw, kiocb, iter));
520 #else
521 #error "Unknown direct IO interface"
522 #endif
524 #else /* HAVE_VFS_RW_ITERATE */
526 #if defined(HAVE_VFS_DIRECT_IO_IOVEC)
527 static ssize_t
528 zpl_direct_IO(int rw, struct kiocb *kiocb, const struct iovec *iov,
529 loff_t pos, unsigned long nr_segs)
531 if (rw == WRITE)
532 return (zpl_aio_write(kiocb, iov, nr_segs, pos));
533 else
534 return (zpl_aio_read(kiocb, iov, nr_segs, pos));
536 #elif defined(HAVE_VFS_DIRECT_IO_ITER_RW_OFFSET)
537 static ssize_t
538 zpl_direct_IO(int rw, struct kiocb *kiocb, struct iov_iter *iter, loff_t pos)
540 const struct iovec *iovp = iov_iter_iovec(iter);
541 unsigned long nr_segs = iter->nr_segs;
543 ASSERT3S(pos, ==, kiocb->ki_pos);
544 if (rw == WRITE)
545 return (zpl_aio_write(kiocb, iovp, nr_segs, pos));
546 else
547 return (zpl_aio_read(kiocb, iovp, nr_segs, pos));
549 #else
550 #error "Unknown direct IO interface"
551 #endif
553 #endif /* HAVE_VFS_RW_ITERATE */
555 static loff_t
556 zpl_llseek(struct file *filp, loff_t offset, int whence)
558 #if defined(SEEK_HOLE) && defined(SEEK_DATA)
559 fstrans_cookie_t cookie;
561 if (whence == SEEK_DATA || whence == SEEK_HOLE) {
562 struct inode *ip = filp->f_mapping->host;
563 loff_t maxbytes = ip->i_sb->s_maxbytes;
564 loff_t error;
566 spl_inode_lock_shared(ip);
567 cookie = spl_fstrans_mark();
568 error = -zfs_holey(ITOZ(ip), whence, &offset);
569 spl_fstrans_unmark(cookie);
570 if (error == 0)
571 error = lseek_execute(filp, ip, offset, maxbytes);
572 spl_inode_unlock_shared(ip);
574 return (error);
576 #endif /* SEEK_HOLE && SEEK_DATA */
578 return (generic_file_llseek(filp, offset, whence));
582 * It's worth taking a moment to describe how mmap is implemented
583 * for zfs because it differs considerably from other Linux filesystems.
584 * However, this issue is handled the same way under OpenSolaris.
586 * The issue is that by design zfs bypasses the Linux page cache and
587 * leaves all caching up to the ARC. This has been shown to work
588 * well for the common read(2)/write(2) case. However, mmap(2)
589 * is problem because it relies on being tightly integrated with the
590 * page cache. To handle this we cache mmap'ed files twice, once in
591 * the ARC and a second time in the page cache. The code is careful
592 * to keep both copies synchronized.
594 * When a file with an mmap'ed region is written to using write(2)
595 * both the data in the ARC and existing pages in the page cache
596 * are updated. For a read(2) data will be read first from the page
597 * cache then the ARC if needed. Neither a write(2) or read(2) will
598 * will ever result in new pages being added to the page cache.
600 * New pages are added to the page cache only via .readpage() which
601 * is called when the vfs needs to read a page off disk to back the
602 * virtual memory region. These pages may be modified without
603 * notifying the ARC and will be written out periodically via
604 * .writepage(). This will occur due to either a sync or the usual
605 * page aging behavior. Note because a read(2) of a mmap'ed file
606 * will always check the page cache first even when the ARC is out
607 * of date correct data will still be returned.
609 * While this implementation ensures correct behavior it does have
610 * have some drawbacks. The most obvious of which is that it
611 * increases the required memory footprint when access mmap'ed
612 * files. It also adds additional complexity to the code keeping
613 * both caches synchronized.
615 * Longer term it may be possible to cleanly resolve this wart by
616 * mapping page cache pages directly on to the ARC buffers. The
617 * Linux address space operations are flexible enough to allow
618 * selection of which pages back a particular index. The trick
619 * would be working out the details of which subsystem is in
620 * charge, the ARC, the page cache, or both. It may also prove
621 * helpful to move the ARC buffers to a scatter-gather lists
622 * rather than a vmalloc'ed region.
624 static int
625 zpl_mmap(struct file *filp, struct vm_area_struct *vma)
627 struct inode *ip = filp->f_mapping->host;
628 znode_t *zp = ITOZ(ip);
629 int error;
630 fstrans_cookie_t cookie;
632 cookie = spl_fstrans_mark();
633 error = -zfs_map(ip, vma->vm_pgoff, (caddr_t *)vma->vm_start,
634 (size_t)(vma->vm_end - vma->vm_start), vma->vm_flags);
635 spl_fstrans_unmark(cookie);
636 if (error)
637 return (error);
639 error = generic_file_mmap(filp, vma);
640 if (error)
641 return (error);
643 mutex_enter(&zp->z_lock);
644 zp->z_is_mapped = B_TRUE;
645 mutex_exit(&zp->z_lock);
647 return (error);
651 * Populate a page with data for the Linux page cache. This function is
652 * only used to support mmap(2). There will be an identical copy of the
653 * data in the ARC which is kept up to date via .write() and .writepage().
655 static inline int
656 zpl_readpage_common(struct page *pp)
658 struct inode *ip;
659 struct page *pl[1];
660 int error = 0;
661 fstrans_cookie_t cookie;
663 ASSERT(PageLocked(pp));
664 ip = pp->mapping->host;
665 pl[0] = pp;
667 cookie = spl_fstrans_mark();
668 error = -zfs_getpage(ip, pl, 1);
669 spl_fstrans_unmark(cookie);
671 if (error) {
672 SetPageError(pp);
673 ClearPageUptodate(pp);
674 } else {
675 ClearPageError(pp);
676 SetPageUptodate(pp);
677 flush_dcache_page(pp);
680 unlock_page(pp);
681 return (error);
684 #ifdef HAVE_VFS_READ_FOLIO
685 static int
686 zpl_read_folio(struct file *filp, struct folio *folio)
688 return (zpl_readpage_common(&folio->page));
690 #else
691 static int
692 zpl_readpage(struct file *filp, struct page *pp)
694 return (zpl_readpage_common(pp));
696 #endif
698 static int
699 zpl_readpage_filler(void *data, struct page *pp)
701 return (zpl_readpage_common(pp));
705 * Populate a set of pages with data for the Linux page cache. This
706 * function will only be called for read ahead and never for demand
707 * paging. For simplicity, the code relies on read_cache_pages() to
708 * correctly lock each page for IO and call zpl_readpage().
710 #ifdef HAVE_VFS_READPAGES
711 static int
712 zpl_readpages(struct file *filp, struct address_space *mapping,
713 struct list_head *pages, unsigned nr_pages)
715 return (read_cache_pages(mapping, pages, zpl_readpage_filler, NULL));
717 #else
718 static void
719 zpl_readahead(struct readahead_control *ractl)
721 struct page *page;
723 while ((page = readahead_page(ractl)) != NULL) {
724 int ret;
726 ret = zpl_readpage_filler(NULL, page);
727 put_page(page);
728 if (ret)
729 break;
732 #endif
734 static int
735 zpl_putpage(struct page *pp, struct writeback_control *wbc, void *data)
737 boolean_t *for_sync = data;
738 fstrans_cookie_t cookie;
740 ASSERT(PageLocked(pp));
741 ASSERT(!PageWriteback(pp));
743 cookie = spl_fstrans_mark();
744 (void) zfs_putpage(pp->mapping->host, pp, wbc, *for_sync);
745 spl_fstrans_unmark(cookie);
747 return (0);
750 static int
751 zpl_writepages(struct address_space *mapping, struct writeback_control *wbc)
753 znode_t *zp = ITOZ(mapping->host);
754 zfsvfs_t *zfsvfs = ITOZSB(mapping->host);
755 enum writeback_sync_modes sync_mode;
756 int result;
758 if ((result = zpl_enter(zfsvfs, FTAG)) != 0)
759 return (result);
760 if (zfsvfs->z_os->os_sync == ZFS_SYNC_ALWAYS)
761 wbc->sync_mode = WB_SYNC_ALL;
762 zpl_exit(zfsvfs, FTAG);
763 sync_mode = wbc->sync_mode;
766 * We don't want to run write_cache_pages() in SYNC mode here, because
767 * that would make putpage() wait for a single page to be committed to
768 * disk every single time, resulting in atrocious performance. Instead
769 * we run it once in non-SYNC mode so that the ZIL gets all the data,
770 * and then we commit it all in one go.
772 boolean_t for_sync = (sync_mode == WB_SYNC_ALL);
773 wbc->sync_mode = WB_SYNC_NONE;
774 result = write_cache_pages(mapping, wbc, zpl_putpage, &for_sync);
775 if (sync_mode != wbc->sync_mode) {
776 if ((result = zpl_enter_verify_zp(zfsvfs, zp, FTAG)) != 0)
777 return (result);
778 if (zfsvfs->z_log != NULL)
779 zil_commit(zfsvfs->z_log, zp->z_id);
780 zpl_exit(zfsvfs, FTAG);
783 * We need to call write_cache_pages() again (we can't just
784 * return after the commit) because the previous call in
785 * non-SYNC mode does not guarantee that we got all the dirty
786 * pages (see the implementation of write_cache_pages() for
787 * details). That being said, this is a no-op in most cases.
789 wbc->sync_mode = sync_mode;
790 result = write_cache_pages(mapping, wbc, zpl_putpage,
791 &for_sync);
793 return (result);
797 * Write out dirty pages to the ARC, this function is only required to
798 * support mmap(2). Mapped pages may be dirtied by memory operations
799 * which never call .write(). These dirty pages are kept in sync with
800 * the ARC buffers via this hook.
802 static int
803 zpl_writepage(struct page *pp, struct writeback_control *wbc)
805 if (ITOZSB(pp->mapping->host)->z_os->os_sync == ZFS_SYNC_ALWAYS)
806 wbc->sync_mode = WB_SYNC_ALL;
808 boolean_t for_sync = (wbc->sync_mode == WB_SYNC_ALL);
810 return (zpl_putpage(pp, wbc, &for_sync));
814 * The flag combination which matches the behavior of zfs_space() is
815 * FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE. The FALLOC_FL_PUNCH_HOLE
816 * flag was introduced in the 2.6.38 kernel.
818 * The original mode=0 (allocate space) behavior can be reasonably emulated
819 * by checking if enough space exists and creating a sparse file, as real
820 * persistent space reservation is not possible due to COW, snapshots, etc.
822 static long
823 zpl_fallocate_common(struct inode *ip, int mode, loff_t offset, loff_t len)
825 cred_t *cr = CRED();
826 loff_t olen;
827 fstrans_cookie_t cookie;
828 int error = 0;
830 int test_mode = FALLOC_FL_PUNCH_HOLE;
831 #ifdef HAVE_FALLOC_FL_ZERO_RANGE
832 test_mode |= FALLOC_FL_ZERO_RANGE;
833 #endif
835 if ((mode & ~(FALLOC_FL_KEEP_SIZE | test_mode)) != 0)
836 return (-EOPNOTSUPP);
838 if (offset < 0 || len <= 0)
839 return (-EINVAL);
841 spl_inode_lock(ip);
842 olen = i_size_read(ip);
844 crhold(cr);
845 cookie = spl_fstrans_mark();
846 if (mode & (test_mode)) {
847 flock64_t bf;
849 if (mode & FALLOC_FL_KEEP_SIZE) {
850 if (offset > olen)
851 goto out_unmark;
853 if (offset + len > olen)
854 len = olen - offset;
856 bf.l_type = F_WRLCK;
857 bf.l_whence = SEEK_SET;
858 bf.l_start = offset;
859 bf.l_len = len;
860 bf.l_pid = 0;
862 error = -zfs_space(ITOZ(ip), F_FREESP, &bf, O_RDWR, offset, cr);
863 } else if ((mode & ~FALLOC_FL_KEEP_SIZE) == 0) {
864 unsigned int percent = zfs_fallocate_reserve_percent;
865 struct kstatfs statfs;
867 /* Legacy mode, disable fallocate compatibility. */
868 if (percent == 0) {
869 error = -EOPNOTSUPP;
870 goto out_unmark;
874 * Use zfs_statvfs() instead of dmu_objset_space() since it
875 * also checks project quota limits, which are relevant here.
877 error = zfs_statvfs(ip, &statfs);
878 if (error)
879 goto out_unmark;
882 * Shrink available space a bit to account for overhead/races.
883 * We know the product previously fit into availbytes from
884 * dmu_objset_space(), so the smaller product will also fit.
886 if (len > statfs.f_bavail * (statfs.f_bsize * 100 / percent)) {
887 error = -ENOSPC;
888 goto out_unmark;
890 if (!(mode & FALLOC_FL_KEEP_SIZE) && offset + len > olen)
891 error = zfs_freesp(ITOZ(ip), offset + len, 0, 0, FALSE);
893 out_unmark:
894 spl_fstrans_unmark(cookie);
895 spl_inode_unlock(ip);
897 crfree(cr);
899 return (error);
902 static long
903 zpl_fallocate(struct file *filp, int mode, loff_t offset, loff_t len)
905 return zpl_fallocate_common(file_inode(filp),
906 mode, offset, len);
909 static int
910 zpl_ioctl_getversion(struct file *filp, void __user *arg)
912 uint32_t generation = file_inode(filp)->i_generation;
914 return (copy_to_user(arg, &generation, sizeof (generation)));
917 #ifdef HAVE_FILE_FADVISE
918 static int
919 zpl_fadvise(struct file *filp, loff_t offset, loff_t len, int advice)
921 struct inode *ip = file_inode(filp);
922 znode_t *zp = ITOZ(ip);
923 zfsvfs_t *zfsvfs = ITOZSB(ip);
924 objset_t *os = zfsvfs->z_os;
925 int error = 0;
927 if (S_ISFIFO(ip->i_mode))
928 return (-ESPIPE);
930 if (offset < 0 || len < 0)
931 return (-EINVAL);
933 if ((error = zpl_enter_verify_zp(zfsvfs, zp, FTAG)) != 0)
934 return (error);
936 switch (advice) {
937 case POSIX_FADV_SEQUENTIAL:
938 case POSIX_FADV_WILLNEED:
939 #ifdef HAVE_GENERIC_FADVISE
940 if (zn_has_cached_data(zp))
941 error = generic_fadvise(filp, offset, len, advice);
942 #endif
944 * Pass on the caller's size directly, but note that
945 * dmu_prefetch_max will effectively cap it. If there
946 * really is a larger sequential access pattern, perhaps
947 * dmu_zfetch will detect it.
949 if (len == 0)
950 len = i_size_read(ip) - offset;
952 dmu_prefetch(os, zp->z_id, 0, offset, len,
953 ZIO_PRIORITY_ASYNC_READ);
954 break;
955 case POSIX_FADV_NORMAL:
956 case POSIX_FADV_RANDOM:
957 case POSIX_FADV_DONTNEED:
958 case POSIX_FADV_NOREUSE:
959 /* ignored for now */
960 break;
961 default:
962 error = -EINVAL;
963 break;
966 zfs_exit(zfsvfs, FTAG);
968 return (error);
970 #endif /* HAVE_FILE_FADVISE */
972 #define ZFS_FL_USER_VISIBLE (FS_FL_USER_VISIBLE | ZFS_PROJINHERIT_FL)
973 #define ZFS_FL_USER_MODIFIABLE (FS_FL_USER_MODIFIABLE | ZFS_PROJINHERIT_FL)
975 static uint32_t
976 __zpl_ioctl_getflags(struct inode *ip)
978 uint64_t zfs_flags = ITOZ(ip)->z_pflags;
979 uint32_t ioctl_flags = 0;
981 if (zfs_flags & ZFS_IMMUTABLE)
982 ioctl_flags |= FS_IMMUTABLE_FL;
984 if (zfs_flags & ZFS_APPENDONLY)
985 ioctl_flags |= FS_APPEND_FL;
987 if (zfs_flags & ZFS_NODUMP)
988 ioctl_flags |= FS_NODUMP_FL;
990 if (zfs_flags & ZFS_PROJINHERIT)
991 ioctl_flags |= ZFS_PROJINHERIT_FL;
993 return (ioctl_flags & ZFS_FL_USER_VISIBLE);
997 * Map zfs file z_pflags (xvattr_t) to linux file attributes. Only file
998 * attributes common to both Linux and Solaris are mapped.
1000 static int
1001 zpl_ioctl_getflags(struct file *filp, void __user *arg)
1003 uint32_t flags;
1004 int err;
1006 flags = __zpl_ioctl_getflags(file_inode(filp));
1007 err = copy_to_user(arg, &flags, sizeof (flags));
1009 return (err);
1013 * fchange() is a helper macro to detect if we have been asked to change a
1014 * flag. This is ugly, but the requirement that we do this is a consequence of
1015 * how the Linux file attribute interface was designed. Another consequence is
1016 * that concurrent modification of files suffers from a TOCTOU race. Neither
1017 * are things we can fix without modifying the kernel-userland interface, which
1018 * is outside of our jurisdiction.
1021 #define fchange(f0, f1, b0, b1) (!((f0) & (b0)) != !((f1) & (b1)))
1023 static int
1024 __zpl_ioctl_setflags(struct inode *ip, uint32_t ioctl_flags, xvattr_t *xva)
1026 uint64_t zfs_flags = ITOZ(ip)->z_pflags;
1027 xoptattr_t *xoap;
1029 if (ioctl_flags & ~(FS_IMMUTABLE_FL | FS_APPEND_FL | FS_NODUMP_FL |
1030 ZFS_PROJINHERIT_FL))
1031 return (-EOPNOTSUPP);
1033 if (ioctl_flags & ~ZFS_FL_USER_MODIFIABLE)
1034 return (-EACCES);
1036 if ((fchange(ioctl_flags, zfs_flags, FS_IMMUTABLE_FL, ZFS_IMMUTABLE) ||
1037 fchange(ioctl_flags, zfs_flags, FS_APPEND_FL, ZFS_APPENDONLY)) &&
1038 !capable(CAP_LINUX_IMMUTABLE))
1039 return (-EPERM);
1041 if (!zpl_inode_owner_or_capable(kcred->user_ns, ip))
1042 return (-EACCES);
1044 xva_init(xva);
1045 xoap = xva_getxoptattr(xva);
1047 #define FLAG_CHANGE(iflag, zflag, xflag, xfield) do { \
1048 if (((ioctl_flags & (iflag)) && !(zfs_flags & (zflag))) || \
1049 ((zfs_flags & (zflag)) && !(ioctl_flags & (iflag)))) { \
1050 XVA_SET_REQ(xva, (xflag)); \
1051 (xfield) = ((ioctl_flags & (iflag)) != 0); \
1053 } while (0)
1055 FLAG_CHANGE(FS_IMMUTABLE_FL, ZFS_IMMUTABLE, XAT_IMMUTABLE,
1056 xoap->xoa_immutable);
1057 FLAG_CHANGE(FS_APPEND_FL, ZFS_APPENDONLY, XAT_APPENDONLY,
1058 xoap->xoa_appendonly);
1059 FLAG_CHANGE(FS_NODUMP_FL, ZFS_NODUMP, XAT_NODUMP,
1060 xoap->xoa_nodump);
1061 FLAG_CHANGE(ZFS_PROJINHERIT_FL, ZFS_PROJINHERIT, XAT_PROJINHERIT,
1062 xoap->xoa_projinherit);
1064 #undef FLAG_CHANGE
1066 return (0);
1069 static int
1070 zpl_ioctl_setflags(struct file *filp, void __user *arg)
1072 struct inode *ip = file_inode(filp);
1073 uint32_t flags;
1074 cred_t *cr = CRED();
1075 xvattr_t xva;
1076 int err;
1077 fstrans_cookie_t cookie;
1079 if (copy_from_user(&flags, arg, sizeof (flags)))
1080 return (-EFAULT);
1082 err = __zpl_ioctl_setflags(ip, flags, &xva);
1083 if (err)
1084 return (err);
1086 crhold(cr);
1087 cookie = spl_fstrans_mark();
1088 err = -zfs_setattr(ITOZ(ip), (vattr_t *)&xva, 0, cr);
1089 spl_fstrans_unmark(cookie);
1090 crfree(cr);
1092 return (err);
1095 static int
1096 zpl_ioctl_getxattr(struct file *filp, void __user *arg)
1098 zfsxattr_t fsx = { 0 };
1099 struct inode *ip = file_inode(filp);
1100 int err;
1102 fsx.fsx_xflags = __zpl_ioctl_getflags(ip);
1103 fsx.fsx_projid = ITOZ(ip)->z_projid;
1104 err = copy_to_user(arg, &fsx, sizeof (fsx));
1106 return (err);
1109 static int
1110 zpl_ioctl_setxattr(struct file *filp, void __user *arg)
1112 struct inode *ip = file_inode(filp);
1113 zfsxattr_t fsx;
1114 cred_t *cr = CRED();
1115 xvattr_t xva;
1116 xoptattr_t *xoap;
1117 int err;
1118 fstrans_cookie_t cookie;
1120 if (copy_from_user(&fsx, arg, sizeof (fsx)))
1121 return (-EFAULT);
1123 if (!zpl_is_valid_projid(fsx.fsx_projid))
1124 return (-EINVAL);
1126 err = __zpl_ioctl_setflags(ip, fsx.fsx_xflags, &xva);
1127 if (err)
1128 return (err);
1130 xoap = xva_getxoptattr(&xva);
1131 XVA_SET_REQ(&xva, XAT_PROJID);
1132 xoap->xoa_projid = fsx.fsx_projid;
1134 crhold(cr);
1135 cookie = spl_fstrans_mark();
1136 err = -zfs_setattr(ITOZ(ip), (vattr_t *)&xva, 0, cr);
1137 spl_fstrans_unmark(cookie);
1138 crfree(cr);
1140 return (err);
1144 * Expose Additional File Level Attributes of ZFS.
1146 static int
1147 zpl_ioctl_getdosflags(struct file *filp, void __user *arg)
1149 struct inode *ip = file_inode(filp);
1150 uint64_t dosflags = ITOZ(ip)->z_pflags;
1151 dosflags &= ZFS_DOS_FL_USER_VISIBLE;
1152 int err = copy_to_user(arg, &dosflags, sizeof (dosflags));
1154 return (err);
1157 static int
1158 __zpl_ioctl_setdosflags(struct inode *ip, uint64_t ioctl_flags, xvattr_t *xva)
1160 uint64_t zfs_flags = ITOZ(ip)->z_pflags;
1161 xoptattr_t *xoap;
1163 if (ioctl_flags & (~ZFS_DOS_FL_USER_VISIBLE))
1164 return (-EOPNOTSUPP);
1166 if ((fchange(ioctl_flags, zfs_flags, ZFS_IMMUTABLE, ZFS_IMMUTABLE) ||
1167 fchange(ioctl_flags, zfs_flags, ZFS_APPENDONLY, ZFS_APPENDONLY)) &&
1168 !capable(CAP_LINUX_IMMUTABLE))
1169 return (-EPERM);
1171 if (!zpl_inode_owner_or_capable(kcred->user_ns, ip))
1172 return (-EACCES);
1174 xva_init(xva);
1175 xoap = xva_getxoptattr(xva);
1177 #define FLAG_CHANGE(iflag, xflag, xfield) do { \
1178 if (((ioctl_flags & (iflag)) && !(zfs_flags & (iflag))) || \
1179 ((zfs_flags & (iflag)) && !(ioctl_flags & (iflag)))) { \
1180 XVA_SET_REQ(xva, (xflag)); \
1181 (xfield) = ((ioctl_flags & (iflag)) != 0); \
1183 } while (0)
1185 FLAG_CHANGE(ZFS_IMMUTABLE, XAT_IMMUTABLE, xoap->xoa_immutable);
1186 FLAG_CHANGE(ZFS_APPENDONLY, XAT_APPENDONLY, xoap->xoa_appendonly);
1187 FLAG_CHANGE(ZFS_NODUMP, XAT_NODUMP, xoap->xoa_nodump);
1188 FLAG_CHANGE(ZFS_READONLY, XAT_READONLY, xoap->xoa_readonly);
1189 FLAG_CHANGE(ZFS_HIDDEN, XAT_HIDDEN, xoap->xoa_hidden);
1190 FLAG_CHANGE(ZFS_SYSTEM, XAT_SYSTEM, xoap->xoa_system);
1191 FLAG_CHANGE(ZFS_ARCHIVE, XAT_ARCHIVE, xoap->xoa_archive);
1192 FLAG_CHANGE(ZFS_NOUNLINK, XAT_NOUNLINK, xoap->xoa_nounlink);
1193 FLAG_CHANGE(ZFS_REPARSE, XAT_REPARSE, xoap->xoa_reparse);
1194 FLAG_CHANGE(ZFS_OFFLINE, XAT_OFFLINE, xoap->xoa_offline);
1195 FLAG_CHANGE(ZFS_SPARSE, XAT_SPARSE, xoap->xoa_sparse);
1197 #undef FLAG_CHANGE
1199 return (0);
1203 * Set Additional File Level Attributes of ZFS.
1205 static int
1206 zpl_ioctl_setdosflags(struct file *filp, void __user *arg)
1208 struct inode *ip = file_inode(filp);
1209 uint64_t dosflags;
1210 cred_t *cr = CRED();
1211 xvattr_t xva;
1212 int err;
1213 fstrans_cookie_t cookie;
1215 if (copy_from_user(&dosflags, arg, sizeof (dosflags)))
1216 return (-EFAULT);
1218 err = __zpl_ioctl_setdosflags(ip, dosflags, &xva);
1219 if (err)
1220 return (err);
1222 crhold(cr);
1223 cookie = spl_fstrans_mark();
1224 err = -zfs_setattr(ITOZ(ip), (vattr_t *)&xva, 0, cr);
1225 spl_fstrans_unmark(cookie);
1226 crfree(cr);
1228 return (err);
1231 static long
1232 zpl_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
1234 switch (cmd) {
1235 case FS_IOC_GETVERSION:
1236 return (zpl_ioctl_getversion(filp, (void *)arg));
1237 case FS_IOC_GETFLAGS:
1238 return (zpl_ioctl_getflags(filp, (void *)arg));
1239 case FS_IOC_SETFLAGS:
1240 return (zpl_ioctl_setflags(filp, (void *)arg));
1241 case ZFS_IOC_FSGETXATTR:
1242 return (zpl_ioctl_getxattr(filp, (void *)arg));
1243 case ZFS_IOC_FSSETXATTR:
1244 return (zpl_ioctl_setxattr(filp, (void *)arg));
1245 case ZFS_IOC_GETDOSFLAGS:
1246 return (zpl_ioctl_getdosflags(filp, (void *)arg));
1247 case ZFS_IOC_SETDOSFLAGS:
1248 return (zpl_ioctl_setdosflags(filp, (void *)arg));
1249 default:
1250 return (-ENOTTY);
1254 #ifdef CONFIG_COMPAT
1255 static long
1256 zpl_compat_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
1258 switch (cmd) {
1259 case FS_IOC32_GETVERSION:
1260 cmd = FS_IOC_GETVERSION;
1261 break;
1262 case FS_IOC32_GETFLAGS:
1263 cmd = FS_IOC_GETFLAGS;
1264 break;
1265 case FS_IOC32_SETFLAGS:
1266 cmd = FS_IOC_SETFLAGS;
1267 break;
1268 default:
1269 return (-ENOTTY);
1271 return (zpl_ioctl(filp, cmd, (unsigned long)compat_ptr(arg)));
1273 #endif /* CONFIG_COMPAT */
1276 const struct address_space_operations zpl_address_space_operations = {
1277 #ifdef HAVE_VFS_READPAGES
1278 .readpages = zpl_readpages,
1279 #else
1280 .readahead = zpl_readahead,
1281 #endif
1282 #ifdef HAVE_VFS_READ_FOLIO
1283 .read_folio = zpl_read_folio,
1284 #else
1285 .readpage = zpl_readpage,
1286 #endif
1287 .writepage = zpl_writepage,
1288 .writepages = zpl_writepages,
1289 .direct_IO = zpl_direct_IO,
1290 #ifdef HAVE_VFS_SET_PAGE_DIRTY_NOBUFFERS
1291 .set_page_dirty = __set_page_dirty_nobuffers,
1292 #endif
1293 #ifdef HAVE_VFS_FILEMAP_DIRTY_FOLIO
1294 .dirty_folio = filemap_dirty_folio,
1295 #endif
1298 const struct file_operations zpl_file_operations = {
1299 .open = zpl_open,
1300 .release = zpl_release,
1301 .llseek = zpl_llseek,
1302 #ifdef HAVE_VFS_RW_ITERATE
1303 #ifdef HAVE_NEW_SYNC_READ
1304 .read = new_sync_read,
1305 .write = new_sync_write,
1306 #endif
1307 .read_iter = zpl_iter_read,
1308 .write_iter = zpl_iter_write,
1309 #ifdef HAVE_VFS_IOV_ITER
1310 .splice_read = generic_file_splice_read,
1311 .splice_write = iter_file_splice_write,
1312 #endif
1313 #else
1314 .read = do_sync_read,
1315 .write = do_sync_write,
1316 .aio_read = zpl_aio_read,
1317 .aio_write = zpl_aio_write,
1318 #endif
1319 .mmap = zpl_mmap,
1320 .fsync = zpl_fsync,
1321 #ifdef HAVE_FILE_AIO_FSYNC
1322 .aio_fsync = zpl_aio_fsync,
1323 #endif
1324 .fallocate = zpl_fallocate,
1325 #ifdef HAVE_FILE_FADVISE
1326 .fadvise = zpl_fadvise,
1327 #endif
1328 .unlocked_ioctl = zpl_ioctl,
1329 #ifdef CONFIG_COMPAT
1330 .compat_ioctl = zpl_compat_ioctl,
1331 #endif
1334 const struct file_operations zpl_dir_file_operations = {
1335 .llseek = generic_file_llseek,
1336 .read = generic_read_dir,
1337 #if defined(HAVE_VFS_ITERATE_SHARED)
1338 .iterate_shared = zpl_iterate,
1339 #elif defined(HAVE_VFS_ITERATE)
1340 .iterate = zpl_iterate,
1341 #else
1342 .readdir = zpl_readdir,
1343 #endif
1344 .fsync = zpl_fsync,
1345 .unlocked_ioctl = zpl_ioctl,
1346 #ifdef CONFIG_COMPAT
1347 .compat_ioctl = zpl_compat_ioctl,
1348 #endif
1351 /* CSTYLED */
1352 module_param(zfs_fallocate_reserve_percent, uint, 0644);
1353 MODULE_PARM_DESC(zfs_fallocate_reserve_percent,
1354 "Percentage of length to use for the available capacity check");