xfs: create helper to check whether to free eofblocks on inode
[cascardo/linux.git] / fs / xfs / xfs_vnodeops.c
1 /*
2  * Copyright (c) 2000-2006 Silicon Graphics, Inc.
3  * All Rights Reserved.
4  *
5  * This program is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU General Public License as
7  * published by the Free Software Foundation.
8  *
9  * This program is distributed in the hope that it would be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write the Free Software Foundation,
16  * Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
17  */
18
19 #include "xfs.h"
20 #include "xfs_fs.h"
21 #include "xfs_types.h"
22 #include "xfs_bit.h"
23 #include "xfs_log.h"
24 #include "xfs_trans.h"
25 #include "xfs_sb.h"
26 #include "xfs_ag.h"
27 #include "xfs_dir2.h"
28 #include "xfs_mount.h"
29 #include "xfs_da_btree.h"
30 #include "xfs_bmap_btree.h"
31 #include "xfs_ialloc_btree.h"
32 #include "xfs_dinode.h"
33 #include "xfs_inode.h"
34 #include "xfs_inode_item.h"
35 #include "xfs_itable.h"
36 #include "xfs_ialloc.h"
37 #include "xfs_alloc.h"
38 #include "xfs_bmap.h"
39 #include "xfs_acl.h"
40 #include "xfs_attr.h"
41 #include "xfs_error.h"
42 #include "xfs_quota.h"
43 #include "xfs_utils.h"
44 #include "xfs_rtalloc.h"
45 #include "xfs_trans_space.h"
46 #include "xfs_log_priv.h"
47 #include "xfs_filestream.h"
48 #include "xfs_vnodeops.h"
49 #include "xfs_trace.h"
50 #include "xfs_icache.h"
51
52 /*
53  * The maximum pathlen is 1024 bytes. Since the minimum file system
54  * blocksize is 512 bytes, we can get a max of 2 extents back from
55  * bmapi.
56  */
57 #define SYMLINK_MAPS 2
58
59 STATIC int
60 xfs_readlink_bmap(
61         xfs_inode_t     *ip,
62         char            *link)
63 {
64         xfs_mount_t     *mp = ip->i_mount;
65         int             pathlen = ip->i_d.di_size;
66         int             nmaps = SYMLINK_MAPS;
67         xfs_bmbt_irec_t mval[SYMLINK_MAPS];
68         xfs_daddr_t     d;
69         int             byte_cnt;
70         int             n;
71         xfs_buf_t       *bp;
72         int             error = 0;
73
74         error = xfs_bmapi_read(ip, 0, XFS_B_TO_FSB(mp, pathlen), mval, &nmaps,
75                                0);
76         if (error)
77                 goto out;
78
79         for (n = 0; n < nmaps; n++) {
80                 d = XFS_FSB_TO_DADDR(mp, mval[n].br_startblock);
81                 byte_cnt = XFS_FSB_TO_B(mp, mval[n].br_blockcount);
82
83                 bp = xfs_buf_read(mp->m_ddev_targp, d, BTOBB(byte_cnt), 0);
84                 if (!bp)
85                         return XFS_ERROR(ENOMEM);
86                 error = bp->b_error;
87                 if (error) {
88                         xfs_buf_ioerror_alert(bp, __func__);
89                         xfs_buf_relse(bp);
90                         goto out;
91                 }
92                 if (pathlen < byte_cnt)
93                         byte_cnt = pathlen;
94                 pathlen -= byte_cnt;
95
96                 memcpy(link, bp->b_addr, byte_cnt);
97                 xfs_buf_relse(bp);
98         }
99
100         link[ip->i_d.di_size] = '\0';
101         error = 0;
102
103  out:
104         return error;
105 }
106
107 int
108 xfs_readlink(
109         xfs_inode_t     *ip,
110         char            *link)
111 {
112         xfs_mount_t     *mp = ip->i_mount;
113         xfs_fsize_t     pathlen;
114         int             error = 0;
115
116         trace_xfs_readlink(ip);
117
118         if (XFS_FORCED_SHUTDOWN(mp))
119                 return XFS_ERROR(EIO);
120
121         xfs_ilock(ip, XFS_ILOCK_SHARED);
122
123         pathlen = ip->i_d.di_size;
124         if (!pathlen)
125                 goto out;
126
127         if (pathlen < 0 || pathlen > MAXPATHLEN) {
128                 xfs_alert(mp, "%s: inode (%llu) bad symlink length (%lld)",
129                          __func__, (unsigned long long) ip->i_ino,
130                          (long long) pathlen);
131                 ASSERT(0);
132                 error = XFS_ERROR(EFSCORRUPTED);
133                 goto out;
134         }
135
136
137         if (ip->i_df.if_flags & XFS_IFINLINE) {
138                 memcpy(link, ip->i_df.if_u1.if_data, pathlen);
139                 link[pathlen] = '\0';
140         } else {
141                 error = xfs_readlink_bmap(ip, link);
142         }
143
144  out:
145         xfs_iunlock(ip, XFS_ILOCK_SHARED);
146         return error;
147 }
148
149 /*
150  * This is called by xfs_inactive to free any blocks beyond eof
151  * when the link count isn't zero and by xfs_dm_punch_hole() when
152  * punching a hole to EOF.
153  */
154 STATIC int
155 xfs_free_eofblocks(
156         xfs_mount_t     *mp,
157         xfs_inode_t     *ip,
158         bool            need_iolock)
159 {
160         xfs_trans_t     *tp;
161         int             error;
162         xfs_fileoff_t   end_fsb;
163         xfs_fileoff_t   last_fsb;
164         xfs_filblks_t   map_len;
165         int             nimaps;
166         xfs_bmbt_irec_t imap;
167
168         /*
169          * Figure out if there are any blocks beyond the end
170          * of the file.  If not, then there is nothing to do.
171          */
172         end_fsb = XFS_B_TO_FSB(mp, (xfs_ufsize_t)XFS_ISIZE(ip));
173         last_fsb = XFS_B_TO_FSB(mp, mp->m_super->s_maxbytes);
174         if (last_fsb <= end_fsb)
175                 return 0;
176         map_len = last_fsb - end_fsb;
177
178         nimaps = 1;
179         xfs_ilock(ip, XFS_ILOCK_SHARED);
180         error = xfs_bmapi_read(ip, end_fsb, map_len, &imap, &nimaps, 0);
181         xfs_iunlock(ip, XFS_ILOCK_SHARED);
182
183         if (!error && (nimaps != 0) &&
184             (imap.br_startblock != HOLESTARTBLOCK ||
185              ip->i_delayed_blks)) {
186                 /*
187                  * Attach the dquots to the inode up front.
188                  */
189                 error = xfs_qm_dqattach(ip, 0);
190                 if (error)
191                         return error;
192
193                 /*
194                  * There are blocks after the end of file.
195                  * Free them up now by truncating the file to
196                  * its current size.
197                  */
198                 tp = xfs_trans_alloc(mp, XFS_TRANS_INACTIVE);
199
200                 if (need_iolock) {
201                         if (!xfs_ilock_nowait(ip, XFS_IOLOCK_EXCL)) {
202                                 xfs_trans_cancel(tp, 0);
203                                 return 0;
204                         }
205                 }
206
207                 error = xfs_trans_reserve(tp, 0,
208                                           XFS_ITRUNCATE_LOG_RES(mp),
209                                           0, XFS_TRANS_PERM_LOG_RES,
210                                           XFS_ITRUNCATE_LOG_COUNT);
211                 if (error) {
212                         ASSERT(XFS_FORCED_SHUTDOWN(mp));
213                         xfs_trans_cancel(tp, 0);
214                         if (need_iolock)
215                                 xfs_iunlock(ip, XFS_IOLOCK_EXCL);
216                         return error;
217                 }
218
219                 xfs_ilock(ip, XFS_ILOCK_EXCL);
220                 xfs_trans_ijoin(tp, ip, 0);
221
222                 /*
223                  * Do not update the on-disk file size.  If we update the
224                  * on-disk file size and then the system crashes before the
225                  * contents of the file are flushed to disk then the files
226                  * may be full of holes (ie NULL files bug).
227                  */
228                 error = xfs_itruncate_extents(&tp, ip, XFS_DATA_FORK,
229                                               XFS_ISIZE(ip));
230                 if (error) {
231                         /*
232                          * If we get an error at this point we simply don't
233                          * bother truncating the file.
234                          */
235                         xfs_trans_cancel(tp,
236                                          (XFS_TRANS_RELEASE_LOG_RES |
237                                           XFS_TRANS_ABORT));
238                 } else {
239                         error = xfs_trans_commit(tp,
240                                                 XFS_TRANS_RELEASE_LOG_RES);
241                         if (!error)
242                                 xfs_inode_clear_eofblocks_tag(ip);
243                 }
244
245                 xfs_iunlock(ip, XFS_ILOCK_EXCL);
246                 if (need_iolock)
247                         xfs_iunlock(ip, XFS_IOLOCK_EXCL);
248         }
249         return error;
250 }
251
252 /*
253  * Free a symlink that has blocks associated with it.
254  */
255 STATIC int
256 xfs_inactive_symlink_rmt(
257         xfs_inode_t     *ip,
258         xfs_trans_t     **tpp)
259 {
260         xfs_buf_t       *bp;
261         int             committed;
262         int             done;
263         int             error;
264         xfs_fsblock_t   first_block;
265         xfs_bmap_free_t free_list;
266         int             i;
267         xfs_mount_t     *mp;
268         xfs_bmbt_irec_t mval[SYMLINK_MAPS];
269         int             nmaps;
270         xfs_trans_t     *ntp;
271         int             size;
272         xfs_trans_t     *tp;
273
274         tp = *tpp;
275         mp = ip->i_mount;
276         ASSERT(ip->i_d.di_size > XFS_IFORK_DSIZE(ip));
277         /*
278          * We're freeing a symlink that has some
279          * blocks allocated to it.  Free the
280          * blocks here.  We know that we've got
281          * either 1 or 2 extents and that we can
282          * free them all in one bunmapi call.
283          */
284         ASSERT(ip->i_d.di_nextents > 0 && ip->i_d.di_nextents <= 2);
285
286         /*
287          * Lock the inode, fix the size, and join it to the transaction.
288          * Hold it so in the normal path, we still have it locked for
289          * the second transaction.  In the error paths we need it
290          * held so the cancel won't rele it, see below.
291          */
292         size = (int)ip->i_d.di_size;
293         ip->i_d.di_size = 0;
294         xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE);
295         /*
296          * Find the block(s) so we can inval and unmap them.
297          */
298         done = 0;
299         xfs_bmap_init(&free_list, &first_block);
300         nmaps = ARRAY_SIZE(mval);
301         error = xfs_bmapi_read(ip, 0, XFS_B_TO_FSB(mp, size),
302                                 mval, &nmaps, 0);
303         if (error)
304                 goto error0;
305         /*
306          * Invalidate the block(s).
307          */
308         for (i = 0; i < nmaps; i++) {
309                 bp = xfs_trans_get_buf(tp, mp->m_ddev_targp,
310                         XFS_FSB_TO_DADDR(mp, mval[i].br_startblock),
311                         XFS_FSB_TO_BB(mp, mval[i].br_blockcount), 0);
312                 if (!bp) {
313                         error = ENOMEM;
314                         goto error1;
315                 }
316                 xfs_trans_binval(tp, bp);
317         }
318         /*
319          * Unmap the dead block(s) to the free_list.
320          */
321         if ((error = xfs_bunmapi(tp, ip, 0, size, XFS_BMAPI_METADATA, nmaps,
322                         &first_block, &free_list, &done)))
323                 goto error1;
324         ASSERT(done);
325         /*
326          * Commit the first transaction.  This logs the EFI and the inode.
327          */
328         if ((error = xfs_bmap_finish(&tp, &free_list, &committed)))
329                 goto error1;
330         /*
331          * The transaction must have been committed, since there were
332          * actually extents freed by xfs_bunmapi.  See xfs_bmap_finish.
333          * The new tp has the extent freeing and EFDs.
334          */
335         ASSERT(committed);
336         /*
337          * The first xact was committed, so add the inode to the new one.
338          * Mark it dirty so it will be logged and moved forward in the log as
339          * part of every commit.
340          */
341         xfs_trans_ijoin(tp, ip, 0);
342         xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE);
343         /*
344          * Get a new, empty transaction to return to our caller.
345          */
346         ntp = xfs_trans_dup(tp);
347         /*
348          * Commit the transaction containing extent freeing and EFDs.
349          * If we get an error on the commit here or on the reserve below,
350          * we need to unlock the inode since the new transaction doesn't
351          * have the inode attached.
352          */
353         error = xfs_trans_commit(tp, 0);
354         tp = ntp;
355         if (error) {
356                 ASSERT(XFS_FORCED_SHUTDOWN(mp));
357                 goto error0;
358         }
359         /*
360          * transaction commit worked ok so we can drop the extra ticket
361          * reference that we gained in xfs_trans_dup()
362          */
363         xfs_log_ticket_put(tp->t_ticket);
364
365         /*
366          * Remove the memory for extent descriptions (just bookkeeping).
367          */
368         if (ip->i_df.if_bytes)
369                 xfs_idata_realloc(ip, -ip->i_df.if_bytes, XFS_DATA_FORK);
370         ASSERT(ip->i_df.if_bytes == 0);
371         /*
372          * Put an itruncate log reservation in the new transaction
373          * for our caller.
374          */
375         if ((error = xfs_trans_reserve(tp, 0, XFS_ITRUNCATE_LOG_RES(mp), 0,
376                         XFS_TRANS_PERM_LOG_RES, XFS_ITRUNCATE_LOG_COUNT))) {
377                 ASSERT(XFS_FORCED_SHUTDOWN(mp));
378                 goto error0;
379         }
380
381         xfs_trans_ijoin(tp, ip, 0);
382         *tpp = tp;
383         return 0;
384
385  error1:
386         xfs_bmap_cancel(&free_list);
387  error0:
388         return error;
389 }
390
391 int
392 xfs_release(
393         xfs_inode_t     *ip)
394 {
395         xfs_mount_t     *mp = ip->i_mount;
396         int             error;
397
398         if (!S_ISREG(ip->i_d.di_mode) || (ip->i_d.di_mode == 0))
399                 return 0;
400
401         /* If this is a read-only mount, don't do this (would generate I/O) */
402         if (mp->m_flags & XFS_MOUNT_RDONLY)
403                 return 0;
404
405         if (!XFS_FORCED_SHUTDOWN(mp)) {
406                 int truncated;
407
408                 /*
409                  * If we are using filestreams, and we have an unlinked
410                  * file that we are processing the last close on, then nothing
411                  * will be able to reopen and write to this file. Purge this
412                  * inode from the filestreams cache so that it doesn't delay
413                  * teardown of the inode.
414                  */
415                 if ((ip->i_d.di_nlink == 0) && xfs_inode_is_filestream(ip))
416                         xfs_filestream_deassociate(ip);
417
418                 /*
419                  * If we previously truncated this file and removed old data
420                  * in the process, we want to initiate "early" writeout on
421                  * the last close.  This is an attempt to combat the notorious
422                  * NULL files problem which is particularly noticeable from a
423                  * truncate down, buffered (re-)write (delalloc), followed by
424                  * a crash.  What we are effectively doing here is
425                  * significantly reducing the time window where we'd otherwise
426                  * be exposed to that problem.
427                  */
428                 truncated = xfs_iflags_test_and_clear(ip, XFS_ITRUNCATED);
429                 if (truncated) {
430                         xfs_iflags_clear(ip, XFS_IDIRTY_RELEASE);
431                         if (VN_DIRTY(VFS_I(ip)) && ip->i_delayed_blks > 0)
432                                 xfs_flush_pages(ip, 0, -1, XBF_ASYNC, FI_NONE);
433                 }
434         }
435
436         if (ip->i_d.di_nlink == 0)
437                 return 0;
438
439         if (xfs_can_free_eofblocks(ip, false)) {
440
441                 /*
442                  * If we can't get the iolock just skip truncating the blocks
443                  * past EOF because we could deadlock with the mmap_sem
444                  * otherwise.  We'll get another chance to drop them once the
445                  * last reference to the inode is dropped, so we'll never leak
446                  * blocks permanently.
447                  *
448                  * Further, check if the inode is being opened, written and
449                  * closed frequently and we have delayed allocation blocks
450                  * outstanding (e.g. streaming writes from the NFS server),
451                  * truncating the blocks past EOF will cause fragmentation to
452                  * occur.
453                  *
454                  * In this case don't do the truncation, either, but we have to
455                  * be careful how we detect this case. Blocks beyond EOF show
456                  * up as i_delayed_blks even when the inode is clean, so we
457                  * need to truncate them away first before checking for a dirty
458                  * release. Hence on the first dirty close we will still remove
459                  * the speculative allocation, but after that we will leave it
460                  * in place.
461                  */
462                 if (xfs_iflags_test(ip, XFS_IDIRTY_RELEASE))
463                         return 0;
464
465                 error = xfs_free_eofblocks(mp, ip, true);
466                 if (error)
467                         return error;
468
469                 /* delalloc blocks after truncation means it really is dirty */
470                 if (ip->i_delayed_blks)
471                         xfs_iflags_set(ip, XFS_IDIRTY_RELEASE);
472         }
473         return 0;
474 }
475
476 /*
477  * xfs_inactive
478  *
479  * This is called when the vnode reference count for the vnode
480  * goes to zero.  If the file has been unlinked, then it must
481  * now be truncated.  Also, we clear all of the read-ahead state
482  * kept for the inode here since the file is now closed.
483  */
484 int
485 xfs_inactive(
486         xfs_inode_t     *ip)
487 {
488         xfs_bmap_free_t free_list;
489         xfs_fsblock_t   first_block;
490         int             committed;
491         xfs_trans_t     *tp;
492         xfs_mount_t     *mp;
493         int             error;
494         int             truncate = 0;
495
496         /*
497          * If the inode is already free, then there can be nothing
498          * to clean up here.
499          */
500         if (ip->i_d.di_mode == 0 || is_bad_inode(VFS_I(ip))) {
501                 ASSERT(ip->i_df.if_real_bytes == 0);
502                 ASSERT(ip->i_df.if_broot_bytes == 0);
503                 return VN_INACTIVE_CACHE;
504         }
505
506         mp = ip->i_mount;
507
508         error = 0;
509
510         /* If this is a read-only mount, don't do this (would generate I/O) */
511         if (mp->m_flags & XFS_MOUNT_RDONLY)
512                 goto out;
513
514         if (ip->i_d.di_nlink != 0) {
515                 /*
516                  * force is true because we are evicting an inode from the
517                  * cache. Post-eof blocks must be freed, lest we end up with
518                  * broken free space accounting.
519                  */
520                 if (xfs_can_free_eofblocks(ip, true)) {
521                         error = xfs_free_eofblocks(mp, ip, false);
522                         if (error)
523                                 return VN_INACTIVE_CACHE;
524                 }
525                 goto out;
526         }
527
528         if (S_ISREG(ip->i_d.di_mode) &&
529             (ip->i_d.di_size != 0 || XFS_ISIZE(ip) != 0 ||
530              ip->i_d.di_nextents > 0 || ip->i_delayed_blks > 0))
531                 truncate = 1;
532
533         error = xfs_qm_dqattach(ip, 0);
534         if (error)
535                 return VN_INACTIVE_CACHE;
536
537         tp = xfs_trans_alloc(mp, XFS_TRANS_INACTIVE);
538         error = xfs_trans_reserve(tp, 0,
539                         (truncate || S_ISLNK(ip->i_d.di_mode)) ?
540                                 XFS_ITRUNCATE_LOG_RES(mp) :
541                                 XFS_IFREE_LOG_RES(mp),
542                         0,
543                         XFS_TRANS_PERM_LOG_RES,
544                         XFS_ITRUNCATE_LOG_COUNT);
545         if (error) {
546                 ASSERT(XFS_FORCED_SHUTDOWN(mp));
547                 xfs_trans_cancel(tp, 0);
548                 return VN_INACTIVE_CACHE;
549         }
550
551         xfs_ilock(ip, XFS_ILOCK_EXCL);
552         xfs_trans_ijoin(tp, ip, 0);
553
554         if (S_ISLNK(ip->i_d.di_mode)) {
555                 /*
556                  * Zero length symlinks _can_ exist.
557                  */
558                 if (ip->i_d.di_size > XFS_IFORK_DSIZE(ip)) {
559                         error = xfs_inactive_symlink_rmt(ip, &tp);
560                         if (error)
561                                 goto out_cancel;
562                 } else if (ip->i_df.if_bytes > 0) {
563                         xfs_idata_realloc(ip, -(ip->i_df.if_bytes),
564                                           XFS_DATA_FORK);
565                         ASSERT(ip->i_df.if_bytes == 0);
566                 }
567         } else if (truncate) {
568                 ip->i_d.di_size = 0;
569                 xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE);
570
571                 error = xfs_itruncate_extents(&tp, ip, XFS_DATA_FORK, 0);
572                 if (error)
573                         goto out_cancel;
574
575                 ASSERT(ip->i_d.di_nextents == 0);
576         }
577
578         /*
579          * If there are attributes associated with the file then blow them away
580          * now.  The code calls a routine that recursively deconstructs the
581          * attribute fork.  We need to just commit the current transaction
582          * because we can't use it for xfs_attr_inactive().
583          */
584         if (ip->i_d.di_anextents > 0) {
585                 ASSERT(ip->i_d.di_forkoff != 0);
586
587                 error = xfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES);
588                 if (error)
589                         goto out_unlock;
590
591                 xfs_iunlock(ip, XFS_ILOCK_EXCL);
592
593                 error = xfs_attr_inactive(ip);
594                 if (error)
595                         goto out;
596
597                 tp = xfs_trans_alloc(mp, XFS_TRANS_INACTIVE);
598                 error = xfs_trans_reserve(tp, 0,
599                                           XFS_IFREE_LOG_RES(mp),
600                                           0, XFS_TRANS_PERM_LOG_RES,
601                                           XFS_INACTIVE_LOG_COUNT);
602                 if (error) {
603                         xfs_trans_cancel(tp, 0);
604                         goto out;
605                 }
606
607                 xfs_ilock(ip, XFS_ILOCK_EXCL);
608                 xfs_trans_ijoin(tp, ip, 0);
609         }
610
611         if (ip->i_afp)
612                 xfs_idestroy_fork(ip, XFS_ATTR_FORK);
613
614         ASSERT(ip->i_d.di_anextents == 0);
615
616         /*
617          * Free the inode.
618          */
619         xfs_bmap_init(&free_list, &first_block);
620         error = xfs_ifree(tp, ip, &free_list);
621         if (error) {
622                 /*
623                  * If we fail to free the inode, shut down.  The cancel
624                  * might do that, we need to make sure.  Otherwise the
625                  * inode might be lost for a long time or forever.
626                  */
627                 if (!XFS_FORCED_SHUTDOWN(mp)) {
628                         xfs_notice(mp, "%s: xfs_ifree returned error %d",
629                                 __func__, error);
630                         xfs_force_shutdown(mp, SHUTDOWN_META_IO_ERROR);
631                 }
632                 xfs_trans_cancel(tp, XFS_TRANS_RELEASE_LOG_RES|XFS_TRANS_ABORT);
633         } else {
634                 /*
635                  * Credit the quota account(s). The inode is gone.
636                  */
637                 xfs_trans_mod_dquot_byino(tp, ip, XFS_TRANS_DQ_ICOUNT, -1);
638
639                 /*
640                  * Just ignore errors at this point.  There is nothing we can
641                  * do except to try to keep going. Make sure it's not a silent
642                  * error.
643                  */
644                 error = xfs_bmap_finish(&tp,  &free_list, &committed);
645                 if (error)
646                         xfs_notice(mp, "%s: xfs_bmap_finish returned error %d",
647                                 __func__, error);
648                 error = xfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES);
649                 if (error)
650                         xfs_notice(mp, "%s: xfs_trans_commit returned error %d",
651                                 __func__, error);
652         }
653
654         /*
655          * Release the dquots held by inode, if any.
656          */
657         xfs_qm_dqdetach(ip);
658 out_unlock:
659         xfs_iunlock(ip, XFS_ILOCK_EXCL);
660 out:
661         return VN_INACTIVE_CACHE;
662 out_cancel:
663         xfs_trans_cancel(tp, XFS_TRANS_RELEASE_LOG_RES | XFS_TRANS_ABORT);
664         goto out_unlock;
665 }
666
667 /*
668  * Lookups up an inode from "name". If ci_name is not NULL, then a CI match
669  * is allowed, otherwise it has to be an exact match. If a CI match is found,
670  * ci_name->name will point to a the actual name (caller must free) or
671  * will be set to NULL if an exact match is found.
672  */
673 int
674 xfs_lookup(
675         xfs_inode_t             *dp,
676         struct xfs_name         *name,
677         xfs_inode_t             **ipp,
678         struct xfs_name         *ci_name)
679 {
680         xfs_ino_t               inum;
681         int                     error;
682         uint                    lock_mode;
683
684         trace_xfs_lookup(dp, name);
685
686         if (XFS_FORCED_SHUTDOWN(dp->i_mount))
687                 return XFS_ERROR(EIO);
688
689         lock_mode = xfs_ilock_map_shared(dp);
690         error = xfs_dir_lookup(NULL, dp, name, &inum, ci_name);
691         xfs_iunlock_map_shared(dp, lock_mode);
692
693         if (error)
694                 goto out;
695
696         error = xfs_iget(dp->i_mount, NULL, inum, 0, 0, ipp);
697         if (error)
698                 goto out_free_name;
699
700         return 0;
701
702 out_free_name:
703         if (ci_name)
704                 kmem_free(ci_name->name);
705 out:
706         *ipp = NULL;
707         return error;
708 }
709
710 int
711 xfs_create(
712         xfs_inode_t             *dp,
713         struct xfs_name         *name,
714         umode_t                 mode,
715         xfs_dev_t               rdev,
716         xfs_inode_t             **ipp)
717 {
718         int                     is_dir = S_ISDIR(mode);
719         struct xfs_mount        *mp = dp->i_mount;
720         struct xfs_inode        *ip = NULL;
721         struct xfs_trans        *tp = NULL;
722         int                     error;
723         xfs_bmap_free_t         free_list;
724         xfs_fsblock_t           first_block;
725         boolean_t               unlock_dp_on_error = B_FALSE;
726         uint                    cancel_flags;
727         int                     committed;
728         prid_t                  prid;
729         struct xfs_dquot        *udqp = NULL;
730         struct xfs_dquot        *gdqp = NULL;
731         uint                    resblks;
732         uint                    log_res;
733         uint                    log_count;
734
735         trace_xfs_create(dp, name);
736
737         if (XFS_FORCED_SHUTDOWN(mp))
738                 return XFS_ERROR(EIO);
739
740         if (dp->i_d.di_flags & XFS_DIFLAG_PROJINHERIT)
741                 prid = xfs_get_projid(dp);
742         else
743                 prid = XFS_PROJID_DEFAULT;
744
745         /*
746          * Make sure that we have allocated dquot(s) on disk.
747          */
748         error = xfs_qm_vop_dqalloc(dp, current_fsuid(), current_fsgid(), prid,
749                         XFS_QMOPT_QUOTALL | XFS_QMOPT_INHERIT, &udqp, &gdqp);
750         if (error)
751                 return error;
752
753         if (is_dir) {
754                 rdev = 0;
755                 resblks = XFS_MKDIR_SPACE_RES(mp, name->len);
756                 log_res = XFS_MKDIR_LOG_RES(mp);
757                 log_count = XFS_MKDIR_LOG_COUNT;
758                 tp = xfs_trans_alloc(mp, XFS_TRANS_MKDIR);
759         } else {
760                 resblks = XFS_CREATE_SPACE_RES(mp, name->len);
761                 log_res = XFS_CREATE_LOG_RES(mp);
762                 log_count = XFS_CREATE_LOG_COUNT;
763                 tp = xfs_trans_alloc(mp, XFS_TRANS_CREATE);
764         }
765
766         cancel_flags = XFS_TRANS_RELEASE_LOG_RES;
767
768         /*
769          * Initially assume that the file does not exist and
770          * reserve the resources for that case.  If that is not
771          * the case we'll drop the one we have and get a more
772          * appropriate transaction later.
773          */
774         error = xfs_trans_reserve(tp, resblks, log_res, 0,
775                         XFS_TRANS_PERM_LOG_RES, log_count);
776         if (error == ENOSPC) {
777                 /* flush outstanding delalloc blocks and retry */
778                 xfs_flush_inodes(mp);
779                 error = xfs_trans_reserve(tp, resblks, log_res, 0,
780                                 XFS_TRANS_PERM_LOG_RES, log_count);
781         }
782         if (error == ENOSPC) {
783                 /* No space at all so try a "no-allocation" reservation */
784                 resblks = 0;
785                 error = xfs_trans_reserve(tp, 0, log_res, 0,
786                                 XFS_TRANS_PERM_LOG_RES, log_count);
787         }
788         if (error) {
789                 cancel_flags = 0;
790                 goto out_trans_cancel;
791         }
792
793         xfs_ilock(dp, XFS_ILOCK_EXCL | XFS_ILOCK_PARENT);
794         unlock_dp_on_error = B_TRUE;
795
796         xfs_bmap_init(&free_list, &first_block);
797
798         /*
799          * Reserve disk quota and the inode.
800          */
801         error = xfs_trans_reserve_quota(tp, mp, udqp, gdqp, resblks, 1, 0);
802         if (error)
803                 goto out_trans_cancel;
804
805         error = xfs_dir_canenter(tp, dp, name, resblks);
806         if (error)
807                 goto out_trans_cancel;
808
809         /*
810          * A newly created regular or special file just has one directory
811          * entry pointing to them, but a directory also the "." entry
812          * pointing to itself.
813          */
814         error = xfs_dir_ialloc(&tp, dp, mode, is_dir ? 2 : 1, rdev,
815                                prid, resblks > 0, &ip, &committed);
816         if (error) {
817                 if (error == ENOSPC)
818                         goto out_trans_cancel;
819                 goto out_trans_abort;
820         }
821
822         /*
823          * Now we join the directory inode to the transaction.  We do not do it
824          * earlier because xfs_dir_ialloc might commit the previous transaction
825          * (and release all the locks).  An error from here on will result in
826          * the transaction cancel unlocking dp so don't do it explicitly in the
827          * error path.
828          */
829         xfs_trans_ijoin(tp, dp, XFS_ILOCK_EXCL);
830         unlock_dp_on_error = B_FALSE;
831
832         error = xfs_dir_createname(tp, dp, name, ip->i_ino,
833                                         &first_block, &free_list, resblks ?
834                                         resblks - XFS_IALLOC_SPACE_RES(mp) : 0);
835         if (error) {
836                 ASSERT(error != ENOSPC);
837                 goto out_trans_abort;
838         }
839         xfs_trans_ichgtime(tp, dp, XFS_ICHGTIME_MOD | XFS_ICHGTIME_CHG);
840         xfs_trans_log_inode(tp, dp, XFS_ILOG_CORE);
841
842         if (is_dir) {
843                 error = xfs_dir_init(tp, ip, dp);
844                 if (error)
845                         goto out_bmap_cancel;
846
847                 error = xfs_bumplink(tp, dp);
848                 if (error)
849                         goto out_bmap_cancel;
850         }
851
852         /*
853          * If this is a synchronous mount, make sure that the
854          * create transaction goes to disk before returning to
855          * the user.
856          */
857         if (mp->m_flags & (XFS_MOUNT_WSYNC|XFS_MOUNT_DIRSYNC))
858                 xfs_trans_set_sync(tp);
859
860         /*
861          * Attach the dquot(s) to the inodes and modify them incore.
862          * These ids of the inode couldn't have changed since the new
863          * inode has been locked ever since it was created.
864          */
865         xfs_qm_vop_create_dqattach(tp, ip, udqp, gdqp);
866
867         error = xfs_bmap_finish(&tp, &free_list, &committed);
868         if (error)
869                 goto out_bmap_cancel;
870
871         error = xfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES);
872         if (error)
873                 goto out_release_inode;
874
875         xfs_qm_dqrele(udqp);
876         xfs_qm_dqrele(gdqp);
877
878         *ipp = ip;
879         return 0;
880
881  out_bmap_cancel:
882         xfs_bmap_cancel(&free_list);
883  out_trans_abort:
884         cancel_flags |= XFS_TRANS_ABORT;
885  out_trans_cancel:
886         xfs_trans_cancel(tp, cancel_flags);
887  out_release_inode:
888         /*
889          * Wait until after the current transaction is aborted to
890          * release the inode.  This prevents recursive transactions
891          * and deadlocks from xfs_inactive.
892          */
893         if (ip)
894                 IRELE(ip);
895
896         xfs_qm_dqrele(udqp);
897         xfs_qm_dqrele(gdqp);
898
899         if (unlock_dp_on_error)
900                 xfs_iunlock(dp, XFS_ILOCK_EXCL);
901         return error;
902 }
903
904 #ifdef DEBUG
905 int xfs_locked_n;
906 int xfs_small_retries;
907 int xfs_middle_retries;
908 int xfs_lots_retries;
909 int xfs_lock_delays;
910 #endif
911
912 /*
913  * Bump the subclass so xfs_lock_inodes() acquires each lock with
914  * a different value
915  */
916 static inline int
917 xfs_lock_inumorder(int lock_mode, int subclass)
918 {
919         if (lock_mode & (XFS_IOLOCK_SHARED|XFS_IOLOCK_EXCL))
920                 lock_mode |= (subclass + XFS_LOCK_INUMORDER) << XFS_IOLOCK_SHIFT;
921         if (lock_mode & (XFS_ILOCK_SHARED|XFS_ILOCK_EXCL))
922                 lock_mode |= (subclass + XFS_LOCK_INUMORDER) << XFS_ILOCK_SHIFT;
923
924         return lock_mode;
925 }
926
927 /*
928  * The following routine will lock n inodes in exclusive mode.
929  * We assume the caller calls us with the inodes in i_ino order.
930  *
931  * We need to detect deadlock where an inode that we lock
932  * is in the AIL and we start waiting for another inode that is locked
933  * by a thread in a long running transaction (such as truncate). This can
934  * result in deadlock since the long running trans might need to wait
935  * for the inode we just locked in order to push the tail and free space
936  * in the log.
937  */
938 void
939 xfs_lock_inodes(
940         xfs_inode_t     **ips,
941         int             inodes,
942         uint            lock_mode)
943 {
944         int             attempts = 0, i, j, try_lock;
945         xfs_log_item_t  *lp;
946
947         ASSERT(ips && (inodes >= 2)); /* we need at least two */
948
949         try_lock = 0;
950         i = 0;
951
952 again:
953         for (; i < inodes; i++) {
954                 ASSERT(ips[i]);
955
956                 if (i && (ips[i] == ips[i-1]))  /* Already locked */
957                         continue;
958
959                 /*
960                  * If try_lock is not set yet, make sure all locked inodes
961                  * are not in the AIL.
962                  * If any are, set try_lock to be used later.
963                  */
964
965                 if (!try_lock) {
966                         for (j = (i - 1); j >= 0 && !try_lock; j--) {
967                                 lp = (xfs_log_item_t *)ips[j]->i_itemp;
968                                 if (lp && (lp->li_flags & XFS_LI_IN_AIL)) {
969                                         try_lock++;
970                                 }
971                         }
972                 }
973
974                 /*
975                  * If any of the previous locks we have locked is in the AIL,
976                  * we must TRY to get the second and subsequent locks. If
977                  * we can't get any, we must release all we have
978                  * and try again.
979                  */
980
981                 if (try_lock) {
982                         /* try_lock must be 0 if i is 0. */
983                         /*
984                          * try_lock means we have an inode locked
985                          * that is in the AIL.
986                          */
987                         ASSERT(i != 0);
988                         if (!xfs_ilock_nowait(ips[i], xfs_lock_inumorder(lock_mode, i))) {
989                                 attempts++;
990
991                                 /*
992                                  * Unlock all previous guys and try again.
993                                  * xfs_iunlock will try to push the tail
994                                  * if the inode is in the AIL.
995                                  */
996
997                                 for(j = i - 1; j >= 0; j--) {
998
999                                         /*
1000                                          * Check to see if we've already
1001                                          * unlocked this one.
1002                                          * Not the first one going back,
1003                                          * and the inode ptr is the same.
1004                                          */
1005                                         if ((j != (i - 1)) && ips[j] ==
1006                                                                 ips[j+1])
1007                                                 continue;
1008
1009                                         xfs_iunlock(ips[j], lock_mode);
1010                                 }
1011
1012                                 if ((attempts % 5) == 0) {
1013                                         delay(1); /* Don't just spin the CPU */
1014 #ifdef DEBUG
1015                                         xfs_lock_delays++;
1016 #endif
1017                                 }
1018                                 i = 0;
1019                                 try_lock = 0;
1020                                 goto again;
1021                         }
1022                 } else {
1023                         xfs_ilock(ips[i], xfs_lock_inumorder(lock_mode, i));
1024                 }
1025         }
1026
1027 #ifdef DEBUG
1028         if (attempts) {
1029                 if (attempts < 5) xfs_small_retries++;
1030                 else if (attempts < 100) xfs_middle_retries++;
1031                 else xfs_lots_retries++;
1032         } else {
1033                 xfs_locked_n++;
1034         }
1035 #endif
1036 }
1037
1038 /*
1039  * xfs_lock_two_inodes() can only be used to lock one type of lock
1040  * at a time - the iolock or the ilock, but not both at once. If
1041  * we lock both at once, lockdep will report false positives saying
1042  * we have violated locking orders.
1043  */
1044 void
1045 xfs_lock_two_inodes(
1046         xfs_inode_t             *ip0,
1047         xfs_inode_t             *ip1,
1048         uint                    lock_mode)
1049 {
1050         xfs_inode_t             *temp;
1051         int                     attempts = 0;
1052         xfs_log_item_t          *lp;
1053
1054         if (lock_mode & (XFS_IOLOCK_SHARED|XFS_IOLOCK_EXCL))
1055                 ASSERT((lock_mode & (XFS_ILOCK_SHARED|XFS_ILOCK_EXCL)) == 0);
1056         ASSERT(ip0->i_ino != ip1->i_ino);
1057
1058         if (ip0->i_ino > ip1->i_ino) {
1059                 temp = ip0;
1060                 ip0 = ip1;
1061                 ip1 = temp;
1062         }
1063
1064  again:
1065         xfs_ilock(ip0, xfs_lock_inumorder(lock_mode, 0));
1066
1067         /*
1068          * If the first lock we have locked is in the AIL, we must TRY to get
1069          * the second lock. If we can't get it, we must release the first one
1070          * and try again.
1071          */
1072         lp = (xfs_log_item_t *)ip0->i_itemp;
1073         if (lp && (lp->li_flags & XFS_LI_IN_AIL)) {
1074                 if (!xfs_ilock_nowait(ip1, xfs_lock_inumorder(lock_mode, 1))) {
1075                         xfs_iunlock(ip0, lock_mode);
1076                         if ((++attempts % 5) == 0)
1077                                 delay(1); /* Don't just spin the CPU */
1078                         goto again;
1079                 }
1080         } else {
1081                 xfs_ilock(ip1, xfs_lock_inumorder(lock_mode, 1));
1082         }
1083 }
1084
1085 int
1086 xfs_remove(
1087         xfs_inode_t             *dp,
1088         struct xfs_name         *name,
1089         xfs_inode_t             *ip)
1090 {
1091         xfs_mount_t             *mp = dp->i_mount;
1092         xfs_trans_t             *tp = NULL;
1093         int                     is_dir = S_ISDIR(ip->i_d.di_mode);
1094         int                     error = 0;
1095         xfs_bmap_free_t         free_list;
1096         xfs_fsblock_t           first_block;
1097         int                     cancel_flags;
1098         int                     committed;
1099         int                     link_zero;
1100         uint                    resblks;
1101         uint                    log_count;
1102
1103         trace_xfs_remove(dp, name);
1104
1105         if (XFS_FORCED_SHUTDOWN(mp))
1106                 return XFS_ERROR(EIO);
1107
1108         error = xfs_qm_dqattach(dp, 0);
1109         if (error)
1110                 goto std_return;
1111
1112         error = xfs_qm_dqattach(ip, 0);
1113         if (error)
1114                 goto std_return;
1115
1116         if (is_dir) {
1117                 tp = xfs_trans_alloc(mp, XFS_TRANS_RMDIR);
1118                 log_count = XFS_DEFAULT_LOG_COUNT;
1119         } else {
1120                 tp = xfs_trans_alloc(mp, XFS_TRANS_REMOVE);
1121                 log_count = XFS_REMOVE_LOG_COUNT;
1122         }
1123         cancel_flags = XFS_TRANS_RELEASE_LOG_RES;
1124
1125         /*
1126          * We try to get the real space reservation first,
1127          * allowing for directory btree deletion(s) implying
1128          * possible bmap insert(s).  If we can't get the space
1129          * reservation then we use 0 instead, and avoid the bmap
1130          * btree insert(s) in the directory code by, if the bmap
1131          * insert tries to happen, instead trimming the LAST
1132          * block from the directory.
1133          */
1134         resblks = XFS_REMOVE_SPACE_RES(mp);
1135         error = xfs_trans_reserve(tp, resblks, XFS_REMOVE_LOG_RES(mp), 0,
1136                                   XFS_TRANS_PERM_LOG_RES, log_count);
1137         if (error == ENOSPC) {
1138                 resblks = 0;
1139                 error = xfs_trans_reserve(tp, 0, XFS_REMOVE_LOG_RES(mp), 0,
1140                                           XFS_TRANS_PERM_LOG_RES, log_count);
1141         }
1142         if (error) {
1143                 ASSERT(error != ENOSPC);
1144                 cancel_flags = 0;
1145                 goto out_trans_cancel;
1146         }
1147
1148         xfs_lock_two_inodes(dp, ip, XFS_ILOCK_EXCL);
1149
1150         xfs_trans_ijoin(tp, dp, XFS_ILOCK_EXCL);
1151         xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL);
1152
1153         /*
1154          * If we're removing a directory perform some additional validation.
1155          */
1156         if (is_dir) {
1157                 ASSERT(ip->i_d.di_nlink >= 2);
1158                 if (ip->i_d.di_nlink != 2) {
1159                         error = XFS_ERROR(ENOTEMPTY);
1160                         goto out_trans_cancel;
1161                 }
1162                 if (!xfs_dir_isempty(ip)) {
1163                         error = XFS_ERROR(ENOTEMPTY);
1164                         goto out_trans_cancel;
1165                 }
1166         }
1167
1168         xfs_bmap_init(&free_list, &first_block);
1169         error = xfs_dir_removename(tp, dp, name, ip->i_ino,
1170                                         &first_block, &free_list, resblks);
1171         if (error) {
1172                 ASSERT(error != ENOENT);
1173                 goto out_bmap_cancel;
1174         }
1175         xfs_trans_ichgtime(tp, dp, XFS_ICHGTIME_MOD | XFS_ICHGTIME_CHG);
1176
1177         if (is_dir) {
1178                 /*
1179                  * Drop the link from ip's "..".
1180                  */
1181                 error = xfs_droplink(tp, dp);
1182                 if (error)
1183                         goto out_bmap_cancel;
1184
1185                 /*
1186                  * Drop the "." link from ip to self.
1187                  */
1188                 error = xfs_droplink(tp, ip);
1189                 if (error)
1190                         goto out_bmap_cancel;
1191         } else {
1192                 /*
1193                  * When removing a non-directory we need to log the parent
1194                  * inode here.  For a directory this is done implicitly
1195                  * by the xfs_droplink call for the ".." entry.
1196                  */
1197                 xfs_trans_log_inode(tp, dp, XFS_ILOG_CORE);
1198         }
1199
1200         /*
1201          * Drop the link from dp to ip.
1202          */
1203         error = xfs_droplink(tp, ip);
1204         if (error)
1205                 goto out_bmap_cancel;
1206
1207         /*
1208          * Determine if this is the last link while
1209          * we are in the transaction.
1210          */
1211         link_zero = (ip->i_d.di_nlink == 0);
1212
1213         /*
1214          * If this is a synchronous mount, make sure that the
1215          * remove transaction goes to disk before returning to
1216          * the user.
1217          */
1218         if (mp->m_flags & (XFS_MOUNT_WSYNC|XFS_MOUNT_DIRSYNC))
1219                 xfs_trans_set_sync(tp);
1220
1221         error = xfs_bmap_finish(&tp, &free_list, &committed);
1222         if (error)
1223                 goto out_bmap_cancel;
1224
1225         error = xfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES);
1226         if (error)
1227                 goto std_return;
1228
1229         /*
1230          * If we are using filestreams, kill the stream association.
1231          * If the file is still open it may get a new one but that
1232          * will get killed on last close in xfs_close() so we don't
1233          * have to worry about that.
1234          */
1235         if (!is_dir && link_zero && xfs_inode_is_filestream(ip))
1236                 xfs_filestream_deassociate(ip);
1237
1238         return 0;
1239
1240  out_bmap_cancel:
1241         xfs_bmap_cancel(&free_list);
1242         cancel_flags |= XFS_TRANS_ABORT;
1243  out_trans_cancel:
1244         xfs_trans_cancel(tp, cancel_flags);
1245  std_return:
1246         return error;
1247 }
1248
1249 int
1250 xfs_link(
1251         xfs_inode_t             *tdp,
1252         xfs_inode_t             *sip,
1253         struct xfs_name         *target_name)
1254 {
1255         xfs_mount_t             *mp = tdp->i_mount;
1256         xfs_trans_t             *tp;
1257         int                     error;
1258         xfs_bmap_free_t         free_list;
1259         xfs_fsblock_t           first_block;
1260         int                     cancel_flags;
1261         int                     committed;
1262         int                     resblks;
1263
1264         trace_xfs_link(tdp, target_name);
1265
1266         ASSERT(!S_ISDIR(sip->i_d.di_mode));
1267
1268         if (XFS_FORCED_SHUTDOWN(mp))
1269                 return XFS_ERROR(EIO);
1270
1271         error = xfs_qm_dqattach(sip, 0);
1272         if (error)
1273                 goto std_return;
1274
1275         error = xfs_qm_dqattach(tdp, 0);
1276         if (error)
1277                 goto std_return;
1278
1279         tp = xfs_trans_alloc(mp, XFS_TRANS_LINK);
1280         cancel_flags = XFS_TRANS_RELEASE_LOG_RES;
1281         resblks = XFS_LINK_SPACE_RES(mp, target_name->len);
1282         error = xfs_trans_reserve(tp, resblks, XFS_LINK_LOG_RES(mp), 0,
1283                         XFS_TRANS_PERM_LOG_RES, XFS_LINK_LOG_COUNT);
1284         if (error == ENOSPC) {
1285                 resblks = 0;
1286                 error = xfs_trans_reserve(tp, 0, XFS_LINK_LOG_RES(mp), 0,
1287                                 XFS_TRANS_PERM_LOG_RES, XFS_LINK_LOG_COUNT);
1288         }
1289         if (error) {
1290                 cancel_flags = 0;
1291                 goto error_return;
1292         }
1293
1294         xfs_lock_two_inodes(sip, tdp, XFS_ILOCK_EXCL);
1295
1296         xfs_trans_ijoin(tp, sip, XFS_ILOCK_EXCL);
1297         xfs_trans_ijoin(tp, tdp, XFS_ILOCK_EXCL);
1298
1299         /*
1300          * If we are using project inheritance, we only allow hard link
1301          * creation in our tree when the project IDs are the same; else
1302          * the tree quota mechanism could be circumvented.
1303          */
1304         if (unlikely((tdp->i_d.di_flags & XFS_DIFLAG_PROJINHERIT) &&
1305                      (xfs_get_projid(tdp) != xfs_get_projid(sip)))) {
1306                 error = XFS_ERROR(EXDEV);
1307                 goto error_return;
1308         }
1309
1310         error = xfs_dir_canenter(tp, tdp, target_name, resblks);
1311         if (error)
1312                 goto error_return;
1313
1314         xfs_bmap_init(&free_list, &first_block);
1315
1316         error = xfs_dir_createname(tp, tdp, target_name, sip->i_ino,
1317                                         &first_block, &free_list, resblks);
1318         if (error)
1319                 goto abort_return;
1320         xfs_trans_ichgtime(tp, tdp, XFS_ICHGTIME_MOD | XFS_ICHGTIME_CHG);
1321         xfs_trans_log_inode(tp, tdp, XFS_ILOG_CORE);
1322
1323         error = xfs_bumplink(tp, sip);
1324         if (error)
1325                 goto abort_return;
1326
1327         /*
1328          * If this is a synchronous mount, make sure that the
1329          * link transaction goes to disk before returning to
1330          * the user.
1331          */
1332         if (mp->m_flags & (XFS_MOUNT_WSYNC|XFS_MOUNT_DIRSYNC)) {
1333                 xfs_trans_set_sync(tp);
1334         }
1335
1336         error = xfs_bmap_finish (&tp, &free_list, &committed);
1337         if (error) {
1338                 xfs_bmap_cancel(&free_list);
1339                 goto abort_return;
1340         }
1341
1342         return xfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES);
1343
1344  abort_return:
1345         cancel_flags |= XFS_TRANS_ABORT;
1346  error_return:
1347         xfs_trans_cancel(tp, cancel_flags);
1348  std_return:
1349         return error;
1350 }
1351
1352 int
1353 xfs_symlink(
1354         xfs_inode_t             *dp,
1355         struct xfs_name         *link_name,
1356         const char              *target_path,
1357         umode_t                 mode,
1358         xfs_inode_t             **ipp)
1359 {
1360         xfs_mount_t             *mp = dp->i_mount;
1361         xfs_trans_t             *tp;
1362         xfs_inode_t             *ip;
1363         int                     error;
1364         int                     pathlen;
1365         xfs_bmap_free_t         free_list;
1366         xfs_fsblock_t           first_block;
1367         boolean_t               unlock_dp_on_error = B_FALSE;
1368         uint                    cancel_flags;
1369         int                     committed;
1370         xfs_fileoff_t           first_fsb;
1371         xfs_filblks_t           fs_blocks;
1372         int                     nmaps;
1373         xfs_bmbt_irec_t         mval[SYMLINK_MAPS];
1374         xfs_daddr_t             d;
1375         const char              *cur_chunk;
1376         int                     byte_cnt;
1377         int                     n;
1378         xfs_buf_t               *bp;
1379         prid_t                  prid;
1380         struct xfs_dquot        *udqp, *gdqp;
1381         uint                    resblks;
1382
1383         *ipp = NULL;
1384         error = 0;
1385         ip = NULL;
1386         tp = NULL;
1387
1388         trace_xfs_symlink(dp, link_name);
1389
1390         if (XFS_FORCED_SHUTDOWN(mp))
1391                 return XFS_ERROR(EIO);
1392
1393         /*
1394          * Check component lengths of the target path name.
1395          */
1396         pathlen = strlen(target_path);
1397         if (pathlen >= MAXPATHLEN)      /* total string too long */
1398                 return XFS_ERROR(ENAMETOOLONG);
1399
1400         udqp = gdqp = NULL;
1401         if (dp->i_d.di_flags & XFS_DIFLAG_PROJINHERIT)
1402                 prid = xfs_get_projid(dp);
1403         else
1404                 prid = XFS_PROJID_DEFAULT;
1405
1406         /*
1407          * Make sure that we have allocated dquot(s) on disk.
1408          */
1409         error = xfs_qm_vop_dqalloc(dp, current_fsuid(), current_fsgid(), prid,
1410                         XFS_QMOPT_QUOTALL | XFS_QMOPT_INHERIT, &udqp, &gdqp);
1411         if (error)
1412                 goto std_return;
1413
1414         tp = xfs_trans_alloc(mp, XFS_TRANS_SYMLINK);
1415         cancel_flags = XFS_TRANS_RELEASE_LOG_RES;
1416         /*
1417          * The symlink will fit into the inode data fork?
1418          * There can't be any attributes so we get the whole variable part.
1419          */
1420         if (pathlen <= XFS_LITINO(mp))
1421                 fs_blocks = 0;
1422         else
1423                 fs_blocks = XFS_B_TO_FSB(mp, pathlen);
1424         resblks = XFS_SYMLINK_SPACE_RES(mp, link_name->len, fs_blocks);
1425         error = xfs_trans_reserve(tp, resblks, XFS_SYMLINK_LOG_RES(mp), 0,
1426                         XFS_TRANS_PERM_LOG_RES, XFS_SYMLINK_LOG_COUNT);
1427         if (error == ENOSPC && fs_blocks == 0) {
1428                 resblks = 0;
1429                 error = xfs_trans_reserve(tp, 0, XFS_SYMLINK_LOG_RES(mp), 0,
1430                                 XFS_TRANS_PERM_LOG_RES, XFS_SYMLINK_LOG_COUNT);
1431         }
1432         if (error) {
1433                 cancel_flags = 0;
1434                 goto error_return;
1435         }
1436
1437         xfs_ilock(dp, XFS_ILOCK_EXCL | XFS_ILOCK_PARENT);
1438         unlock_dp_on_error = B_TRUE;
1439
1440         /*
1441          * Check whether the directory allows new symlinks or not.
1442          */
1443         if (dp->i_d.di_flags & XFS_DIFLAG_NOSYMLINKS) {
1444                 error = XFS_ERROR(EPERM);
1445                 goto error_return;
1446         }
1447
1448         /*
1449          * Reserve disk quota : blocks and inode.
1450          */
1451         error = xfs_trans_reserve_quota(tp, mp, udqp, gdqp, resblks, 1, 0);
1452         if (error)
1453                 goto error_return;
1454
1455         /*
1456          * Check for ability to enter directory entry, if no space reserved.
1457          */
1458         error = xfs_dir_canenter(tp, dp, link_name, resblks);
1459         if (error)
1460                 goto error_return;
1461         /*
1462          * Initialize the bmap freelist prior to calling either
1463          * bmapi or the directory create code.
1464          */
1465         xfs_bmap_init(&free_list, &first_block);
1466
1467         /*
1468          * Allocate an inode for the symlink.
1469          */
1470         error = xfs_dir_ialloc(&tp, dp, S_IFLNK | (mode & ~S_IFMT), 1, 0,
1471                                prid, resblks > 0, &ip, NULL);
1472         if (error) {
1473                 if (error == ENOSPC)
1474                         goto error_return;
1475                 goto error1;
1476         }
1477
1478         /*
1479          * An error after we've joined dp to the transaction will result in the
1480          * transaction cancel unlocking dp so don't do it explicitly in the
1481          * error path.
1482          */
1483         xfs_trans_ijoin(tp, dp, XFS_ILOCK_EXCL);
1484         unlock_dp_on_error = B_FALSE;
1485
1486         /*
1487          * Also attach the dquot(s) to it, if applicable.
1488          */
1489         xfs_qm_vop_create_dqattach(tp, ip, udqp, gdqp);
1490
1491         if (resblks)
1492                 resblks -= XFS_IALLOC_SPACE_RES(mp);
1493         /*
1494          * If the symlink will fit into the inode, write it inline.
1495          */
1496         if (pathlen <= XFS_IFORK_DSIZE(ip)) {
1497                 xfs_idata_realloc(ip, pathlen, XFS_DATA_FORK);
1498                 memcpy(ip->i_df.if_u1.if_data, target_path, pathlen);
1499                 ip->i_d.di_size = pathlen;
1500
1501                 /*
1502                  * The inode was initially created in extent format.
1503                  */
1504                 ip->i_df.if_flags &= ~(XFS_IFEXTENTS | XFS_IFBROOT);
1505                 ip->i_df.if_flags |= XFS_IFINLINE;
1506
1507                 ip->i_d.di_format = XFS_DINODE_FMT_LOCAL;
1508                 xfs_trans_log_inode(tp, ip, XFS_ILOG_DDATA | XFS_ILOG_CORE);
1509
1510         } else {
1511                 first_fsb = 0;
1512                 nmaps = SYMLINK_MAPS;
1513
1514                 error = xfs_bmapi_write(tp, ip, first_fsb, fs_blocks,
1515                                   XFS_BMAPI_METADATA, &first_block, resblks,
1516                                   mval, &nmaps, &free_list);
1517                 if (error)
1518                         goto error2;
1519
1520                 if (resblks)
1521                         resblks -= fs_blocks;
1522                 ip->i_d.di_size = pathlen;
1523                 xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE);
1524
1525                 cur_chunk = target_path;
1526                 for (n = 0; n < nmaps; n++) {
1527                         d = XFS_FSB_TO_DADDR(mp, mval[n].br_startblock);
1528                         byte_cnt = XFS_FSB_TO_B(mp, mval[n].br_blockcount);
1529                         bp = xfs_trans_get_buf(tp, mp->m_ddev_targp, d,
1530                                                BTOBB(byte_cnt), 0);
1531                         if (!bp) {
1532                                 error = ENOMEM;
1533                                 goto error2;
1534                         }
1535                         if (pathlen < byte_cnt) {
1536                                 byte_cnt = pathlen;
1537                         }
1538                         pathlen -= byte_cnt;
1539
1540                         memcpy(bp->b_addr, cur_chunk, byte_cnt);
1541                         cur_chunk += byte_cnt;
1542
1543                         xfs_trans_log_buf(tp, bp, 0, byte_cnt - 1);
1544                 }
1545         }
1546
1547         /*
1548          * Create the directory entry for the symlink.
1549          */
1550         error = xfs_dir_createname(tp, dp, link_name, ip->i_ino,
1551                                         &first_block, &free_list, resblks);
1552         if (error)
1553                 goto error2;
1554         xfs_trans_ichgtime(tp, dp, XFS_ICHGTIME_MOD | XFS_ICHGTIME_CHG);
1555         xfs_trans_log_inode(tp, dp, XFS_ILOG_CORE);
1556
1557         /*
1558          * If this is a synchronous mount, make sure that the
1559          * symlink transaction goes to disk before returning to
1560          * the user.
1561          */
1562         if (mp->m_flags & (XFS_MOUNT_WSYNC|XFS_MOUNT_DIRSYNC)) {
1563                 xfs_trans_set_sync(tp);
1564         }
1565
1566         error = xfs_bmap_finish(&tp, &free_list, &committed);
1567         if (error) {
1568                 goto error2;
1569         }
1570         error = xfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES);
1571         xfs_qm_dqrele(udqp);
1572         xfs_qm_dqrele(gdqp);
1573
1574         *ipp = ip;
1575         return 0;
1576
1577  error2:
1578         IRELE(ip);
1579  error1:
1580         xfs_bmap_cancel(&free_list);
1581         cancel_flags |= XFS_TRANS_ABORT;
1582  error_return:
1583         xfs_trans_cancel(tp, cancel_flags);
1584         xfs_qm_dqrele(udqp);
1585         xfs_qm_dqrele(gdqp);
1586
1587         if (unlock_dp_on_error)
1588                 xfs_iunlock(dp, XFS_ILOCK_EXCL);
1589  std_return:
1590         return error;
1591 }
1592
1593 int
1594 xfs_set_dmattrs(
1595         xfs_inode_t     *ip,
1596         u_int           evmask,
1597         u_int16_t       state)
1598 {
1599         xfs_mount_t     *mp = ip->i_mount;
1600         xfs_trans_t     *tp;
1601         int             error;
1602
1603         if (!capable(CAP_SYS_ADMIN))
1604                 return XFS_ERROR(EPERM);
1605
1606         if (XFS_FORCED_SHUTDOWN(mp))
1607                 return XFS_ERROR(EIO);
1608
1609         tp = xfs_trans_alloc(mp, XFS_TRANS_SET_DMATTRS);
1610         error = xfs_trans_reserve(tp, 0, XFS_ICHANGE_LOG_RES (mp), 0, 0, 0);
1611         if (error) {
1612                 xfs_trans_cancel(tp, 0);
1613                 return error;
1614         }
1615         xfs_ilock(ip, XFS_ILOCK_EXCL);
1616         xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL);
1617
1618         ip->i_d.di_dmevmask = evmask;
1619         ip->i_d.di_dmstate  = state;
1620
1621         xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE);
1622         error = xfs_trans_commit(tp, 0);
1623
1624         return error;
1625 }
1626
1627 /*
1628  * xfs_alloc_file_space()
1629  *      This routine allocates disk space for the given file.
1630  *
1631  *      If alloc_type == 0, this request is for an ALLOCSP type
1632  *      request which will change the file size.  In this case, no
1633  *      DMAPI event will be generated by the call.  A TRUNCATE event
1634  *      will be generated later by xfs_setattr.
1635  *
1636  *      If alloc_type != 0, this request is for a RESVSP type
1637  *      request, and a DMAPI DM_EVENT_WRITE will be generated if the
1638  *      lower block boundary byte address is less than the file's
1639  *      length.
1640  *
1641  * RETURNS:
1642  *       0 on success
1643  *      errno on error
1644  *
1645  */
1646 STATIC int
1647 xfs_alloc_file_space(
1648         xfs_inode_t             *ip,
1649         xfs_off_t               offset,
1650         xfs_off_t               len,
1651         int                     alloc_type,
1652         int                     attr_flags)
1653 {
1654         xfs_mount_t             *mp = ip->i_mount;
1655         xfs_off_t               count;
1656         xfs_filblks_t           allocated_fsb;
1657         xfs_filblks_t           allocatesize_fsb;
1658         xfs_extlen_t            extsz, temp;
1659         xfs_fileoff_t           startoffset_fsb;
1660         xfs_fsblock_t           firstfsb;
1661         int                     nimaps;
1662         int                     quota_flag;
1663         int                     rt;
1664         xfs_trans_t             *tp;
1665         xfs_bmbt_irec_t         imaps[1], *imapp;
1666         xfs_bmap_free_t         free_list;
1667         uint                    qblocks, resblks, resrtextents;
1668         int                     committed;
1669         int                     error;
1670
1671         trace_xfs_alloc_file_space(ip);
1672
1673         if (XFS_FORCED_SHUTDOWN(mp))
1674                 return XFS_ERROR(EIO);
1675
1676         error = xfs_qm_dqattach(ip, 0);
1677         if (error)
1678                 return error;
1679
1680         if (len <= 0)
1681                 return XFS_ERROR(EINVAL);
1682
1683         rt = XFS_IS_REALTIME_INODE(ip);
1684         extsz = xfs_get_extsz_hint(ip);
1685
1686         count = len;
1687         imapp = &imaps[0];
1688         nimaps = 1;
1689         startoffset_fsb = XFS_B_TO_FSBT(mp, offset);
1690         allocatesize_fsb = XFS_B_TO_FSB(mp, count);
1691
1692         /*
1693          * Allocate file space until done or until there is an error
1694          */
1695         while (allocatesize_fsb && !error) {
1696                 xfs_fileoff_t   s, e;
1697
1698                 /*
1699                  * Determine space reservations for data/realtime.
1700                  */
1701                 if (unlikely(extsz)) {
1702                         s = startoffset_fsb;
1703                         do_div(s, extsz);
1704                         s *= extsz;
1705                         e = startoffset_fsb + allocatesize_fsb;
1706                         if ((temp = do_mod(startoffset_fsb, extsz)))
1707                                 e += temp;
1708                         if ((temp = do_mod(e, extsz)))
1709                                 e += extsz - temp;
1710                 } else {
1711                         s = 0;
1712                         e = allocatesize_fsb;
1713                 }
1714
1715                 /*
1716                  * The transaction reservation is limited to a 32-bit block
1717                  * count, hence we need to limit the number of blocks we are
1718                  * trying to reserve to avoid an overflow. We can't allocate
1719                  * more than @nimaps extents, and an extent is limited on disk
1720                  * to MAXEXTLEN (21 bits), so use that to enforce the limit.
1721                  */
1722                 resblks = min_t(xfs_fileoff_t, (e - s), (MAXEXTLEN * nimaps));
1723                 if (unlikely(rt)) {
1724                         resrtextents = qblocks = resblks;
1725                         resrtextents /= mp->m_sb.sb_rextsize;
1726                         resblks = XFS_DIOSTRAT_SPACE_RES(mp, 0);
1727                         quota_flag = XFS_QMOPT_RES_RTBLKS;
1728                 } else {
1729                         resrtextents = 0;
1730                         resblks = qblocks = XFS_DIOSTRAT_SPACE_RES(mp, resblks);
1731                         quota_flag = XFS_QMOPT_RES_REGBLKS;
1732                 }
1733
1734                 /*
1735                  * Allocate and setup the transaction.
1736                  */
1737                 tp = xfs_trans_alloc(mp, XFS_TRANS_DIOSTRAT);
1738                 error = xfs_trans_reserve(tp, resblks,
1739                                           XFS_WRITE_LOG_RES(mp), resrtextents,
1740                                           XFS_TRANS_PERM_LOG_RES,
1741                                           XFS_WRITE_LOG_COUNT);
1742                 /*
1743                  * Check for running out of space
1744                  */
1745                 if (error) {
1746                         /*
1747                          * Free the transaction structure.
1748                          */
1749                         ASSERT(error == ENOSPC || XFS_FORCED_SHUTDOWN(mp));
1750                         xfs_trans_cancel(tp, 0);
1751                         break;
1752                 }
1753                 xfs_ilock(ip, XFS_ILOCK_EXCL);
1754                 error = xfs_trans_reserve_quota_nblks(tp, ip, qblocks,
1755                                                       0, quota_flag);
1756                 if (error)
1757                         goto error1;
1758
1759                 xfs_trans_ijoin(tp, ip, 0);
1760
1761                 xfs_bmap_init(&free_list, &firstfsb);
1762                 error = xfs_bmapi_write(tp, ip, startoffset_fsb,
1763                                         allocatesize_fsb, alloc_type, &firstfsb,
1764                                         0, imapp, &nimaps, &free_list);
1765                 if (error) {
1766                         goto error0;
1767                 }
1768
1769                 /*
1770                  * Complete the transaction
1771                  */
1772                 error = xfs_bmap_finish(&tp, &free_list, &committed);
1773                 if (error) {
1774                         goto error0;
1775                 }
1776
1777                 error = xfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES);
1778                 xfs_iunlock(ip, XFS_ILOCK_EXCL);
1779                 if (error) {
1780                         break;
1781                 }
1782
1783                 allocated_fsb = imapp->br_blockcount;
1784
1785                 if (nimaps == 0) {
1786                         error = XFS_ERROR(ENOSPC);
1787                         break;
1788                 }
1789
1790                 startoffset_fsb += allocated_fsb;
1791                 allocatesize_fsb -= allocated_fsb;
1792         }
1793
1794         return error;
1795
1796 error0: /* Cancel bmap, unlock inode, unreserve quota blocks, cancel trans */
1797         xfs_bmap_cancel(&free_list);
1798         xfs_trans_unreserve_quota_nblks(tp, ip, (long)qblocks, 0, quota_flag);
1799
1800 error1: /* Just cancel transaction */
1801         xfs_trans_cancel(tp, XFS_TRANS_RELEASE_LOG_RES | XFS_TRANS_ABORT);
1802         xfs_iunlock(ip, XFS_ILOCK_EXCL);
1803         return error;
1804 }
1805
1806 /*
1807  * Zero file bytes between startoff and endoff inclusive.
1808  * The iolock is held exclusive and no blocks are buffered.
1809  *
1810  * This function is used by xfs_free_file_space() to zero
1811  * partial blocks when the range to free is not block aligned.
1812  * When unreserving space with boundaries that are not block
1813  * aligned we round up the start and round down the end
1814  * boundaries and then use this function to zero the parts of
1815  * the blocks that got dropped during the rounding.
1816  */
1817 STATIC int
1818 xfs_zero_remaining_bytes(
1819         xfs_inode_t             *ip,
1820         xfs_off_t               startoff,
1821         xfs_off_t               endoff)
1822 {
1823         xfs_bmbt_irec_t         imap;
1824         xfs_fileoff_t           offset_fsb;
1825         xfs_off_t               lastoffset;
1826         xfs_off_t               offset;
1827         xfs_buf_t               *bp;
1828         xfs_mount_t             *mp = ip->i_mount;
1829         int                     nimap;
1830         int                     error = 0;
1831
1832         /*
1833          * Avoid doing I/O beyond eof - it's not necessary
1834          * since nothing can read beyond eof.  The space will
1835          * be zeroed when the file is extended anyway.
1836          */
1837         if (startoff >= XFS_ISIZE(ip))
1838                 return 0;
1839
1840         if (endoff > XFS_ISIZE(ip))
1841                 endoff = XFS_ISIZE(ip);
1842
1843         bp = xfs_buf_get_uncached(XFS_IS_REALTIME_INODE(ip) ?
1844                                         mp->m_rtdev_targp : mp->m_ddev_targp,
1845                                   BTOBB(mp->m_sb.sb_blocksize), 0);
1846         if (!bp)
1847                 return XFS_ERROR(ENOMEM);
1848
1849         xfs_buf_unlock(bp);
1850
1851         for (offset = startoff; offset <= endoff; offset = lastoffset + 1) {
1852                 offset_fsb = XFS_B_TO_FSBT(mp, offset);
1853                 nimap = 1;
1854                 error = xfs_bmapi_read(ip, offset_fsb, 1, &imap, &nimap, 0);
1855                 if (error || nimap < 1)
1856                         break;
1857                 ASSERT(imap.br_blockcount >= 1);
1858                 ASSERT(imap.br_startoff == offset_fsb);
1859                 lastoffset = XFS_FSB_TO_B(mp, imap.br_startoff + 1) - 1;
1860                 if (lastoffset > endoff)
1861                         lastoffset = endoff;
1862                 if (imap.br_startblock == HOLESTARTBLOCK)
1863                         continue;
1864                 ASSERT(imap.br_startblock != DELAYSTARTBLOCK);
1865                 if (imap.br_state == XFS_EXT_UNWRITTEN)
1866                         continue;
1867                 XFS_BUF_UNDONE(bp);
1868                 XFS_BUF_UNWRITE(bp);
1869                 XFS_BUF_READ(bp);
1870                 XFS_BUF_SET_ADDR(bp, xfs_fsb_to_db(ip, imap.br_startblock));
1871                 xfsbdstrat(mp, bp);
1872                 error = xfs_buf_iowait(bp);
1873                 if (error) {
1874                         xfs_buf_ioerror_alert(bp,
1875                                         "xfs_zero_remaining_bytes(read)");
1876                         break;
1877                 }
1878                 memset(bp->b_addr +
1879                         (offset - XFS_FSB_TO_B(mp, imap.br_startoff)),
1880                       0, lastoffset - offset + 1);
1881                 XFS_BUF_UNDONE(bp);
1882                 XFS_BUF_UNREAD(bp);
1883                 XFS_BUF_WRITE(bp);
1884                 xfsbdstrat(mp, bp);
1885                 error = xfs_buf_iowait(bp);
1886                 if (error) {
1887                         xfs_buf_ioerror_alert(bp,
1888                                         "xfs_zero_remaining_bytes(write)");
1889                         break;
1890                 }
1891         }
1892         xfs_buf_free(bp);
1893         return error;
1894 }
1895
1896 /*
1897  * xfs_free_file_space()
1898  *      This routine frees disk space for the given file.
1899  *
1900  *      This routine is only called by xfs_change_file_space
1901  *      for an UNRESVSP type call.
1902  *
1903  * RETURNS:
1904  *       0 on success
1905  *      errno on error
1906  *
1907  */
1908 STATIC int
1909 xfs_free_file_space(
1910         xfs_inode_t             *ip,
1911         xfs_off_t               offset,
1912         xfs_off_t               len,
1913         int                     attr_flags)
1914 {
1915         int                     committed;
1916         int                     done;
1917         xfs_fileoff_t           endoffset_fsb;
1918         int                     error;
1919         xfs_fsblock_t           firstfsb;
1920         xfs_bmap_free_t         free_list;
1921         xfs_bmbt_irec_t         imap;
1922         xfs_off_t               ioffset;
1923         xfs_extlen_t            mod=0;
1924         xfs_mount_t             *mp;
1925         int                     nimap;
1926         uint                    resblks;
1927         uint                    rounding;
1928         int                     rt;
1929         xfs_fileoff_t           startoffset_fsb;
1930         xfs_trans_t             *tp;
1931         int                     need_iolock = 1;
1932
1933         mp = ip->i_mount;
1934
1935         trace_xfs_free_file_space(ip);
1936
1937         error = xfs_qm_dqattach(ip, 0);
1938         if (error)
1939                 return error;
1940
1941         error = 0;
1942         if (len <= 0)   /* if nothing being freed */
1943                 return error;
1944         rt = XFS_IS_REALTIME_INODE(ip);
1945         startoffset_fsb = XFS_B_TO_FSB(mp, offset);
1946         endoffset_fsb = XFS_B_TO_FSBT(mp, offset + len);
1947
1948         if (attr_flags & XFS_ATTR_NOLOCK)
1949                 need_iolock = 0;
1950         if (need_iolock) {
1951                 xfs_ilock(ip, XFS_IOLOCK_EXCL);
1952                 /* wait for the completion of any pending DIOs */
1953                 inode_dio_wait(VFS_I(ip));
1954         }
1955
1956         rounding = max_t(uint, 1 << mp->m_sb.sb_blocklog, PAGE_CACHE_SIZE);
1957         ioffset = offset & ~(rounding - 1);
1958
1959         if (VN_CACHED(VFS_I(ip)) != 0) {
1960                 error = xfs_flushinval_pages(ip, ioffset, -1, FI_REMAPF_LOCKED);
1961                 if (error)
1962                         goto out_unlock_iolock;
1963         }
1964
1965         /*
1966          * Need to zero the stuff we're not freeing, on disk.
1967          * If it's a realtime file & can't use unwritten extents then we
1968          * actually need to zero the extent edges.  Otherwise xfs_bunmapi
1969          * will take care of it for us.
1970          */
1971         if (rt && !xfs_sb_version_hasextflgbit(&mp->m_sb)) {
1972                 nimap = 1;
1973                 error = xfs_bmapi_read(ip, startoffset_fsb, 1,
1974                                         &imap, &nimap, 0);
1975                 if (error)
1976                         goto out_unlock_iolock;
1977                 ASSERT(nimap == 0 || nimap == 1);
1978                 if (nimap && imap.br_startblock != HOLESTARTBLOCK) {
1979                         xfs_daddr_t     block;
1980
1981                         ASSERT(imap.br_startblock != DELAYSTARTBLOCK);
1982                         block = imap.br_startblock;
1983                         mod = do_div(block, mp->m_sb.sb_rextsize);
1984                         if (mod)
1985                                 startoffset_fsb += mp->m_sb.sb_rextsize - mod;
1986                 }
1987                 nimap = 1;
1988                 error = xfs_bmapi_read(ip, endoffset_fsb - 1, 1,
1989                                         &imap, &nimap, 0);
1990                 if (error)
1991                         goto out_unlock_iolock;
1992                 ASSERT(nimap == 0 || nimap == 1);
1993                 if (nimap && imap.br_startblock != HOLESTARTBLOCK) {
1994                         ASSERT(imap.br_startblock != DELAYSTARTBLOCK);
1995                         mod++;
1996                         if (mod && (mod != mp->m_sb.sb_rextsize))
1997                                 endoffset_fsb -= mod;
1998                 }
1999         }
2000         if ((done = (endoffset_fsb <= startoffset_fsb)))
2001                 /*
2002                  * One contiguous piece to clear
2003                  */
2004                 error = xfs_zero_remaining_bytes(ip, offset, offset + len - 1);
2005         else {
2006                 /*
2007                  * Some full blocks, possibly two pieces to clear
2008                  */
2009                 if (offset < XFS_FSB_TO_B(mp, startoffset_fsb))
2010                         error = xfs_zero_remaining_bytes(ip, offset,
2011                                 XFS_FSB_TO_B(mp, startoffset_fsb) - 1);
2012                 if (!error &&
2013                     XFS_FSB_TO_B(mp, endoffset_fsb) < offset + len)
2014                         error = xfs_zero_remaining_bytes(ip,
2015                                 XFS_FSB_TO_B(mp, endoffset_fsb),
2016                                 offset + len - 1);
2017         }
2018
2019         /*
2020          * free file space until done or until there is an error
2021          */
2022         resblks = XFS_DIOSTRAT_SPACE_RES(mp, 0);
2023         while (!error && !done) {
2024
2025                 /*
2026                  * allocate and setup the transaction. Allow this
2027                  * transaction to dip into the reserve blocks to ensure
2028                  * the freeing of the space succeeds at ENOSPC.
2029                  */
2030                 tp = xfs_trans_alloc(mp, XFS_TRANS_DIOSTRAT);
2031                 tp->t_flags |= XFS_TRANS_RESERVE;
2032                 error = xfs_trans_reserve(tp,
2033                                           resblks,
2034                                           XFS_WRITE_LOG_RES(mp),
2035                                           0,
2036                                           XFS_TRANS_PERM_LOG_RES,
2037                                           XFS_WRITE_LOG_COUNT);
2038
2039                 /*
2040                  * check for running out of space
2041                  */
2042                 if (error) {
2043                         /*
2044                          * Free the transaction structure.
2045                          */
2046                         ASSERT(error == ENOSPC || XFS_FORCED_SHUTDOWN(mp));
2047                         xfs_trans_cancel(tp, 0);
2048                         break;
2049                 }
2050                 xfs_ilock(ip, XFS_ILOCK_EXCL);
2051                 error = xfs_trans_reserve_quota(tp, mp,
2052                                 ip->i_udquot, ip->i_gdquot,
2053                                 resblks, 0, XFS_QMOPT_RES_REGBLKS);
2054                 if (error)
2055                         goto error1;
2056
2057                 xfs_trans_ijoin(tp, ip, 0);
2058
2059                 /*
2060                  * issue the bunmapi() call to free the blocks
2061                  */
2062                 xfs_bmap_init(&free_list, &firstfsb);
2063                 error = xfs_bunmapi(tp, ip, startoffset_fsb,
2064                                   endoffset_fsb - startoffset_fsb,
2065                                   0, 2, &firstfsb, &free_list, &done);
2066                 if (error) {
2067                         goto error0;
2068                 }
2069
2070                 /*
2071                  * complete the transaction
2072                  */
2073                 error = xfs_bmap_finish(&tp, &free_list, &committed);
2074                 if (error) {
2075                         goto error0;
2076                 }
2077
2078                 error = xfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES);
2079                 xfs_iunlock(ip, XFS_ILOCK_EXCL);
2080         }
2081
2082  out_unlock_iolock:
2083         if (need_iolock)
2084                 xfs_iunlock(ip, XFS_IOLOCK_EXCL);
2085         return error;
2086
2087  error0:
2088         xfs_bmap_cancel(&free_list);
2089  error1:
2090         xfs_trans_cancel(tp, XFS_TRANS_RELEASE_LOG_RES | XFS_TRANS_ABORT);
2091         xfs_iunlock(ip, need_iolock ? (XFS_ILOCK_EXCL | XFS_IOLOCK_EXCL) :
2092                     XFS_ILOCK_EXCL);
2093         return error;
2094 }
2095
2096 /*
2097  * xfs_change_file_space()
2098  *      This routine allocates or frees disk space for the given file.
2099  *      The user specified parameters are checked for alignment and size
2100  *      limitations.
2101  *
2102  * RETURNS:
2103  *       0 on success
2104  *      errno on error
2105  *
2106  */
2107 int
2108 xfs_change_file_space(
2109         xfs_inode_t     *ip,
2110         int             cmd,
2111         xfs_flock64_t   *bf,
2112         xfs_off_t       offset,
2113         int             attr_flags)
2114 {
2115         xfs_mount_t     *mp = ip->i_mount;
2116         int             clrprealloc;
2117         int             error;
2118         xfs_fsize_t     fsize;
2119         int             setprealloc;
2120         xfs_off_t       startoffset;
2121         xfs_off_t       llen;
2122         xfs_trans_t     *tp;
2123         struct iattr    iattr;
2124         int             prealloc_type;
2125
2126         if (!S_ISREG(ip->i_d.di_mode))
2127                 return XFS_ERROR(EINVAL);
2128
2129         switch (bf->l_whence) {
2130         case 0: /*SEEK_SET*/
2131                 break;
2132         case 1: /*SEEK_CUR*/
2133                 bf->l_start += offset;
2134                 break;
2135         case 2: /*SEEK_END*/
2136                 bf->l_start += XFS_ISIZE(ip);
2137                 break;
2138         default:
2139                 return XFS_ERROR(EINVAL);
2140         }
2141
2142         llen = bf->l_len > 0 ? bf->l_len - 1 : bf->l_len;
2143
2144         if (bf->l_start < 0 ||
2145             bf->l_start > mp->m_super->s_maxbytes ||
2146             bf->l_start + llen < 0 ||
2147             bf->l_start + llen > mp->m_super->s_maxbytes)
2148                 return XFS_ERROR(EINVAL);
2149
2150         bf->l_whence = 0;
2151
2152         startoffset = bf->l_start;
2153         fsize = XFS_ISIZE(ip);
2154
2155         /*
2156          * XFS_IOC_RESVSP and XFS_IOC_UNRESVSP will reserve or unreserve
2157          * file space.
2158          * These calls do NOT zero the data space allocated to the file,
2159          * nor do they change the file size.
2160          *
2161          * XFS_IOC_ALLOCSP and XFS_IOC_FREESP will allocate and free file
2162          * space.
2163          * These calls cause the new file data to be zeroed and the file
2164          * size to be changed.
2165          */
2166         setprealloc = clrprealloc = 0;
2167         prealloc_type = XFS_BMAPI_PREALLOC;
2168
2169         switch (cmd) {
2170         case XFS_IOC_ZERO_RANGE:
2171                 prealloc_type |= XFS_BMAPI_CONVERT;
2172                 xfs_tosspages(ip, startoffset, startoffset + bf->l_len, 0);
2173                 /* FALLTHRU */
2174         case XFS_IOC_RESVSP:
2175         case XFS_IOC_RESVSP64:
2176                 error = xfs_alloc_file_space(ip, startoffset, bf->l_len,
2177                                                 prealloc_type, attr_flags);
2178                 if (error)
2179                         return error;
2180                 setprealloc = 1;
2181                 break;
2182
2183         case XFS_IOC_UNRESVSP:
2184         case XFS_IOC_UNRESVSP64:
2185                 if ((error = xfs_free_file_space(ip, startoffset, bf->l_len,
2186                                                                 attr_flags)))
2187                         return error;
2188                 break;
2189
2190         case XFS_IOC_ALLOCSP:
2191         case XFS_IOC_ALLOCSP64:
2192         case XFS_IOC_FREESP:
2193         case XFS_IOC_FREESP64:
2194                 /*
2195                  * These operations actually do IO when extending the file, but
2196                  * the allocation is done seperately to the zeroing that is
2197                  * done. This set of operations need to be serialised against
2198                  * other IO operations, such as truncate and buffered IO. We
2199                  * need to take the IOLOCK here to serialise the allocation and
2200                  * zeroing IO to prevent other IOLOCK holders (e.g. getbmap,
2201                  * truncate, direct IO) from racing against the transient
2202                  * allocated but not written state we can have here.
2203                  */
2204                 xfs_ilock(ip, XFS_IOLOCK_EXCL);
2205                 if (startoffset > fsize) {
2206                         error = xfs_alloc_file_space(ip, fsize,
2207                                         startoffset - fsize, 0,
2208                                         attr_flags | XFS_ATTR_NOLOCK);
2209                         if (error) {
2210                                 xfs_iunlock(ip, XFS_IOLOCK_EXCL);
2211                                 break;
2212                         }
2213                 }
2214
2215                 iattr.ia_valid = ATTR_SIZE;
2216                 iattr.ia_size = startoffset;
2217
2218                 error = xfs_setattr_size(ip, &iattr,
2219                                          attr_flags | XFS_ATTR_NOLOCK);
2220                 xfs_iunlock(ip, XFS_IOLOCK_EXCL);
2221
2222                 if (error)
2223                         return error;
2224
2225                 clrprealloc = 1;
2226                 break;
2227
2228         default:
2229                 ASSERT(0);
2230                 return XFS_ERROR(EINVAL);
2231         }
2232
2233         /*
2234          * update the inode timestamp, mode, and prealloc flag bits
2235          */
2236         tp = xfs_trans_alloc(mp, XFS_TRANS_WRITEID);
2237
2238         if ((error = xfs_trans_reserve(tp, 0, XFS_WRITEID_LOG_RES(mp),
2239                                       0, 0, 0))) {
2240                 /* ASSERT(0); */
2241                 xfs_trans_cancel(tp, 0);
2242                 return error;
2243         }
2244
2245         xfs_ilock(ip, XFS_ILOCK_EXCL);
2246         xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL);
2247
2248         if ((attr_flags & XFS_ATTR_DMI) == 0) {
2249                 ip->i_d.di_mode &= ~S_ISUID;
2250
2251                 /*
2252                  * Note that we don't have to worry about mandatory
2253                  * file locking being disabled here because we only
2254                  * clear the S_ISGID bit if the Group execute bit is
2255                  * on, but if it was on then mandatory locking wouldn't
2256                  * have been enabled.
2257                  */
2258                 if (ip->i_d.di_mode & S_IXGRP)
2259                         ip->i_d.di_mode &= ~S_ISGID;
2260
2261                 xfs_trans_ichgtime(tp, ip, XFS_ICHGTIME_MOD | XFS_ICHGTIME_CHG);
2262         }
2263         if (setprealloc)
2264                 ip->i_d.di_flags |= XFS_DIFLAG_PREALLOC;
2265         else if (clrprealloc)
2266                 ip->i_d.di_flags &= ~XFS_DIFLAG_PREALLOC;
2267
2268         xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE);
2269         if (attr_flags & XFS_ATTR_SYNC)
2270                 xfs_trans_set_sync(tp);
2271         return xfs_trans_commit(tp, 0);
2272 }