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