Linux compat 2.6.39: mount_nodev()
[zfs.git] / module / zfs / zfs_vnops.c
1 /*
2  * CDDL HEADER START
3  *
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.
7  *
8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9  * or http://www.opensolaris.org/os/licensing.
10  * See the License for the specific language governing permissions
11  * and limitations under the License.
12  *
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]
18  *
19  * CDDL HEADER END
20  */
21 /*
22  * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
23  */
24
25 /* Portions Copyright 2007 Jeremy Teo */
26 /* Portions Copyright 2010 Robert Milkowski */
27
28
29 #include <sys/types.h>
30 #include <sys/param.h>
31 #include <sys/time.h>
32 #include <sys/systm.h>
33 #include <sys/sysmacros.h>
34 #include <sys/resource.h>
35 #include <sys/vfs.h>
36 #include <sys/vfs_opreg.h>
37 #include <sys/file.h>
38 #include <sys/stat.h>
39 #include <sys/kmem.h>
40 #include <sys/taskq.h>
41 #include <sys/uio.h>
42 #include <sys/vmsystm.h>
43 #include <sys/atomic.h>
44 #include <vm/pvn.h>
45 #include <sys/pathname.h>
46 #include <sys/cmn_err.h>
47 #include <sys/errno.h>
48 #include <sys/unistd.h>
49 #include <sys/zfs_dir.h>
50 #include <sys/zfs_acl.h>
51 #include <sys/zfs_ioctl.h>
52 #include <sys/fs/zfs.h>
53 #include <sys/dmu.h>
54 #include <sys/dmu_objset.h>
55 #include <sys/spa.h>
56 #include <sys/txg.h>
57 #include <sys/dbuf.h>
58 #include <sys/zap.h>
59 #include <sys/sa.h>
60 #include <sys/dirent.h>
61 #include <sys/policy.h>
62 #include <sys/sunddi.h>
63 #include <sys/sid.h>
64 #include <sys/mode.h>
65 #include "fs/fs_subr.h"
66 #include <sys/zfs_fuid.h>
67 #include <sys/zfs_sa.h>
68 #include <sys/zfs_vnops.h>
69 #include <sys/dnlc.h>
70 #include <sys/zfs_rlock.h>
71 #include <sys/extdirent.h>
72 #include <sys/kidmap.h>
73 #include <sys/cred.h>
74 #include <sys/attr.h>
75 #include <sys/zpl.h>
76
77 /*
78  * Programming rules.
79  *
80  * Each vnode op performs some logical unit of work.  To do this, the ZPL must
81  * properly lock its in-core state, create a DMU transaction, do the work,
82  * record this work in the intent log (ZIL), commit the DMU transaction,
83  * and wait for the intent log to commit if it is a synchronous operation.
84  * Moreover, the vnode ops must work in both normal and log replay context.
85  * The ordering of events is important to avoid deadlocks and references
86  * to freed memory.  The example below illustrates the following Big Rules:
87  *
88  *  (1) A check must be made in each zfs thread for a mounted file system.
89  *      This is done avoiding races using ZFS_ENTER(zsb).
90  *      A ZFS_EXIT(zsb) is needed before all returns.  Any znodes
91  *      must be checked with ZFS_VERIFY_ZP(zp).  Both of these macros
92  *      can return EIO from the calling function.
93  *
94  *  (2) iput() should always be the last thing except for zil_commit()
95  *      (if necessary) and ZFS_EXIT(). This is for 3 reasons:
96  *      First, if it's the last reference, the vnode/znode
97  *      can be freed, so the zp may point to freed memory.  Second, the last
98  *      reference will call zfs_zinactive(), which may induce a lot of work --
99  *      pushing cached pages (which acquires range locks) and syncing out
100  *      cached atime changes.  Third, zfs_zinactive() may require a new tx,
101  *      which could deadlock the system if you were already holding one.
102  *      If you must call iput() within a tx then use iput_ASYNC().
103  *
104  *  (3) All range locks must be grabbed before calling dmu_tx_assign(),
105  *      as they can span dmu_tx_assign() calls.
106  *
107  *  (4) Always pass TXG_NOWAIT as the second argument to dmu_tx_assign().
108  *      This is critical because we don't want to block while holding locks.
109  *      Note, in particular, that if a lock is sometimes acquired before
110  *      the tx assigns, and sometimes after (e.g. z_lock), then failing to
111  *      use a non-blocking assign can deadlock the system.  The scenario:
112  *
113  *      Thread A has grabbed a lock before calling dmu_tx_assign().
114  *      Thread B is in an already-assigned tx, and blocks for this lock.
115  *      Thread A calls dmu_tx_assign(TXG_WAIT) and blocks in txg_wait_open()
116  *      forever, because the previous txg can't quiesce until B's tx commits.
117  *
118  *      If dmu_tx_assign() returns ERESTART and zsb->z_assign is TXG_NOWAIT,
119  *      then drop all locks, call dmu_tx_wait(), and try again.
120  *
121  *  (5) If the operation succeeded, generate the intent log entry for it
122  *      before dropping locks.  This ensures that the ordering of events
123  *      in the intent log matches the order in which they actually occurred.
124  *      During ZIL replay the zfs_log_* functions will update the sequence
125  *      number to indicate the zil transaction has replayed.
126  *
127  *  (6) At the end of each vnode op, the DMU tx must always commit,
128  *      regardless of whether there were any errors.
129  *
130  *  (7) After dropping all locks, invoke zil_commit(zilog, foid)
131  *      to ensure that synchronous semantics are provided when necessary.
132  *
133  * In general, this is how things should be ordered in each vnode op:
134  *
135  *      ZFS_ENTER(zsb);         // exit if unmounted
136  * top:
137  *      zfs_dirent_lock(&dl, ...)       // lock directory entry (may igrab())
138  *      rw_enter(...);                  // grab any other locks you need
139  *      tx = dmu_tx_create(...);        // get DMU tx
140  *      dmu_tx_hold_*();                // hold each object you might modify
141  *      error = dmu_tx_assign(tx, TXG_NOWAIT);  // try to assign
142  *      if (error) {
143  *              rw_exit(...);           // drop locks
144  *              zfs_dirent_unlock(dl);  // unlock directory entry
145  *              iput(...);              // release held vnodes
146  *              if (error == ERESTART) {
147  *                      dmu_tx_wait(tx);
148  *                      dmu_tx_abort(tx);
149  *                      goto top;
150  *              }
151  *              dmu_tx_abort(tx);       // abort DMU tx
152  *              ZFS_EXIT(zsb);  // finished in zfs
153  *              return (error);         // really out of space
154  *      }
155  *      error = do_real_work();         // do whatever this VOP does
156  *      if (error == 0)
157  *              zfs_log_*(...);         // on success, make ZIL entry
158  *      dmu_tx_commit(tx);              // commit DMU tx -- error or not
159  *      rw_exit(...);                   // drop locks
160  *      zfs_dirent_unlock(dl);          // unlock directory entry
161  *      iput(...);                      // release held vnodes
162  *      zil_commit(zilog, foid);        // synchronous when necessary
163  *      ZFS_EXIT(zsb);          // finished in zfs
164  *      return (error);                 // done, report error
165  */
166
167 /*
168  * Virus scanning is unsupported.  It would be possible to add a hook
169  * here to performance the required virus scan.  This could be done
170  * entirely in the kernel or potentially as an update to invoke a
171  * scanning utility.
172  */
173 static int
174 zfs_vscan(struct inode *ip, cred_t *cr, int async)
175 {
176         return (0);
177 }
178
179 /* ARGSUSED */
180 int
181 zfs_open(struct inode *ip, int mode, int flag, cred_t *cr)
182 {
183         znode_t *zp = ITOZ(ip);
184         zfs_sb_t *zsb = ITOZSB(ip);
185
186         ZFS_ENTER(zsb);
187         ZFS_VERIFY_ZP(zp);
188
189         /* Honor ZFS_APPENDONLY file attribute */
190         if ((mode & FMODE_WRITE) && (zp->z_pflags & ZFS_APPENDONLY) &&
191             ((flag & O_APPEND) == 0)) {
192                 ZFS_EXIT(zsb);
193                 return (EPERM);
194         }
195
196         /* Virus scan eligible files on open */
197         if (!zfs_has_ctldir(zp) && zsb->z_vscan && S_ISREG(ip->i_mode) &&
198             !(zp->z_pflags & ZFS_AV_QUARANTINED) && zp->z_size > 0) {
199                 if (zfs_vscan(ip, cr, 0) != 0) {
200                         ZFS_EXIT(zsb);
201                         return (EACCES);
202                 }
203         }
204
205         /* Keep a count of the synchronous opens in the znode */
206         if (flag & O_SYNC)
207                 atomic_inc_32(&zp->z_sync_cnt);
208
209         ZFS_EXIT(zsb);
210         return (0);
211 }
212 EXPORT_SYMBOL(zfs_open);
213
214 /* ARGSUSED */
215 int
216 zfs_close(struct inode *ip, int flag, cred_t *cr)
217 {
218         znode_t *zp = ITOZ(ip);
219         zfs_sb_t *zsb = ITOZSB(ip);
220
221         ZFS_ENTER(zsb);
222         ZFS_VERIFY_ZP(zp);
223
224         /*
225          * Zero the synchronous opens in the znode.  Under Linux the
226          * zfs_close() hook is not symmetric with zfs_open(), it is
227          * only called once when the last reference is dropped.
228          */
229         if (flag & O_SYNC)
230                 zp->z_sync_cnt = 0;
231
232         if (!zfs_has_ctldir(zp) && zsb->z_vscan && S_ISREG(ip->i_mode) &&
233             !(zp->z_pflags & ZFS_AV_QUARANTINED) && zp->z_size > 0)
234                 VERIFY(zfs_vscan(ip, cr, 1) == 0);
235
236         ZFS_EXIT(zsb);
237         return (0);
238 }
239 EXPORT_SYMBOL(zfs_close);
240
241 #if defined(_KERNEL)
242 /*
243  * When a file is memory mapped, we must keep the IO data synchronized
244  * between the DMU cache and the memory mapped pages.  What this means:
245  *
246  * On Write:    If we find a memory mapped page, we write to *both*
247  *              the page and the dmu buffer.
248  */
249 static void
250 update_pages(struct inode *ip, int64_t start, int len,
251     objset_t *os, uint64_t oid)
252 {
253         struct address_space *mp = ip->i_mapping;
254         struct page *pp;
255         uint64_t nbytes;
256         int64_t off;
257         void *pb;
258
259         off = start & (PAGE_CACHE_SIZE-1);
260         for (start &= PAGE_CACHE_MASK; len > 0; start += PAGE_CACHE_SIZE) {
261                 nbytes = MIN(PAGE_CACHE_SIZE - off, len);
262
263                 pp = find_lock_page(mp, start >> PAGE_CACHE_SHIFT);
264                 if (pp) {
265                         if (mapping_writably_mapped(mp))
266                                 flush_dcache_page(pp);
267
268                         pb = kmap(pp);
269                         (void) dmu_read(os, oid, start+off, nbytes, pb+off,
270                             DMU_READ_PREFETCH);
271                         kunmap(pp);
272
273                         if (mapping_writably_mapped(mp))
274                                 flush_dcache_page(pp);
275
276                         mark_page_accessed(pp);
277                         SetPageUptodate(pp);
278                         ClearPageError(pp);
279                         unlock_page(pp);
280                         page_cache_release(pp);
281                 }
282
283                 len -= nbytes;
284                 off = 0;
285         }
286 }
287
288 /*
289  * When a file is memory mapped, we must keep the IO data synchronized
290  * between the DMU cache and the memory mapped pages.  What this means:
291  *
292  * On Read:     We "read" preferentially from memory mapped pages,
293  *              else we default from the dmu buffer.
294  *
295  * NOTE: We will always "break up" the IO into PAGESIZE uiomoves when
296  *      the file is memory mapped.
297  */
298 static int
299 mappedread(struct inode *ip, int nbytes, uio_t *uio)
300 {
301         struct address_space *mp = ip->i_mapping;
302         struct page *pp;
303         znode_t *zp = ITOZ(ip);
304         objset_t *os = ITOZSB(ip)->z_os;
305         int64_t start, off;
306         uint64_t bytes;
307         int len = nbytes;
308         int error = 0;
309         void *pb;
310
311         start = uio->uio_loffset;
312         off = start & (PAGE_CACHE_SIZE-1);
313         for (start &= PAGE_CACHE_MASK; len > 0; start += PAGE_CACHE_SIZE) {
314                 bytes = MIN(PAGE_CACHE_SIZE - off, len);
315
316                 pp = find_lock_page(mp, start >> PAGE_CACHE_SHIFT);
317                 if (pp) {
318                         ASSERT(PageUptodate(pp));
319
320                         pb = kmap(pp);
321                         error = uiomove(pb + off, bytes, UIO_READ, uio);
322                         kunmap(pp);
323
324                         if (mapping_writably_mapped(mp))
325                                 flush_dcache_page(pp);
326
327                         mark_page_accessed(pp);
328                         unlock_page(pp);
329                         page_cache_release(pp);
330                 } else {
331                         error = dmu_read_uio(os, zp->z_id, uio, bytes);
332                 }
333
334                 len -= bytes;
335                 off = 0;
336                 if (error)
337                         break;
338         }
339         return (error);
340 }
341 #endif /* _KERNEL */
342
343 unsigned long zfs_read_chunk_size = 1024 * 1024; /* Tunable */
344
345 /*
346  * Read bytes from specified file into supplied buffer.
347  *
348  *      IN:     ip      - inode of file to be read from.
349  *              uio     - structure supplying read location, range info,
350  *                        and return buffer.
351  *              ioflag  - FSYNC flags; used to provide FRSYNC semantics.
352  *                        O_DIRECT flag; used to bypass page cache.
353  *              cr      - credentials of caller.
354  *
355  *      OUT:    uio     - updated offset and range, buffer filled.
356  *
357  *      RETURN: 0 if success
358  *              error code if failure
359  *
360  * Side Effects:
361  *      inode - atime updated if byte count > 0
362  */
363 /* ARGSUSED */
364 int
365 zfs_read(struct inode *ip, uio_t *uio, int ioflag, cred_t *cr)
366 {
367         znode_t         *zp = ITOZ(ip);
368         zfs_sb_t        *zsb = ITOZSB(ip);
369         objset_t        *os;
370         ssize_t         n, nbytes;
371         int             error = 0;
372         rl_t            *rl;
373 #ifdef HAVE_UIO_ZEROCOPY
374         xuio_t          *xuio = NULL;
375 #endif /* HAVE_UIO_ZEROCOPY */
376
377         ZFS_ENTER(zsb);
378         ZFS_VERIFY_ZP(zp);
379         os = zsb->z_os;
380
381         if (zp->z_pflags & ZFS_AV_QUARANTINED) {
382                 ZFS_EXIT(zsb);
383                 return (EACCES);
384         }
385
386         /*
387          * Validate file offset
388          */
389         if (uio->uio_loffset < (offset_t)0) {
390                 ZFS_EXIT(zsb);
391                 return (EINVAL);
392         }
393
394         /*
395          * Fasttrack empty reads
396          */
397         if (uio->uio_resid == 0) {
398                 ZFS_EXIT(zsb);
399                 return (0);
400         }
401
402 #ifdef HAVE_MANDLOCKS
403         /*
404          * Check for mandatory locks
405          */
406         if (MANDMODE(zp->z_mode)) {
407                 if (error = chklock(ip, FREAD,
408                     uio->uio_loffset, uio->uio_resid, uio->uio_fmode, ct)) {
409                         ZFS_EXIT(zsb);
410                         return (error);
411                 }
412         }
413 #endif /* HAVE_MANDLOCK */
414
415         /*
416          * If we're in FRSYNC mode, sync out this znode before reading it.
417          */
418         if (ioflag & FRSYNC || zsb->z_os->os_sync == ZFS_SYNC_ALWAYS)
419                 zil_commit(zsb->z_log, zp->z_id);
420
421         /*
422          * Lock the range against changes.
423          */
424         rl = zfs_range_lock(zp, uio->uio_loffset, uio->uio_resid, RL_READER);
425
426         /*
427          * If we are reading past end-of-file we can skip
428          * to the end; but we might still need to set atime.
429          */
430         if (uio->uio_loffset >= zp->z_size) {
431                 error = 0;
432                 goto out;
433         }
434
435         ASSERT(uio->uio_loffset < zp->z_size);
436         n = MIN(uio->uio_resid, zp->z_size - uio->uio_loffset);
437
438 #ifdef HAVE_UIO_ZEROCOPY
439         if ((uio->uio_extflg == UIO_XUIO) &&
440             (((xuio_t *)uio)->xu_type == UIOTYPE_ZEROCOPY)) {
441                 int nblk;
442                 int blksz = zp->z_blksz;
443                 uint64_t offset = uio->uio_loffset;
444
445                 xuio = (xuio_t *)uio;
446                 if ((ISP2(blksz))) {
447                         nblk = (P2ROUNDUP(offset + n, blksz) - P2ALIGN(offset,
448                             blksz)) / blksz;
449                 } else {
450                         ASSERT(offset + n <= blksz);
451                         nblk = 1;
452                 }
453                 (void) dmu_xuio_init(xuio, nblk);
454
455                 if (vn_has_cached_data(ip)) {
456                         /*
457                          * For simplicity, we always allocate a full buffer
458                          * even if we only expect to read a portion of a block.
459                          */
460                         while (--nblk >= 0) {
461                                 (void) dmu_xuio_add(xuio,
462                                     dmu_request_arcbuf(sa_get_db(zp->z_sa_hdl),
463                                     blksz), 0, blksz);
464                         }
465                 }
466         }
467 #endif /* HAVE_UIO_ZEROCOPY */
468
469         while (n > 0) {
470                 nbytes = MIN(n, zfs_read_chunk_size -
471                     P2PHASE(uio->uio_loffset, zfs_read_chunk_size));
472
473                 if (zp->z_is_mapped && !(ioflag & O_DIRECT))
474                         error = mappedread(ip, nbytes, uio);
475                 else
476                         error = dmu_read_uio(os, zp->z_id, uio, nbytes);
477
478                 if (error) {
479                         /* convert checksum errors into IO errors */
480                         if (error == ECKSUM)
481                                 error = EIO;
482                         break;
483                 }
484
485                 n -= nbytes;
486         }
487 out:
488         zfs_range_unlock(rl);
489
490         ZFS_ACCESSTIME_STAMP(zsb, zp);
491         zfs_inode_update(zp);
492         ZFS_EXIT(zsb);
493         return (error);
494 }
495 EXPORT_SYMBOL(zfs_read);
496
497 /*
498  * Write the bytes to a file.
499  *
500  *      IN:     ip      - inode of file to be written to.
501  *              uio     - structure supplying write location, range info,
502  *                        and data buffer.
503  *              ioflag  - FAPPEND flag set if in append mode.
504  *                        O_DIRECT flag; used to bypass page cache.
505  *              cr      - credentials of caller.
506  *
507  *      OUT:    uio     - updated offset and range.
508  *
509  *      RETURN: 0 if success
510  *              error code if failure
511  *
512  * Timestamps:
513  *      ip - ctime|mtime updated if byte count > 0
514  */
515
516 /* ARGSUSED */
517 int
518 zfs_write(struct inode *ip, uio_t *uio, int ioflag, cred_t *cr)
519 {
520         znode_t         *zp = ITOZ(ip);
521         rlim64_t        limit = uio->uio_limit;
522         ssize_t         start_resid = uio->uio_resid;
523         ssize_t         tx_bytes;
524         uint64_t        end_size;
525         dmu_tx_t        *tx;
526         zfs_sb_t        *zsb = ZTOZSB(zp);
527         zilog_t         *zilog;
528         offset_t        woff;
529         ssize_t         n, nbytes;
530         rl_t            *rl;
531         int             max_blksz = zsb->z_max_blksz;
532         int             error = 0;
533         arc_buf_t       *abuf;
534         iovec_t         *aiov = NULL;
535         xuio_t          *xuio = NULL;
536         int             i_iov = 0;
537         iovec_t         *iovp = uio->uio_iov;
538         int             write_eof;
539         int             count = 0;
540         sa_bulk_attr_t  bulk[4];
541         uint64_t        mtime[2], ctime[2];
542         ASSERTV(int     iovcnt = uio->uio_iovcnt);
543
544         /*
545          * Fasttrack empty write
546          */
547         n = start_resid;
548         if (n == 0)
549                 return (0);
550
551         if (limit == RLIM64_INFINITY || limit > MAXOFFSET_T)
552                 limit = MAXOFFSET_T;
553
554         ZFS_ENTER(zsb);
555         ZFS_VERIFY_ZP(zp);
556
557         SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_MTIME(zsb), NULL, &mtime, 16);
558         SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_CTIME(zsb), NULL, &ctime, 16);
559         SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_SIZE(zsb), NULL, &zp->z_size, 8);
560         SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_FLAGS(zsb), NULL,
561             &zp->z_pflags, 8);
562
563         /*
564          * If immutable or not appending then return EPERM
565          */
566         if ((zp->z_pflags & (ZFS_IMMUTABLE | ZFS_READONLY)) ||
567             ((zp->z_pflags & ZFS_APPENDONLY) && !(ioflag & FAPPEND) &&
568             (uio->uio_loffset < zp->z_size))) {
569                 ZFS_EXIT(zsb);
570                 return (EPERM);
571         }
572
573         zilog = zsb->z_log;
574
575         /*
576          * Validate file offset
577          */
578         woff = ioflag & FAPPEND ? zp->z_size : uio->uio_loffset;
579         if (woff < 0) {
580                 ZFS_EXIT(zsb);
581                 return (EINVAL);
582         }
583
584 #ifdef HAVE_MANDLOCKS
585         /*
586          * Check for mandatory locks before calling zfs_range_lock()
587          * in order to prevent a deadlock with locks set via fcntl().
588          */
589         if (MANDMODE((mode_t)zp->z_mode) &&
590             (error = chklock(ip, FWRITE, woff, n, uio->uio_fmode, ct)) != 0) {
591                 ZFS_EXIT(zsb);
592                 return (error);
593         }
594 #endif /* HAVE_MANDLOCKS */
595
596 #ifdef HAVE_UIO_ZEROCOPY
597         /*
598          * Pre-fault the pages to ensure slow (eg NFS) pages
599          * don't hold up txg.
600          * Skip this if uio contains loaned arc_buf.
601          */
602         if ((uio->uio_extflg == UIO_XUIO) &&
603             (((xuio_t *)uio)->xu_type == UIOTYPE_ZEROCOPY))
604                 xuio = (xuio_t *)uio;
605         else
606                 uio_prefaultpages(MIN(n, max_blksz), uio);
607 #endif /* HAVE_UIO_ZEROCOPY */
608
609         /*
610          * If in append mode, set the io offset pointer to eof.
611          */
612         if (ioflag & FAPPEND) {
613                 /*
614                  * Obtain an appending range lock to guarantee file append
615                  * semantics.  We reset the write offset once we have the lock.
616                  */
617                 rl = zfs_range_lock(zp, 0, n, RL_APPEND);
618                 woff = rl->r_off;
619                 if (rl->r_len == UINT64_MAX) {
620                         /*
621                          * We overlocked the file because this write will cause
622                          * the file block size to increase.
623                          * Note that zp_size cannot change with this lock held.
624                          */
625                         woff = zp->z_size;
626                 }
627                 uio->uio_loffset = woff;
628         } else {
629                 /*
630                  * Note that if the file block size will change as a result of
631                  * this write, then this range lock will lock the entire file
632                  * so that we can re-write the block safely.
633                  */
634                 rl = zfs_range_lock(zp, woff, n, RL_WRITER);
635         }
636
637         if (woff >= limit) {
638                 zfs_range_unlock(rl);
639                 ZFS_EXIT(zsb);
640                 return (EFBIG);
641         }
642
643         if ((woff + n) > limit || woff > (limit - n))
644                 n = limit - woff;
645
646         /* Will this write extend the file length? */
647         write_eof = (woff + n > zp->z_size);
648
649         end_size = MAX(zp->z_size, woff + n);
650
651         /*
652          * Write the file in reasonable size chunks.  Each chunk is written
653          * in a separate transaction; this keeps the intent log records small
654          * and allows us to do more fine-grained space accounting.
655          */
656         while (n > 0) {
657                 abuf = NULL;
658                 woff = uio->uio_loffset;
659 again:
660                 if (zfs_owner_overquota(zsb, zp, B_FALSE) ||
661                     zfs_owner_overquota(zsb, zp, B_TRUE)) {
662                         if (abuf != NULL)
663                                 dmu_return_arcbuf(abuf);
664                         error = EDQUOT;
665                         break;
666                 }
667
668                 if (xuio && abuf == NULL) {
669                         ASSERT(i_iov < iovcnt);
670                         aiov = &iovp[i_iov];
671                         abuf = dmu_xuio_arcbuf(xuio, i_iov);
672                         dmu_xuio_clear(xuio, i_iov);
673                         ASSERT((aiov->iov_base == abuf->b_data) ||
674                             ((char *)aiov->iov_base - (char *)abuf->b_data +
675                             aiov->iov_len == arc_buf_size(abuf)));
676                         i_iov++;
677                 } else if (abuf == NULL && n >= max_blksz &&
678                     woff >= zp->z_size &&
679                     P2PHASE(woff, max_blksz) == 0 &&
680                     zp->z_blksz == max_blksz) {
681                         /*
682                          * This write covers a full block.  "Borrow" a buffer
683                          * from the dmu so that we can fill it before we enter
684                          * a transaction.  This avoids the possibility of
685                          * holding up the transaction if the data copy hangs
686                          * up on a pagefault (e.g., from an NFS server mapping).
687                          */
688                         size_t cbytes;
689
690                         abuf = dmu_request_arcbuf(sa_get_db(zp->z_sa_hdl),
691                             max_blksz);
692                         ASSERT(abuf != NULL);
693                         ASSERT(arc_buf_size(abuf) == max_blksz);
694                         if ((error = uiocopy(abuf->b_data, max_blksz,
695                             UIO_WRITE, uio, &cbytes))) {
696                                 dmu_return_arcbuf(abuf);
697                                 break;
698                         }
699                         ASSERT(cbytes == max_blksz);
700                 }
701
702                 /*
703                  * Start a transaction.
704                  */
705                 tx = dmu_tx_create(zsb->z_os);
706                 dmu_tx_hold_sa(tx, zp->z_sa_hdl, B_FALSE);
707                 dmu_tx_hold_write(tx, zp->z_id, woff, MIN(n, max_blksz));
708                 zfs_sa_upgrade_txholds(tx, zp);
709                 error = dmu_tx_assign(tx, TXG_NOWAIT);
710                 if (error) {
711                         if (error == ERESTART) {
712                                 dmu_tx_wait(tx);
713                                 dmu_tx_abort(tx);
714                                 goto again;
715                         }
716                         dmu_tx_abort(tx);
717                         if (abuf != NULL)
718                                 dmu_return_arcbuf(abuf);
719                         break;
720                 }
721
722                 /*
723                  * If zfs_range_lock() over-locked we grow the blocksize
724                  * and then reduce the lock range.  This will only happen
725                  * on the first iteration since zfs_range_reduce() will
726                  * shrink down r_len to the appropriate size.
727                  */
728                 if (rl->r_len == UINT64_MAX) {
729                         uint64_t new_blksz;
730
731                         if (zp->z_blksz > max_blksz) {
732                                 ASSERT(!ISP2(zp->z_blksz));
733                                 new_blksz = MIN(end_size, SPA_MAXBLOCKSIZE);
734                         } else {
735                                 new_blksz = MIN(end_size, max_blksz);
736                         }
737                         zfs_grow_blocksize(zp, new_blksz, tx);
738                         zfs_range_reduce(rl, woff, n);
739                 }
740
741                 /*
742                  * XXX - should we really limit each write to z_max_blksz?
743                  * Perhaps we should use SPA_MAXBLOCKSIZE chunks?
744                  */
745                 nbytes = MIN(n, max_blksz - P2PHASE(woff, max_blksz));
746
747                 if (abuf == NULL) {
748                         tx_bytes = uio->uio_resid;
749                         error = dmu_write_uio_dbuf(sa_get_db(zp->z_sa_hdl),
750                             uio, nbytes, tx);
751                         tx_bytes -= uio->uio_resid;
752                 } else {
753                         tx_bytes = nbytes;
754                         ASSERT(xuio == NULL || tx_bytes == aiov->iov_len);
755                         /*
756                          * If this is not a full block write, but we are
757                          * extending the file past EOF and this data starts
758                          * block-aligned, use assign_arcbuf().  Otherwise,
759                          * write via dmu_write().
760                          */
761                         if (tx_bytes < max_blksz && (!write_eof ||
762                             aiov->iov_base != abuf->b_data)) {
763                                 ASSERT(xuio);
764                                 dmu_write(zsb->z_os, zp->z_id, woff,
765                                     aiov->iov_len, aiov->iov_base, tx);
766                                 dmu_return_arcbuf(abuf);
767                                 xuio_stat_wbuf_copied();
768                         } else {
769                                 ASSERT(xuio || tx_bytes == max_blksz);
770                                 dmu_assign_arcbuf(sa_get_db(zp->z_sa_hdl),
771                                     woff, abuf, tx);
772                         }
773                         ASSERT(tx_bytes <= uio->uio_resid);
774                         uioskip(uio, tx_bytes);
775                 }
776
777                 if (tx_bytes && zp->z_is_mapped && !(ioflag & O_DIRECT))
778                         update_pages(ip, woff, tx_bytes, zsb->z_os, zp->z_id);
779
780                 /*
781                  * If we made no progress, we're done.  If we made even
782                  * partial progress, update the znode and ZIL accordingly.
783                  */
784                 if (tx_bytes == 0) {
785                         (void) sa_update(zp->z_sa_hdl, SA_ZPL_SIZE(zsb),
786                             (void *)&zp->z_size, sizeof (uint64_t), tx);
787                         dmu_tx_commit(tx);
788                         ASSERT(error != 0);
789                         break;
790                 }
791
792                 /*
793                  * Clear Set-UID/Set-GID bits on successful write if not
794                  * privileged and at least one of the excute bits is set.
795                  *
796                  * It would be nice to to this after all writes have
797                  * been done, but that would still expose the ISUID/ISGID
798                  * to another app after the partial write is committed.
799                  *
800                  * Note: we don't call zfs_fuid_map_id() here because
801                  * user 0 is not an ephemeral uid.
802                  */
803                 mutex_enter(&zp->z_acl_lock);
804                 if ((zp->z_mode & (S_IXUSR | (S_IXUSR >> 3) |
805                     (S_IXUSR >> 6))) != 0 &&
806                     (zp->z_mode & (S_ISUID | S_ISGID)) != 0 &&
807                     secpolicy_vnode_setid_retain(cr,
808                     (zp->z_mode & S_ISUID) != 0 && zp->z_uid == 0) != 0) {
809                         uint64_t newmode;
810                         zp->z_mode &= ~(S_ISUID | S_ISGID);
811                         newmode = zp->z_mode;
812                         (void) sa_update(zp->z_sa_hdl, SA_ZPL_MODE(zsb),
813                             (void *)&newmode, sizeof (uint64_t), tx);
814                 }
815                 mutex_exit(&zp->z_acl_lock);
816
817                 zfs_tstamp_update_setup(zp, CONTENT_MODIFIED, mtime, ctime,
818                     B_TRUE);
819
820                 /*
821                  * Update the file size (zp_size) if it has changed;
822                  * account for possible concurrent updates.
823                  */
824                 while ((end_size = zp->z_size) < uio->uio_loffset) {
825                         (void) atomic_cas_64(&zp->z_size, end_size,
826                             uio->uio_loffset);
827                         ASSERT(error == 0);
828                 }
829                 /*
830                  * If we are replaying and eof is non zero then force
831                  * the file size to the specified eof. Note, there's no
832                  * concurrency during replay.
833                  */
834                 if (zsb->z_replay && zsb->z_replay_eof != 0)
835                         zp->z_size = zsb->z_replay_eof;
836
837                 error = sa_bulk_update(zp->z_sa_hdl, bulk, count, tx);
838
839                 zfs_log_write(zilog, tx, TX_WRITE, zp, woff, tx_bytes, ioflag);
840                 dmu_tx_commit(tx);
841
842                 if (error != 0)
843                         break;
844                 ASSERT(tx_bytes == nbytes);
845                 n -= nbytes;
846
847                 if (!xuio && n > 0)
848                         uio_prefaultpages(MIN(n, max_blksz), uio);
849         }
850
851         zfs_range_unlock(rl);
852
853         /*
854          * If we're in replay mode, or we made no progress, return error.
855          * Otherwise, it's at least a partial write, so it's successful.
856          */
857         if (zsb->z_replay || uio->uio_resid == start_resid) {
858                 ZFS_EXIT(zsb);
859                 return (error);
860         }
861
862         if (ioflag & (FSYNC | FDSYNC) ||
863             zsb->z_os->os_sync == ZFS_SYNC_ALWAYS)
864                 zil_commit(zilog, zp->z_id);
865
866         zfs_inode_update(zp);
867         ZFS_EXIT(zsb);
868         return (0);
869 }
870 EXPORT_SYMBOL(zfs_write);
871
872 static void
873 iput_async(struct inode *ip, taskq_t *taskq)
874 {
875         ASSERT(atomic_read(&ip->i_count) > 0);
876         if (atomic_read(&ip->i_count) == 1)
877                 taskq_dispatch(taskq, (task_func_t *)iput, ip, TQ_SLEEP);
878         else
879                 iput(ip);
880 }
881
882 void
883 zfs_get_done(zgd_t *zgd, int error)
884 {
885         znode_t *zp = zgd->zgd_private;
886         objset_t *os = ZTOZSB(zp)->z_os;
887
888         if (zgd->zgd_db)
889                 dmu_buf_rele(zgd->zgd_db, zgd);
890
891         zfs_range_unlock(zgd->zgd_rl);
892
893         /*
894          * Release the vnode asynchronously as we currently have the
895          * txg stopped from syncing.
896          */
897         iput_async(ZTOI(zp), dsl_pool_iput_taskq(dmu_objset_pool(os)));
898
899         if (error == 0 && zgd->zgd_bp)
900                 zil_add_block(zgd->zgd_zilog, zgd->zgd_bp);
901
902         kmem_free(zgd, sizeof (zgd_t));
903 }
904
905 #ifdef DEBUG
906 static int zil_fault_io = 0;
907 #endif
908
909 /*
910  * Get data to generate a TX_WRITE intent log record.
911  */
912 int
913 zfs_get_data(void *arg, lr_write_t *lr, char *buf, zio_t *zio)
914 {
915         zfs_sb_t *zsb = arg;
916         objset_t *os = zsb->z_os;
917         znode_t *zp;
918         uint64_t object = lr->lr_foid;
919         uint64_t offset = lr->lr_offset;
920         uint64_t size = lr->lr_length;
921         blkptr_t *bp = &lr->lr_blkptr;
922         dmu_buf_t *db;
923         zgd_t *zgd;
924         int error = 0;
925
926         ASSERT(zio != NULL);
927         ASSERT(size != 0);
928
929         /*
930          * Nothing to do if the file has been removed
931          */
932         if (zfs_zget(zsb, object, &zp) != 0)
933                 return (ENOENT);
934         if (zp->z_unlinked) {
935                 /*
936                  * Release the vnode asynchronously as we currently have the
937                  * txg stopped from syncing.
938                  */
939                 iput_async(ZTOI(zp), dsl_pool_iput_taskq(dmu_objset_pool(os)));
940                 return (ENOENT);
941         }
942
943         zgd = (zgd_t *)kmem_zalloc(sizeof (zgd_t), KM_SLEEP);
944         zgd->zgd_zilog = zsb->z_log;
945         zgd->zgd_private = zp;
946
947         /*
948          * Write records come in two flavors: immediate and indirect.
949          * For small writes it's cheaper to store the data with the
950          * log record (immediate); for large writes it's cheaper to
951          * sync the data and get a pointer to it (indirect) so that
952          * we don't have to write the data twice.
953          */
954         if (buf != NULL) { /* immediate write */
955                 zgd->zgd_rl = zfs_range_lock(zp, offset, size, RL_READER);
956                 /* test for truncation needs to be done while range locked */
957                 if (offset >= zp->z_size) {
958                         error = ENOENT;
959                 } else {
960                         error = dmu_read(os, object, offset, size, buf,
961                             DMU_READ_NO_PREFETCH);
962                 }
963                 ASSERT(error == 0 || error == ENOENT);
964         } else { /* indirect write */
965                 /*
966                  * Have to lock the whole block to ensure when it's
967                  * written out and it's checksum is being calculated
968                  * that no one can change the data. We need to re-check
969                  * blocksize after we get the lock in case it's changed!
970                  */
971                 for (;;) {
972                         uint64_t blkoff;
973                         size = zp->z_blksz;
974                         blkoff = ISP2(size) ? P2PHASE(offset, size) : offset;
975                         offset -= blkoff;
976                         zgd->zgd_rl = zfs_range_lock(zp, offset, size,
977                             RL_READER);
978                         if (zp->z_blksz == size)
979                                 break;
980                         offset += blkoff;
981                         zfs_range_unlock(zgd->zgd_rl);
982                 }
983                 /* test for truncation needs to be done while range locked */
984                 if (lr->lr_offset >= zp->z_size)
985                         error = ENOENT;
986 #ifdef DEBUG
987                 if (zil_fault_io) {
988                         error = EIO;
989                         zil_fault_io = 0;
990                 }
991 #endif
992                 if (error == 0)
993                         error = dmu_buf_hold(os, object, offset, zgd, &db,
994                             DMU_READ_NO_PREFETCH);
995
996                 if (error == 0) {
997                         zgd->zgd_db = db;
998                         zgd->zgd_bp = bp;
999
1000                         ASSERT(db->db_offset == offset);
1001                         ASSERT(db->db_size == size);
1002
1003                         error = dmu_sync(zio, lr->lr_common.lrc_txg,
1004                             zfs_get_done, zgd);
1005                         ASSERT(error || lr->lr_length <= zp->z_blksz);
1006
1007                         /*
1008                          * On success, we need to wait for the write I/O
1009                          * initiated by dmu_sync() to complete before we can
1010                          * release this dbuf.  We will finish everything up
1011                          * in the zfs_get_done() callback.
1012                          */
1013                         if (error == 0)
1014                                 return (0);
1015
1016                         if (error == EALREADY) {
1017                                 lr->lr_common.lrc_txtype = TX_WRITE2;
1018                                 error = 0;
1019                         }
1020                 }
1021         }
1022
1023         zfs_get_done(zgd, error);
1024
1025         return (error);
1026 }
1027
1028 /*ARGSUSED*/
1029 int
1030 zfs_access(struct inode *ip, int mode, int flag, cred_t *cr)
1031 {
1032         znode_t *zp = ITOZ(ip);
1033         zfs_sb_t *zsb = ITOZSB(ip);
1034         int error;
1035
1036         ZFS_ENTER(zsb);
1037         ZFS_VERIFY_ZP(zp);
1038
1039         if (flag & V_ACE_MASK)
1040                 error = zfs_zaccess(zp, mode, flag, B_FALSE, cr);
1041         else
1042                 error = zfs_zaccess_rwx(zp, mode, flag, cr);
1043
1044         ZFS_EXIT(zsb);
1045         return (error);
1046 }
1047 EXPORT_SYMBOL(zfs_access);
1048
1049 /*
1050  * Lookup an entry in a directory, or an extended attribute directory.
1051  * If it exists, return a held inode reference for it.
1052  *
1053  *      IN:     dip     - inode of directory to search.
1054  *              nm      - name of entry to lookup.
1055  *              flags   - LOOKUP_XATTR set if looking for an attribute.
1056  *              cr      - credentials of caller.
1057  *              direntflags - directory lookup flags
1058  *              realpnp - returned pathname.
1059  *
1060  *      OUT:    ipp     - inode of located entry, NULL if not found.
1061  *
1062  *      RETURN: 0 if success
1063  *              error code if failure
1064  *
1065  * Timestamps:
1066  *      NA
1067  */
1068 /* ARGSUSED */
1069 int
1070 zfs_lookup(struct inode *dip, char *nm, struct inode **ipp, int flags,
1071     cred_t *cr, int *direntflags, pathname_t *realpnp)
1072 {
1073         znode_t *zdp = ITOZ(dip);
1074         zfs_sb_t *zsb = ITOZSB(dip);
1075         int error = 0;
1076
1077         /* fast path */
1078         if (!(flags & (LOOKUP_XATTR | FIGNORECASE))) {
1079
1080                 if (!S_ISDIR(dip->i_mode)) {
1081                         return (ENOTDIR);
1082                 } else if (zdp->z_sa_hdl == NULL) {
1083                         return (EIO);
1084                 }
1085
1086                 if (nm[0] == 0 || (nm[0] == '.' && nm[1] == '\0')) {
1087                         error = zfs_fastaccesschk_execute(zdp, cr);
1088                         if (!error) {
1089                                 *ipp = dip;
1090                                 igrab(*ipp);
1091                                 return (0);
1092                         }
1093                         return (error);
1094 #ifdef HAVE_DNLC
1095                 } else {
1096                         vnode_t *tvp = dnlc_lookup(dvp, nm);
1097
1098                         if (tvp) {
1099                                 error = zfs_fastaccesschk_execute(zdp, cr);
1100                                 if (error) {
1101                                         iput(tvp);
1102                                         return (error);
1103                                 }
1104                                 if (tvp == DNLC_NO_VNODE) {
1105                                         iput(tvp);
1106                                         return (ENOENT);
1107                                 } else {
1108                                         *vpp = tvp;
1109                                         return (specvp_check(vpp, cr));
1110                                 }
1111                         }
1112 #endif /* HAVE_DNLC */
1113                 }
1114         }
1115
1116         ZFS_ENTER(zsb);
1117         ZFS_VERIFY_ZP(zdp);
1118
1119         *ipp = NULL;
1120
1121         if (flags & LOOKUP_XATTR) {
1122                 /*
1123                  * If the xattr property is off, refuse the lookup request.
1124                  */
1125                 if (!(zsb->z_flags & ZSB_XATTR)) {
1126                         ZFS_EXIT(zsb);
1127                         return (EINVAL);
1128                 }
1129
1130                 /*
1131                  * We don't allow recursive attributes..
1132                  * Maybe someday we will.
1133                  */
1134                 if (zdp->z_pflags & ZFS_XATTR) {
1135                         ZFS_EXIT(zsb);
1136                         return (EINVAL);
1137                 }
1138
1139                 if ((error = zfs_get_xattrdir(zdp, ipp, cr, flags))) {
1140                         ZFS_EXIT(zsb);
1141                         return (error);
1142                 }
1143
1144                 /*
1145                  * Do we have permission to get into attribute directory?
1146                  */
1147
1148                 if ((error = zfs_zaccess(ITOZ(*ipp), ACE_EXECUTE, 0,
1149                     B_FALSE, cr))) {
1150                         iput(*ipp);
1151                         *ipp = NULL;
1152                 }
1153
1154                 ZFS_EXIT(zsb);
1155                 return (error);
1156         }
1157
1158         if (!S_ISDIR(dip->i_mode)) {
1159                 ZFS_EXIT(zsb);
1160                 return (ENOTDIR);
1161         }
1162
1163         /*
1164          * Check accessibility of directory.
1165          */
1166
1167         if ((error = zfs_zaccess(zdp, ACE_EXECUTE, 0, B_FALSE, cr))) {
1168                 ZFS_EXIT(zsb);
1169                 return (error);
1170         }
1171
1172         if (zsb->z_utf8 && u8_validate(nm, strlen(nm),
1173             NULL, U8_VALIDATE_ENTIRE, &error) < 0) {
1174                 ZFS_EXIT(zsb);
1175                 return (EILSEQ);
1176         }
1177
1178         error = zfs_dirlook(zdp, nm, ipp, flags, direntflags, realpnp);
1179         if ((error == 0) && (*ipp))
1180                 zfs_inode_update(ITOZ(*ipp));
1181
1182         ZFS_EXIT(zsb);
1183         return (error);
1184 }
1185 EXPORT_SYMBOL(zfs_lookup);
1186
1187 /*
1188  * Attempt to create a new entry in a directory.  If the entry
1189  * already exists, truncate the file if permissible, else return
1190  * an error.  Return the ip of the created or trunc'd file.
1191  *
1192  *      IN:     dip     - inode of directory to put new file entry in.
1193  *              name    - name of new file entry.
1194  *              vap     - attributes of new file.
1195  *              excl    - flag indicating exclusive or non-exclusive mode.
1196  *              mode    - mode to open file with.
1197  *              cr      - credentials of caller.
1198  *              flag    - large file flag [UNUSED].
1199  *              vsecp   - ACL to be set
1200  *
1201  *      OUT:    ipp     - inode of created or trunc'd entry.
1202  *
1203  *      RETURN: 0 if success
1204  *              error code if failure
1205  *
1206  * Timestamps:
1207  *      dip - ctime|mtime updated if new entry created
1208  *       ip - ctime|mtime always, atime if new
1209  */
1210
1211 /* ARGSUSED */
1212 int
1213 zfs_create(struct inode *dip, char *name, vattr_t *vap, int excl,
1214     int mode, struct inode **ipp, cred_t *cr, int flag, vsecattr_t *vsecp)
1215 {
1216         znode_t         *zp, *dzp = ITOZ(dip);
1217         zfs_sb_t        *zsb = ITOZSB(dip);
1218         zilog_t         *zilog;
1219         objset_t        *os;
1220         zfs_dirlock_t   *dl;
1221         dmu_tx_t        *tx;
1222         int             error;
1223         uid_t           uid;
1224         gid_t           gid;
1225         zfs_acl_ids_t   acl_ids;
1226         boolean_t       fuid_dirtied;
1227         boolean_t       have_acl = B_FALSE;
1228
1229         /*
1230          * If we have an ephemeral id, ACL, or XVATTR then
1231          * make sure file system is at proper version
1232          */
1233
1234         gid = crgetgid(cr);
1235         uid = crgetuid(cr);
1236
1237         if (zsb->z_use_fuids == B_FALSE &&
1238             (vsecp || IS_EPHEMERAL(uid) || IS_EPHEMERAL(gid)))
1239                 return (EINVAL);
1240
1241         ZFS_ENTER(zsb);
1242         ZFS_VERIFY_ZP(dzp);
1243         os = zsb->z_os;
1244         zilog = zsb->z_log;
1245
1246         if (zsb->z_utf8 && u8_validate(name, strlen(name),
1247             NULL, U8_VALIDATE_ENTIRE, &error) < 0) {
1248                 ZFS_EXIT(zsb);
1249                 return (EILSEQ);
1250         }
1251
1252         if (vap->va_mask & ATTR_XVATTR) {
1253                 if ((error = secpolicy_xvattr((xvattr_t *)vap,
1254                     crgetuid(cr), cr, vap->va_mode)) != 0) {
1255                         ZFS_EXIT(zsb);
1256                         return (error);
1257                 }
1258         }
1259
1260 top:
1261         *ipp = NULL;
1262         if (*name == '\0') {
1263                 /*
1264                  * Null component name refers to the directory itself.
1265                  */
1266                 igrab(dip);
1267                 zp = dzp;
1268                 dl = NULL;
1269                 error = 0;
1270         } else {
1271                 /* possible igrab(zp) */
1272                 int zflg = 0;
1273
1274                 if (flag & FIGNORECASE)
1275                         zflg |= ZCILOOK;
1276
1277                 error = zfs_dirent_lock(&dl, dzp, name, &zp, zflg,
1278                     NULL, NULL);
1279                 if (error) {
1280                         if (have_acl)
1281                                 zfs_acl_ids_free(&acl_ids);
1282                         if (strcmp(name, "..") == 0)
1283                                 error = EISDIR;
1284                         ZFS_EXIT(zsb);
1285                         return (error);
1286                 }
1287         }
1288
1289         if (zp == NULL) {
1290                 uint64_t txtype;
1291
1292                 /*
1293                  * Create a new file object and update the directory
1294                  * to reference it.
1295                  */
1296                 if ((error = zfs_zaccess(dzp, ACE_ADD_FILE, 0, B_FALSE, cr))) {
1297                         if (have_acl)
1298                                 zfs_acl_ids_free(&acl_ids);
1299                         goto out;
1300                 }
1301
1302                 /*
1303                  * We only support the creation of regular files in
1304                  * extended attribute directories.
1305                  */
1306
1307                 if ((dzp->z_pflags & ZFS_XATTR) && !S_ISREG(vap->va_mode)) {
1308                         if (have_acl)
1309                                 zfs_acl_ids_free(&acl_ids);
1310                         error = EINVAL;
1311                         goto out;
1312                 }
1313
1314                 if (!have_acl && (error = zfs_acl_ids_create(dzp, 0, vap,
1315                     cr, vsecp, &acl_ids)) != 0)
1316                         goto out;
1317                 have_acl = B_TRUE;
1318
1319                 if (zfs_acl_ids_overquota(zsb, &acl_ids)) {
1320                         zfs_acl_ids_free(&acl_ids);
1321                         error = EDQUOT;
1322                         goto out;
1323                 }
1324
1325                 tx = dmu_tx_create(os);
1326
1327                 dmu_tx_hold_sa_create(tx, acl_ids.z_aclp->z_acl_bytes +
1328                     ZFS_SA_BASE_ATTR_SIZE);
1329
1330                 fuid_dirtied = zsb->z_fuid_dirty;
1331                 if (fuid_dirtied)
1332                         zfs_fuid_txhold(zsb, tx);
1333                 dmu_tx_hold_zap(tx, dzp->z_id, TRUE, name);
1334                 dmu_tx_hold_sa(tx, dzp->z_sa_hdl, B_FALSE);
1335                 if (!zsb->z_use_sa &&
1336                     acl_ids.z_aclp->z_acl_bytes > ZFS_ACE_SPACE) {
1337                         dmu_tx_hold_write(tx, DMU_NEW_OBJECT,
1338                             0, acl_ids.z_aclp->z_acl_bytes);
1339                 }
1340                 error = dmu_tx_assign(tx, TXG_NOWAIT);
1341                 if (error) {
1342                         zfs_dirent_unlock(dl);
1343                         if (error == ERESTART) {
1344                                 dmu_tx_wait(tx);
1345                                 dmu_tx_abort(tx);
1346                                 goto top;
1347                         }
1348                         zfs_acl_ids_free(&acl_ids);
1349                         dmu_tx_abort(tx);
1350                         ZFS_EXIT(zsb);
1351                         return (error);
1352                 }
1353                 zfs_mknode(dzp, vap, tx, cr, 0, &zp, &acl_ids);
1354
1355                 if (fuid_dirtied)
1356                         zfs_fuid_sync(zsb, tx);
1357
1358                 (void) zfs_link_create(dl, zp, tx, ZNEW);
1359                 txtype = zfs_log_create_txtype(Z_FILE, vsecp, vap);
1360                 if (flag & FIGNORECASE)
1361                         txtype |= TX_CI;
1362                 zfs_log_create(zilog, tx, txtype, dzp, zp, name,
1363                     vsecp, acl_ids.z_fuidp, vap);
1364                 zfs_acl_ids_free(&acl_ids);
1365                 dmu_tx_commit(tx);
1366         } else {
1367                 int aflags = (flag & FAPPEND) ? V_APPEND : 0;
1368
1369                 if (have_acl)
1370                         zfs_acl_ids_free(&acl_ids);
1371                 have_acl = B_FALSE;
1372
1373                 /*
1374                  * A directory entry already exists for this name.
1375                  */
1376                 /*
1377                  * Can't truncate an existing file if in exclusive mode.
1378                  */
1379                 if (excl) {
1380                         error = EEXIST;
1381                         goto out;
1382                 }
1383                 /*
1384                  * Can't open a directory for writing.
1385                  */
1386                 if (S_ISDIR(ZTOI(zp)->i_mode)) {
1387                         error = EISDIR;
1388                         goto out;
1389                 }
1390                 /*
1391                  * Verify requested access to file.
1392                  */
1393                 if (mode && (error = zfs_zaccess_rwx(zp, mode, aflags, cr))) {
1394                         goto out;
1395                 }
1396
1397                 mutex_enter(&dzp->z_lock);
1398                 dzp->z_seq++;
1399                 mutex_exit(&dzp->z_lock);
1400
1401                 /*
1402                  * Truncate regular files if requested.
1403                  */
1404                 if (S_ISREG(ZTOI(zp)->i_mode) &&
1405                     (vap->va_mask & ATTR_SIZE) && (vap->va_size == 0)) {
1406                         /* we can't hold any locks when calling zfs_freesp() */
1407                         zfs_dirent_unlock(dl);
1408                         dl = NULL;
1409                         error = zfs_freesp(zp, 0, 0, mode, TRUE);
1410                 }
1411         }
1412 out:
1413
1414         if (dl)
1415                 zfs_dirent_unlock(dl);
1416
1417         if (error) {
1418                 if (zp)
1419                         iput(ZTOI(zp));
1420         } else {
1421                 zfs_inode_update(dzp);
1422                 zfs_inode_update(zp);
1423                 *ipp = ZTOI(zp);
1424         }
1425
1426         if (zsb->z_os->os_sync == ZFS_SYNC_ALWAYS)
1427                 zil_commit(zilog, 0);
1428
1429         ZFS_EXIT(zsb);
1430         return (error);
1431 }
1432 EXPORT_SYMBOL(zfs_create);
1433
1434 /*
1435  * Remove an entry from a directory.
1436  *
1437  *      IN:     dip     - inode of directory to remove entry from.
1438  *              name    - name of entry to remove.
1439  *              cr      - credentials of caller.
1440  *
1441  *      RETURN: 0 if success
1442  *              error code if failure
1443  *
1444  * Timestamps:
1445  *      dip - ctime|mtime
1446  *       ip - ctime (if nlink > 0)
1447  */
1448
1449 uint64_t null_xattr = 0;
1450
1451 /*ARGSUSED*/
1452 int
1453 zfs_remove(struct inode *dip, char *name, cred_t *cr)
1454 {
1455         znode_t         *zp, *dzp = ITOZ(dip);
1456         znode_t         *xzp;
1457         struct inode    *ip;
1458         zfs_sb_t        *zsb = ITOZSB(dip);
1459         zilog_t         *zilog;
1460         uint64_t        xattr_obj;
1461         uint64_t        xattr_obj_unlinked = 0;
1462         uint64_t        obj = 0;
1463         zfs_dirlock_t   *dl;
1464         dmu_tx_t        *tx;
1465         boolean_t       unlinked;
1466         uint64_t        txtype;
1467         pathname_t      *realnmp = NULL;
1468 #ifdef HAVE_PN_UTILS
1469         pathname_t      realnm;
1470 #endif /* HAVE_PN_UTILS */
1471         int             error;
1472         int             zflg = ZEXISTS;
1473
1474         ZFS_ENTER(zsb);
1475         ZFS_VERIFY_ZP(dzp);
1476         zilog = zsb->z_log;
1477
1478 #ifdef HAVE_PN_UTILS
1479         if (flags & FIGNORECASE) {
1480                 zflg |= ZCILOOK;
1481                 pn_alloc(&realnm);
1482                 realnmp = &realnm;
1483         }
1484 #endif /* HAVE_PN_UTILS */
1485
1486 top:
1487         xattr_obj = 0;
1488         xzp = NULL;
1489         /*
1490          * Attempt to lock directory; fail if entry doesn't exist.
1491          */
1492         if ((error = zfs_dirent_lock(&dl, dzp, name, &zp, zflg,
1493             NULL, realnmp))) {
1494 #ifdef HAVE_PN_UTILS
1495                 if (realnmp)
1496                         pn_free(realnmp);
1497 #endif /* HAVE_PN_UTILS */
1498                 ZFS_EXIT(zsb);
1499                 return (error);
1500         }
1501
1502         ip = ZTOI(zp);
1503
1504         if ((error = zfs_zaccess_delete(dzp, zp, cr))) {
1505                 goto out;
1506         }
1507
1508         /*
1509          * Need to use rmdir for removing directories.
1510          */
1511         if (S_ISDIR(ip->i_mode)) {
1512                 error = EPERM;
1513                 goto out;
1514         }
1515
1516 #ifdef HAVE_DNLC
1517         if (realnmp)
1518                 dnlc_remove(dvp, realnmp->pn_buf);
1519         else
1520                 dnlc_remove(dvp, name);
1521 #endif /* HAVE_DNLC */
1522
1523         /*
1524          * We never delete the znode and always place it in the unlinked
1525          * set.  The dentry cache will always hold the last reference and
1526          * is responsible for safely freeing the znode.
1527          */
1528         obj = zp->z_id;
1529         tx = dmu_tx_create(zsb->z_os);
1530         dmu_tx_hold_zap(tx, dzp->z_id, FALSE, name);
1531         dmu_tx_hold_sa(tx, zp->z_sa_hdl, B_FALSE);
1532         zfs_sa_upgrade_txholds(tx, zp);
1533         zfs_sa_upgrade_txholds(tx, dzp);
1534
1535         /* are there any extended attributes? */
1536         error = sa_lookup(zp->z_sa_hdl, SA_ZPL_XATTR(zsb),
1537             &xattr_obj, sizeof (xattr_obj));
1538         if (error == 0 && xattr_obj) {
1539                 error = zfs_zget(zsb, xattr_obj, &xzp);
1540                 ASSERT3U(error, ==, 0);
1541                 dmu_tx_hold_sa(tx, zp->z_sa_hdl, B_TRUE);
1542                 dmu_tx_hold_sa(tx, xzp->z_sa_hdl, B_FALSE);
1543         }
1544
1545         /* charge as an update -- would be nice not to charge at all */
1546         dmu_tx_hold_zap(tx, zsb->z_unlinkedobj, FALSE, NULL);
1547
1548         error = dmu_tx_assign(tx, TXG_NOWAIT);
1549         if (error) {
1550                 zfs_dirent_unlock(dl);
1551                 iput(ip);
1552                 if (xzp)
1553                         iput(ZTOI(xzp));
1554                 if (error == ERESTART) {
1555                         dmu_tx_wait(tx);
1556                         dmu_tx_abort(tx);
1557                         goto top;
1558                 }
1559 #ifdef HAVE_PN_UTILS
1560                 if (realnmp)
1561                         pn_free(realnmp);
1562 #endif /* HAVE_PN_UTILS */
1563                 dmu_tx_abort(tx);
1564                 ZFS_EXIT(zsb);
1565                 return (error);
1566         }
1567
1568         /*
1569          * Remove the directory entry.
1570          */
1571         error = zfs_link_destroy(dl, zp, tx, zflg, &unlinked);
1572
1573         if (error) {
1574                 dmu_tx_commit(tx);
1575                 goto out;
1576         }
1577
1578         if (unlinked) {
1579                 /*
1580                  * Hold z_lock so that we can make sure that the ACL obj
1581                  * hasn't changed.  Could have been deleted due to
1582                  * zfs_sa_upgrade().
1583                  */
1584                 mutex_enter(&zp->z_lock);
1585                 (void) sa_lookup(zp->z_sa_hdl, SA_ZPL_XATTR(zsb),
1586                     &xattr_obj_unlinked, sizeof (xattr_obj_unlinked));
1587                 mutex_exit(&zp->z_lock);
1588                 zfs_unlinked_add(zp, tx);
1589         }
1590
1591         txtype = TX_REMOVE;
1592 #ifdef HAVE_PN_UTILS
1593         if (flags & FIGNORECASE)
1594                 txtype |= TX_CI;
1595 #endif /* HAVE_PN_UTILS */
1596         zfs_log_remove(zilog, tx, txtype, dzp, name, obj);
1597
1598         dmu_tx_commit(tx);
1599 out:
1600 #ifdef HAVE_PN_UTILS
1601         if (realnmp)
1602                 pn_free(realnmp);
1603 #endif /* HAVE_PN_UTILS */
1604
1605         zfs_dirent_unlock(dl);
1606         zfs_inode_update(dzp);
1607         zfs_inode_update(zp);
1608         if (xzp)
1609                 zfs_inode_update(xzp);
1610
1611         iput(ip);
1612         if (xzp)
1613                 iput(ZTOI(xzp));
1614
1615         if (zsb->z_os->os_sync == ZFS_SYNC_ALWAYS)
1616                 zil_commit(zilog, 0);
1617
1618         ZFS_EXIT(zsb);
1619         return (error);
1620 }
1621 EXPORT_SYMBOL(zfs_remove);
1622
1623 /*
1624  * Create a new directory and insert it into dip using the name
1625  * provided.  Return a pointer to the inserted directory.
1626  *
1627  *      IN:     dip     - inode of directory to add subdir to.
1628  *              dirname - name of new directory.
1629  *              vap     - attributes of new directory.
1630  *              cr      - credentials of caller.
1631  *              vsecp   - ACL to be set
1632  *
1633  *      OUT:    ipp     - inode of created directory.
1634  *
1635  *      RETURN: 0 if success
1636  *              error code if failure
1637  *
1638  * Timestamps:
1639  *      dip - ctime|mtime updated
1640  *      ipp - ctime|mtime|atime updated
1641  */
1642 /*ARGSUSED*/
1643 int
1644 zfs_mkdir(struct inode *dip, char *dirname, vattr_t *vap, struct inode **ipp,
1645     cred_t *cr, int flags, vsecattr_t *vsecp)
1646 {
1647         znode_t         *zp, *dzp = ITOZ(dip);
1648         zfs_sb_t        *zsb = ITOZSB(dip);
1649         zilog_t         *zilog;
1650         zfs_dirlock_t   *dl;
1651         uint64_t        txtype;
1652         dmu_tx_t        *tx;
1653         int             error;
1654         int             zf = ZNEW;
1655         uid_t           uid;
1656         gid_t           gid = crgetgid(cr);
1657         zfs_acl_ids_t   acl_ids;
1658         boolean_t       fuid_dirtied;
1659
1660         ASSERT(S_ISDIR(vap->va_mode));
1661
1662         /*
1663          * If we have an ephemeral id, ACL, or XVATTR then
1664          * make sure file system is at proper version
1665          */
1666
1667         uid = crgetuid(cr);
1668         if (zsb->z_use_fuids == B_FALSE &&
1669             (vsecp || IS_EPHEMERAL(uid) || IS_EPHEMERAL(gid)))
1670                 return (EINVAL);
1671
1672         ZFS_ENTER(zsb);
1673         ZFS_VERIFY_ZP(dzp);
1674         zilog = zsb->z_log;
1675
1676         if (dzp->z_pflags & ZFS_XATTR) {
1677                 ZFS_EXIT(zsb);
1678                 return (EINVAL);
1679         }
1680
1681         if (zsb->z_utf8 && u8_validate(dirname,
1682             strlen(dirname), NULL, U8_VALIDATE_ENTIRE, &error) < 0) {
1683                 ZFS_EXIT(zsb);
1684                 return (EILSEQ);
1685         }
1686         if (flags & FIGNORECASE)
1687                 zf |= ZCILOOK;
1688
1689         if (vap->va_mask & ATTR_XVATTR) {
1690                 if ((error = secpolicy_xvattr((xvattr_t *)vap,
1691                     crgetuid(cr), cr, vap->va_mode)) != 0) {
1692                         ZFS_EXIT(zsb);
1693                         return (error);
1694                 }
1695         }
1696
1697         if ((error = zfs_acl_ids_create(dzp, 0, vap, cr,
1698             vsecp, &acl_ids)) != 0) {
1699                 ZFS_EXIT(zsb);
1700                 return (error);
1701         }
1702         /*
1703          * First make sure the new directory doesn't exist.
1704          *
1705          * Existence is checked first to make sure we don't return
1706          * EACCES instead of EEXIST which can cause some applications
1707          * to fail.
1708          */
1709 top:
1710         *ipp = NULL;
1711
1712         if ((error = zfs_dirent_lock(&dl, dzp, dirname, &zp, zf,
1713             NULL, NULL))) {
1714                 zfs_acl_ids_free(&acl_ids);
1715                 ZFS_EXIT(zsb);
1716                 return (error);
1717         }
1718
1719         if ((error = zfs_zaccess(dzp, ACE_ADD_SUBDIRECTORY, 0, B_FALSE, cr))) {
1720                 zfs_acl_ids_free(&acl_ids);
1721                 zfs_dirent_unlock(dl);
1722                 ZFS_EXIT(zsb);
1723                 return (error);
1724         }
1725
1726         if (zfs_acl_ids_overquota(zsb, &acl_ids)) {
1727                 zfs_acl_ids_free(&acl_ids);
1728                 zfs_dirent_unlock(dl);
1729                 ZFS_EXIT(zsb);
1730                 return (EDQUOT);
1731         }
1732
1733         /*
1734          * Add a new entry to the directory.
1735          */
1736         tx = dmu_tx_create(zsb->z_os);
1737         dmu_tx_hold_zap(tx, dzp->z_id, TRUE, dirname);
1738         dmu_tx_hold_zap(tx, DMU_NEW_OBJECT, FALSE, NULL);
1739         fuid_dirtied = zsb->z_fuid_dirty;
1740         if (fuid_dirtied)
1741                 zfs_fuid_txhold(zsb, tx);
1742         if (!zsb->z_use_sa && acl_ids.z_aclp->z_acl_bytes > ZFS_ACE_SPACE) {
1743                 dmu_tx_hold_write(tx, DMU_NEW_OBJECT, 0,
1744                     acl_ids.z_aclp->z_acl_bytes);
1745         }
1746
1747         dmu_tx_hold_sa_create(tx, acl_ids.z_aclp->z_acl_bytes +
1748             ZFS_SA_BASE_ATTR_SIZE);
1749
1750         error = dmu_tx_assign(tx, TXG_NOWAIT);
1751         if (error) {
1752                 zfs_dirent_unlock(dl);
1753                 if (error == ERESTART) {
1754                         dmu_tx_wait(tx);
1755                         dmu_tx_abort(tx);
1756                         goto top;
1757                 }
1758                 zfs_acl_ids_free(&acl_ids);
1759                 dmu_tx_abort(tx);
1760                 ZFS_EXIT(zsb);
1761                 return (error);
1762         }
1763
1764         /*
1765          * Create new node.
1766          */
1767         zfs_mknode(dzp, vap, tx, cr, 0, &zp, &acl_ids);
1768
1769         if (fuid_dirtied)
1770                 zfs_fuid_sync(zsb, tx);
1771
1772         /*
1773          * Now put new name in parent dir.
1774          */
1775         (void) zfs_link_create(dl, zp, tx, ZNEW);
1776
1777         *ipp = ZTOI(zp);
1778
1779         txtype = zfs_log_create_txtype(Z_DIR, vsecp, vap);
1780         if (flags & FIGNORECASE)
1781                 txtype |= TX_CI;
1782         zfs_log_create(zilog, tx, txtype, dzp, zp, dirname, vsecp,
1783             acl_ids.z_fuidp, vap);
1784
1785         zfs_acl_ids_free(&acl_ids);
1786
1787         dmu_tx_commit(tx);
1788
1789         zfs_dirent_unlock(dl);
1790
1791         if (zsb->z_os->os_sync == ZFS_SYNC_ALWAYS)
1792                 zil_commit(zilog, 0);
1793
1794         zfs_inode_update(dzp);
1795         zfs_inode_update(zp);
1796         ZFS_EXIT(zsb);
1797         return (0);
1798 }
1799 EXPORT_SYMBOL(zfs_mkdir);
1800
1801 /*
1802  * Remove a directory subdir entry.  If the current working
1803  * directory is the same as the subdir to be removed, the
1804  * remove will fail.
1805  *
1806  *      IN:     dip     - inode of directory to remove from.
1807  *              name    - name of directory to be removed.
1808  *              cwd     - inode of current working directory.
1809  *              cr      - credentials of caller.
1810  *              flags   - case flags
1811  *
1812  *      RETURN: 0 if success
1813  *              error code if failure
1814  *
1815  * Timestamps:
1816  *      dip - ctime|mtime updated
1817  */
1818 /*ARGSUSED*/
1819 int
1820 zfs_rmdir(struct inode *dip, char *name, struct inode *cwd, cred_t *cr,
1821     int flags)
1822 {
1823         znode_t         *dzp = ITOZ(dip);
1824         znode_t         *zp;
1825         struct inode    *ip;
1826         zfs_sb_t        *zsb = ITOZSB(dip);
1827         zilog_t         *zilog;
1828         zfs_dirlock_t   *dl;
1829         dmu_tx_t        *tx;
1830         int             error;
1831         int             zflg = ZEXISTS;
1832
1833         ZFS_ENTER(zsb);
1834         ZFS_VERIFY_ZP(dzp);
1835         zilog = zsb->z_log;
1836
1837         if (flags & FIGNORECASE)
1838                 zflg |= ZCILOOK;
1839 top:
1840         zp = NULL;
1841
1842         /*
1843          * Attempt to lock directory; fail if entry doesn't exist.
1844          */
1845         if ((error = zfs_dirent_lock(&dl, dzp, name, &zp, zflg,
1846             NULL, NULL))) {
1847                 ZFS_EXIT(zsb);
1848                 return (error);
1849         }
1850
1851         ip = ZTOI(zp);
1852
1853         if ((error = zfs_zaccess_delete(dzp, zp, cr))) {
1854                 goto out;
1855         }
1856
1857         if (!S_ISDIR(ip->i_mode)) {
1858                 error = ENOTDIR;
1859                 goto out;
1860         }
1861
1862         if (ip == cwd) {
1863                 error = EINVAL;
1864                 goto out;
1865         }
1866
1867         /*
1868          * Grab a lock on the directory to make sure that noone is
1869          * trying to add (or lookup) entries while we are removing it.
1870          */
1871         rw_enter(&zp->z_name_lock, RW_WRITER);
1872
1873         /*
1874          * Grab a lock on the parent pointer to make sure we play well
1875          * with the treewalk and directory rename code.
1876          */
1877         rw_enter(&zp->z_parent_lock, RW_WRITER);
1878
1879         tx = dmu_tx_create(zsb->z_os);
1880         dmu_tx_hold_zap(tx, dzp->z_id, FALSE, name);
1881         dmu_tx_hold_sa(tx, zp->z_sa_hdl, B_FALSE);
1882         dmu_tx_hold_zap(tx, zsb->z_unlinkedobj, FALSE, NULL);
1883         zfs_sa_upgrade_txholds(tx, zp);
1884         zfs_sa_upgrade_txholds(tx, dzp);
1885         error = dmu_tx_assign(tx, TXG_NOWAIT);
1886         if (error) {
1887                 rw_exit(&zp->z_parent_lock);
1888                 rw_exit(&zp->z_name_lock);
1889                 zfs_dirent_unlock(dl);
1890                 iput(ip);
1891                 if (error == ERESTART) {
1892                         dmu_tx_wait(tx);
1893                         dmu_tx_abort(tx);
1894                         goto top;
1895                 }
1896                 dmu_tx_abort(tx);
1897                 ZFS_EXIT(zsb);
1898                 return (error);
1899         }
1900
1901         error = zfs_link_destroy(dl, zp, tx, zflg, NULL);
1902
1903         if (error == 0) {
1904                 uint64_t txtype = TX_RMDIR;
1905                 if (flags & FIGNORECASE)
1906                         txtype |= TX_CI;
1907                 zfs_log_remove(zilog, tx, txtype, dzp, name, ZFS_NO_OBJECT);
1908         }
1909
1910         dmu_tx_commit(tx);
1911
1912         rw_exit(&zp->z_parent_lock);
1913         rw_exit(&zp->z_name_lock);
1914 out:
1915         zfs_dirent_unlock(dl);
1916
1917         iput(ip);
1918
1919         if (zsb->z_os->os_sync == ZFS_SYNC_ALWAYS)
1920                 zil_commit(zilog, 0);
1921
1922         zfs_inode_update(dzp);
1923         zfs_inode_update(zp);
1924         ZFS_EXIT(zsb);
1925         return (error);
1926 }
1927 EXPORT_SYMBOL(zfs_rmdir);
1928
1929 /*
1930  * Read as many directory entries as will fit into the provided
1931  * dirent buffer from the given directory cursor position.
1932  *
1933  *      IN:     ip      - inode of directory to read.
1934  *              dirent  - buffer for directory entries.
1935  *
1936  *      OUT:    dirent  - filler buffer of directory entries.
1937  *
1938  *      RETURN: 0 if success
1939  *              error code if failure
1940  *
1941  * Timestamps:
1942  *      ip - atime updated
1943  *
1944  * Note that the low 4 bits of the cookie returned by zap is always zero.
1945  * This allows us to use the low range for "special" directory entries:
1946  * We use 0 for '.', and 1 for '..'.  If this is the root of the filesystem,
1947  * we use the offset 2 for the '.zfs' directory.
1948  */
1949 /* ARGSUSED */
1950 int
1951 zfs_readdir(struct inode *ip, void *dirent, filldir_t filldir,
1952     loff_t *pos, cred_t *cr)
1953 {
1954         znode_t         *zp = ITOZ(ip);
1955         zfs_sb_t        *zsb = ITOZSB(ip);
1956         objset_t        *os;
1957         zap_cursor_t    zc;
1958         zap_attribute_t zap;
1959         int             outcount;
1960         int             error;
1961         uint8_t         prefetch;
1962         int             done = 0;
1963         uint64_t        parent;
1964
1965         ZFS_ENTER(zsb);
1966         ZFS_VERIFY_ZP(zp);
1967
1968         if ((error = sa_lookup(zp->z_sa_hdl, SA_ZPL_PARENT(zsb),
1969             &parent, sizeof (parent))) != 0)
1970                 goto out;
1971
1972         /*
1973          * Quit if directory has been removed (posix)
1974          */
1975         error = 0;
1976         if (zp->z_unlinked)
1977                 goto out;
1978
1979         os = zsb->z_os;
1980         prefetch = zp->z_zn_prefetch;
1981
1982         /*
1983          * Initialize the iterator cursor.
1984          */
1985         if (*pos <= 3) {
1986                 /*
1987                  * Start iteration from the beginning of the directory.
1988                  */
1989                 zap_cursor_init(&zc, os, zp->z_id);
1990         } else {
1991                 /*
1992                  * The offset is a serialized cursor.
1993                  */
1994                 zap_cursor_init_serialized(&zc, os, zp->z_id, *pos);
1995         }
1996
1997         /*
1998          * Transform to file-system independent format
1999          */
2000         outcount = 0;
2001
2002         while (!done) {
2003                 uint64_t objnum;
2004                 /*
2005                  * Special case `.', `..', and `.zfs'.
2006                  */
2007                 if (*pos == 0) {
2008                         (void) strcpy(zap.za_name, ".");
2009                         zap.za_normalization_conflict = 0;
2010                         objnum = zp->z_id;
2011                 } else if (*pos == 1) {
2012                         (void) strcpy(zap.za_name, "..");
2013                         zap.za_normalization_conflict = 0;
2014                         objnum = parent;
2015                 } else if (*pos == 2 && zfs_show_ctldir(zp)) {
2016                         (void) strcpy(zap.za_name, ZFS_CTLDIR_NAME);
2017                         zap.za_normalization_conflict = 0;
2018                         objnum = ZFSCTL_INO_ROOT;
2019                 } else {
2020                         /*
2021                          * Grab next entry.
2022                          */
2023                         if ((error = zap_cursor_retrieve(&zc, &zap))) {
2024                                 if (error == ENOENT)
2025                                         break;
2026                                 else
2027                                         goto update;
2028                         }
2029
2030                         if (zap.za_integer_length != 8 ||
2031                             zap.za_num_integers != 1) {
2032                                 cmn_err(CE_WARN, "zap_readdir: bad directory "
2033                                     "entry, obj = %lld, offset = %lld\n",
2034                                     (u_longlong_t)zp->z_id,
2035                                     (u_longlong_t)*pos);
2036                                 error = ENXIO;
2037                                 goto update;
2038                         }
2039
2040                         objnum = ZFS_DIRENT_OBJ(zap.za_first_integer);
2041                 }
2042                 done = filldir(dirent, zap.za_name, strlen(zap.za_name),
2043                                zap_cursor_serialize(&zc), objnum, 0);
2044                 if (done) {
2045                         break;
2046                 }
2047
2048                 /* Prefetch znode */
2049                 if (prefetch) {
2050                         dmu_prefetch(os, objnum, 0, 0);
2051                 }
2052
2053                 if (*pos >= 2) {
2054                         zap_cursor_advance(&zc);
2055                         *pos = zap_cursor_serialize(&zc);
2056                 } else {
2057                         (*pos)++;
2058                 }
2059         }
2060         zp->z_zn_prefetch = B_FALSE; /* a lookup will re-enable pre-fetching */
2061
2062 update:
2063         zap_cursor_fini(&zc);
2064         if (error == ENOENT)
2065                 error = 0;
2066
2067         ZFS_ACCESSTIME_STAMP(zsb, zp);
2068         zfs_inode_update(zp);
2069
2070 out:
2071         ZFS_EXIT(zsb);
2072
2073         return (error);
2074 }
2075 EXPORT_SYMBOL(zfs_readdir);
2076
2077 ulong_t zfs_fsync_sync_cnt = 4;
2078
2079 int
2080 zfs_fsync(struct inode *ip, int syncflag, cred_t *cr)
2081 {
2082         znode_t *zp = ITOZ(ip);
2083         zfs_sb_t *zsb = ITOZSB(ip);
2084
2085         (void) tsd_set(zfs_fsyncer_key, (void *)zfs_fsync_sync_cnt);
2086
2087         if (zsb->z_os->os_sync != ZFS_SYNC_DISABLED) {
2088                 ZFS_ENTER(zsb);
2089                 ZFS_VERIFY_ZP(zp);
2090                 zil_commit(zsb->z_log, zp->z_id);
2091                 ZFS_EXIT(zsb);
2092         }
2093         return (0);
2094 }
2095 EXPORT_SYMBOL(zfs_fsync);
2096
2097
2098 /*
2099  * Get the requested file attributes and place them in the provided
2100  * vattr structure.
2101  *
2102  *      IN:     ip      - inode of file.
2103  *              vap     - va_mask identifies requested attributes.
2104  *                        If ATTR_XVATTR set, then optional attrs are requested
2105  *              flags   - ATTR_NOACLCHECK (CIFS server context)
2106  *              cr      - credentials of caller.
2107  *
2108  *      OUT:    vap     - attribute values.
2109  *
2110  *      RETURN: 0 (always succeeds)
2111  */
2112 /* ARGSUSED */
2113 int
2114 zfs_getattr(struct inode *ip, vattr_t *vap, int flags, cred_t *cr)
2115 {
2116         znode_t *zp = ITOZ(ip);
2117         zfs_sb_t *zsb = ITOZSB(ip);
2118         int     error = 0;
2119         uint64_t links;
2120         uint64_t mtime[2], ctime[2];
2121         xvattr_t *xvap = (xvattr_t *)vap;       /* vap may be an xvattr_t * */
2122         xoptattr_t *xoap = NULL;
2123         boolean_t skipaclchk = (flags & ATTR_NOACLCHECK) ? B_TRUE : B_FALSE;
2124         sa_bulk_attr_t bulk[2];
2125         int count = 0;
2126
2127         ZFS_ENTER(zsb);
2128         ZFS_VERIFY_ZP(zp);
2129
2130         zfs_fuid_map_ids(zp, cr, &vap->va_uid, &vap->va_gid);
2131
2132         SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_MTIME(zsb), NULL, &mtime, 16);
2133         SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_CTIME(zsb), NULL, &ctime, 16);
2134
2135         if ((error = sa_bulk_lookup(zp->z_sa_hdl, bulk, count)) != 0) {
2136                 ZFS_EXIT(zsb);
2137                 return (error);
2138         }
2139
2140         /*
2141          * If ACL is trivial don't bother looking for ACE_READ_ATTRIBUTES.
2142          * Also, if we are the owner don't bother, since owner should
2143          * always be allowed to read basic attributes of file.
2144          */
2145         if (!(zp->z_pflags & ZFS_ACL_TRIVIAL) &&
2146             (vap->va_uid != crgetuid(cr))) {
2147                 if ((error = zfs_zaccess(zp, ACE_READ_ATTRIBUTES, 0,
2148                     skipaclchk, cr))) {
2149                         ZFS_EXIT(zsb);
2150                         return (error);
2151                 }
2152         }
2153
2154         /*
2155          * Return all attributes.  It's cheaper to provide the answer
2156          * than to determine whether we were asked the question.
2157          */
2158
2159         mutex_enter(&zp->z_lock);
2160         vap->va_type = vn_mode_to_vtype(zp->z_mode);
2161         vap->va_mode = zp->z_mode;
2162         vap->va_fsid = ZTOI(zp)->i_sb->s_dev;
2163         vap->va_nodeid = zp->z_id;
2164         if ((zp->z_id == zsb->z_root) && zfs_show_ctldir(zp))
2165                 links = zp->z_links + 1;
2166         else
2167                 links = zp->z_links;
2168         vap->va_nlink = MIN(links, ZFS_LINK_MAX);
2169         vap->va_size = i_size_read(ip);
2170         vap->va_rdev = ip->i_rdev;
2171         vap->va_seq = ip->i_generation;
2172
2173         /*
2174          * Add in any requested optional attributes and the create time.
2175          * Also set the corresponding bits in the returned attribute bitmap.
2176          */
2177         if ((xoap = xva_getxoptattr(xvap)) != NULL && zsb->z_use_fuids) {
2178                 if (XVA_ISSET_REQ(xvap, XAT_ARCHIVE)) {
2179                         xoap->xoa_archive =
2180                             ((zp->z_pflags & ZFS_ARCHIVE) != 0);
2181                         XVA_SET_RTN(xvap, XAT_ARCHIVE);
2182                 }
2183
2184                 if (XVA_ISSET_REQ(xvap, XAT_READONLY)) {
2185                         xoap->xoa_readonly =
2186                             ((zp->z_pflags & ZFS_READONLY) != 0);
2187                         XVA_SET_RTN(xvap, XAT_READONLY);
2188                 }
2189
2190                 if (XVA_ISSET_REQ(xvap, XAT_SYSTEM)) {
2191                         xoap->xoa_system =
2192                             ((zp->z_pflags & ZFS_SYSTEM) != 0);
2193                         XVA_SET_RTN(xvap, XAT_SYSTEM);
2194                 }
2195
2196                 if (XVA_ISSET_REQ(xvap, XAT_HIDDEN)) {
2197                         xoap->xoa_hidden =
2198                             ((zp->z_pflags & ZFS_HIDDEN) != 0);
2199                         XVA_SET_RTN(xvap, XAT_HIDDEN);
2200                 }
2201
2202                 if (XVA_ISSET_REQ(xvap, XAT_NOUNLINK)) {
2203                         xoap->xoa_nounlink =
2204                             ((zp->z_pflags & ZFS_NOUNLINK) != 0);
2205                         XVA_SET_RTN(xvap, XAT_NOUNLINK);
2206                 }
2207
2208                 if (XVA_ISSET_REQ(xvap, XAT_IMMUTABLE)) {
2209                         xoap->xoa_immutable =
2210                             ((zp->z_pflags & ZFS_IMMUTABLE) != 0);
2211                         XVA_SET_RTN(xvap, XAT_IMMUTABLE);
2212                 }
2213
2214                 if (XVA_ISSET_REQ(xvap, XAT_APPENDONLY)) {
2215                         xoap->xoa_appendonly =
2216                             ((zp->z_pflags & ZFS_APPENDONLY) != 0);
2217                         XVA_SET_RTN(xvap, XAT_APPENDONLY);
2218                 }
2219
2220                 if (XVA_ISSET_REQ(xvap, XAT_NODUMP)) {
2221                         xoap->xoa_nodump =
2222                             ((zp->z_pflags & ZFS_NODUMP) != 0);
2223                         XVA_SET_RTN(xvap, XAT_NODUMP);
2224                 }
2225
2226                 if (XVA_ISSET_REQ(xvap, XAT_OPAQUE)) {
2227                         xoap->xoa_opaque =
2228                             ((zp->z_pflags & ZFS_OPAQUE) != 0);
2229                         XVA_SET_RTN(xvap, XAT_OPAQUE);
2230                 }
2231
2232                 if (XVA_ISSET_REQ(xvap, XAT_AV_QUARANTINED)) {
2233                         xoap->xoa_av_quarantined =
2234                             ((zp->z_pflags & ZFS_AV_QUARANTINED) != 0);
2235                         XVA_SET_RTN(xvap, XAT_AV_QUARANTINED);
2236                 }
2237
2238                 if (XVA_ISSET_REQ(xvap, XAT_AV_MODIFIED)) {
2239                         xoap->xoa_av_modified =
2240                             ((zp->z_pflags & ZFS_AV_MODIFIED) != 0);
2241                         XVA_SET_RTN(xvap, XAT_AV_MODIFIED);
2242                 }
2243
2244                 if (XVA_ISSET_REQ(xvap, XAT_AV_SCANSTAMP) &&
2245                     S_ISREG(ip->i_mode)) {
2246                         zfs_sa_get_scanstamp(zp, xvap);
2247                 }
2248
2249                 if (XVA_ISSET_REQ(xvap, XAT_CREATETIME)) {
2250                         uint64_t times[2];
2251
2252                         (void) sa_lookup(zp->z_sa_hdl, SA_ZPL_CRTIME(zsb),
2253                             times, sizeof (times));
2254                         ZFS_TIME_DECODE(&xoap->xoa_createtime, times);
2255                         XVA_SET_RTN(xvap, XAT_CREATETIME);
2256                 }
2257
2258                 if (XVA_ISSET_REQ(xvap, XAT_REPARSE)) {
2259                         xoap->xoa_reparse = ((zp->z_pflags & ZFS_REPARSE) != 0);
2260                         XVA_SET_RTN(xvap, XAT_REPARSE);
2261                 }
2262                 if (XVA_ISSET_REQ(xvap, XAT_GEN)) {
2263                         xoap->xoa_generation = zp->z_gen;
2264                         XVA_SET_RTN(xvap, XAT_GEN);
2265                 }
2266
2267                 if (XVA_ISSET_REQ(xvap, XAT_OFFLINE)) {
2268                         xoap->xoa_offline =
2269                             ((zp->z_pflags & ZFS_OFFLINE) != 0);
2270                         XVA_SET_RTN(xvap, XAT_OFFLINE);
2271                 }
2272
2273                 if (XVA_ISSET_REQ(xvap, XAT_SPARSE)) {
2274                         xoap->xoa_sparse =
2275                             ((zp->z_pflags & ZFS_SPARSE) != 0);
2276                         XVA_SET_RTN(xvap, XAT_SPARSE);
2277                 }
2278         }
2279
2280         ZFS_TIME_DECODE(&vap->va_atime, zp->z_atime);
2281         ZFS_TIME_DECODE(&vap->va_mtime, mtime);
2282         ZFS_TIME_DECODE(&vap->va_ctime, ctime);
2283
2284         mutex_exit(&zp->z_lock);
2285
2286         sa_object_size(zp->z_sa_hdl, &vap->va_blksize, &vap->va_nblocks);
2287
2288         if (zp->z_blksz == 0) {
2289                 /*
2290                  * Block size hasn't been set; suggest maximal I/O transfers.
2291                  */
2292                 vap->va_blksize = zsb->z_max_blksz;
2293         }
2294
2295         ZFS_EXIT(zsb);
2296         return (0);
2297 }
2298 EXPORT_SYMBOL(zfs_getattr);
2299
2300 /*
2301  * Set the file attributes to the values contained in the
2302  * vattr structure.
2303  *
2304  *      IN:     ip      - inode of file to be modified.
2305  *              vap     - new attribute values.
2306  *                        If ATTR_XVATTR set, then optional attrs are being set
2307  *              flags   - ATTR_UTIME set if non-default time values provided.
2308  *                      - ATTR_NOACLCHECK (CIFS context only).
2309  *              cr      - credentials of caller.
2310  *
2311  *      RETURN: 0 if success
2312  *              error code if failure
2313  *
2314  * Timestamps:
2315  *      ip - ctime updated, mtime updated if size changed.
2316  */
2317 /* ARGSUSED */
2318 int
2319 zfs_setattr(struct inode *ip, vattr_t *vap, int flags, cred_t *cr)
2320 {
2321         znode_t         *zp = ITOZ(ip);
2322         zfs_sb_t        *zsb = ITOZSB(ip);
2323         zilog_t         *zilog;
2324         dmu_tx_t        *tx;
2325         vattr_t         oldva;
2326         xvattr_t        *tmpxvattr;
2327         uint_t          mask = vap->va_mask;
2328         uint_t          saved_mask;
2329         int             trim_mask = 0;
2330         uint64_t        new_mode;
2331         uint64_t        new_uid, new_gid;
2332         uint64_t        xattr_obj;
2333         uint64_t        mtime[2], ctime[2];
2334         znode_t         *attrzp;
2335         int             need_policy = FALSE;
2336         int             err, err2;
2337         zfs_fuid_info_t *fuidp = NULL;
2338         xvattr_t *xvap = (xvattr_t *)vap;       /* vap may be an xvattr_t * */
2339         xoptattr_t      *xoap;
2340         zfs_acl_t       *aclp;
2341         boolean_t skipaclchk = (flags & ATTR_NOACLCHECK) ? B_TRUE : B_FALSE;
2342         boolean_t       fuid_dirtied = B_FALSE;
2343         sa_bulk_attr_t  *bulk, *xattr_bulk;
2344         int             count = 0, xattr_count = 0;
2345
2346         if (mask == 0)
2347                 return (0);
2348
2349         ZFS_ENTER(zsb);
2350         ZFS_VERIFY_ZP(zp);
2351
2352         zilog = zsb->z_log;
2353
2354         /*
2355          * Make sure that if we have ephemeral uid/gid or xvattr specified
2356          * that file system is at proper version level
2357          */
2358
2359         if (zsb->z_use_fuids == B_FALSE &&
2360             (((mask & ATTR_UID) && IS_EPHEMERAL(vap->va_uid)) ||
2361             ((mask & ATTR_GID) && IS_EPHEMERAL(vap->va_gid)) ||
2362             (mask & ATTR_XVATTR))) {
2363                 ZFS_EXIT(zsb);
2364                 return (EINVAL);
2365         }
2366
2367         if (mask & ATTR_SIZE && S_ISDIR(ip->i_mode)) {
2368                 ZFS_EXIT(zsb);
2369                 return (EISDIR);
2370         }
2371
2372         if (mask & ATTR_SIZE && !S_ISREG(ip->i_mode) && !S_ISFIFO(ip->i_mode)) {
2373                 ZFS_EXIT(zsb);
2374                 return (EINVAL);
2375         }
2376
2377         /*
2378          * If this is an xvattr_t, then get a pointer to the structure of
2379          * optional attributes.  If this is NULL, then we have a vattr_t.
2380          */
2381         xoap = xva_getxoptattr(xvap);
2382
2383         tmpxvattr = kmem_alloc(sizeof(xvattr_t), KM_SLEEP);
2384         xva_init(tmpxvattr);
2385
2386         bulk = kmem_alloc(sizeof(sa_bulk_attr_t) * 7, KM_SLEEP);
2387         xattr_bulk = kmem_alloc(sizeof(sa_bulk_attr_t) * 7, KM_SLEEP);
2388
2389         /*
2390          * Immutable files can only alter immutable bit and atime
2391          */
2392         if ((zp->z_pflags & ZFS_IMMUTABLE) &&
2393             ((mask & (ATTR_SIZE|ATTR_UID|ATTR_GID|ATTR_MTIME|ATTR_MODE)) ||
2394             ((mask & ATTR_XVATTR) && XVA_ISSET_REQ(xvap, XAT_CREATETIME)))) {
2395                 err = EPERM;
2396                 goto out3;
2397         }
2398
2399         if ((mask & ATTR_SIZE) && (zp->z_pflags & ZFS_READONLY)) {
2400                 err = EPERM;
2401                 goto out3;
2402         }
2403
2404         /*
2405          * Verify timestamps doesn't overflow 32 bits.
2406          * ZFS can handle large timestamps, but 32bit syscalls can't
2407          * handle times greater than 2039.  This check should be removed
2408          * once large timestamps are fully supported.
2409          */
2410         if (mask & (ATTR_ATIME | ATTR_MTIME)) {
2411                 if (((mask & ATTR_ATIME) && TIMESPEC_OVERFLOW(&vap->va_atime)) ||
2412                     ((mask & ATTR_MTIME) && TIMESPEC_OVERFLOW(&vap->va_mtime))) {
2413                         err = EOVERFLOW;
2414                         goto out3;
2415                 }
2416         }
2417
2418 top:
2419         attrzp = NULL;
2420         aclp = NULL;
2421
2422         /* Can this be moved to before the top label? */
2423         if (zfs_is_readonly(zsb)) {
2424                 err = EROFS;
2425                 goto out3;
2426         }
2427
2428         /*
2429          * First validate permissions
2430          */
2431
2432         if (mask & ATTR_SIZE) {
2433                 err = zfs_zaccess(zp, ACE_WRITE_DATA, 0, skipaclchk, cr);
2434                 if (err)
2435                         goto out3;
2436
2437                 truncate_setsize(ip, vap->va_size);
2438
2439                 /*
2440                  * XXX - Note, we are not providing any open
2441                  * mode flags here (like FNDELAY), so we may
2442                  * block if there are locks present... this
2443                  * should be addressed in openat().
2444                  */
2445                 /* XXX - would it be OK to generate a log record here? */
2446                 err = zfs_freesp(zp, vap->va_size, 0, 0, FALSE);
2447                 if (err)
2448                         goto out3;
2449         }
2450
2451         if (mask & (ATTR_ATIME|ATTR_MTIME) ||
2452             ((mask & ATTR_XVATTR) && (XVA_ISSET_REQ(xvap, XAT_HIDDEN) ||
2453             XVA_ISSET_REQ(xvap, XAT_READONLY) ||
2454             XVA_ISSET_REQ(xvap, XAT_ARCHIVE) ||
2455             XVA_ISSET_REQ(xvap, XAT_OFFLINE) ||
2456             XVA_ISSET_REQ(xvap, XAT_SPARSE) ||
2457             XVA_ISSET_REQ(xvap, XAT_CREATETIME) ||
2458             XVA_ISSET_REQ(xvap, XAT_SYSTEM)))) {
2459                 need_policy = zfs_zaccess(zp, ACE_WRITE_ATTRIBUTES, 0,
2460                     skipaclchk, cr);
2461         }
2462
2463         if (mask & (ATTR_UID|ATTR_GID)) {
2464                 int     idmask = (mask & (ATTR_UID|ATTR_GID));
2465                 int     take_owner;
2466                 int     take_group;
2467
2468                 /*
2469                  * NOTE: even if a new mode is being set,
2470                  * we may clear S_ISUID/S_ISGID bits.
2471                  */
2472
2473                 if (!(mask & ATTR_MODE))
2474                         vap->va_mode = zp->z_mode;
2475
2476                 /*
2477                  * Take ownership or chgrp to group we are a member of
2478                  */
2479
2480                 take_owner = (mask & ATTR_UID) && (vap->va_uid == crgetuid(cr));
2481                 take_group = (mask & ATTR_GID) &&
2482                     zfs_groupmember(zsb, vap->va_gid, cr);
2483
2484                 /*
2485                  * If both ATTR_UID and ATTR_GID are set then take_owner and
2486                  * take_group must both be set in order to allow taking
2487                  * ownership.
2488                  *
2489                  * Otherwise, send the check through secpolicy_vnode_setattr()
2490                  *
2491                  */
2492
2493                 if (((idmask == (ATTR_UID|ATTR_GID)) &&
2494                     take_owner && take_group) ||
2495                     ((idmask == ATTR_UID) && take_owner) ||
2496                     ((idmask == ATTR_GID) && take_group)) {
2497                         if (zfs_zaccess(zp, ACE_WRITE_OWNER, 0,
2498                             skipaclchk, cr) == 0) {
2499                                 /*
2500                                  * Remove setuid/setgid for non-privileged users
2501                                  */
2502                                 (void) secpolicy_setid_clear(vap, cr);
2503                                 trim_mask = (mask & (ATTR_UID|ATTR_GID));
2504                         } else {
2505                                 need_policy =  TRUE;
2506                         }
2507                 } else {
2508                         need_policy =  TRUE;
2509                 }
2510         }
2511
2512         mutex_enter(&zp->z_lock);
2513         oldva.va_mode = zp->z_mode;
2514         zfs_fuid_map_ids(zp, cr, &oldva.va_uid, &oldva.va_gid);
2515         if (mask & ATTR_XVATTR) {
2516                 /*
2517                  * Update xvattr mask to include only those attributes
2518                  * that are actually changing.
2519                  *
2520                  * the bits will be restored prior to actually setting
2521                  * the attributes so the caller thinks they were set.
2522                  */
2523                 if (XVA_ISSET_REQ(xvap, XAT_APPENDONLY)) {
2524                         if (xoap->xoa_appendonly !=
2525                             ((zp->z_pflags & ZFS_APPENDONLY) != 0)) {
2526                                 need_policy = TRUE;
2527                         } else {
2528                                 XVA_CLR_REQ(xvap, XAT_APPENDONLY);
2529                                 XVA_SET_REQ(tmpxvattr, XAT_APPENDONLY);
2530                         }
2531                 }
2532
2533                 if (XVA_ISSET_REQ(xvap, XAT_NOUNLINK)) {
2534                         if (xoap->xoa_nounlink !=
2535                             ((zp->z_pflags & ZFS_NOUNLINK) != 0)) {
2536                                 need_policy = TRUE;
2537                         } else {
2538                                 XVA_CLR_REQ(xvap, XAT_NOUNLINK);
2539                                 XVA_SET_REQ(tmpxvattr, XAT_NOUNLINK);
2540                         }
2541                 }
2542
2543                 if (XVA_ISSET_REQ(xvap, XAT_IMMUTABLE)) {
2544                         if (xoap->xoa_immutable !=
2545                             ((zp->z_pflags & ZFS_IMMUTABLE) != 0)) {
2546                                 need_policy = TRUE;
2547                         } else {
2548                                 XVA_CLR_REQ(xvap, XAT_IMMUTABLE);
2549                                 XVA_SET_REQ(tmpxvattr, XAT_IMMUTABLE);
2550                         }
2551                 }
2552
2553                 if (XVA_ISSET_REQ(xvap, XAT_NODUMP)) {
2554                         if (xoap->xoa_nodump !=
2555                             ((zp->z_pflags & ZFS_NODUMP) != 0)) {
2556                                 need_policy = TRUE;
2557                         } else {
2558                                 XVA_CLR_REQ(xvap, XAT_NODUMP);
2559                                 XVA_SET_REQ(tmpxvattr, XAT_NODUMP);
2560                         }
2561                 }
2562
2563                 if (XVA_ISSET_REQ(xvap, XAT_AV_MODIFIED)) {
2564                         if (xoap->xoa_av_modified !=
2565                             ((zp->z_pflags & ZFS_AV_MODIFIED) != 0)) {
2566                                 need_policy = TRUE;
2567                         } else {
2568                                 XVA_CLR_REQ(xvap, XAT_AV_MODIFIED);
2569                                 XVA_SET_REQ(tmpxvattr, XAT_AV_MODIFIED);
2570                         }
2571                 }
2572
2573                 if (XVA_ISSET_REQ(xvap, XAT_AV_QUARANTINED)) {
2574                         if ((!S_ISREG(ip->i_mode) &&
2575                             xoap->xoa_av_quarantined) ||
2576                             xoap->xoa_av_quarantined !=
2577                             ((zp->z_pflags & ZFS_AV_QUARANTINED) != 0)) {
2578                                 need_policy = TRUE;
2579                         } else {
2580                                 XVA_CLR_REQ(xvap, XAT_AV_QUARANTINED);
2581                                 XVA_SET_REQ(tmpxvattr, XAT_AV_QUARANTINED);
2582                         }
2583                 }
2584
2585                 if (XVA_ISSET_REQ(xvap, XAT_REPARSE)) {
2586                         mutex_exit(&zp->z_lock);
2587                         err = EPERM;
2588                         goto out3;
2589                 }
2590
2591                 if (need_policy == FALSE &&
2592                     (XVA_ISSET_REQ(xvap, XAT_AV_SCANSTAMP) ||
2593                     XVA_ISSET_REQ(xvap, XAT_OPAQUE))) {
2594                         need_policy = TRUE;
2595                 }
2596         }
2597
2598         mutex_exit(&zp->z_lock);
2599
2600         if (mask & ATTR_MODE) {
2601                 if (zfs_zaccess(zp, ACE_WRITE_ACL, 0, skipaclchk, cr) == 0) {
2602                         err = secpolicy_setid_setsticky_clear(ip, vap,
2603                             &oldva, cr);
2604                         if (err)
2605                                 goto out3;
2606
2607                         trim_mask |= ATTR_MODE;
2608                 } else {
2609                         need_policy = TRUE;
2610                 }
2611         }
2612
2613         if (need_policy) {
2614                 /*
2615                  * If trim_mask is set then take ownership
2616                  * has been granted or write_acl is present and user
2617                  * has the ability to modify mode.  In that case remove
2618                  * UID|GID and or MODE from mask so that
2619                  * secpolicy_vnode_setattr() doesn't revoke it.
2620                  */
2621
2622                 if (trim_mask) {
2623                         saved_mask = vap->va_mask;
2624                         vap->va_mask &= ~trim_mask;
2625                 }
2626                 err = secpolicy_vnode_setattr(cr, ip, vap, &oldva, flags,
2627                     (int (*)(void *, int, cred_t *))zfs_zaccess_unix, zp);
2628                 if (err)
2629                         goto out3;
2630
2631                 if (trim_mask)
2632                         vap->va_mask |= saved_mask;
2633         }
2634
2635         /*
2636          * secpolicy_vnode_setattr, or take ownership may have
2637          * changed va_mask
2638          */
2639         mask = vap->va_mask;
2640
2641         if ((mask & (ATTR_UID | ATTR_GID))) {
2642                 err = sa_lookup(zp->z_sa_hdl, SA_ZPL_XATTR(zsb),
2643                     &xattr_obj, sizeof (xattr_obj));
2644
2645                 if (err == 0 && xattr_obj) {
2646                         err = zfs_zget(ZTOZSB(zp), xattr_obj, &attrzp);
2647                         if (err)
2648                                 goto out2;
2649                 }
2650                 if (mask & ATTR_UID) {
2651                         new_uid = zfs_fuid_create(zsb,
2652                             (uint64_t)vap->va_uid, cr, ZFS_OWNER, &fuidp);
2653                         if (new_uid != zp->z_uid &&
2654                             zfs_fuid_overquota(zsb, B_FALSE, new_uid)) {
2655                                 if (attrzp)
2656                                         iput(ZTOI(attrzp));
2657                                 err = EDQUOT;
2658                                 goto out2;
2659                         }
2660                 }
2661
2662                 if (mask & ATTR_GID) {
2663                         new_gid = zfs_fuid_create(zsb, (uint64_t)vap->va_gid,
2664                             cr, ZFS_GROUP, &fuidp);
2665                         if (new_gid != zp->z_gid &&
2666                             zfs_fuid_overquota(zsb, B_TRUE, new_gid)) {
2667                                 if (attrzp)
2668                                         iput(ZTOI(attrzp));
2669                                 err = EDQUOT;
2670                                 goto out2;
2671                         }
2672                 }
2673         }
2674         tx = dmu_tx_create(zsb->z_os);
2675
2676         if (mask & ATTR_MODE) {
2677                 uint64_t pmode = zp->z_mode;
2678                 uint64_t acl_obj;
2679                 new_mode = (pmode & S_IFMT) | (vap->va_mode & ~S_IFMT);
2680
2681                 zfs_acl_chmod_setattr(zp, &aclp, new_mode);
2682
2683                 mutex_enter(&zp->z_lock);
2684                 if (!zp->z_is_sa && ((acl_obj = zfs_external_acl(zp)) != 0)) {
2685                         /*
2686                          * Are we upgrading ACL from old V0 format
2687                          * to V1 format?
2688                          */
2689                         if (zsb->z_version >= ZPL_VERSION_FUID &&
2690                             zfs_znode_acl_version(zp) ==
2691                             ZFS_ACL_VERSION_INITIAL) {
2692                                 dmu_tx_hold_free(tx, acl_obj, 0,
2693                                     DMU_OBJECT_END);
2694                                 dmu_tx_hold_write(tx, DMU_NEW_OBJECT,
2695                                     0, aclp->z_acl_bytes);
2696                         } else {
2697                                 dmu_tx_hold_write(tx, acl_obj, 0,
2698                                     aclp->z_acl_bytes);
2699                         }
2700                 } else if (!zp->z_is_sa && aclp->z_acl_bytes > ZFS_ACE_SPACE) {
2701                         dmu_tx_hold_write(tx, DMU_NEW_OBJECT,
2702                             0, aclp->z_acl_bytes);
2703                 }
2704                 mutex_exit(&zp->z_lock);
2705                 dmu_tx_hold_sa(tx, zp->z_sa_hdl, B_TRUE);
2706         } else {
2707                 if ((mask & ATTR_XVATTR) &&
2708                     XVA_ISSET_REQ(xvap, XAT_AV_SCANSTAMP))
2709                         dmu_tx_hold_sa(tx, zp->z_sa_hdl, B_TRUE);
2710                 else
2711                         dmu_tx_hold_sa(tx, zp->z_sa_hdl, B_FALSE);
2712         }
2713
2714         if (attrzp) {
2715                 dmu_tx_hold_sa(tx, attrzp->z_sa_hdl, B_FALSE);
2716         }
2717
2718         fuid_dirtied = zsb->z_fuid_dirty;
2719         if (fuid_dirtied)
2720                 zfs_fuid_txhold(zsb, tx);
2721
2722         zfs_sa_upgrade_txholds(tx, zp);
2723
2724         err = dmu_tx_assign(tx, TXG_NOWAIT);
2725         if (err) {
2726                 if (err == ERESTART)
2727                         dmu_tx_wait(tx);
2728                 goto out;
2729         }
2730
2731         count = 0;
2732         /*
2733          * Set each attribute requested.
2734          * We group settings according to the locks they need to acquire.
2735          *
2736          * Note: you cannot set ctime directly, although it will be
2737          * updated as a side-effect of calling this function.
2738          */
2739
2740
2741         if (mask & (ATTR_UID|ATTR_GID|ATTR_MODE))
2742                 mutex_enter(&zp->z_acl_lock);
2743         mutex_enter(&zp->z_lock);
2744
2745         SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_FLAGS(zsb), NULL,
2746             &zp->z_pflags, sizeof (zp->z_pflags));
2747
2748         if (attrzp) {
2749                 if (mask & (ATTR_UID|ATTR_GID|ATTR_MODE))
2750                         mutex_enter(&attrzp->z_acl_lock);
2751                 mutex_enter(&attrzp->z_lock);
2752                 SA_ADD_BULK_ATTR(xattr_bulk, xattr_count,
2753                     SA_ZPL_FLAGS(zsb), NULL, &attrzp->z_pflags,
2754                     sizeof (attrzp->z_pflags));
2755         }
2756
2757         if (mask & (ATTR_UID|ATTR_GID)) {
2758
2759                 if (mask & ATTR_UID) {
2760                         SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_UID(zsb), NULL,
2761                             &new_uid, sizeof (new_uid));
2762                         zp->z_uid = new_uid;
2763                         if (attrzp) {
2764                                 SA_ADD_BULK_ATTR(xattr_bulk, xattr_count,
2765                                     SA_ZPL_UID(zsb), NULL, &new_uid,
2766                                     sizeof (new_uid));
2767                                 attrzp->z_uid = new_uid;
2768                         }
2769                 }
2770
2771                 if (mask & ATTR_GID) {
2772                         SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_GID(zsb),
2773                             NULL, &new_gid, sizeof (new_gid));
2774                         zp->z_gid = new_gid;
2775                         if (attrzp) {
2776                                 SA_ADD_BULK_ATTR(xattr_bulk, xattr_count,
2777                                     SA_ZPL_GID(zsb), NULL, &new_gid,
2778                                     sizeof (new_gid));
2779                                 attrzp->z_gid = new_gid;
2780                         }
2781                 }
2782                 if (!(mask & ATTR_MODE)) {
2783                         SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_MODE(zsb),
2784                             NULL, &new_mode, sizeof (new_mode));
2785                         new_mode = zp->z_mode;
2786                 }
2787                 err = zfs_acl_chown_setattr(zp);
2788                 ASSERT(err == 0);
2789                 if (attrzp) {
2790                         err = zfs_acl_chown_setattr(attrzp);
2791                         ASSERT(err == 0);
2792                 }
2793         }
2794
2795         if (mask & ATTR_MODE) {
2796                 SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_MODE(zsb), NULL,
2797                     &new_mode, sizeof (new_mode));
2798                 zp->z_mode = new_mode;
2799                 ASSERT3P(aclp, !=, NULL);
2800                 err = zfs_aclset_common(zp, aclp, cr, tx);
2801                 ASSERT3U(err, ==, 0);
2802                 if (zp->z_acl_cached)
2803                         zfs_acl_free(zp->z_acl_cached);
2804                 zp->z_acl_cached = aclp;
2805                 aclp = NULL;
2806         }
2807
2808
2809         if (mask & ATTR_ATIME) {
2810                 ZFS_TIME_ENCODE(&vap->va_atime, zp->z_atime);
2811                 SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_ATIME(zsb), NULL,
2812                     &zp->z_atime, sizeof (zp->z_atime));
2813         }
2814
2815         if (mask & ATTR_MTIME) {
2816                 ZFS_TIME_ENCODE(&vap->va_mtime, mtime);
2817                 SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_MTIME(zsb), NULL,
2818                     mtime, sizeof (mtime));
2819         }
2820
2821         /* XXX - shouldn't this be done *before* the ATIME/MTIME checks? */
2822         if (mask & ATTR_SIZE && !(mask & ATTR_MTIME)) {
2823                 SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_MTIME(zsb),
2824                     NULL, mtime, sizeof (mtime));
2825                 SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_CTIME(zsb), NULL,
2826                     &ctime, sizeof (ctime));
2827                 zfs_tstamp_update_setup(zp, CONTENT_MODIFIED, mtime, ctime,
2828                     B_TRUE);
2829         } else if (mask != 0) {
2830                 SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_CTIME(zsb), NULL,
2831                     &ctime, sizeof (ctime));
2832                 zfs_tstamp_update_setup(zp, STATE_CHANGED, mtime, ctime,
2833                     B_TRUE);
2834                 if (attrzp) {
2835                         SA_ADD_BULK_ATTR(xattr_bulk, xattr_count,
2836                             SA_ZPL_CTIME(zsb), NULL,
2837                             &ctime, sizeof (ctime));
2838                         zfs_tstamp_update_setup(attrzp, STATE_CHANGED,
2839                             mtime, ctime, B_TRUE);
2840                 }
2841         }
2842         /*
2843          * Do this after setting timestamps to prevent timestamp
2844          * update from toggling bit
2845          */
2846
2847         if (xoap && (mask & ATTR_XVATTR)) {
2848
2849                 /*
2850                  * restore trimmed off masks
2851                  * so that return masks can be set for caller.
2852                  */
2853
2854                 if (XVA_ISSET_REQ(tmpxvattr, XAT_APPENDONLY)) {
2855                         XVA_SET_REQ(xvap, XAT_APPENDONLY);
2856                 }
2857                 if (XVA_ISSET_REQ(tmpxvattr, XAT_NOUNLINK)) {
2858                         XVA_SET_REQ(xvap, XAT_NOUNLINK);
2859                 }
2860                 if (XVA_ISSET_REQ(tmpxvattr, XAT_IMMUTABLE)) {
2861                         XVA_SET_REQ(xvap, XAT_IMMUTABLE);
2862                 }
2863                 if (XVA_ISSET_REQ(tmpxvattr, XAT_NODUMP)) {
2864                         XVA_SET_REQ(xvap, XAT_NODUMP);
2865                 }
2866                 if (XVA_ISSET_REQ(tmpxvattr, XAT_AV_MODIFIED)) {
2867                         XVA_SET_REQ(xvap, XAT_AV_MODIFIED);
2868                 }
2869                 if (XVA_ISSET_REQ(tmpxvattr, XAT_AV_QUARANTINED)) {
2870                         XVA_SET_REQ(xvap, XAT_AV_QUARANTINED);
2871                 }
2872
2873                 if (XVA_ISSET_REQ(xvap, XAT_AV_SCANSTAMP))
2874                         ASSERT(S_ISREG(ip->i_mode));
2875
2876                 zfs_xvattr_set(zp, xvap, tx);
2877         }
2878
2879         if (fuid_dirtied)
2880                 zfs_fuid_sync(zsb, tx);
2881
2882         if (mask != 0)
2883                 zfs_log_setattr(zilog, tx, TX_SETATTR, zp, vap, mask, fuidp);
2884
2885         mutex_exit(&zp->z_lock);
2886         if (mask & (ATTR_UID|ATTR_GID|ATTR_MODE))
2887                 mutex_exit(&zp->z_acl_lock);
2888
2889         if (attrzp) {
2890                 if (mask & (ATTR_UID|ATTR_GID|ATTR_MODE))
2891                         mutex_exit(&attrzp->z_acl_lock);
2892                 mutex_exit(&attrzp->z_lock);
2893         }
2894 out:
2895         if (err == 0 && attrzp) {
2896                 err2 = sa_bulk_update(attrzp->z_sa_hdl, xattr_bulk,
2897                     xattr_count, tx);
2898                 ASSERT(err2 == 0);
2899         }
2900
2901         if (attrzp)
2902                 iput(ZTOI(attrzp));
2903         if (aclp)
2904                 zfs_acl_free(aclp);
2905
2906         if (fuidp) {
2907                 zfs_fuid_info_free(fuidp);
2908                 fuidp = NULL;
2909         }
2910
2911         if (err) {
2912                 dmu_tx_abort(tx);
2913                 if (err == ERESTART)
2914                         goto top;
2915         } else {
2916                 err2 = sa_bulk_update(zp->z_sa_hdl, bulk, count, tx);
2917                 dmu_tx_commit(tx);
2918                 zfs_inode_update(zp);
2919         }
2920
2921 out2:
2922         if (zsb->z_os->os_sync == ZFS_SYNC_ALWAYS)
2923                 zil_commit(zilog, 0);
2924
2925 out3:
2926         kmem_free(xattr_bulk, sizeof(sa_bulk_attr_t) * 7);
2927         kmem_free(bulk, sizeof(sa_bulk_attr_t) * 7);
2928         kmem_free(tmpxvattr, sizeof(xvattr_t));
2929         ZFS_EXIT(zsb);
2930         return (err);
2931 }
2932 EXPORT_SYMBOL(zfs_setattr);
2933
2934 typedef struct zfs_zlock {
2935         krwlock_t       *zl_rwlock;     /* lock we acquired */
2936         znode_t         *zl_znode;      /* znode we held */
2937         struct zfs_zlock *zl_next;      /* next in list */
2938 } zfs_zlock_t;
2939
2940 /*
2941  * Drop locks and release vnodes that were held by zfs_rename_lock().
2942  */
2943 static void
2944 zfs_rename_unlock(zfs_zlock_t **zlpp)
2945 {
2946         zfs_zlock_t *zl;
2947
2948         while ((zl = *zlpp) != NULL) {
2949                 if (zl->zl_znode != NULL)
2950                         iput(ZTOI(zl->zl_znode));
2951                 rw_exit(zl->zl_rwlock);
2952                 *zlpp = zl->zl_next;
2953                 kmem_free(zl, sizeof (*zl));
2954         }
2955 }
2956
2957 /*
2958  * Search back through the directory tree, using the ".." entries.
2959  * Lock each directory in the chain to prevent concurrent renames.
2960  * Fail any attempt to move a directory into one of its own descendants.
2961  * XXX - z_parent_lock can overlap with map or grow locks
2962  */
2963 static int
2964 zfs_rename_lock(znode_t *szp, znode_t *tdzp, znode_t *sdzp, zfs_zlock_t **zlpp)
2965 {
2966         zfs_zlock_t     *zl;
2967         znode_t         *zp = tdzp;
2968         uint64_t        rootid = ZTOZSB(zp)->z_root;
2969         uint64_t        oidp = zp->z_id;
2970         krwlock_t       *rwlp = &szp->z_parent_lock;
2971         krw_t           rw = RW_WRITER;
2972
2973         /*
2974          * First pass write-locks szp and compares to zp->z_id.
2975          * Later passes read-lock zp and compare to zp->z_parent.
2976          */
2977         do {
2978                 if (!rw_tryenter(rwlp, rw)) {
2979                         /*
2980                          * Another thread is renaming in this path.
2981                          * Note that if we are a WRITER, we don't have any
2982                          * parent_locks held yet.
2983                          */
2984                         if (rw == RW_READER && zp->z_id > szp->z_id) {
2985                                 /*
2986                                  * Drop our locks and restart
2987                                  */
2988                                 zfs_rename_unlock(&zl);
2989                                 *zlpp = NULL;
2990                                 zp = tdzp;
2991                                 oidp = zp->z_id;
2992                                 rwlp = &szp->z_parent_lock;
2993                                 rw = RW_WRITER;
2994                                 continue;
2995                         } else {
2996                                 /*
2997                                  * Wait for other thread to drop its locks
2998                                  */
2999                                 rw_enter(rwlp, rw);
3000                         }
3001                 }
3002
3003                 zl = kmem_alloc(sizeof (*zl), KM_SLEEP);
3004                 zl->zl_rwlock = rwlp;
3005                 zl->zl_znode = NULL;
3006                 zl->zl_next = *zlpp;
3007                 *zlpp = zl;
3008
3009                 if (oidp == szp->z_id)          /* We're a descendant of szp */
3010                         return (EINVAL);
3011
3012                 if (oidp == rootid)             /* We've hit the top */
3013                         return (0);
3014
3015                 if (rw == RW_READER) {          /* i.e. not the first pass */
3016                         int error = zfs_zget(ZTOZSB(zp), oidp, &zp);
3017                         if (error)
3018                                 return (error);
3019                         zl->zl_znode = zp;
3020                 }
3021                 (void) sa_lookup(zp->z_sa_hdl, SA_ZPL_PARENT(ZTOZSB(zp)),
3022                     &oidp, sizeof (oidp));
3023                 rwlp = &zp->z_parent_lock;
3024                 rw = RW_READER;
3025
3026         } while (zp->z_id != sdzp->z_id);
3027
3028         return (0);
3029 }
3030
3031 /*
3032  * Move an entry from the provided source directory to the target
3033  * directory.  Change the entry name as indicated.
3034  *
3035  *      IN:     sdip    - Source directory containing the "old entry".
3036  *              snm     - Old entry name.
3037  *              tdip    - Target directory to contain the "new entry".
3038  *              tnm     - New entry name.
3039  *              cr      - credentials of caller.
3040  *              flags   - case flags
3041  *
3042  *      RETURN: 0 if success
3043  *              error code if failure
3044  *
3045  * Timestamps:
3046  *      sdip,tdip - ctime|mtime updated
3047  */
3048 /*ARGSUSED*/
3049 int
3050 zfs_rename(struct inode *sdip, char *snm, struct inode *tdip, char *tnm,
3051     cred_t *cr, int flags)
3052 {
3053         znode_t         *tdzp, *szp, *tzp;
3054         znode_t         *sdzp = ITOZ(sdip);
3055         zfs_sb_t        *zsb = ITOZSB(sdip);
3056         zilog_t         *zilog;
3057         zfs_dirlock_t   *sdl, *tdl;
3058         dmu_tx_t        *tx;
3059         zfs_zlock_t     *zl;
3060         int             cmp, serr, terr;
3061         int             error = 0;
3062         int             zflg = 0;
3063
3064         ZFS_ENTER(zsb);
3065         ZFS_VERIFY_ZP(sdzp);
3066         zilog = zsb->z_log;
3067
3068         if (tdip->i_sb != sdip->i_sb) {
3069                 ZFS_EXIT(zsb);
3070                 return (EXDEV);
3071         }
3072
3073         tdzp = ITOZ(tdip);
3074         ZFS_VERIFY_ZP(tdzp);
3075         if (zsb->z_utf8 && u8_validate(tnm,
3076             strlen(tnm), NULL, U8_VALIDATE_ENTIRE, &error) < 0) {
3077                 ZFS_EXIT(zsb);
3078                 return (EILSEQ);
3079         }
3080
3081         if (flags & FIGNORECASE)
3082                 zflg |= ZCILOOK;
3083
3084 top:
3085         szp = NULL;
3086         tzp = NULL;
3087         zl = NULL;
3088
3089         /*
3090          * This is to prevent the creation of links into attribute space
3091          * by renaming a linked file into/outof an attribute directory.
3092          * See the comment in zfs_link() for why this is considered bad.
3093          */
3094         if ((tdzp->z_pflags & ZFS_XATTR) != (sdzp->z_pflags & ZFS_XATTR)) {
3095                 ZFS_EXIT(zsb);
3096                 return (EINVAL);
3097         }
3098
3099         /*
3100          * Lock source and target directory entries.  To prevent deadlock,
3101          * a lock ordering must be defined.  We lock the directory with
3102          * the smallest object id first, or if it's a tie, the one with
3103          * the lexically first name.
3104          */
3105         if (sdzp->z_id < tdzp->z_id) {
3106                 cmp = -1;
3107         } else if (sdzp->z_id > tdzp->z_id) {
3108                 cmp = 1;
3109         } else {
3110                 /*
3111                  * First compare the two name arguments without
3112                  * considering any case folding.
3113                  */
3114                 int nofold = (zsb->z_norm & ~U8_TEXTPREP_TOUPPER);
3115
3116                 cmp = u8_strcmp(snm, tnm, 0, nofold, U8_UNICODE_LATEST, &error);
3117                 ASSERT(error == 0 || !zsb->z_utf8);
3118                 if (cmp == 0) {
3119                         /*
3120                          * POSIX: "If the old argument and the new argument
3121                          * both refer to links to the same existing file,
3122                          * the rename() function shall return successfully
3123                          * and perform no other action."
3124                          */
3125                         ZFS_EXIT(zsb);
3126                         return (0);
3127                 }
3128                 /*
3129                  * If the file system is case-folding, then we may
3130                  * have some more checking to do.  A case-folding file
3131                  * system is either supporting mixed case sensitivity
3132                  * access or is completely case-insensitive.  Note
3133                  * that the file system is always case preserving.
3134                  *
3135                  * In mixed sensitivity mode case sensitive behavior
3136                  * is the default.  FIGNORECASE must be used to
3137                  * explicitly request case insensitive behavior.
3138                  *
3139                  * If the source and target names provided differ only
3140                  * by case (e.g., a request to rename 'tim' to 'Tim'),
3141                  * we will treat this as a special case in the
3142                  * case-insensitive mode: as long as the source name
3143                  * is an exact match, we will allow this to proceed as
3144                  * a name-change request.
3145                  */
3146                 if ((zsb->z_case == ZFS_CASE_INSENSITIVE ||
3147                     (zsb->z_case == ZFS_CASE_MIXED &&
3148                     flags & FIGNORECASE)) &&
3149                     u8_strcmp(snm, tnm, 0, zsb->z_norm, U8_UNICODE_LATEST,
3150                     &error) == 0) {
3151                         /*
3152                          * case preserving rename request, require exact
3153                          * name matches
3154                          */
3155                         zflg |= ZCIEXACT;
3156                         zflg &= ~ZCILOOK;
3157                 }
3158         }
3159
3160         /*
3161          * If the source and destination directories are the same, we should
3162          * grab the z_name_lock of that directory only once.
3163          */
3164         if (sdzp == tdzp) {
3165                 zflg |= ZHAVELOCK;
3166                 rw_enter(&sdzp->z_name_lock, RW_READER);
3167         }
3168
3169         if (cmp < 0) {
3170                 serr = zfs_dirent_lock(&sdl, sdzp, snm, &szp,
3171                     ZEXISTS | zflg, NULL, NULL);
3172                 terr = zfs_dirent_lock(&tdl,
3173                     tdzp, tnm, &tzp, ZRENAMING | zflg, NULL, NULL);
3174         } else {
3175                 terr = zfs_dirent_lock(&tdl,
3176                     tdzp, tnm, &tzp, zflg, NULL, NULL);
3177                 serr = zfs_dirent_lock(&sdl,
3178                     sdzp, snm, &szp, ZEXISTS | ZRENAMING | zflg,
3179                     NULL, NULL);
3180         }
3181
3182         if (serr) {
3183                 /*
3184                  * Source entry invalid or not there.
3185                  */
3186                 if (!terr) {
3187                         zfs_dirent_unlock(tdl);
3188                         if (tzp)
3189                                 iput(ZTOI(tzp));
3190                 }
3191
3192                 if (sdzp == tdzp)
3193                         rw_exit(&sdzp->z_name_lock);
3194
3195                 if (strcmp(snm, "..") == 0)
3196                         serr = EINVAL;
3197                 ZFS_EXIT(zsb);
3198                 return (serr);
3199         }
3200         if (terr) {
3201                 zfs_dirent_unlock(sdl);
3202                 iput(ZTOI(szp));
3203
3204                 if (sdzp == tdzp)
3205                         rw_exit(&sdzp->z_name_lock);
3206
3207                 if (strcmp(tnm, "..") == 0)
3208                         terr = EINVAL;
3209                 ZFS_EXIT(zsb);
3210                 return (terr);
3211         }
3212
3213         /*
3214          * Must have write access at the source to remove the old entry
3215          * and write access at the target to create the new entry.
3216          * Note that if target and source are the same, this can be
3217          * done in a single check.
3218          */
3219
3220         if ((error = zfs_zaccess_rename(sdzp, szp, tdzp, tzp, cr)))
3221                 goto out;
3222
3223         if (S_ISDIR(ZTOI(szp)->i_mode)) {
3224                 /*
3225                  * Check to make sure rename is valid.
3226                  * Can't do a move like this: /usr/a/b to /usr/a/b/c/d
3227                  */
3228                 if ((error = zfs_rename_lock(szp, tdzp, sdzp, &zl)))
3229                         goto out;
3230         }
3231
3232         /*
3233          * Does target exist?
3234          */
3235         if (tzp) {
3236                 /*
3237                  * Source and target must be the same type.
3238                  */
3239                 if (S_ISDIR(ZTOI(szp)->i_mode)) {
3240                         if (!S_ISDIR(ZTOI(tzp)->i_mode)) {
3241                                 error = ENOTDIR;
3242                                 goto out;
3243                         }
3244                 } else {
3245                         if (S_ISDIR(ZTOI(tzp)->i_mode)) {
3246                                 error = EISDIR;
3247                                 goto out;
3248                         }
3249                 }
3250                 /*
3251                  * POSIX dictates that when the source and target
3252                  * entries refer to the same file object, rename
3253                  * must do nothing and exit without error.
3254                  */
3255                 if (szp->z_id == tzp->z_id) {
3256                         error = 0;
3257                         goto out;
3258                 }
3259         }
3260
3261         tx = dmu_tx_create(zsb->z_os);
3262         dmu_tx_hold_sa(tx, szp->z_sa_hdl, B_FALSE);
3263         dmu_tx_hold_sa(tx, sdzp->z_sa_hdl, B_FALSE);
3264         dmu_tx_hold_zap(tx, sdzp->z_id, FALSE, snm);
3265         dmu_tx_hold_zap(tx, tdzp->z_id, TRUE, tnm);
3266         if (sdzp != tdzp) {
3267                 dmu_tx_hold_sa(tx, tdzp->z_sa_hdl, B_FALSE);
3268                 zfs_sa_upgrade_txholds(tx, tdzp);
3269         }
3270         if (tzp) {
3271                 dmu_tx_hold_sa(tx, tzp->z_sa_hdl, B_FALSE);
3272                 zfs_sa_upgrade_txholds(tx, tzp);
3273         }
3274
3275         zfs_sa_upgrade_txholds(tx, szp);
3276         dmu_tx_hold_zap(tx, zsb->z_unlinkedobj, FALSE, NULL);
3277         error = dmu_tx_assign(tx, TXG_NOWAIT);
3278         if (error) {
3279                 if (zl != NULL)
3280                         zfs_rename_unlock(&zl);
3281                 zfs_dirent_unlock(sdl);
3282                 zfs_dirent_unlock(tdl);
3283
3284                 if (sdzp == tdzp)
3285                         rw_exit(&sdzp->z_name_lock);
3286
3287                 iput(ZTOI(szp));
3288                 if (tzp)
3289                         iput(ZTOI(tzp));
3290                 if (error == ERESTART) {
3291                         dmu_tx_wait(tx);
3292                         dmu_tx_abort(tx);
3293                         goto top;
3294                 }
3295                 dmu_tx_abort(tx);
3296                 ZFS_EXIT(zsb);
3297                 return (error);
3298         }
3299
3300         if (tzp)        /* Attempt to remove the existing target */
3301                 error = zfs_link_destroy(tdl, tzp, tx, zflg, NULL);
3302
3303         if (error == 0) {
3304                 error = zfs_link_create(tdl, szp, tx, ZRENAMING);
3305                 if (error == 0) {
3306                         szp->z_pflags |= ZFS_AV_MODIFIED;
3307
3308                         error = sa_update(szp->z_sa_hdl, SA_ZPL_FLAGS(zsb),
3309                             (void *)&szp->z_pflags, sizeof (uint64_t), tx);
3310                         ASSERT3U(error, ==, 0);
3311
3312                         error = zfs_link_destroy(sdl, szp, tx, ZRENAMING, NULL);
3313                         if (error == 0) {
3314                                 zfs_log_rename(zilog, tx, TX_RENAME |
3315                                     (flags & FIGNORECASE ? TX_CI : 0), sdzp,
3316                                     sdl->dl_name, tdzp, tdl->dl_name, szp);
3317                         } else {
3318                                 /*
3319                                  * At this point, we have successfully created
3320                                  * the target name, but have failed to remove
3321                                  * the source name.  Since the create was done
3322                                  * with the ZRENAMING flag, there are
3323                                  * complications; for one, the link count is
3324                                  * wrong.  The easiest way to deal with this
3325                                  * is to remove the newly created target, and
3326                                  * return the original error.  This must
3327                                  * succeed; fortunately, it is very unlikely to
3328                                  * fail, since we just created it.
3329                                  */
3330                                 VERIFY3U(zfs_link_destroy(tdl, szp, tx,
3331                                     ZRENAMING, NULL), ==, 0);
3332                         }
3333                 }
3334         }
3335
3336         dmu_tx_commit(tx);
3337 out:
3338         if (zl != NULL)
3339                 zfs_rename_unlock(&zl);
3340
3341         zfs_dirent_unlock(sdl);
3342         zfs_dirent_unlock(tdl);
3343
3344         zfs_inode_update(sdzp);
3345         if (sdzp == tdzp)
3346                 rw_exit(&sdzp->z_name_lock);
3347
3348         if (sdzp != tdzp)
3349                 zfs_inode_update(tdzp);
3350
3351         zfs_inode_update(szp);
3352         iput(ZTOI(szp));
3353         if (tzp) {
3354                 zfs_inode_update(tzp);
3355                 iput(ZTOI(tzp));
3356         }
3357
3358         if (zsb->z_os->os_sync == ZFS_SYNC_ALWAYS)
3359                 zil_commit(zilog, 0);
3360
3361         ZFS_EXIT(zsb);
3362         return (error);
3363 }
3364 EXPORT_SYMBOL(zfs_rename);
3365
3366 /*
3367  * Insert the indicated symbolic reference entry into the directory.
3368  *
3369  *      IN:     dip     - Directory to contain new symbolic link.
3370  *              link    - Name for new symlink entry.
3371  *              vap     - Attributes of new entry.
3372  *              target  - Target path of new symlink.
3373  *
3374  *              cr      - credentials of caller.
3375  *              flags   - case flags
3376  *
3377  *      RETURN: 0 if success
3378  *              error code if failure
3379  *
3380  * Timestamps:
3381  *      dip - ctime|mtime updated
3382  */
3383 /*ARGSUSED*/
3384 int
3385 zfs_symlink(struct inode *dip, char *name, vattr_t *vap, char *link,
3386     struct inode **ipp, cred_t *cr, int flags)
3387 {
3388         znode_t         *zp, *dzp = ITOZ(dip);
3389         zfs_dirlock_t   *dl;
3390         dmu_tx_t        *tx;
3391         zfs_sb_t        *zsb = ITOZSB(dip);
3392         zilog_t         *zilog;
3393         uint64_t        len = strlen(link);
3394         int             error;
3395         int             zflg = ZNEW;
3396         zfs_acl_ids_t   acl_ids;
3397         boolean_t       fuid_dirtied;
3398         uint64_t        txtype = TX_SYMLINK;
3399
3400         ASSERT(S_ISLNK(vap->va_mode));
3401
3402         ZFS_ENTER(zsb);
3403         ZFS_VERIFY_ZP(dzp);
3404         zilog = zsb->z_log;
3405
3406         if (zsb->z_utf8 && u8_validate(name, strlen(name),
3407             NULL, U8_VALIDATE_ENTIRE, &error) < 0) {
3408                 ZFS_EXIT(zsb);
3409                 return (EILSEQ);
3410         }
3411         if (flags & FIGNORECASE)
3412                 zflg |= ZCILOOK;
3413
3414         if (len > MAXPATHLEN) {
3415                 ZFS_EXIT(zsb);
3416                 return (ENAMETOOLONG);
3417         }
3418
3419         if ((error = zfs_acl_ids_create(dzp, 0,
3420             vap, cr, NULL, &acl_ids)) != 0) {
3421                 ZFS_EXIT(zsb);
3422                 return (error);
3423         }
3424 top:
3425         *ipp = NULL;
3426
3427         /*
3428          * Attempt to lock directory; fail if entry already exists.
3429          */
3430         error = zfs_dirent_lock(&dl, dzp, name, &zp, zflg, NULL, NULL);
3431         if (error) {
3432                 zfs_acl_ids_free(&acl_ids);
3433                 ZFS_EXIT(zsb);
3434                 return (error);
3435         }
3436
3437         if ((error = zfs_zaccess(dzp, ACE_ADD_FILE, 0, B_FALSE, cr))) {
3438                 zfs_acl_ids_free(&acl_ids);
3439                 zfs_dirent_unlock(dl);
3440                 ZFS_EXIT(zsb);
3441                 return (error);
3442         }
3443
3444         if (zfs_acl_ids_overquota(zsb, &acl_ids)) {
3445                 zfs_acl_ids_free(&acl_ids);
3446                 zfs_dirent_unlock(dl);
3447                 ZFS_EXIT(zsb);
3448                 return (EDQUOT);
3449         }
3450         tx = dmu_tx_create(zsb->z_os);
3451         fuid_dirtied = zsb->z_fuid_dirty;
3452         dmu_tx_hold_write(tx, DMU_NEW_OBJECT, 0, MAX(1, len));
3453         dmu_tx_hold_zap(tx, dzp->z_id, TRUE, name);
3454         dmu_tx_hold_sa_create(tx, acl_ids.z_aclp->z_acl_bytes +
3455             ZFS_SA_BASE_ATTR_SIZE + len);
3456         dmu_tx_hold_sa(tx, dzp->z_sa_hdl, B_FALSE);
3457         if (!zsb->z_use_sa && acl_ids.z_aclp->z_acl_bytes > ZFS_ACE_SPACE) {
3458                 dmu_tx_hold_write(tx, DMU_NEW_OBJECT, 0,
3459                     acl_ids.z_aclp->z_acl_bytes);
3460         }
3461         if (fuid_dirtied)
3462                 zfs_fuid_txhold(zsb, tx);
3463         error = dmu_tx_assign(tx, TXG_NOWAIT);
3464         if (error) {
3465                 zfs_dirent_unlock(dl);
3466                 if (error == ERESTART) {
3467                         dmu_tx_wait(tx);
3468                         dmu_tx_abort(tx);
3469                         goto top;
3470                 }
3471                 zfs_acl_ids_free(&acl_ids);
3472                 dmu_tx_abort(tx);
3473                 ZFS_EXIT(zsb);
3474                 return (error);
3475         }
3476
3477         /*
3478          * Create a new object for the symlink.
3479          * for version 4 ZPL datsets the symlink will be an SA attribute
3480          */
3481         zfs_mknode(dzp, vap, tx, cr, 0, &zp, &acl_ids);
3482
3483         if (fuid_dirtied)
3484                 zfs_fuid_sync(zsb, tx);
3485
3486         mutex_enter(&zp->z_lock);
3487         if (zp->z_is_sa)
3488                 error = sa_update(zp->z_sa_hdl, SA_ZPL_SYMLINK(zsb),
3489                     link, len, tx);
3490         else
3491                 zfs_sa_symlink(zp, link, len, tx);
3492         mutex_exit(&zp->z_lock);
3493
3494         zp->z_size = len;
3495         (void) sa_update(zp->z_sa_hdl, SA_ZPL_SIZE(zsb),
3496             &zp->z_size, sizeof (zp->z_size), tx);
3497         /*
3498          * Insert the new object into the directory.
3499          */
3500         (void) zfs_link_create(dl, zp, tx, ZNEW);
3501
3502         if (flags & FIGNORECASE)
3503                 txtype |= TX_CI;
3504         zfs_log_symlink(zilog, tx, txtype, dzp, zp, name, link);
3505
3506         zfs_inode_update(dzp);
3507         zfs_inode_update(zp);
3508
3509         zfs_acl_ids_free(&acl_ids);
3510
3511         dmu_tx_commit(tx);
3512
3513         zfs_dirent_unlock(dl);
3514
3515         *ipp = ZTOI(zp);
3516
3517         if (zsb->z_os->os_sync == ZFS_SYNC_ALWAYS)
3518                 zil_commit(zilog, 0);
3519
3520         ZFS_EXIT(zsb);
3521         return (error);
3522 }
3523 EXPORT_SYMBOL(zfs_symlink);
3524
3525 /*
3526  * Return, in the buffer contained in the provided uio structure,
3527  * the symbolic path referred to by ip.
3528  *
3529  *      IN:     ip      - inode of symbolic link
3530  *              uio     - structure to contain the link path.
3531  *              cr      - credentials of caller.
3532  *
3533  *      RETURN: 0 if success
3534  *              error code if failure
3535  *
3536  * Timestamps:
3537  *      ip - atime updated
3538  */
3539 /* ARGSUSED */
3540 int
3541 zfs_readlink(struct inode *ip, uio_t *uio, cred_t *cr)
3542 {
3543         znode_t         *zp = ITOZ(ip);
3544         zfs_sb_t        *zsb = ITOZSB(ip);
3545         int             error;
3546
3547         ZFS_ENTER(zsb);
3548         ZFS_VERIFY_ZP(zp);
3549
3550         mutex_enter(&zp->z_lock);
3551         if (zp->z_is_sa)
3552                 error = sa_lookup_uio(zp->z_sa_hdl,
3553                     SA_ZPL_SYMLINK(zsb), uio);
3554         else
3555                 error = zfs_sa_readlink(zp, uio);
3556         mutex_exit(&zp->z_lock);
3557
3558         ZFS_ACCESSTIME_STAMP(zsb, zp);
3559         zfs_inode_update(zp);
3560         ZFS_EXIT(zsb);
3561         return (error);
3562 }
3563 EXPORT_SYMBOL(zfs_readlink);
3564
3565 /*
3566  * Insert a new entry into directory tdip referencing sip.
3567  *
3568  *      IN:     tdip    - Directory to contain new entry.
3569  *              sip     - inode of new entry.
3570  *              name    - name of new entry.
3571  *              cr      - credentials of caller.
3572  *
3573  *      RETURN: 0 if success
3574  *              error code if failure
3575  *
3576  * Timestamps:
3577  *      tdip - ctime|mtime updated
3578  *       sip - ctime updated
3579  */
3580 /* ARGSUSED */
3581 int
3582 zfs_link(struct inode *tdip, struct inode *sip, char *name, cred_t *cr)
3583 {
3584         znode_t         *dzp = ITOZ(tdip);
3585         znode_t         *tzp, *szp;
3586         zfs_sb_t        *zsb = ITOZSB(tdip);
3587         zilog_t         *zilog;
3588         zfs_dirlock_t   *dl;
3589         dmu_tx_t        *tx;
3590         int             error;
3591         int             zf = ZNEW;
3592         uint64_t        parent;
3593         uid_t           owner;
3594
3595         ASSERT(S_ISDIR(tdip->i_mode));
3596
3597         ZFS_ENTER(zsb);
3598         ZFS_VERIFY_ZP(dzp);
3599         zilog = zsb->z_log;
3600
3601         /*
3602          * POSIX dictates that we return EPERM here.
3603          * Better choices include ENOTSUP or EISDIR.
3604          */
3605         if (S_ISDIR(sip->i_mode)) {
3606                 ZFS_EXIT(zsb);
3607                 return (EPERM);
3608         }
3609
3610         if (sip->i_sb != tdip->i_sb) {
3611                 ZFS_EXIT(zsb);
3612                 return (EXDEV);
3613         }
3614
3615         szp = ITOZ(sip);
3616         ZFS_VERIFY_ZP(szp);
3617
3618         /* Prevent links to .zfs/shares files */
3619
3620         if ((error = sa_lookup(szp->z_sa_hdl, SA_ZPL_PARENT(zsb),
3621             &parent, sizeof (uint64_t))) != 0) {
3622                 ZFS_EXIT(zsb);
3623                 return (error);
3624         }
3625         if (parent == zsb->z_shares_dir) {
3626                 ZFS_EXIT(zsb);
3627                 return (EPERM);
3628         }
3629
3630         if (zsb->z_utf8 && u8_validate(name,
3631             strlen(name), NULL, U8_VALIDATE_ENTIRE, &error) < 0) {
3632                 ZFS_EXIT(zsb);
3633                 return (EILSEQ);
3634         }
3635 #ifdef HAVE_PN_UTILS
3636         if (flags & FIGNORECASE)
3637                 zf |= ZCILOOK;
3638 #endif /* HAVE_PN_UTILS */
3639
3640         /*
3641          * We do not support links between attributes and non-attributes
3642          * because of the potential security risk of creating links
3643          * into "normal" file space in order to circumvent restrictions
3644          * imposed in attribute space.
3645          */
3646         if ((szp->z_pflags & ZFS_XATTR) != (dzp->z_pflags & ZFS_XATTR)) {
3647                 ZFS_EXIT(zsb);
3648                 return (EINVAL);
3649         }
3650
3651         owner = zfs_fuid_map_id(zsb, szp->z_uid, cr, ZFS_OWNER);
3652         if (owner != crgetuid(cr) && secpolicy_basic_link(cr) != 0) {
3653                 ZFS_EXIT(zsb);
3654                 return (EPERM);
3655         }
3656
3657         if ((error = zfs_zaccess(dzp, ACE_ADD_FILE, 0, B_FALSE, cr))) {
3658                 ZFS_EXIT(zsb);
3659                 return (error);
3660         }
3661
3662 top:
3663         /*
3664          * Attempt to lock directory; fail if entry already exists.
3665          */
3666         error = zfs_dirent_lock(&dl, dzp, name, &tzp, zf, NULL, NULL);
3667         if (error) {
3668                 ZFS_EXIT(zsb);
3669                 return (error);
3670         }
3671
3672         tx = dmu_tx_create(zsb->z_os);
3673         dmu_tx_hold_sa(tx, szp->z_sa_hdl, B_FALSE);
3674         dmu_tx_hold_zap(tx, dzp->z_id, TRUE, name);
3675         zfs_sa_upgrade_txholds(tx, szp);
3676         zfs_sa_upgrade_txholds(tx, dzp);
3677         error = dmu_tx_assign(tx, TXG_NOWAIT);
3678         if (error) {
3679                 zfs_dirent_unlock(dl);
3680                 if (error == ERESTART) {
3681                         dmu_tx_wait(tx);
3682                         dmu_tx_abort(tx);
3683                         goto top;
3684                 }
3685                 dmu_tx_abort(tx);
3686                 ZFS_EXIT(zsb);
3687                 return (error);
3688         }
3689
3690         error = zfs_link_create(dl, szp, tx, 0);
3691
3692         if (error == 0) {
3693                 uint64_t txtype = TX_LINK;
3694 #ifdef HAVE_PN_UTILS
3695                 if (flags & FIGNORECASE)
3696                         txtype |= TX_CI;
3697 #endif /* HAVE_PN_UTILS */
3698                 zfs_log_link(zilog, tx, txtype, dzp, szp, name);
3699         }
3700
3701         dmu_tx_commit(tx);
3702
3703         zfs_dirent_unlock(dl);
3704
3705         if (zsb->z_os->os_sync == ZFS_SYNC_ALWAYS)
3706                 zil_commit(zilog, 0);
3707
3708         zfs_inode_update(dzp);
3709         zfs_inode_update(szp);
3710         ZFS_EXIT(zsb);
3711         return (error);
3712 }
3713 EXPORT_SYMBOL(zfs_link);
3714
3715 /*
3716  * Push a page out to disk
3717  *
3718  *      IN:     vp      - file to push page to.
3719  *              pp      - page to push.
3720  *              off     - start of range pushed.
3721  *              len     - len of range pushed.
3722  *
3723  *
3724  *      RETURN: 0 if success
3725  *              error code if failure
3726  *
3727  * NOTE: callers must have locked the page to be pushed.
3728  */
3729 /* ARGSUSED */
3730 static int
3731 zfs_putapage(struct inode *ip, struct page *pp, u_offset_t off, size_t len)
3732 {
3733         znode_t    *zp  = ITOZ(ip);
3734         zfs_sb_t   *zsb = ITOZSB(ip);
3735         dmu_tx_t   *tx;
3736         caddr_t    va;
3737         int        err;
3738
3739         /*
3740          * Can't push pages past end-of-file.
3741          */
3742         if (off >= zp->z_size) {
3743                 /* ignore all pages */
3744                 err = 0;
3745                 goto out;
3746         } else if (off + len > zp->z_size)
3747                 len = zp->z_size - off;
3748
3749         if (zfs_owner_overquota(zsb, zp, B_FALSE) ||
3750             zfs_owner_overquota(zsb, zp, B_TRUE)) {
3751                 err = EDQUOT;
3752                 goto out;
3753         }
3754 top:
3755         tx = dmu_tx_create(zsb->z_os);
3756         dmu_tx_hold_write(tx, zp->z_id, off, len);
3757
3758         dmu_tx_hold_sa(tx, zp->z_sa_hdl, B_FALSE);
3759         zfs_sa_upgrade_txholds(tx, zp);
3760         err = dmu_tx_assign(tx, TXG_NOWAIT);
3761         if (err != 0) {
3762                 if (err == ERESTART) {
3763                         dmu_tx_wait(tx);
3764                         dmu_tx_abort(tx);
3765                         goto top;
3766                 }
3767                 dmu_tx_abort(tx);
3768                 goto out;
3769         }
3770
3771         va = kmap(pp);
3772         ASSERT3U(len, <=, PAGESIZE);
3773         dmu_write(zsb->z_os, zp->z_id, off, len, va, tx);
3774         kunmap(pp);
3775
3776         if (err == 0) {
3777                 uint64_t mtime[2], ctime[2];
3778                 sa_bulk_attr_t bulk[3];
3779                 int count = 0;
3780
3781                 SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_MTIME(zsb), NULL,
3782                     &mtime, 16);
3783                 SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_CTIME(zsb), NULL,
3784                     &ctime, 16);
3785                 SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_FLAGS(zsb), NULL,
3786                     &zp->z_pflags, 8);
3787                 zfs_tstamp_update_setup(zp, CONTENT_MODIFIED, mtime, ctime,
3788                     B_TRUE);
3789                 zfs_log_write(zsb->z_log, tx, TX_WRITE, zp, off, len, 0);
3790         }
3791         dmu_tx_commit(tx);
3792
3793 out:
3794         return (err);
3795 }
3796
3797 /*
3798  * Copy the portion of the file indicated from page into the file.
3799  *
3800  *      IN:     ip      - inode of file to push page data to.
3801  *              wbc     - Unused parameter
3802  *              data    - pointer to address_space
3803  *
3804  *      RETURN: 0 if success
3805  *              error code if failure
3806  *
3807  * Timestamps:
3808  *      vp - ctime|mtime updated
3809  */
3810 /*ARGSUSED*/
3811 int
3812 zfs_putpage(struct page *page, struct writeback_control *wbc, void *data)
3813 {
3814         struct address_space *mapping = data;
3815         struct inode         *ip      = mapping->host;
3816         znode_t              *zp      = ITOZ(ip);
3817         zfs_sb_t             *zsb     = ITOZSB(ip);
3818         rl_t                 *rl;
3819         u_offset_t           io_off;
3820         size_t               io_len;
3821         size_t               len;
3822         int                  error;
3823
3824         io_off = page_offset(page);
3825         io_len = PAGESIZE;
3826
3827         ZFS_ENTER(zsb);
3828         ZFS_VERIFY_ZP(zp);
3829
3830         rl = zfs_range_lock(zp, io_off, io_len, RL_WRITER);
3831
3832         if (io_off > zp->z_size) {
3833                 /* past end of file */
3834                 zfs_range_unlock(rl);
3835                 ZFS_EXIT(zsb);
3836                 return (0);
3837         }
3838
3839         len = MIN(io_len, P2ROUNDUP(zp->z_size, PAGESIZE) - io_off);
3840
3841         error = zfs_putapage(ip, page, io_off, len);
3842         zfs_range_unlock(rl);
3843
3844         if (zsb->z_os->os_sync == ZFS_SYNC_ALWAYS)
3845                 zil_commit(zsb->z_log, zp->z_id);
3846         ZFS_EXIT(zsb);
3847         return (error);
3848 }
3849 EXPORT_SYMBOL(zfs_putpage);
3850
3851 /*ARGSUSED*/
3852 void
3853 zfs_inactive(struct inode *ip)
3854 {
3855         znode_t *zp = ITOZ(ip);
3856         zfs_sb_t *zsb = ITOZSB(ip);
3857         int error;
3858
3859 #ifdef HAVE_SNAPSHOT
3860         /* Early return for snapshot inode? */
3861 #endif /* HAVE_SNAPSHOT */
3862
3863         rw_enter(&zsb->z_teardown_inactive_lock, RW_READER);
3864         if (zp->z_sa_hdl == NULL) {
3865                 rw_exit(&zsb->z_teardown_inactive_lock);
3866                 return;
3867         }
3868
3869         if (zp->z_atime_dirty && zp->z_unlinked == 0) {
3870                 dmu_tx_t *tx = dmu_tx_create(zsb->z_os);
3871
3872                 dmu_tx_hold_sa(tx, zp->z_sa_hdl, B_FALSE);
3873                 zfs_sa_upgrade_txholds(tx, zp);
3874                 error = dmu_tx_assign(tx, TXG_WAIT);
3875                 if (error) {
3876                         dmu_tx_abort(tx);
3877                 } else {
3878                         mutex_enter(&zp->z_lock);
3879                         (void) sa_update(zp->z_sa_hdl, SA_ZPL_ATIME(zsb),
3880                             (void *)&zp->z_atime, sizeof (zp->z_atime), tx);
3881                         zp->z_atime_dirty = 0;
3882                         mutex_exit(&zp->z_lock);
3883                         dmu_tx_commit(tx);
3884                 }
3885         }
3886
3887         zfs_zinactive(zp);
3888         rw_exit(&zsb->z_teardown_inactive_lock);
3889 }
3890 EXPORT_SYMBOL(zfs_inactive);
3891
3892 /*
3893  * Bounds-check the seek operation.
3894  *
3895  *      IN:     ip      - inode seeking within
3896  *              ooff    - old file offset
3897  *              noffp   - pointer to new file offset
3898  *              ct      - caller context
3899  *
3900  *      RETURN: 0 if success
3901  *              EINVAL if new offset invalid
3902  */
3903 /* ARGSUSED */
3904 int
3905 zfs_seek(struct inode *ip, offset_t ooff, offset_t *noffp)
3906 {
3907         if (S_ISDIR(ip->i_mode))
3908                 return (0);
3909         return ((*noffp < 0 || *noffp > MAXOFFSET_T) ? EINVAL : 0);
3910 }
3911 EXPORT_SYMBOL(zfs_seek);
3912
3913 /*
3914  * Fill pages with data from the disk.
3915  */
3916 static int
3917 zfs_fillpage(struct inode *ip, struct page *pl[], int nr_pages)
3918 {
3919         znode_t     *zp = ITOZ(ip);
3920         zfs_sb_t    *zsb = ITOZSB(ip);
3921         objset_t    *os;
3922         struct page *cur_pp;
3923         u_offset_t  io_off, total;
3924         size_t      io_len;
3925         loff_t      i_size;
3926         unsigned    page_idx;
3927         int         err;
3928
3929         os     = zsb->z_os;
3930         io_len = nr_pages << PAGE_CACHE_SHIFT;
3931         i_size = i_size_read(ip);
3932         io_off = page_offset(pl[0]);
3933
3934         if (io_off + io_len > i_size)
3935                 io_len = i_size - io_off;
3936
3937         /*
3938          * Iterate over list of pages and read each page individually.
3939          */
3940         page_idx = 0;
3941         cur_pp   = pl[0];
3942         for (total = io_off + io_len; io_off < total; io_off += PAGESIZE) {
3943                 caddr_t va;
3944
3945                 va = kmap(cur_pp);
3946                 err = dmu_read(os, zp->z_id, io_off, PAGESIZE, va,
3947                     DMU_READ_PREFETCH);
3948                 kunmap(cur_pp);
3949                 if (err) {
3950                         /* convert checksum errors into IO errors */
3951                         if (err == ECKSUM)
3952                                 err = EIO;
3953                         return (err);
3954                 }
3955                 cur_pp = pl[++page_idx];
3956         }
3957
3958         return (0);
3959 }
3960
3961 /*
3962  * Uses zfs_fillpage to read data from the file and fill the pages.
3963  *
3964  *      IN:     ip       - inode of file to get data from.
3965  *              pl       - list of pages to read
3966  *              nr_pages - number of pages to read
3967  *
3968  *      RETURN: 0 if success
3969  *              error code if failure
3970  *
3971  * Timestamps:
3972  *      vp - atime updated
3973  */
3974 /* ARGSUSED */
3975 int
3976 zfs_getpage(struct inode *ip, struct page *pl[], int nr_pages)
3977 {
3978         znode_t  *zp  = ITOZ(ip);
3979         zfs_sb_t *zsb = ITOZSB(ip);
3980         int      err;
3981
3982         if (pl == NULL)
3983                 return (0);
3984
3985         ZFS_ENTER(zsb);
3986         ZFS_VERIFY_ZP(zp);
3987
3988         err = zfs_fillpage(ip, pl, nr_pages);
3989
3990         if (!err)
3991                 ZFS_ACCESSTIME_STAMP(zsb, zp);
3992
3993         ZFS_EXIT(zsb);
3994         return (err);
3995 }
3996 EXPORT_SYMBOL(zfs_getpage);
3997
3998 /*
3999  * Check ZFS specific permissions to memory map a section of a file.
4000  *
4001  *      IN:     ip      - inode of the file to mmap
4002  *              off     - file offset
4003  *              addrp   - start address in memory region
4004  *              len     - length of memory region
4005  *              vm_flags- address flags
4006  *
4007  *      RETURN: 0 if success
4008  *              error code if failure
4009  */
4010 /*ARGSUSED*/
4011 int
4012 zfs_map(struct inode *ip, offset_t off, caddr_t *addrp, size_t len,
4013     unsigned long vm_flags)
4014 {
4015         znode_t  *zp = ITOZ(ip);
4016         zfs_sb_t *zsb = ITOZSB(ip);
4017
4018         ZFS_ENTER(zsb);
4019         ZFS_VERIFY_ZP(zp);
4020
4021         if ((vm_flags & VM_WRITE) && (zp->z_pflags &
4022             (ZFS_IMMUTABLE | ZFS_READONLY | ZFS_APPENDONLY))) {
4023                 ZFS_EXIT(zsb);
4024                 return (EPERM);
4025         }
4026
4027         if ((vm_flags & (VM_READ | VM_EXEC)) &&
4028             (zp->z_pflags & ZFS_AV_QUARANTINED)) {
4029                 ZFS_EXIT(zsb);
4030                 return (EACCES);
4031         }
4032
4033         if (off < 0 || len > MAXOFFSET_T - off) {
4034                 ZFS_EXIT(zsb);
4035                 return (ENXIO);
4036         }
4037
4038         ZFS_EXIT(zsb);
4039         return (0);
4040 }
4041 EXPORT_SYMBOL(zfs_map);
4042
4043 /*
4044  * convoff - converts the given data (start, whence) to the
4045  * given whence.
4046  */
4047 int
4048 convoff(struct inode *ip, flock64_t *lckdat, int  whence, offset_t offset)
4049 {
4050         vattr_t vap;
4051         int error;
4052
4053         if ((lckdat->l_whence == 2) || (whence == 2)) {
4054                 if ((error = zfs_getattr(ip, &vap, 0, CRED()) != 0))
4055                         return (error);
4056         }
4057
4058         switch (lckdat->l_whence) {
4059         case 1:
4060                 lckdat->l_start += offset;
4061                 break;
4062         case 2:
4063                 lckdat->l_start += vap.va_size;
4064                 /* FALLTHRU */
4065         case 0:
4066                 break;
4067         default:
4068                 return (EINVAL);
4069         }
4070
4071         if (lckdat->l_start < 0)
4072                 return (EINVAL);
4073
4074         switch (whence) {
4075         case 1:
4076                 lckdat->l_start -= offset;
4077                 break;
4078         case 2:
4079                 lckdat->l_start -= vap.va_size;
4080                 /* FALLTHRU */
4081         case 0:
4082                 break;
4083         default:
4084                 return (EINVAL);
4085         }
4086
4087         lckdat->l_whence = (short)whence;
4088         return (0);
4089 }
4090
4091 /*
4092  * Free or allocate space in a file.  Currently, this function only
4093  * supports the `F_FREESP' command.  However, this command is somewhat
4094  * misnamed, as its functionality includes the ability to allocate as
4095  * well as free space.
4096  *
4097  *      IN:     ip      - inode of file to free data in.
4098  *              cmd     - action to take (only F_FREESP supported).
4099  *              bfp     - section of file to free/alloc.
4100  *              flag    - current file open mode flags.
4101  *              offset  - current file offset.
4102  *              cr      - credentials of caller [UNUSED].
4103  *
4104  *      RETURN: 0 if success
4105  *              error code if failure
4106  *
4107  * Timestamps:
4108  *      ip - ctime|mtime updated
4109  */
4110 /* ARGSUSED */
4111 int
4112 zfs_space(struct inode *ip, int cmd, flock64_t *bfp, int flag,
4113     offset_t offset, cred_t *cr)
4114 {
4115         znode_t         *zp = ITOZ(ip);
4116         zfs_sb_t        *zsb = ITOZSB(ip);
4117         uint64_t        off, len;
4118         int             error;
4119
4120         ZFS_ENTER(zsb);
4121         ZFS_VERIFY_ZP(zp);
4122
4123         if (cmd != F_FREESP) {
4124                 ZFS_EXIT(zsb);
4125                 return (EINVAL);
4126         }
4127
4128         if ((error = convoff(ip, bfp, 0, offset))) {
4129                 ZFS_EXIT(zsb);
4130                 return (error);
4131         }
4132
4133         if (bfp->l_len < 0) {
4134                 ZFS_EXIT(zsb);
4135                 return (EINVAL);
4136         }
4137
4138         off = bfp->l_start;
4139         len = bfp->l_len; /* 0 means from off to end of file */
4140
4141         error = zfs_freesp(zp, off, len, flag, TRUE);
4142
4143         ZFS_EXIT(zsb);
4144         return (error);
4145 }
4146 EXPORT_SYMBOL(zfs_space);
4147
4148 /*ARGSUSED*/
4149 int
4150 zfs_fid(struct inode *ip, fid_t *fidp)
4151 {
4152         znode_t         *zp = ITOZ(ip);
4153         zfs_sb_t        *zsb = ITOZSB(ip);
4154         uint32_t        gen;
4155         uint64_t        gen64;
4156         uint64_t        object = zp->z_id;
4157         zfid_short_t    *zfid;
4158         int             size, i, error;
4159
4160         ZFS_ENTER(zsb);
4161         ZFS_VERIFY_ZP(zp);
4162
4163         if ((error = sa_lookup(zp->z_sa_hdl, SA_ZPL_GEN(zsb),
4164             &gen64, sizeof (uint64_t))) != 0) {
4165                 ZFS_EXIT(zsb);
4166                 return (error);
4167         }
4168
4169         gen = (uint32_t)gen64;
4170
4171         size = (zsb->z_parent != zsb) ? LONG_FID_LEN : SHORT_FID_LEN;
4172         if (fidp->fid_len < size) {
4173                 fidp->fid_len = size;
4174                 ZFS_EXIT(zsb);
4175                 return (ENOSPC);
4176         }
4177
4178         zfid = (zfid_short_t *)fidp;
4179
4180         zfid->zf_len = size;
4181
4182         for (i = 0; i < sizeof (zfid->zf_object); i++)
4183                 zfid->zf_object[i] = (uint8_t)(object >> (8 * i));
4184
4185         /* Must have a non-zero generation number to distinguish from .zfs */
4186         if (gen == 0)
4187                 gen = 1;
4188         for (i = 0; i < sizeof (zfid->zf_gen); i++)
4189                 zfid->zf_gen[i] = (uint8_t)(gen >> (8 * i));
4190
4191         if (size == LONG_FID_LEN) {
4192                 uint64_t        objsetid = dmu_objset_id(zsb->z_os);
4193                 zfid_long_t     *zlfid;
4194
4195                 zlfid = (zfid_long_t *)fidp;
4196
4197                 for (i = 0; i < sizeof (zlfid->zf_setid); i++)
4198                         zlfid->zf_setid[i] = (uint8_t)(objsetid >> (8 * i));
4199
4200                 /* XXX - this should be the generation number for the objset */
4201                 for (i = 0; i < sizeof (zlfid->zf_setgen); i++)
4202                         zlfid->zf_setgen[i] = 0;
4203         }
4204
4205         ZFS_EXIT(zsb);
4206         return (0);
4207 }
4208 EXPORT_SYMBOL(zfs_fid);
4209
4210 /*ARGSUSED*/
4211 int
4212 zfs_getsecattr(struct inode *ip, vsecattr_t *vsecp, int flag, cred_t *cr)
4213 {
4214         znode_t *zp = ITOZ(ip);
4215         zfs_sb_t *zsb = ITOZSB(ip);
4216         int error;
4217         boolean_t skipaclchk = (flag & ATTR_NOACLCHECK) ? B_TRUE : B_FALSE;
4218
4219         ZFS_ENTER(zsb);
4220         ZFS_VERIFY_ZP(zp);
4221         error = zfs_getacl(zp, vsecp, skipaclchk, cr);
4222         ZFS_EXIT(zsb);
4223
4224         return (error);
4225 }
4226 EXPORT_SYMBOL(zfs_getsecattr);
4227
4228 /*ARGSUSED*/
4229 int
4230 zfs_setsecattr(struct inode *ip, vsecattr_t *vsecp, int flag, cred_t *cr)
4231 {
4232         znode_t *zp = ITOZ(ip);
4233         zfs_sb_t *zsb = ITOZSB(ip);
4234         int error;
4235         boolean_t skipaclchk = (flag & ATTR_NOACLCHECK) ? B_TRUE : B_FALSE;
4236         zilog_t *zilog = zsb->z_log;
4237
4238         ZFS_ENTER(zsb);
4239         ZFS_VERIFY_ZP(zp);
4240
4241         error = zfs_setacl(zp, vsecp, skipaclchk, cr);
4242
4243         if (zsb->z_os->os_sync == ZFS_SYNC_ALWAYS)
4244                 zil_commit(zilog, 0);
4245
4246         ZFS_EXIT(zsb);
4247         return (error);
4248 }
4249 EXPORT_SYMBOL(zfs_setsecattr);
4250
4251 #ifdef HAVE_UIO_ZEROCOPY
4252 /*
4253  * Tunable, both must be a power of 2.
4254  *
4255  * zcr_blksz_min: the smallest read we may consider to loan out an arcbuf
4256  * zcr_blksz_max: if set to less than the file block size, allow loaning out of
4257  *              an arcbuf for a partial block read
4258  */
4259 int zcr_blksz_min = (1 << 10);  /* 1K */
4260 int zcr_blksz_max = (1 << 17);  /* 128K */
4261
4262 /*ARGSUSED*/
4263 static int
4264 zfs_reqzcbuf(struct inode *ip, enum uio_rw ioflag, xuio_t *xuio, cred_t *cr)
4265 {
4266         znode_t *zp = ITOZ(ip);
4267         zfs_sb_t *zsb = ITOZSB(ip);
4268         int max_blksz = zsb->z_max_blksz;
4269         uio_t *uio = &xuio->xu_uio;
4270         ssize_t size = uio->uio_resid;
4271         offset_t offset = uio->uio_loffset;
4272         int blksz;
4273         int fullblk, i;
4274         arc_buf_t *abuf;
4275         ssize_t maxsize;
4276         int preamble, postamble;
4277
4278         if (xuio->xu_type != UIOTYPE_ZEROCOPY)
4279                 return (EINVAL);
4280
4281         ZFS_ENTER(zsb);
4282         ZFS_VERIFY_ZP(zp);
4283         switch (ioflag) {
4284         case UIO_WRITE:
4285                 /*
4286                  * Loan out an arc_buf for write if write size is bigger than
4287                  * max_blksz, and the file's block size is also max_blksz.
4288                  */
4289                 blksz = max_blksz;
4290                 if (size < blksz || zp->z_blksz != blksz) {
4291                         ZFS_EXIT(zsb);
4292                         return (EINVAL);
4293                 }
4294                 /*
4295                  * Caller requests buffers for write before knowing where the
4296                  * write offset might be (e.g. NFS TCP write).
4297                  */
4298                 if (offset == -1) {
4299                         preamble = 0;
4300                 } else {
4301                         preamble = P2PHASE(offset, blksz);
4302                         if (preamble) {
4303                                 preamble = blksz - preamble;
4304                                 size -= preamble;
4305                         }
4306                 }
4307
4308                 postamble = P2PHASE(size, blksz);
4309                 size -= postamble;
4310
4311                 fullblk = size / blksz;
4312                 (void) dmu_xuio_init(xuio,
4313                     (preamble != 0) + fullblk + (postamble != 0));
4314
4315                 /*
4316                  * Have to fix iov base/len for partial buffers.  They
4317                  * currently represent full arc_buf's.
4318                  */
4319                 if (preamble) {
4320                         /* data begins in the middle of the arc_buf */
4321                         abuf = dmu_request_arcbuf(sa_get_db(zp->z_sa_hdl),
4322                             blksz);
4323                         ASSERT(abuf);
4324                         (void) dmu_xuio_add(xuio, abuf,
4325                             blksz - preamble, preamble);
4326                 }
4327
4328                 for (i = 0; i < fullblk; i++) {
4329                         abuf = dmu_request_arcbuf(sa_get_db(zp->z_sa_hdl),
4330                             blksz);
4331                         ASSERT(abuf);
4332                         (void) dmu_xuio_add(xuio, abuf, 0, blksz);
4333                 }
4334
4335                 if (postamble) {
4336                         /* data ends in the middle of the arc_buf */
4337                         abuf = dmu_request_arcbuf(sa_get_db(zp->z_sa_hdl),
4338                             blksz);
4339                         ASSERT(abuf);
4340                         (void) dmu_xuio_add(xuio, abuf, 0, postamble);
4341                 }
4342                 break;
4343         case UIO_READ:
4344                 /*
4345                  * Loan out an arc_buf for read if the read size is larger than
4346                  * the current file block size.  Block alignment is not
4347                  * considered.  Partial arc_buf will be loaned out for read.
4348                  */
4349                 blksz = zp->z_blksz;
4350                 if (blksz < zcr_blksz_min)
4351                         blksz = zcr_blksz_min;
4352                 if (blksz > zcr_blksz_max)
4353                         blksz = zcr_blksz_max;
4354                 /* avoid potential complexity of dealing with it */
4355                 if (blksz > max_blksz) {
4356                         ZFS_EXIT(zsb);
4357                         return (EINVAL);
4358                 }
4359
4360                 maxsize = zp->z_size - uio->uio_loffset;
4361                 if (size > maxsize)
4362                         size = maxsize;
4363
4364                 if (size < blksz) {
4365                         ZFS_EXIT(zsb);
4366                         return (EINVAL);
4367                 }
4368                 break;
4369         default:
4370                 ZFS_EXIT(zsb);
4371                 return (EINVAL);
4372         }
4373
4374         uio->uio_extflg = UIO_XUIO;
4375         XUIO_XUZC_RW(xuio) = ioflag;
4376         ZFS_EXIT(zsb);
4377         return (0);
4378 }
4379
4380 /*ARGSUSED*/
4381 static int
4382 zfs_retzcbuf(struct inode *ip, xuio_t *xuio, cred_t *cr)
4383 {
4384         int i;
4385         arc_buf_t *abuf;
4386         int ioflag = XUIO_XUZC_RW(xuio);
4387
4388         ASSERT(xuio->xu_type == UIOTYPE_ZEROCOPY);
4389
4390         i = dmu_xuio_cnt(xuio);
4391         while (i-- > 0) {
4392                 abuf = dmu_xuio_arcbuf(xuio, i);
4393                 /*
4394                  * if abuf == NULL, it must be a write buffer
4395                  * that has been returned in zfs_write().
4396                  */
4397                 if (abuf)
4398                         dmu_return_arcbuf(abuf);
4399                 ASSERT(abuf || ioflag == UIO_WRITE);
4400         }
4401
4402         dmu_xuio_fini(xuio);
4403         return (0);
4404 }
4405 #endif /* HAVE_UIO_ZEROCOPY */
4406
4407 #if defined(_KERNEL) && defined(HAVE_SPL)
4408 module_param(zfs_read_chunk_size, long, 0644);
4409 MODULE_PARM_DESC(zfs_read_chunk_size, "Bytes to read per chunk");
4410 #endif