GNU Linux-libre 4.9.283-gnu1
[releases.git] / fs / xfs / xfs_bmap_util.c
1 /*
2  * Copyright (c) 2000-2006 Silicon Graphics, Inc.
3  * Copyright (c) 2012 Red Hat, Inc.
4  * All Rights Reserved.
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License as
8  * published by the Free Software Foundation.
9  *
10  * This program is distributed in the hope that it would be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write the Free Software Foundation,
17  * Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
18  */
19 #include "xfs.h"
20 #include "xfs_fs.h"
21 #include "xfs_shared.h"
22 #include "xfs_format.h"
23 #include "xfs_log_format.h"
24 #include "xfs_trans_resv.h"
25 #include "xfs_bit.h"
26 #include "xfs_mount.h"
27 #include "xfs_da_format.h"
28 #include "xfs_defer.h"
29 #include "xfs_inode.h"
30 #include "xfs_btree.h"
31 #include "xfs_trans.h"
32 #include "xfs_extfree_item.h"
33 #include "xfs_alloc.h"
34 #include "xfs_bmap.h"
35 #include "xfs_bmap_util.h"
36 #include "xfs_bmap_btree.h"
37 #include "xfs_rtalloc.h"
38 #include "xfs_error.h"
39 #include "xfs_quota.h"
40 #include "xfs_trans_space.h"
41 #include "xfs_trace.h"
42 #include "xfs_icache.h"
43 #include "xfs_log.h"
44 #include "xfs_rmap_btree.h"
45 #include "xfs_iomap.h"
46 #include "xfs_reflink.h"
47 #include "xfs_refcount.h"
48
49 /* Kernel only BMAP related definitions and functions */
50
51 /*
52  * Convert the given file system block to a disk block.  We have to treat it
53  * differently based on whether the file is a real time file or not, because the
54  * bmap code does.
55  */
56 xfs_daddr_t
57 xfs_fsb_to_db(struct xfs_inode *ip, xfs_fsblock_t fsb)
58 {
59         return (XFS_IS_REALTIME_INODE(ip) ? \
60                  (xfs_daddr_t)XFS_FSB_TO_BB((ip)->i_mount, (fsb)) : \
61                  XFS_FSB_TO_DADDR((ip)->i_mount, (fsb)));
62 }
63
64 /*
65  * Routine to zero an extent on disk allocated to the specific inode.
66  *
67  * The VFS functions take a linearised filesystem block offset, so we have to
68  * convert the sparse xfs fsb to the right format first.
69  * VFS types are real funky, too.
70  */
71 int
72 xfs_zero_extent(
73         struct xfs_inode *ip,
74         xfs_fsblock_t   start_fsb,
75         xfs_off_t       count_fsb)
76 {
77         struct xfs_mount *mp = ip->i_mount;
78         xfs_daddr_t     sector = xfs_fsb_to_db(ip, start_fsb);
79         sector_t        block = XFS_BB_TO_FSBT(mp, sector);
80
81         return blkdev_issue_zeroout(xfs_find_bdev_for_inode(VFS_I(ip)),
82                 block << (mp->m_super->s_blocksize_bits - 9),
83                 count_fsb << (mp->m_super->s_blocksize_bits - 9),
84                 GFP_NOFS, true);
85 }
86
87 #ifdef CONFIG_XFS_RT
88 int
89 xfs_bmap_rtalloc(
90         struct xfs_bmalloca     *ap)    /* bmap alloc argument struct */
91 {
92         xfs_alloctype_t atype = 0;      /* type for allocation routines */
93         int             error;          /* error return value */
94         xfs_mount_t     *mp;            /* mount point structure */
95         xfs_extlen_t    prod = 0;       /* product factor for allocators */
96         xfs_extlen_t    ralen = 0;      /* realtime allocation length */
97         xfs_extlen_t    align;          /* minimum allocation alignment */
98         xfs_rtblock_t   rtb;
99
100         mp = ap->ip->i_mount;
101         align = xfs_get_extsz_hint(ap->ip);
102         prod = align / mp->m_sb.sb_rextsize;
103         error = xfs_bmap_extsize_align(mp, &ap->got, &ap->prev,
104                                         align, 1, ap->eof, 0,
105                                         ap->conv, &ap->offset, &ap->length);
106         if (error)
107                 return error;
108         ASSERT(ap->length);
109         ASSERT(ap->length % mp->m_sb.sb_rextsize == 0);
110
111         /*
112          * If the offset & length are not perfectly aligned
113          * then kill prod, it will just get us in trouble.
114          */
115         if (do_mod(ap->offset, align) || ap->length % align)
116                 prod = 1;
117         /*
118          * Set ralen to be the actual requested length in rtextents.
119          */
120         ralen = ap->length / mp->m_sb.sb_rextsize;
121         /*
122          * If the old value was close enough to MAXEXTLEN that
123          * we rounded up to it, cut it back so it's valid again.
124          * Note that if it's a really large request (bigger than
125          * MAXEXTLEN), we don't hear about that number, and can't
126          * adjust the starting point to match it.
127          */
128         if (ralen * mp->m_sb.sb_rextsize >= MAXEXTLEN)
129                 ralen = MAXEXTLEN / mp->m_sb.sb_rextsize;
130
131         /*
132          * Lock out modifications to both the RT bitmap and summary inodes
133          */
134         xfs_ilock(mp->m_rbmip, XFS_ILOCK_EXCL|XFS_ILOCK_RTBITMAP);
135         xfs_trans_ijoin(ap->tp, mp->m_rbmip, XFS_ILOCK_EXCL);
136         xfs_ilock(mp->m_rsumip, XFS_ILOCK_EXCL|XFS_ILOCK_RTSUM);
137         xfs_trans_ijoin(ap->tp, mp->m_rsumip, XFS_ILOCK_EXCL);
138
139         /*
140          * If it's an allocation to an empty file at offset 0,
141          * pick an extent that will space things out in the rt area.
142          */
143         if (ap->eof && ap->offset == 0) {
144                 xfs_rtblock_t uninitialized_var(rtx); /* realtime extent no */
145
146                 error = xfs_rtpick_extent(mp, ap->tp, ralen, &rtx);
147                 if (error)
148                         return error;
149                 ap->blkno = rtx * mp->m_sb.sb_rextsize;
150         } else {
151                 ap->blkno = 0;
152         }
153
154         xfs_bmap_adjacent(ap);
155
156         /*
157          * Realtime allocation, done through xfs_rtallocate_extent.
158          */
159         atype = ap->blkno == 0 ?  XFS_ALLOCTYPE_ANY_AG : XFS_ALLOCTYPE_NEAR_BNO;
160         do_div(ap->blkno, mp->m_sb.sb_rextsize);
161         rtb = ap->blkno;
162         ap->length = ralen;
163         if ((error = xfs_rtallocate_extent(ap->tp, ap->blkno, 1, ap->length,
164                                 &ralen, atype, ap->wasdel, prod, &rtb)))
165                 return error;
166         if (rtb == NULLFSBLOCK && prod > 1 &&
167             (error = xfs_rtallocate_extent(ap->tp, ap->blkno, 1,
168                                            ap->length, &ralen, atype,
169                                            ap->wasdel, 1, &rtb)))
170                 return error;
171         ap->blkno = rtb;
172         if (ap->blkno != NULLFSBLOCK) {
173                 ap->blkno *= mp->m_sb.sb_rextsize;
174                 ralen *= mp->m_sb.sb_rextsize;
175                 ap->length = ralen;
176                 ap->ip->i_d.di_nblocks += ralen;
177                 xfs_trans_log_inode(ap->tp, ap->ip, XFS_ILOG_CORE);
178                 if (ap->wasdel)
179                         ap->ip->i_delayed_blks -= ralen;
180                 /*
181                  * Adjust the disk quota also. This was reserved
182                  * earlier.
183                  */
184                 xfs_trans_mod_dquot_byino(ap->tp, ap->ip,
185                         ap->wasdel ? XFS_TRANS_DQ_DELRTBCOUNT :
186                                         XFS_TRANS_DQ_RTBCOUNT, (long) ralen);
187
188                 /* Zero the extent if we were asked to do so */
189                 if (ap->datatype & XFS_ALLOC_USERDATA_ZERO) {
190                         error = xfs_zero_extent(ap->ip, ap->blkno, ap->length);
191                         if (error)
192                                 return error;
193                 }
194         } else {
195                 ap->length = 0;
196         }
197         return 0;
198 }
199 #endif /* CONFIG_XFS_RT */
200
201 /*
202  * Check if the endoff is outside the last extent. If so the caller will grow
203  * the allocation to a stripe unit boundary.  All offsets are considered outside
204  * the end of file for an empty fork, so 1 is returned in *eof in that case.
205  */
206 int
207 xfs_bmap_eof(
208         struct xfs_inode        *ip,
209         xfs_fileoff_t           endoff,
210         int                     whichfork,
211         int                     *eof)
212 {
213         struct xfs_bmbt_irec    rec;
214         int                     error;
215
216         error = xfs_bmap_last_extent(NULL, ip, whichfork, &rec, eof);
217         if (error || *eof)
218                 return error;
219
220         *eof = endoff >= rec.br_startoff + rec.br_blockcount;
221         return 0;
222 }
223
224 /*
225  * Extent tree block counting routines.
226  */
227
228 /*
229  * Count leaf blocks given a range of extent records.
230  */
231 STATIC void
232 xfs_bmap_count_leaves(
233         xfs_ifork_t             *ifp,
234         xfs_extnum_t            idx,
235         int                     numrecs,
236         int                     *count)
237 {
238         int             b;
239
240         for (b = 0; b < numrecs; b++) {
241                 xfs_bmbt_rec_host_t *frp = xfs_iext_get_ext(ifp, idx + b);
242                 *count += xfs_bmbt_get_blockcount(frp);
243         }
244 }
245
246 /*
247  * Count leaf blocks given a range of extent records originally
248  * in btree format.
249  */
250 STATIC void
251 xfs_bmap_disk_count_leaves(
252         struct xfs_mount        *mp,
253         struct xfs_btree_block  *block,
254         int                     numrecs,
255         int                     *count)
256 {
257         int             b;
258         xfs_bmbt_rec_t  *frp;
259
260         for (b = 1; b <= numrecs; b++) {
261                 frp = XFS_BMBT_REC_ADDR(mp, block, b);
262                 *count += xfs_bmbt_disk_get_blockcount(frp);
263         }
264 }
265
266 /*
267  * Recursively walks each level of a btree
268  * to count total fsblocks in use.
269  */
270 STATIC int                                     /* error */
271 xfs_bmap_count_tree(
272         xfs_mount_t     *mp,            /* file system mount point */
273         xfs_trans_t     *tp,            /* transaction pointer */
274         xfs_ifork_t     *ifp,           /* inode fork pointer */
275         xfs_fsblock_t   blockno,        /* file system block number */
276         int             levelin,        /* level in btree */
277         int             *count)         /* Count of blocks */
278 {
279         int                     error;
280         xfs_buf_t               *bp, *nbp;
281         int                     level = levelin;
282         __be64                  *pp;
283         xfs_fsblock_t           bno = blockno;
284         xfs_fsblock_t           nextbno;
285         struct xfs_btree_block  *block, *nextblock;
286         int                     numrecs;
287
288         error = xfs_btree_read_bufl(mp, tp, bno, 0, &bp, XFS_BMAP_BTREE_REF,
289                                                 &xfs_bmbt_buf_ops);
290         if (error)
291                 return error;
292         *count += 1;
293         block = XFS_BUF_TO_BLOCK(bp);
294
295         if (--level) {
296                 /* Not at node above leaves, count this level of nodes */
297                 nextbno = be64_to_cpu(block->bb_u.l.bb_rightsib);
298                 while (nextbno != NULLFSBLOCK) {
299                         error = xfs_btree_read_bufl(mp, tp, nextbno, 0, &nbp,
300                                                 XFS_BMAP_BTREE_REF,
301                                                 &xfs_bmbt_buf_ops);
302                         if (error)
303                                 return error;
304                         *count += 1;
305                         nextblock = XFS_BUF_TO_BLOCK(nbp);
306                         nextbno = be64_to_cpu(nextblock->bb_u.l.bb_rightsib);
307                         xfs_trans_brelse(tp, nbp);
308                 }
309
310                 /* Dive to the next level */
311                 pp = XFS_BMBT_PTR_ADDR(mp, block, 1, mp->m_bmap_dmxr[1]);
312                 bno = be64_to_cpu(*pp);
313                 if (unlikely((error =
314                      xfs_bmap_count_tree(mp, tp, ifp, bno, level, count)) < 0)) {
315                         xfs_trans_brelse(tp, bp);
316                         XFS_ERROR_REPORT("xfs_bmap_count_tree(1)",
317                                          XFS_ERRLEVEL_LOW, mp);
318                         return -EFSCORRUPTED;
319                 }
320                 xfs_trans_brelse(tp, bp);
321         } else {
322                 /* count all level 1 nodes and their leaves */
323                 for (;;) {
324                         nextbno = be64_to_cpu(block->bb_u.l.bb_rightsib);
325                         numrecs = be16_to_cpu(block->bb_numrecs);
326                         xfs_bmap_disk_count_leaves(mp, block, numrecs, count);
327                         xfs_trans_brelse(tp, bp);
328                         if (nextbno == NULLFSBLOCK)
329                                 break;
330                         bno = nextbno;
331                         error = xfs_btree_read_bufl(mp, tp, bno, 0, &bp,
332                                                 XFS_BMAP_BTREE_REF,
333                                                 &xfs_bmbt_buf_ops);
334                         if (error)
335                                 return error;
336                         *count += 1;
337                         block = XFS_BUF_TO_BLOCK(bp);
338                 }
339         }
340         return 0;
341 }
342
343 /*
344  * Count fsblocks of the given fork.
345  */
346 static int                                      /* error */
347 xfs_bmap_count_blocks(
348         xfs_trans_t             *tp,            /* transaction pointer */
349         xfs_inode_t             *ip,            /* incore inode */
350         int                     whichfork,      /* data or attr fork */
351         int                     *count)         /* out: count of blocks */
352 {
353         struct xfs_btree_block  *block; /* current btree block */
354         xfs_fsblock_t           bno;    /* block # of "block" */
355         xfs_ifork_t             *ifp;   /* fork structure */
356         int                     level;  /* btree level, for checking */
357         xfs_mount_t             *mp;    /* file system mount structure */
358         __be64                  *pp;    /* pointer to block address */
359
360         bno = NULLFSBLOCK;
361         mp = ip->i_mount;
362         ifp = XFS_IFORK_PTR(ip, whichfork);
363         if ( XFS_IFORK_FORMAT(ip, whichfork) == XFS_DINODE_FMT_EXTENTS ) {
364                 xfs_bmap_count_leaves(ifp, 0, xfs_iext_count(ifp), count);
365                 return 0;
366         }
367
368         /*
369          * Root level must use BMAP_BROOT_PTR_ADDR macro to get ptr out.
370          */
371         block = ifp->if_broot;
372         level = be16_to_cpu(block->bb_level);
373         ASSERT(level > 0);
374         pp = XFS_BMAP_BROOT_PTR_ADDR(mp, block, 1, ifp->if_broot_bytes);
375         bno = be64_to_cpu(*pp);
376         ASSERT(bno != NULLFSBLOCK);
377         ASSERT(XFS_FSB_TO_AGNO(mp, bno) < mp->m_sb.sb_agcount);
378         ASSERT(XFS_FSB_TO_AGBNO(mp, bno) < mp->m_sb.sb_agblocks);
379
380         if (unlikely(xfs_bmap_count_tree(mp, tp, ifp, bno, level, count) < 0)) {
381                 XFS_ERROR_REPORT("xfs_bmap_count_blocks(2)", XFS_ERRLEVEL_LOW,
382                                  mp);
383                 return -EFSCORRUPTED;
384         }
385
386         return 0;
387 }
388
389 /*
390  * returns 1 for success, 0 if we failed to map the extent.
391  */
392 STATIC int
393 xfs_getbmapx_fix_eof_hole(
394         xfs_inode_t             *ip,            /* xfs incore inode pointer */
395         int                     whichfork,
396         struct getbmapx         *out,           /* output structure */
397         int                     prealloced,     /* this is a file with
398                                                  * preallocated data space */
399         __int64_t               end,            /* last block requested */
400         xfs_fsblock_t           startblock,
401         bool                    moretocome)
402 {
403         __int64_t               fixlen;
404         xfs_mount_t             *mp;            /* file system mount point */
405         xfs_ifork_t             *ifp;           /* inode fork pointer */
406         xfs_extnum_t            lastx;          /* last extent pointer */
407         xfs_fileoff_t           fileblock;
408
409         if (startblock == HOLESTARTBLOCK) {
410                 mp = ip->i_mount;
411                 out->bmv_block = -1;
412                 fixlen = XFS_FSB_TO_BB(mp, XFS_B_TO_FSB(mp, XFS_ISIZE(ip)));
413                 fixlen -= out->bmv_offset;
414                 if (prealloced && out->bmv_offset + out->bmv_length == end) {
415                         /* Came to hole at EOF. Trim it. */
416                         if (fixlen <= 0)
417                                 return 0;
418                         out->bmv_length = fixlen;
419                 }
420         } else {
421                 if (startblock == DELAYSTARTBLOCK)
422                         out->bmv_block = -2;
423                 else
424                         out->bmv_block = xfs_fsb_to_db(ip, startblock);
425                 fileblock = XFS_BB_TO_FSB(ip->i_mount, out->bmv_offset);
426                 ifp = XFS_IFORK_PTR(ip, whichfork);
427                 if (!moretocome &&
428                     xfs_iext_bno_to_ext(ifp, fileblock, &lastx) &&
429                    (lastx == xfs_iext_count(ifp) - 1))
430                         out->bmv_oflags |= BMV_OF_LAST;
431         }
432
433         return 1;
434 }
435
436 /* Adjust the reported bmap around shared/unshared extent transitions. */
437 STATIC int
438 xfs_getbmap_adjust_shared(
439         struct xfs_inode                *ip,
440         int                             whichfork,
441         struct xfs_bmbt_irec            *map,
442         struct getbmapx                 *out,
443         struct xfs_bmbt_irec            *next_map)
444 {
445         struct xfs_mount                *mp = ip->i_mount;
446         xfs_agnumber_t                  agno;
447         xfs_agblock_t                   agbno;
448         xfs_agblock_t                   ebno;
449         xfs_extlen_t                    elen;
450         xfs_extlen_t                    nlen;
451         int                             error;
452
453         next_map->br_startblock = NULLFSBLOCK;
454         next_map->br_startoff = NULLFILEOFF;
455         next_map->br_blockcount = 0;
456
457         /* Only written data blocks can be shared. */
458         if (!xfs_is_reflink_inode(ip) || whichfork != XFS_DATA_FORK ||
459             map->br_startblock == DELAYSTARTBLOCK ||
460             map->br_startblock == HOLESTARTBLOCK ||
461             ISUNWRITTEN(map))
462                 return 0;
463
464         agno = XFS_FSB_TO_AGNO(mp, map->br_startblock);
465         agbno = XFS_FSB_TO_AGBNO(mp, map->br_startblock);
466         error = xfs_reflink_find_shared(mp, agno, agbno, map->br_blockcount,
467                         &ebno, &elen, true);
468         if (error)
469                 return error;
470
471         if (ebno == NULLAGBLOCK) {
472                 /* No shared blocks at all. */
473                 return 0;
474         } else if (agbno == ebno) {
475                 /*
476                  * Shared extent at (agbno, elen).  Shrink the reported
477                  * extent length and prepare to move the start of map[i]
478                  * to agbno+elen, with the aim of (re)formatting the new
479                  * map[i] the next time through the inner loop.
480                  */
481                 out->bmv_length = XFS_FSB_TO_BB(mp, elen);
482                 out->bmv_oflags |= BMV_OF_SHARED;
483                 if (elen != map->br_blockcount) {
484                         *next_map = *map;
485                         next_map->br_startblock += elen;
486                         next_map->br_startoff += elen;
487                         next_map->br_blockcount -= elen;
488                 }
489                 map->br_blockcount -= elen;
490         } else {
491                 /*
492                  * There's an unshared extent (agbno, ebno - agbno)
493                  * followed by shared extent at (ebno, elen).  Shrink
494                  * the reported extent length to cover only the unshared
495                  * extent and prepare to move up the start of map[i] to
496                  * ebno, with the aim of (re)formatting the new map[i]
497                  * the next time through the inner loop.
498                  */
499                 *next_map = *map;
500                 nlen = ebno - agbno;
501                 out->bmv_length = XFS_FSB_TO_BB(mp, nlen);
502                 next_map->br_startblock += nlen;
503                 next_map->br_startoff += nlen;
504                 next_map->br_blockcount -= nlen;
505                 map->br_blockcount -= nlen;
506         }
507
508         return 0;
509 }
510
511 /*
512  * Get inode's extents as described in bmv, and format for output.
513  * Calls formatter to fill the user's buffer until all extents
514  * are mapped, until the passed-in bmv->bmv_count slots have
515  * been filled, or until the formatter short-circuits the loop,
516  * if it is tracking filled-in extents on its own.
517  */
518 int                                             /* error code */
519 xfs_getbmap(
520         xfs_inode_t             *ip,
521         struct getbmapx         *bmv,           /* user bmap structure */
522         xfs_bmap_format_t       formatter,      /* format to user */
523         void                    *arg)           /* formatter arg */
524 {
525         __int64_t               bmvend;         /* last block requested */
526         int                     error = 0;      /* return value */
527         __int64_t               fixlen;         /* length for -1 case */
528         int                     i;              /* extent number */
529         int                     lock;           /* lock state */
530         xfs_bmbt_irec_t         *map;           /* buffer for user's data */
531         xfs_mount_t             *mp;            /* file system mount point */
532         int                     nex;            /* # of user extents can do */
533         int                     subnex;         /* # of bmapi's can do */
534         int                     nmap;           /* number of map entries */
535         struct getbmapx         *out;           /* output structure */
536         int                     whichfork;      /* data or attr fork */
537         int                     prealloced;     /* this is a file with
538                                                  * preallocated data space */
539         int                     iflags;         /* interface flags */
540         int                     bmapi_flags;    /* flags for xfs_bmapi */
541         int                     cur_ext = 0;
542         struct xfs_bmbt_irec    inject_map;
543
544         mp = ip->i_mount;
545         iflags = bmv->bmv_iflags;
546
547 #ifndef DEBUG
548         /* Only allow CoW fork queries if we're debugging. */
549         if (iflags & BMV_IF_COWFORK)
550                 return -EINVAL;
551 #endif
552         if ((iflags & BMV_IF_ATTRFORK) && (iflags & BMV_IF_COWFORK))
553                 return -EINVAL;
554
555         if (iflags & BMV_IF_ATTRFORK)
556                 whichfork = XFS_ATTR_FORK;
557         else if (iflags & BMV_IF_COWFORK)
558                 whichfork = XFS_COW_FORK;
559         else
560                 whichfork = XFS_DATA_FORK;
561
562         switch (whichfork) {
563         case XFS_ATTR_FORK:
564                 if (XFS_IFORK_Q(ip)) {
565                         if (ip->i_d.di_aformat != XFS_DINODE_FMT_EXTENTS &&
566                             ip->i_d.di_aformat != XFS_DINODE_FMT_BTREE &&
567                             ip->i_d.di_aformat != XFS_DINODE_FMT_LOCAL)
568                                 return -EINVAL;
569                 } else if (unlikely(
570                            ip->i_d.di_aformat != 0 &&
571                            ip->i_d.di_aformat != XFS_DINODE_FMT_EXTENTS)) {
572                         XFS_ERROR_REPORT("xfs_getbmap", XFS_ERRLEVEL_LOW,
573                                          ip->i_mount);
574                         return -EFSCORRUPTED;
575                 }
576
577                 prealloced = 0;
578                 fixlen = 1LL << 32;
579                 break;
580         case XFS_COW_FORK:
581                 if (ip->i_cformat != XFS_DINODE_FMT_EXTENTS)
582                         return -EINVAL;
583
584                 if (xfs_get_cowextsz_hint(ip)) {
585                         prealloced = 1;
586                         fixlen = mp->m_super->s_maxbytes;
587                 } else {
588                         prealloced = 0;
589                         fixlen = XFS_ISIZE(ip);
590                 }
591                 break;
592         default:
593                 /* Local format data forks report no extents. */
594                 if (ip->i_d.di_format == XFS_DINODE_FMT_LOCAL) {
595                         bmv->bmv_entries = 0;
596                         return 0;
597                 }
598                 if (ip->i_d.di_format != XFS_DINODE_FMT_EXTENTS &&
599                     ip->i_d.di_format != XFS_DINODE_FMT_BTREE)
600                         return -EINVAL;
601
602                 if (xfs_get_extsz_hint(ip) ||
603                     ip->i_d.di_flags & (XFS_DIFLAG_PREALLOC|XFS_DIFLAG_APPEND)){
604                         prealloced = 1;
605                         fixlen = mp->m_super->s_maxbytes;
606                 } else {
607                         prealloced = 0;
608                         fixlen = XFS_ISIZE(ip);
609                 }
610                 break;
611         }
612
613         if (bmv->bmv_length == -1) {
614                 fixlen = XFS_FSB_TO_BB(mp, XFS_B_TO_FSB(mp, fixlen));
615                 bmv->bmv_length =
616                         max_t(__int64_t, fixlen - bmv->bmv_offset, 0);
617         } else if (bmv->bmv_length == 0) {
618                 bmv->bmv_entries = 0;
619                 return 0;
620         } else if (bmv->bmv_length < 0) {
621                 return -EINVAL;
622         }
623
624         nex = bmv->bmv_count - 1;
625         if (nex <= 0)
626                 return -EINVAL;
627         bmvend = bmv->bmv_offset + bmv->bmv_length;
628
629
630         if (bmv->bmv_count > ULONG_MAX / sizeof(struct getbmapx))
631                 return -ENOMEM;
632         out = kmem_zalloc_large(bmv->bmv_count * sizeof(struct getbmapx), 0);
633         if (!out)
634                 return -ENOMEM;
635
636         xfs_ilock(ip, XFS_IOLOCK_SHARED);
637         switch (whichfork) {
638         case XFS_DATA_FORK:
639                 if (!(iflags & BMV_IF_DELALLOC) &&
640                     (ip->i_delayed_blks || XFS_ISIZE(ip) > ip->i_d.di_size)) {
641                         error = filemap_write_and_wait(VFS_I(ip)->i_mapping);
642                         if (error)
643                                 goto out_unlock_iolock;
644
645                         /*
646                          * Even after flushing the inode, there can still be
647                          * delalloc blocks on the inode beyond EOF due to
648                          * speculative preallocation.  These are not removed
649                          * until the release function is called or the inode
650                          * is inactivated.  Hence we cannot assert here that
651                          * ip->i_delayed_blks == 0.
652                          */
653                 }
654
655                 lock = xfs_ilock_data_map_shared(ip);
656                 break;
657         case XFS_COW_FORK:
658                 lock = XFS_ILOCK_SHARED;
659                 xfs_ilock(ip, lock);
660                 break;
661         case XFS_ATTR_FORK:
662                 lock = xfs_ilock_attr_map_shared(ip);
663                 break;
664         }
665
666         /*
667          * Don't let nex be bigger than the number of extents
668          * we can have assuming alternating holes and real extents.
669          */
670         if (nex > XFS_IFORK_NEXTENTS(ip, whichfork) * 2 + 1)
671                 nex = XFS_IFORK_NEXTENTS(ip, whichfork) * 2 + 1;
672
673         bmapi_flags = xfs_bmapi_aflag(whichfork);
674         if (!(iflags & BMV_IF_PREALLOC))
675                 bmapi_flags |= XFS_BMAPI_IGSTATE;
676
677         /*
678          * Allocate enough space to handle "subnex" maps at a time.
679          */
680         error = -ENOMEM;
681         subnex = 16;
682         map = kmem_alloc(subnex * sizeof(*map), KM_MAYFAIL | KM_NOFS);
683         if (!map)
684                 goto out_unlock_ilock;
685
686         bmv->bmv_entries = 0;
687
688         if (XFS_IFORK_NEXTENTS(ip, whichfork) == 0 &&
689             (whichfork == XFS_ATTR_FORK || !(iflags & BMV_IF_DELALLOC))) {
690                 error = 0;
691                 goto out_free_map;
692         }
693
694         do {
695                 nmap = (nex> subnex) ? subnex : nex;
696                 error = xfs_bmapi_read(ip, XFS_BB_TO_FSBT(mp, bmv->bmv_offset),
697                                        XFS_BB_TO_FSB(mp, bmv->bmv_length),
698                                        map, &nmap, bmapi_flags);
699                 if (error)
700                         goto out_free_map;
701                 ASSERT(nmap <= subnex);
702
703                 for (i = 0; i < nmap && bmv->bmv_length &&
704                                 cur_ext < bmv->bmv_count - 1; i++) {
705                         out[cur_ext].bmv_oflags = 0;
706                         if (map[i].br_state == XFS_EXT_UNWRITTEN)
707                                 out[cur_ext].bmv_oflags |= BMV_OF_PREALLOC;
708                         else if (map[i].br_startblock == DELAYSTARTBLOCK)
709                                 out[cur_ext].bmv_oflags |= BMV_OF_DELALLOC;
710                         out[cur_ext].bmv_offset =
711                                 XFS_FSB_TO_BB(mp, map[i].br_startoff);
712                         out[cur_ext].bmv_length =
713                                 XFS_FSB_TO_BB(mp, map[i].br_blockcount);
714                         out[cur_ext].bmv_unused1 = 0;
715                         out[cur_ext].bmv_unused2 = 0;
716
717                         /*
718                          * delayed allocation extents that start beyond EOF can
719                          * occur due to speculative EOF allocation when the
720                          * delalloc extent is larger than the largest freespace
721                          * extent at conversion time. These extents cannot be
722                          * converted by data writeback, so can exist here even
723                          * if we are not supposed to be finding delalloc
724                          * extents.
725                          */
726                         if (map[i].br_startblock == DELAYSTARTBLOCK &&
727                             map[i].br_startoff < XFS_B_TO_FSB(mp, XFS_ISIZE(ip)))
728                                 ASSERT((iflags & BMV_IF_DELALLOC) != 0);
729
730                         if (map[i].br_startblock == HOLESTARTBLOCK &&
731                             whichfork == XFS_ATTR_FORK) {
732                                 /* came to the end of attribute fork */
733                                 out[cur_ext].bmv_oflags |= BMV_OF_LAST;
734                                 goto out_free_map;
735                         }
736
737                         /* Is this a shared block? */
738                         error = xfs_getbmap_adjust_shared(ip, whichfork,
739                                         &map[i], &out[cur_ext], &inject_map);
740                         if (error)
741                                 goto out_free_map;
742
743                         if (!xfs_getbmapx_fix_eof_hole(ip, whichfork,
744                                         &out[cur_ext], prealloced, bmvend,
745                                         map[i].br_startblock,
746                                         inject_map.br_startblock != NULLFSBLOCK))
747                                 goto out_free_map;
748
749                         bmv->bmv_offset =
750                                 out[cur_ext].bmv_offset +
751                                 out[cur_ext].bmv_length;
752                         bmv->bmv_length =
753                                 max_t(__int64_t, 0, bmvend - bmv->bmv_offset);
754
755                         /*
756                          * In case we don't want to return the hole,
757                          * don't increase cur_ext so that we can reuse
758                          * it in the next loop.
759                          */
760                         if ((iflags & BMV_IF_NO_HOLES) &&
761                             map[i].br_startblock == HOLESTARTBLOCK) {
762                                 memset(&out[cur_ext], 0, sizeof(out[cur_ext]));
763                                 continue;
764                         }
765
766                         /*
767                          * In order to report shared extents accurately,
768                          * we report each distinct shared/unshared part
769                          * of a single bmbt record using multiple bmap
770                          * extents.  To make that happen, we iterate the
771                          * same map array item multiple times, each
772                          * time trimming out the subextent that we just
773                          * reported.
774                          *
775                          * Because of this, we must check the out array
776                          * index (cur_ext) directly against bmv_count-1
777                          * to avoid overflows.
778                          */
779                         if (inject_map.br_startblock != NULLFSBLOCK) {
780                                 map[i] = inject_map;
781                                 i--;
782                         }
783                         bmv->bmv_entries++;
784                         cur_ext++;
785                 }
786         } while (nmap && bmv->bmv_length && cur_ext < bmv->bmv_count - 1);
787
788  out_free_map:
789         kmem_free(map);
790  out_unlock_ilock:
791         xfs_iunlock(ip, lock);
792  out_unlock_iolock:
793         xfs_iunlock(ip, XFS_IOLOCK_SHARED);
794
795         for (i = 0; i < cur_ext; i++) {
796                 int full = 0;   /* user array is full */
797
798                 /* format results & advance arg */
799                 error = formatter(&arg, &out[i], &full);
800                 if (error || full)
801                         break;
802         }
803
804         kmem_free(out);
805         return error;
806 }
807
808 /*
809  * dead simple method of punching delalyed allocation blocks from a range in
810  * the inode. Walks a block at a time so will be slow, but is only executed in
811  * rare error cases so the overhead is not critical. This will always punch out
812  * both the start and end blocks, even if the ranges only partially overlap
813  * them, so it is up to the caller to ensure that partial blocks are not
814  * passed in.
815  */
816 int
817 xfs_bmap_punch_delalloc_range(
818         struct xfs_inode        *ip,
819         xfs_fileoff_t           start_fsb,
820         xfs_fileoff_t           length)
821 {
822         xfs_fileoff_t           remaining = length;
823         int                     error = 0;
824
825         ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL));
826
827         do {
828                 int             done;
829                 xfs_bmbt_irec_t imap;
830                 int             nimaps = 1;
831                 xfs_fsblock_t   firstblock;
832                 struct xfs_defer_ops dfops;
833
834                 /*
835                  * Map the range first and check that it is a delalloc extent
836                  * before trying to unmap the range. Otherwise we will be
837                  * trying to remove a real extent (which requires a
838                  * transaction) or a hole, which is probably a bad idea...
839                  */
840                 error = xfs_bmapi_read(ip, start_fsb, 1, &imap, &nimaps,
841                                        XFS_BMAPI_ENTIRE);
842
843                 if (error) {
844                         /* something screwed, just bail */
845                         if (!XFS_FORCED_SHUTDOWN(ip->i_mount)) {
846                                 xfs_alert(ip->i_mount,
847                         "Failed delalloc mapping lookup ino %lld fsb %lld.",
848                                                 ip->i_ino, start_fsb);
849                         }
850                         break;
851                 }
852                 if (!nimaps) {
853                         /* nothing there */
854                         goto next_block;
855                 }
856                 if (imap.br_startblock != DELAYSTARTBLOCK) {
857                         /* been converted, ignore */
858                         goto next_block;
859                 }
860                 WARN_ON(imap.br_blockcount == 0);
861
862                 /*
863                  * Note: while we initialise the firstblock/dfops pair, they
864                  * should never be used because blocks should never be
865                  * allocated or freed for a delalloc extent and hence we need
866                  * don't cancel or finish them after the xfs_bunmapi() call.
867                  */
868                 xfs_defer_init(&dfops, &firstblock);
869                 error = xfs_bunmapi(NULL, ip, start_fsb, 1, 0, 1, &firstblock,
870                                         &dfops, &done);
871                 if (error)
872                         break;
873
874                 ASSERT(!xfs_defer_has_unfinished_work(&dfops));
875 next_block:
876                 start_fsb++;
877                 remaining--;
878         } while(remaining > 0);
879
880         return error;
881 }
882
883 /*
884  * Test whether it is appropriate to check an inode for and free post EOF
885  * blocks. The 'force' parameter determines whether we should also consider
886  * regular files that are marked preallocated or append-only.
887  */
888 bool
889 xfs_can_free_eofblocks(struct xfs_inode *ip, bool force)
890 {
891         /* prealloc/delalloc exists only on regular files */
892         if (!S_ISREG(VFS_I(ip)->i_mode))
893                 return false;
894
895         /*
896          * Zero sized files with no cached pages and delalloc blocks will not
897          * have speculative prealloc/delalloc blocks to remove.
898          */
899         if (VFS_I(ip)->i_size == 0 &&
900             VFS_I(ip)->i_mapping->nrpages == 0 &&
901             ip->i_delayed_blks == 0)
902                 return false;
903
904         /* If we haven't read in the extent list, then don't do it now. */
905         if (!(ip->i_df.if_flags & XFS_IFEXTENTS))
906                 return false;
907
908         /*
909          * Do not free real preallocated or append-only files unless the file
910          * has delalloc blocks and we are forced to remove them.
911          */
912         if (ip->i_d.di_flags & (XFS_DIFLAG_PREALLOC | XFS_DIFLAG_APPEND))
913                 if (!force || ip->i_delayed_blks == 0)
914                         return false;
915
916         return true;
917 }
918
919 /*
920  * This is called to free any blocks beyond eof. The caller must hold
921  * IOLOCK_EXCL unless we are in the inode reclaim path and have the only
922  * reference to the inode.
923  */
924 int
925 xfs_free_eofblocks(
926         struct xfs_inode        *ip)
927 {
928         struct xfs_trans        *tp;
929         int                     error;
930         xfs_fileoff_t           end_fsb;
931         xfs_fileoff_t           last_fsb;
932         xfs_filblks_t           map_len;
933         int                     nimaps;
934         struct xfs_bmbt_irec    imap;
935         struct xfs_mount        *mp = ip->i_mount;
936
937         /*
938          * Figure out if there are any blocks beyond the end
939          * of the file.  If not, then there is nothing to do.
940          */
941         end_fsb = XFS_B_TO_FSB(mp, (xfs_ufsize_t)XFS_ISIZE(ip));
942         last_fsb = XFS_B_TO_FSB(mp, mp->m_super->s_maxbytes);
943         if (last_fsb <= end_fsb)
944                 return 0;
945         map_len = last_fsb - end_fsb;
946
947         nimaps = 1;
948         xfs_ilock(ip, XFS_ILOCK_SHARED);
949         error = xfs_bmapi_read(ip, end_fsb, map_len, &imap, &nimaps, 0);
950         xfs_iunlock(ip, XFS_ILOCK_SHARED);
951
952         /*
953          * If there are blocks after the end of file, truncate the file to its
954          * current size to free them up.
955          */
956         if (!error && (nimaps != 0) &&
957             (imap.br_startblock != HOLESTARTBLOCK ||
958              ip->i_delayed_blks)) {
959                 /*
960                  * Attach the dquots to the inode up front.
961                  */
962                 error = xfs_qm_dqattach(ip, 0);
963                 if (error)
964                         return error;
965
966                 /* wait on dio to ensure i_size has settled */
967                 inode_dio_wait(VFS_I(ip));
968
969                 error = xfs_trans_alloc(mp, &M_RES(mp)->tr_itruncate, 0, 0, 0,
970                                 &tp);
971                 if (error) {
972                         ASSERT(XFS_FORCED_SHUTDOWN(mp));
973                         return error;
974                 }
975
976                 xfs_ilock(ip, XFS_ILOCK_EXCL);
977                 xfs_trans_ijoin(tp, ip, 0);
978
979                 /*
980                  * Do not update the on-disk file size.  If we update the
981                  * on-disk file size and then the system crashes before the
982                  * contents of the file are flushed to disk then the files
983                  * may be full of holes (ie NULL files bug).
984                  */
985                 error = xfs_itruncate_extents(&tp, ip, XFS_DATA_FORK,
986                                               XFS_ISIZE(ip));
987                 if (error) {
988                         /*
989                          * If we get an error at this point we simply don't
990                          * bother truncating the file.
991                          */
992                         xfs_trans_cancel(tp);
993                 } else {
994                         error = xfs_trans_commit(tp);
995                         if (!error)
996                                 xfs_inode_clear_eofblocks_tag(ip);
997                 }
998
999                 xfs_iunlock(ip, XFS_ILOCK_EXCL);
1000         }
1001         return error;
1002 }
1003
1004 int
1005 xfs_alloc_file_space(
1006         struct xfs_inode        *ip,
1007         xfs_off_t               offset,
1008         xfs_off_t               len,
1009         int                     alloc_type)
1010 {
1011         xfs_mount_t             *mp = ip->i_mount;
1012         xfs_off_t               count;
1013         xfs_filblks_t           allocated_fsb;
1014         xfs_filblks_t           allocatesize_fsb;
1015         xfs_extlen_t            extsz, temp;
1016         xfs_fileoff_t           startoffset_fsb;
1017         xfs_fsblock_t           firstfsb;
1018         int                     nimaps;
1019         int                     quota_flag;
1020         int                     rt;
1021         xfs_trans_t             *tp;
1022         xfs_bmbt_irec_t         imaps[1], *imapp;
1023         struct xfs_defer_ops    dfops;
1024         uint                    qblocks, resblks, resrtextents;
1025         int                     error;
1026
1027         trace_xfs_alloc_file_space(ip);
1028
1029         if (XFS_FORCED_SHUTDOWN(mp))
1030                 return -EIO;
1031
1032         error = xfs_qm_dqattach(ip, 0);
1033         if (error)
1034                 return error;
1035
1036         if (len <= 0)
1037                 return -EINVAL;
1038
1039         rt = XFS_IS_REALTIME_INODE(ip);
1040         extsz = xfs_get_extsz_hint(ip);
1041
1042         count = len;
1043         imapp = &imaps[0];
1044         nimaps = 1;
1045         startoffset_fsb = XFS_B_TO_FSBT(mp, offset);
1046         allocatesize_fsb = XFS_B_TO_FSB(mp, count);
1047
1048         /*
1049          * Allocate file space until done or until there is an error
1050          */
1051         while (allocatesize_fsb && !error) {
1052                 xfs_fileoff_t   s, e;
1053
1054                 /*
1055                  * Determine space reservations for data/realtime.
1056                  */
1057                 if (unlikely(extsz)) {
1058                         s = startoffset_fsb;
1059                         do_div(s, extsz);
1060                         s *= extsz;
1061                         e = startoffset_fsb + allocatesize_fsb;
1062                         if ((temp = do_mod(startoffset_fsb, extsz)))
1063                                 e += temp;
1064                         if ((temp = do_mod(e, extsz)))
1065                                 e += extsz - temp;
1066                 } else {
1067                         s = 0;
1068                         e = allocatesize_fsb;
1069                 }
1070
1071                 /*
1072                  * The transaction reservation is limited to a 32-bit block
1073                  * count, hence we need to limit the number of blocks we are
1074                  * trying to reserve to avoid an overflow. We can't allocate
1075                  * more than @nimaps extents, and an extent is limited on disk
1076                  * to MAXEXTLEN (21 bits), so use that to enforce the limit.
1077                  */
1078                 resblks = min_t(xfs_fileoff_t, (e - s), (MAXEXTLEN * nimaps));
1079                 if (unlikely(rt)) {
1080                         resrtextents = qblocks = resblks;
1081                         resrtextents /= mp->m_sb.sb_rextsize;
1082                         resblks = XFS_DIOSTRAT_SPACE_RES(mp, 0);
1083                         quota_flag = XFS_QMOPT_RES_RTBLKS;
1084                 } else {
1085                         resrtextents = 0;
1086                         resblks = qblocks = XFS_DIOSTRAT_SPACE_RES(mp, resblks);
1087                         quota_flag = XFS_QMOPT_RES_REGBLKS;
1088                 }
1089
1090                 /*
1091                  * Allocate and setup the transaction.
1092                  */
1093                 error = xfs_trans_alloc(mp, &M_RES(mp)->tr_write, resblks,
1094                                 resrtextents, 0, &tp);
1095
1096                 /*
1097                  * Check for running out of space
1098                  */
1099                 if (error) {
1100                         /*
1101                          * Free the transaction structure.
1102                          */
1103                         ASSERT(error == -ENOSPC || XFS_FORCED_SHUTDOWN(mp));
1104                         break;
1105                 }
1106                 xfs_ilock(ip, XFS_ILOCK_EXCL);
1107                 error = xfs_trans_reserve_quota_nblks(tp, ip, qblocks,
1108                                                       0, quota_flag);
1109                 if (error)
1110                         goto error1;
1111
1112                 xfs_trans_ijoin(tp, ip, 0);
1113
1114                 xfs_defer_init(&dfops, &firstfsb);
1115                 error = xfs_bmapi_write(tp, ip, startoffset_fsb,
1116                                         allocatesize_fsb, alloc_type, &firstfsb,
1117                                         resblks, imapp, &nimaps, &dfops);
1118                 if (error)
1119                         goto error0;
1120
1121                 /*
1122                  * Complete the transaction
1123                  */
1124                 error = xfs_defer_finish(&tp, &dfops, NULL);
1125                 if (error)
1126                         goto error0;
1127
1128                 error = xfs_trans_commit(tp);
1129                 xfs_iunlock(ip, XFS_ILOCK_EXCL);
1130                 if (error)
1131                         break;
1132
1133                 allocated_fsb = imapp->br_blockcount;
1134
1135                 if (nimaps == 0) {
1136                         error = -ENOSPC;
1137                         break;
1138                 }
1139
1140                 startoffset_fsb += allocated_fsb;
1141                 allocatesize_fsb -= allocated_fsb;
1142         }
1143
1144         return error;
1145
1146 error0: /* Cancel bmap, unlock inode, unreserve quota blocks, cancel trans */
1147         xfs_defer_cancel(&dfops);
1148         xfs_trans_unreserve_quota_nblks(tp, ip, (long)qblocks, 0, quota_flag);
1149
1150 error1: /* Just cancel transaction */
1151         xfs_trans_cancel(tp);
1152         xfs_iunlock(ip, XFS_ILOCK_EXCL);
1153         return error;
1154 }
1155
1156 static int
1157 xfs_unmap_extent(
1158         struct xfs_inode        *ip,
1159         xfs_fileoff_t           startoffset_fsb,
1160         xfs_filblks_t           len_fsb,
1161         int                     *done)
1162 {
1163         struct xfs_mount        *mp = ip->i_mount;
1164         struct xfs_trans        *tp;
1165         struct xfs_defer_ops    dfops;
1166         xfs_fsblock_t           firstfsb;
1167         uint                    resblks = XFS_DIOSTRAT_SPACE_RES(mp, 0);
1168         int                     error;
1169
1170         error = xfs_trans_alloc(mp, &M_RES(mp)->tr_write, resblks, 0, 0, &tp);
1171         if (error) {
1172                 ASSERT(error == -ENOSPC || XFS_FORCED_SHUTDOWN(mp));
1173                 return error;
1174         }
1175
1176         xfs_ilock(ip, XFS_ILOCK_EXCL);
1177         error = xfs_trans_reserve_quota(tp, mp, ip->i_udquot, ip->i_gdquot,
1178                         ip->i_pdquot, resblks, 0, XFS_QMOPT_RES_REGBLKS);
1179         if (error)
1180                 goto out_trans_cancel;
1181
1182         xfs_trans_ijoin(tp, ip, 0);
1183
1184         xfs_defer_init(&dfops, &firstfsb);
1185         error = xfs_bunmapi(tp, ip, startoffset_fsb, len_fsb, 0, 2, &firstfsb,
1186                         &dfops, done);
1187         if (error)
1188                 goto out_bmap_cancel;
1189
1190         error = xfs_defer_finish(&tp, &dfops, ip);
1191         if (error)
1192                 goto out_bmap_cancel;
1193
1194         error = xfs_trans_commit(tp);
1195 out_unlock:
1196         xfs_iunlock(ip, XFS_ILOCK_EXCL);
1197         return error;
1198
1199 out_bmap_cancel:
1200         xfs_defer_cancel(&dfops);
1201 out_trans_cancel:
1202         xfs_trans_cancel(tp);
1203         goto out_unlock;
1204 }
1205
1206 static int
1207 xfs_adjust_extent_unmap_boundaries(
1208         struct xfs_inode        *ip,
1209         xfs_fileoff_t           *startoffset_fsb,
1210         xfs_fileoff_t           *endoffset_fsb)
1211 {
1212         struct xfs_mount        *mp = ip->i_mount;
1213         struct xfs_bmbt_irec    imap;
1214         int                     nimap, error;
1215         xfs_extlen_t            mod = 0;
1216
1217         nimap = 1;
1218         error = xfs_bmapi_read(ip, *startoffset_fsb, 1, &imap, &nimap, 0);
1219         if (error)
1220                 return error;
1221
1222         if (nimap && imap.br_startblock != HOLESTARTBLOCK) {
1223                 xfs_daddr_t     block;
1224
1225                 ASSERT(imap.br_startblock != DELAYSTARTBLOCK);
1226                 block = imap.br_startblock;
1227                 mod = do_div(block, mp->m_sb.sb_rextsize);
1228                 if (mod)
1229                         *startoffset_fsb += mp->m_sb.sb_rextsize - mod;
1230         }
1231
1232         nimap = 1;
1233         error = xfs_bmapi_read(ip, *endoffset_fsb - 1, 1, &imap, &nimap, 0);
1234         if (error)
1235                 return error;
1236
1237         if (nimap && imap.br_startblock != HOLESTARTBLOCK) {
1238                 ASSERT(imap.br_startblock != DELAYSTARTBLOCK);
1239                 mod++;
1240                 if (mod && mod != mp->m_sb.sb_rextsize)
1241                         *endoffset_fsb -= mod;
1242         }
1243
1244         return 0;
1245 }
1246
1247 static int
1248 xfs_flush_unmap_range(
1249         struct xfs_inode        *ip,
1250         xfs_off_t               offset,
1251         xfs_off_t               len)
1252 {
1253         struct xfs_mount        *mp = ip->i_mount;
1254         struct inode            *inode = VFS_I(ip);
1255         xfs_off_t               rounding, start, end;
1256         int                     error;
1257
1258         /* wait for the completion of any pending DIOs */
1259         inode_dio_wait(inode);
1260
1261         rounding = max_t(xfs_off_t, 1 << mp->m_sb.sb_blocklog, PAGE_SIZE);
1262         start = round_down(offset, rounding);
1263         end = round_up(offset + len, rounding) - 1;
1264
1265         error = filemap_write_and_wait_range(inode->i_mapping, start, end);
1266         if (error)
1267                 return error;
1268         truncate_pagecache_range(inode, start, end);
1269         return 0;
1270 }
1271
1272 int
1273 xfs_free_file_space(
1274         struct xfs_inode        *ip,
1275         xfs_off_t               offset,
1276         xfs_off_t               len)
1277 {
1278         struct xfs_mount        *mp = ip->i_mount;
1279         xfs_fileoff_t           startoffset_fsb;
1280         xfs_fileoff_t           endoffset_fsb;
1281         int                     done = 0, error;
1282
1283         trace_xfs_free_file_space(ip);
1284
1285         error = xfs_qm_dqattach(ip, 0);
1286         if (error)
1287                 return error;
1288
1289         if (len <= 0)   /* if nothing being freed */
1290                 return 0;
1291
1292         error = xfs_flush_unmap_range(ip, offset, len);
1293         if (error)
1294                 return error;
1295
1296         startoffset_fsb = XFS_B_TO_FSB(mp, offset);
1297         endoffset_fsb = XFS_B_TO_FSBT(mp, offset + len);
1298
1299         /*
1300          * Need to zero the stuff we're not freeing, on disk.  If it's a RT file
1301          * and we can't use unwritten extents then we actually need to ensure
1302          * to zero the whole extent, otherwise we just need to take of block
1303          * boundaries, and xfs_bunmapi will handle the rest.
1304          */
1305         if (XFS_IS_REALTIME_INODE(ip) &&
1306             !xfs_sb_version_hasextflgbit(&mp->m_sb)) {
1307                 error = xfs_adjust_extent_unmap_boundaries(ip, &startoffset_fsb,
1308                                 &endoffset_fsb);
1309                 if (error)
1310                         return error;
1311         }
1312
1313         if (endoffset_fsb > startoffset_fsb) {
1314                 while (!done) {
1315                         error = xfs_unmap_extent(ip, startoffset_fsb,
1316                                         endoffset_fsb - startoffset_fsb, &done);
1317                         if (error)
1318                                 return error;
1319                 }
1320         }
1321
1322         /*
1323          * Now that we've unmap all full blocks we'll have to zero out any
1324          * partial block at the beginning and/or end.  xfs_zero_range is
1325          * smart enough to skip any holes, including those we just created,
1326          * but we must take care not to zero beyond EOF and enlarge i_size.
1327          */
1328
1329         if (offset >= XFS_ISIZE(ip))
1330                 return 0;
1331
1332         if (offset + len > XFS_ISIZE(ip))
1333                 len = XFS_ISIZE(ip) - offset;
1334
1335         return xfs_zero_range(ip, offset, len, NULL);
1336 }
1337
1338 /*
1339  * Preallocate and zero a range of a file. This mechanism has the allocation
1340  * semantics of fallocate and in addition converts data in the range to zeroes.
1341  */
1342 int
1343 xfs_zero_file_space(
1344         struct xfs_inode        *ip,
1345         xfs_off_t               offset,
1346         xfs_off_t               len)
1347 {
1348         struct xfs_mount        *mp = ip->i_mount;
1349         uint                    blksize;
1350         int                     error;
1351
1352         trace_xfs_zero_file_space(ip);
1353
1354         blksize = 1 << mp->m_sb.sb_blocklog;
1355
1356         /*
1357          * Punch a hole and prealloc the range. We use hole punch rather than
1358          * unwritten extent conversion for two reasons:
1359          *
1360          * 1.) Hole punch handles partial block zeroing for us.
1361          *
1362          * 2.) If prealloc returns ENOSPC, the file range is still zero-valued
1363          * by virtue of the hole punch.
1364          */
1365         error = xfs_free_file_space(ip, offset, len);
1366         if (error)
1367                 goto out;
1368
1369         error = xfs_alloc_file_space(ip, round_down(offset, blksize),
1370                                      round_up(offset + len, blksize) -
1371                                      round_down(offset, blksize),
1372                                      XFS_BMAPI_PREALLOC);
1373 out:
1374         return error;
1375
1376 }
1377
1378 /*
1379  * @next_fsb will keep track of the extent currently undergoing shift.
1380  * @stop_fsb will keep track of the extent at which we have to stop.
1381  * If we are shifting left, we will start with block (offset + len) and
1382  * shift each extent till last extent.
1383  * If we are shifting right, we will start with last extent inside file space
1384  * and continue until we reach the block corresponding to offset.
1385  */
1386 static int
1387 xfs_shift_file_space(
1388         struct xfs_inode        *ip,
1389         xfs_off_t               offset,
1390         xfs_off_t               len,
1391         enum shift_direction    direction)
1392 {
1393         int                     done = 0;
1394         struct xfs_mount        *mp = ip->i_mount;
1395         struct xfs_trans        *tp;
1396         int                     error;
1397         struct xfs_defer_ops    dfops;
1398         xfs_fsblock_t           first_block;
1399         xfs_fileoff_t           stop_fsb;
1400         xfs_fileoff_t           next_fsb;
1401         xfs_fileoff_t           shift_fsb;
1402         uint                    resblks;
1403
1404         ASSERT(direction == SHIFT_LEFT || direction == SHIFT_RIGHT);
1405
1406         if (direction == SHIFT_LEFT) {
1407                 /*
1408                  * Reserve blocks to cover potential extent merges after left
1409                  * shift operations.
1410                  */
1411                 resblks = XFS_DIOSTRAT_SPACE_RES(mp, 0);
1412                 next_fsb = XFS_B_TO_FSB(mp, offset + len);
1413                 stop_fsb = XFS_B_TO_FSB(mp, VFS_I(ip)->i_size);
1414         } else {
1415                 /*
1416                  * If right shift, delegate the work of initialization of
1417                  * next_fsb to xfs_bmap_shift_extent as it has ilock held.
1418                  */
1419                 resblks = 0;
1420                 next_fsb = NULLFSBLOCK;
1421                 stop_fsb = XFS_B_TO_FSB(mp, offset);
1422         }
1423
1424         shift_fsb = XFS_B_TO_FSB(mp, len);
1425
1426         /*
1427          * Trim eofblocks to avoid shifting uninitialized post-eof preallocation
1428          * into the accessible region of the file.
1429          */
1430         if (xfs_can_free_eofblocks(ip, true)) {
1431                 error = xfs_free_eofblocks(ip);
1432                 if (error)
1433                         return error;
1434         }
1435
1436         /*
1437          * Writeback and invalidate cache for the remainder of the file as we're
1438          * about to shift down every extent from offset to EOF.
1439          */
1440         error = filemap_write_and_wait_range(VFS_I(ip)->i_mapping,
1441                                              offset, -1);
1442         if (error)
1443                 return error;
1444         error = invalidate_inode_pages2_range(VFS_I(ip)->i_mapping,
1445                                         offset >> PAGE_SHIFT, -1);
1446         if (error)
1447                 return error;
1448
1449         /*
1450          * Clean out anything hanging around in the cow fork now that
1451          * we've flushed all the dirty data out to disk to avoid having
1452          * CoW extents at the wrong offsets.
1453          */
1454         if (xfs_is_reflink_inode(ip)) {
1455                 error = xfs_reflink_cancel_cow_range(ip, offset, NULLFILEOFF,
1456                                 true);
1457                 if (error)
1458                         return error;
1459         }
1460
1461         /*
1462          * The extent shifting code works on extent granularity. So, if
1463          * stop_fsb is not the starting block of extent, we need to split
1464          * the extent at stop_fsb.
1465          */
1466         if (direction == SHIFT_RIGHT) {
1467                 error = xfs_bmap_split_extent(ip, stop_fsb);
1468                 if (error)
1469                         return error;
1470         }
1471
1472         while (!error && !done) {
1473                 error = xfs_trans_alloc(mp, &M_RES(mp)->tr_write, resblks, 0, 0,
1474                                         &tp);
1475                 if (error)
1476                         break;
1477
1478                 xfs_ilock(ip, XFS_ILOCK_EXCL);
1479                 error = xfs_trans_reserve_quota(tp, mp, ip->i_udquot,
1480                                 ip->i_gdquot, ip->i_pdquot, resblks, 0,
1481                                 XFS_QMOPT_RES_REGBLKS);
1482                 if (error)
1483                         goto out_trans_cancel;
1484
1485                 xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL);
1486
1487                 xfs_defer_init(&dfops, &first_block);
1488
1489                 /*
1490                  * We are using the write transaction in which max 2 bmbt
1491                  * updates are allowed
1492                  */
1493                 error = xfs_bmap_shift_extents(tp, ip, &next_fsb, shift_fsb,
1494                                 &done, stop_fsb, &first_block, &dfops,
1495                                 direction, XFS_BMAP_MAX_SHIFT_EXTENTS);
1496                 if (error)
1497                         goto out_bmap_cancel;
1498
1499                 error = xfs_defer_finish(&tp, &dfops, NULL);
1500                 if (error)
1501                         goto out_bmap_cancel;
1502
1503                 error = xfs_trans_commit(tp);
1504         }
1505
1506         return error;
1507
1508 out_bmap_cancel:
1509         xfs_defer_cancel(&dfops);
1510 out_trans_cancel:
1511         xfs_trans_cancel(tp);
1512         return error;
1513 }
1514
1515 /*
1516  * xfs_collapse_file_space()
1517  *      This routine frees disk space and shift extent for the given file.
1518  *      The first thing we do is to free data blocks in the specified range
1519  *      by calling xfs_free_file_space(). It would also sync dirty data
1520  *      and invalidate page cache over the region on which collapse range
1521  *      is working. And Shift extent records to the left to cover a hole.
1522  * RETURNS:
1523  *      0 on success
1524  *      errno on error
1525  *
1526  */
1527 int
1528 xfs_collapse_file_space(
1529         struct xfs_inode        *ip,
1530         xfs_off_t               offset,
1531         xfs_off_t               len)
1532 {
1533         int error;
1534
1535         ASSERT(xfs_isilocked(ip, XFS_IOLOCK_EXCL));
1536         trace_xfs_collapse_file_space(ip);
1537
1538         error = xfs_free_file_space(ip, offset, len);
1539         if (error)
1540                 return error;
1541
1542         return xfs_shift_file_space(ip, offset, len, SHIFT_LEFT);
1543 }
1544
1545 /*
1546  * xfs_insert_file_space()
1547  *      This routine create hole space by shifting extents for the given file.
1548  *      The first thing we do is to sync dirty data and invalidate page cache
1549  *      over the region on which insert range is working. And split an extent
1550  *      to two extents at given offset by calling xfs_bmap_split_extent.
1551  *      And shift all extent records which are laying between [offset,
1552  *      last allocated extent] to the right to reserve hole range.
1553  * RETURNS:
1554  *      0 on success
1555  *      errno on error
1556  */
1557 int
1558 xfs_insert_file_space(
1559         struct xfs_inode        *ip,
1560         loff_t                  offset,
1561         loff_t                  len)
1562 {
1563         ASSERT(xfs_isilocked(ip, XFS_IOLOCK_EXCL));
1564         trace_xfs_insert_file_space(ip);
1565
1566         return xfs_shift_file_space(ip, offset, len, SHIFT_RIGHT);
1567 }
1568
1569 /*
1570  * We need to check that the format of the data fork in the temporary inode is
1571  * valid for the target inode before doing the swap. This is not a problem with
1572  * attr1 because of the fixed fork offset, but attr2 has a dynamically sized
1573  * data fork depending on the space the attribute fork is taking so we can get
1574  * invalid formats on the target inode.
1575  *
1576  * E.g. target has space for 7 extents in extent format, temp inode only has
1577  * space for 6.  If we defragment down to 7 extents, then the tmp format is a
1578  * btree, but when swapped it needs to be in extent format. Hence we can't just
1579  * blindly swap data forks on attr2 filesystems.
1580  *
1581  * Note that we check the swap in both directions so that we don't end up with
1582  * a corrupt temporary inode, either.
1583  *
1584  * Note that fixing the way xfs_fsr sets up the attribute fork in the source
1585  * inode will prevent this situation from occurring, so all we do here is
1586  * reject and log the attempt. basically we are putting the responsibility on
1587  * userspace to get this right.
1588  */
1589 static int
1590 xfs_swap_extents_check_format(
1591         struct xfs_inode        *ip,    /* target inode */
1592         struct xfs_inode        *tip)   /* tmp inode */
1593 {
1594
1595         /* Should never get a local format */
1596         if (ip->i_d.di_format == XFS_DINODE_FMT_LOCAL ||
1597             tip->i_d.di_format == XFS_DINODE_FMT_LOCAL)
1598                 return -EINVAL;
1599
1600         /*
1601          * if the target inode has less extents that then temporary inode then
1602          * why did userspace call us?
1603          */
1604         if (ip->i_d.di_nextents < tip->i_d.di_nextents)
1605                 return -EINVAL;
1606
1607         /*
1608          * If we have to use the (expensive) rmap swap method, we can
1609          * handle any number of extents and any format.
1610          */
1611         if (xfs_sb_version_hasrmapbt(&ip->i_mount->m_sb))
1612                 return 0;
1613
1614         /*
1615          * if the target inode is in extent form and the temp inode is in btree
1616          * form then we will end up with the target inode in the wrong format
1617          * as we already know there are less extents in the temp inode.
1618          */
1619         if (ip->i_d.di_format == XFS_DINODE_FMT_EXTENTS &&
1620             tip->i_d.di_format == XFS_DINODE_FMT_BTREE)
1621                 return -EINVAL;
1622
1623         /* Check temp in extent form to max in target */
1624         if (tip->i_d.di_format == XFS_DINODE_FMT_EXTENTS &&
1625             XFS_IFORK_NEXTENTS(tip, XFS_DATA_FORK) >
1626                         XFS_IFORK_MAXEXT(ip, XFS_DATA_FORK))
1627                 return -EINVAL;
1628
1629         /* Check target in extent form to max in temp */
1630         if (ip->i_d.di_format == XFS_DINODE_FMT_EXTENTS &&
1631             XFS_IFORK_NEXTENTS(ip, XFS_DATA_FORK) >
1632                         XFS_IFORK_MAXEXT(tip, XFS_DATA_FORK))
1633                 return -EINVAL;
1634
1635         /*
1636          * If we are in a btree format, check that the temp root block will fit
1637          * in the target and that it has enough extents to be in btree format
1638          * in the target.
1639          *
1640          * Note that we have to be careful to allow btree->extent conversions
1641          * (a common defrag case) which will occur when the temp inode is in
1642          * extent format...
1643          */
1644         if (tip->i_d.di_format == XFS_DINODE_FMT_BTREE) {
1645                 if (XFS_IFORK_BOFF(ip) &&
1646                     XFS_BMAP_BMDR_SPACE(tip->i_df.if_broot) > XFS_IFORK_BOFF(ip))
1647                         return -EINVAL;
1648                 if (XFS_IFORK_NEXTENTS(tip, XFS_DATA_FORK) <=
1649                     XFS_IFORK_MAXEXT(ip, XFS_DATA_FORK))
1650                         return -EINVAL;
1651         }
1652
1653         /* Reciprocal target->temp btree format checks */
1654         if (ip->i_d.di_format == XFS_DINODE_FMT_BTREE) {
1655                 if (XFS_IFORK_BOFF(tip) &&
1656                     XFS_BMAP_BMDR_SPACE(ip->i_df.if_broot) > XFS_IFORK_BOFF(tip))
1657                         return -EINVAL;
1658                 if (XFS_IFORK_NEXTENTS(ip, XFS_DATA_FORK) <=
1659                     XFS_IFORK_MAXEXT(tip, XFS_DATA_FORK))
1660                         return -EINVAL;
1661         }
1662
1663         return 0;
1664 }
1665
1666 static int
1667 xfs_swap_extent_flush(
1668         struct xfs_inode        *ip)
1669 {
1670         int     error;
1671
1672         error = filemap_write_and_wait(VFS_I(ip)->i_mapping);
1673         if (error)
1674                 return error;
1675         truncate_pagecache_range(VFS_I(ip), 0, -1);
1676
1677         /* Verify O_DIRECT for ftmp */
1678         if (VFS_I(ip)->i_mapping->nrpages)
1679                 return -EINVAL;
1680         return 0;
1681 }
1682
1683 /*
1684  * Move extents from one file to another, when rmap is enabled.
1685  */
1686 STATIC int
1687 xfs_swap_extent_rmap(
1688         struct xfs_trans                **tpp,
1689         struct xfs_inode                *ip,
1690         struct xfs_inode                *tip)
1691 {
1692         struct xfs_bmbt_irec            irec;
1693         struct xfs_bmbt_irec            uirec;
1694         struct xfs_bmbt_irec            tirec;
1695         xfs_fileoff_t                   offset_fsb;
1696         xfs_fileoff_t                   end_fsb;
1697         xfs_filblks_t                   count_fsb;
1698         xfs_fsblock_t                   firstfsb;
1699         struct xfs_defer_ops            dfops;
1700         int                             error;
1701         xfs_filblks_t                   ilen;
1702         xfs_filblks_t                   rlen;
1703         int                             nimaps;
1704         __uint64_t                      tip_flags2;
1705
1706         /*
1707          * If the source file has shared blocks, we must flag the donor
1708          * file as having shared blocks so that we get the shared-block
1709          * rmap functions when we go to fix up the rmaps.  The flags
1710          * will be switch for reals later.
1711          */
1712         tip_flags2 = tip->i_d.di_flags2;
1713         if (ip->i_d.di_flags2 & XFS_DIFLAG2_REFLINK)
1714                 tip->i_d.di_flags2 |= XFS_DIFLAG2_REFLINK;
1715
1716         offset_fsb = 0;
1717         end_fsb = XFS_B_TO_FSB(ip->i_mount, i_size_read(VFS_I(ip)));
1718         count_fsb = (xfs_filblks_t)(end_fsb - offset_fsb);
1719
1720         while (count_fsb) {
1721                 /* Read extent from the donor file */
1722                 nimaps = 1;
1723                 error = xfs_bmapi_read(tip, offset_fsb, count_fsb, &tirec,
1724                                 &nimaps, 0);
1725                 if (error)
1726                         goto out;
1727                 ASSERT(nimaps == 1);
1728                 ASSERT(tirec.br_startblock != DELAYSTARTBLOCK);
1729
1730                 trace_xfs_swap_extent_rmap_remap(tip, &tirec);
1731                 ilen = tirec.br_blockcount;
1732
1733                 /* Unmap the old blocks in the source file. */
1734                 while (tirec.br_blockcount) {
1735                         xfs_defer_init(&dfops, &firstfsb);
1736                         trace_xfs_swap_extent_rmap_remap_piece(tip, &tirec);
1737
1738                         /* Read extent from the source file */
1739                         nimaps = 1;
1740                         error = xfs_bmapi_read(ip, tirec.br_startoff,
1741                                         tirec.br_blockcount, &irec,
1742                                         &nimaps, 0);
1743                         if (error)
1744                                 goto out_defer;
1745                         ASSERT(nimaps == 1);
1746                         ASSERT(tirec.br_startoff == irec.br_startoff);
1747                         trace_xfs_swap_extent_rmap_remap_piece(ip, &irec);
1748
1749                         /* Trim the extent. */
1750                         uirec = tirec;
1751                         uirec.br_blockcount = rlen = min_t(xfs_filblks_t,
1752                                         tirec.br_blockcount,
1753                                         irec.br_blockcount);
1754                         trace_xfs_swap_extent_rmap_remap_piece(tip, &uirec);
1755
1756                         /* Remove the mapping from the donor file. */
1757                         error = xfs_bmap_unmap_extent((*tpp)->t_mountp, &dfops,
1758                                         tip, &uirec);
1759                         if (error)
1760                                 goto out_defer;
1761
1762                         /* Remove the mapping from the source file. */
1763                         error = xfs_bmap_unmap_extent((*tpp)->t_mountp, &dfops,
1764                                         ip, &irec);
1765                         if (error)
1766                                 goto out_defer;
1767
1768                         /* Map the donor file's blocks into the source file. */
1769                         error = xfs_bmap_map_extent((*tpp)->t_mountp, &dfops,
1770                                         ip, &uirec);
1771                         if (error)
1772                                 goto out_defer;
1773
1774                         /* Map the source file's blocks into the donor file. */
1775                         error = xfs_bmap_map_extent((*tpp)->t_mountp, &dfops,
1776                                         tip, &irec);
1777                         if (error)
1778                                 goto out_defer;
1779
1780                         error = xfs_defer_finish(tpp, &dfops, ip);
1781                         if (error)
1782                                 goto out_defer;
1783
1784                         tirec.br_startoff += rlen;
1785                         if (tirec.br_startblock != HOLESTARTBLOCK &&
1786                             tirec.br_startblock != DELAYSTARTBLOCK)
1787                                 tirec.br_startblock += rlen;
1788                         tirec.br_blockcount -= rlen;
1789                 }
1790
1791                 /* Roll on... */
1792                 count_fsb -= ilen;
1793                 offset_fsb += ilen;
1794         }
1795
1796         tip->i_d.di_flags2 = tip_flags2;
1797         return 0;
1798
1799 out_defer:
1800         xfs_defer_cancel(&dfops);
1801 out:
1802         trace_xfs_swap_extent_rmap_error(ip, error, _RET_IP_);
1803         tip->i_d.di_flags2 = tip_flags2;
1804         return error;
1805 }
1806
1807 /* Swap the extents of two files by swapping data forks. */
1808 STATIC int
1809 xfs_swap_extent_forks(
1810         struct xfs_trans        *tp,
1811         struct xfs_inode        *ip,
1812         struct xfs_inode        *tip,
1813         int                     *src_log_flags,
1814         int                     *target_log_flags)
1815 {
1816         struct xfs_ifork        tempifp, *ifp, *tifp;
1817         int                     aforkblks = 0;
1818         int                     taforkblks = 0;
1819         xfs_extnum_t            nextents;
1820         __uint64_t              tmp;
1821         int                     error;
1822
1823         /*
1824          * Count the number of extended attribute blocks
1825          */
1826         if ( ((XFS_IFORK_Q(ip) != 0) && (ip->i_d.di_anextents > 0)) &&
1827              (ip->i_d.di_aformat != XFS_DINODE_FMT_LOCAL)) {
1828                 error = xfs_bmap_count_blocks(tp, ip, XFS_ATTR_FORK,
1829                                 &aforkblks);
1830                 if (error)
1831                         return error;
1832         }
1833         if ( ((XFS_IFORK_Q(tip) != 0) && (tip->i_d.di_anextents > 0)) &&
1834              (tip->i_d.di_aformat != XFS_DINODE_FMT_LOCAL)) {
1835                 error = xfs_bmap_count_blocks(tp, tip, XFS_ATTR_FORK,
1836                                 &taforkblks);
1837                 if (error)
1838                         return error;
1839         }
1840
1841         /*
1842          * Btree format (v3) inodes have the inode number stamped in the bmbt
1843          * block headers. We can't start changing the bmbt blocks until the
1844          * inode owner change is logged so recovery does the right thing in the
1845          * event of a crash. Set the owner change log flags now and leave the
1846          * bmbt scan as the last step.
1847          */
1848         if (ip->i_d.di_version == 3 &&
1849             ip->i_d.di_format == XFS_DINODE_FMT_BTREE)
1850                 (*target_log_flags) |= XFS_ILOG_DOWNER;
1851         if (tip->i_d.di_version == 3 &&
1852             tip->i_d.di_format == XFS_DINODE_FMT_BTREE)
1853                 (*src_log_flags) |= XFS_ILOG_DOWNER;
1854
1855         /*
1856          * Swap the data forks of the inodes
1857          */
1858         ifp = &ip->i_df;
1859         tifp = &tip->i_df;
1860         tempifp = *ifp;         /* struct copy */
1861         *ifp = *tifp;           /* struct copy */
1862         *tifp = tempifp;        /* struct copy */
1863
1864         /*
1865          * Fix the on-disk inode values
1866          */
1867         tmp = (__uint64_t)ip->i_d.di_nblocks;
1868         ip->i_d.di_nblocks = tip->i_d.di_nblocks - taforkblks + aforkblks;
1869         tip->i_d.di_nblocks = tmp + taforkblks - aforkblks;
1870
1871         tmp = (__uint64_t) ip->i_d.di_nextents;
1872         ip->i_d.di_nextents = tip->i_d.di_nextents;
1873         tip->i_d.di_nextents = tmp;
1874
1875         tmp = (__uint64_t) ip->i_d.di_format;
1876         ip->i_d.di_format = tip->i_d.di_format;
1877         tip->i_d.di_format = tmp;
1878
1879         /*
1880          * The extents in the source inode could still contain speculative
1881          * preallocation beyond EOF (e.g. the file is open but not modified
1882          * while defrag is in progress). In that case, we need to copy over the
1883          * number of delalloc blocks the data fork in the source inode is
1884          * tracking beyond EOF so that when the fork is truncated away when the
1885          * temporary inode is unlinked we don't underrun the i_delayed_blks
1886          * counter on that inode.
1887          */
1888         ASSERT(tip->i_delayed_blks == 0);
1889         tip->i_delayed_blks = ip->i_delayed_blks;
1890         ip->i_delayed_blks = 0;
1891
1892         switch (ip->i_d.di_format) {
1893         case XFS_DINODE_FMT_EXTENTS:
1894                 /*
1895                  * If the extents fit in the inode, fix the pointer.  Otherwise
1896                  * it's already NULL or pointing to the extent.
1897                  */
1898                 nextents = xfs_iext_count(&ip->i_df);
1899                 if (nextents <= XFS_INLINE_EXTS)
1900                         ifp->if_u1.if_extents = ifp->if_u2.if_inline_ext;
1901                 (*src_log_flags) |= XFS_ILOG_DEXT;
1902                 break;
1903         case XFS_DINODE_FMT_BTREE:
1904                 ASSERT(ip->i_d.di_version < 3 ||
1905                        (*src_log_flags & XFS_ILOG_DOWNER));
1906                 (*src_log_flags) |= XFS_ILOG_DBROOT;
1907                 break;
1908         }
1909
1910         switch (tip->i_d.di_format) {
1911         case XFS_DINODE_FMT_EXTENTS:
1912                 /*
1913                  * If the extents fit in the inode, fix the pointer.  Otherwise
1914                  * it's already NULL or pointing to the extent.
1915                  */
1916                 nextents = xfs_iext_count(&tip->i_df);
1917                 if (nextents <= XFS_INLINE_EXTS)
1918                         tifp->if_u1.if_extents = tifp->if_u2.if_inline_ext;
1919                 (*target_log_flags) |= XFS_ILOG_DEXT;
1920                 break;
1921         case XFS_DINODE_FMT_BTREE:
1922                 (*target_log_flags) |= XFS_ILOG_DBROOT;
1923                 ASSERT(tip->i_d.di_version < 3 ||
1924                        (*target_log_flags & XFS_ILOG_DOWNER));
1925                 break;
1926         }
1927
1928         return 0;
1929 }
1930
1931 /*
1932  * Fix up the owners of the bmbt blocks to refer to the current inode. The
1933  * change owner scan attempts to order all modified buffers in the current
1934  * transaction. In the event of ordered buffer failure, the offending buffer is
1935  * physically logged as a fallback and the scan returns -EAGAIN. We must roll
1936  * the transaction in this case to replenish the fallback log reservation and
1937  * restart the scan. This process repeats until the scan completes.
1938  */
1939 static int
1940 xfs_swap_change_owner(
1941         struct xfs_trans        **tpp,
1942         struct xfs_inode        *ip,
1943         struct xfs_inode        *tmpip)
1944 {
1945         int                     error;
1946         struct xfs_trans        *tp = *tpp;
1947
1948         do {
1949                 error = xfs_bmbt_change_owner(tp, ip, XFS_DATA_FORK, ip->i_ino,
1950                                               NULL);
1951                 /* success or fatal error */
1952                 if (error != -EAGAIN)
1953                         break;
1954
1955                 error = xfs_trans_roll(tpp, NULL);
1956                 if (error)
1957                         break;
1958                 tp = *tpp;
1959
1960                 /*
1961                  * Redirty both inodes so they can relog and keep the log tail
1962                  * moving forward.
1963                  */
1964                 xfs_trans_ijoin(tp, ip, 0);
1965                 xfs_trans_ijoin(tp, tmpip, 0);
1966                 xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE);
1967                 xfs_trans_log_inode(tp, tmpip, XFS_ILOG_CORE);
1968         } while (true);
1969
1970         return error;
1971 }
1972
1973 int
1974 xfs_swap_extents(
1975         struct xfs_inode        *ip,    /* target inode */
1976         struct xfs_inode        *tip,   /* tmp inode */
1977         struct xfs_swapext      *sxp)
1978 {
1979         struct xfs_mount        *mp = ip->i_mount;
1980         struct xfs_trans        *tp;
1981         struct xfs_bstat        *sbp = &sxp->sx_stat;
1982         int                     src_log_flags, target_log_flags;
1983         int                     error = 0;
1984         int                     lock_flags;
1985         struct xfs_ifork        *cowfp;
1986         uint64_t                f;
1987         int                     resblks = 0;
1988
1989         /*
1990          * Lock the inodes against other IO, page faults and truncate to
1991          * begin with.  Then we can ensure the inodes are flushed and have no
1992          * page cache safely. Once we have done this we can take the ilocks and
1993          * do the rest of the checks.
1994          */
1995         lock_flags = XFS_IOLOCK_EXCL | XFS_MMAPLOCK_EXCL;
1996         xfs_lock_two_inodes(ip, tip, XFS_IOLOCK_EXCL);
1997         xfs_lock_two_inodes(ip, tip, XFS_MMAPLOCK_EXCL);
1998
1999         /* Verify that both files have the same format */
2000         if ((VFS_I(ip)->i_mode & S_IFMT) != (VFS_I(tip)->i_mode & S_IFMT)) {
2001                 error = -EINVAL;
2002                 goto out_unlock;
2003         }
2004
2005         /* Verify both files are either real-time or non-realtime */
2006         if (XFS_IS_REALTIME_INODE(ip) != XFS_IS_REALTIME_INODE(tip)) {
2007                 error = -EINVAL;
2008                 goto out_unlock;
2009         }
2010
2011         error = xfs_swap_extent_flush(ip);
2012         if (error)
2013                 goto out_unlock;
2014         error = xfs_swap_extent_flush(tip);
2015         if (error)
2016                 goto out_unlock;
2017
2018         /*
2019          * Extent "swapping" with rmap requires a permanent reservation and
2020          * a block reservation because it's really just a remap operation
2021          * performed with log redo items!
2022          */
2023         if (xfs_sb_version_hasrmapbt(&mp->m_sb)) {
2024                 /*
2025                  * Conceptually this shouldn't affect the shape of either
2026                  * bmbt, but since we atomically move extents one by one,
2027                  * we reserve enough space to rebuild both trees.
2028                  */
2029                 resblks = XFS_SWAP_RMAP_SPACE_RES(mp,
2030                                 XFS_IFORK_NEXTENTS(ip, XFS_DATA_FORK),
2031                                 XFS_DATA_FORK) +
2032                           XFS_SWAP_RMAP_SPACE_RES(mp,
2033                                 XFS_IFORK_NEXTENTS(tip, XFS_DATA_FORK),
2034                                 XFS_DATA_FORK);
2035         }
2036         error = xfs_trans_alloc(mp, &M_RES(mp)->tr_write, resblks, 0, 0, &tp);
2037         if (error)
2038                 goto out_unlock;
2039
2040         /*
2041          * Lock and join the inodes to the tansaction so that transaction commit
2042          * or cancel will unlock the inodes from this point onwards.
2043          */
2044         xfs_lock_two_inodes(ip, tip, XFS_ILOCK_EXCL);
2045         lock_flags |= XFS_ILOCK_EXCL;
2046         xfs_trans_ijoin(tp, ip, 0);
2047         xfs_trans_ijoin(tp, tip, 0);
2048
2049
2050         /* Verify all data are being swapped */
2051         if (sxp->sx_offset != 0 ||
2052             sxp->sx_length != ip->i_d.di_size ||
2053             sxp->sx_length != tip->i_d.di_size) {
2054                 error = -EFAULT;
2055                 goto out_trans_cancel;
2056         }
2057
2058         trace_xfs_swap_extent_before(ip, 0);
2059         trace_xfs_swap_extent_before(tip, 1);
2060
2061         /* check inode formats now that data is flushed */
2062         error = xfs_swap_extents_check_format(ip, tip);
2063         if (error) {
2064                 xfs_notice(mp,
2065                     "%s: inode 0x%llx format is incompatible for exchanging.",
2066                                 __func__, ip->i_ino);
2067                 goto out_trans_cancel;
2068         }
2069
2070         /*
2071          * Compare the current change & modify times with that
2072          * passed in.  If they differ, we abort this swap.
2073          * This is the mechanism used to ensure the calling
2074          * process that the file was not changed out from
2075          * under it.
2076          */
2077         if ((sbp->bs_ctime.tv_sec != VFS_I(ip)->i_ctime.tv_sec) ||
2078             (sbp->bs_ctime.tv_nsec != VFS_I(ip)->i_ctime.tv_nsec) ||
2079             (sbp->bs_mtime.tv_sec != VFS_I(ip)->i_mtime.tv_sec) ||
2080             (sbp->bs_mtime.tv_nsec != VFS_I(ip)->i_mtime.tv_nsec)) {
2081                 error = -EBUSY;
2082                 goto out_trans_cancel;
2083         }
2084
2085         /*
2086          * Note the trickiness in setting the log flags - we set the owner log
2087          * flag on the opposite inode (i.e. the inode we are setting the new
2088          * owner to be) because once we swap the forks and log that, log
2089          * recovery is going to see the fork as owned by the swapped inode,
2090          * not the pre-swapped inodes.
2091          */
2092         src_log_flags = XFS_ILOG_CORE;
2093         target_log_flags = XFS_ILOG_CORE;
2094
2095         if (xfs_sb_version_hasrmapbt(&mp->m_sb))
2096                 error = xfs_swap_extent_rmap(&tp, ip, tip);
2097         else
2098                 error = xfs_swap_extent_forks(tp, ip, tip, &src_log_flags,
2099                                 &target_log_flags);
2100         if (error)
2101                 goto out_trans_cancel;
2102
2103         /* Do we have to swap reflink flags? */
2104         if ((ip->i_d.di_flags2 & XFS_DIFLAG2_REFLINK) ^
2105             (tip->i_d.di_flags2 & XFS_DIFLAG2_REFLINK)) {
2106                 f = ip->i_d.di_flags2 & XFS_DIFLAG2_REFLINK;
2107                 ip->i_d.di_flags2 &= ~XFS_DIFLAG2_REFLINK;
2108                 ip->i_d.di_flags2 |= tip->i_d.di_flags2 & XFS_DIFLAG2_REFLINK;
2109                 tip->i_d.di_flags2 &= ~XFS_DIFLAG2_REFLINK;
2110                 tip->i_d.di_flags2 |= f & XFS_DIFLAG2_REFLINK;
2111         }
2112
2113         /* Swap the cow forks. */
2114         if (xfs_sb_version_hasreflink(&mp->m_sb)) {
2115                 xfs_extnum_t    extnum;
2116
2117                 ASSERT(ip->i_cformat == XFS_DINODE_FMT_EXTENTS);
2118                 ASSERT(tip->i_cformat == XFS_DINODE_FMT_EXTENTS);
2119
2120                 extnum = ip->i_cnextents;
2121                 ip->i_cnextents = tip->i_cnextents;
2122                 tip->i_cnextents = extnum;
2123
2124                 cowfp = ip->i_cowfp;
2125                 ip->i_cowfp = tip->i_cowfp;
2126                 tip->i_cowfp = cowfp;
2127
2128                 if (ip->i_cowfp && ip->i_cnextents)
2129                         xfs_inode_set_cowblocks_tag(ip);
2130                 else
2131                         xfs_inode_clear_cowblocks_tag(ip);
2132                 if (tip->i_cowfp && tip->i_cnextents)
2133                         xfs_inode_set_cowblocks_tag(tip);
2134                 else
2135                         xfs_inode_clear_cowblocks_tag(tip);
2136         }
2137
2138         xfs_trans_log_inode(tp, ip,  src_log_flags);
2139         xfs_trans_log_inode(tp, tip, target_log_flags);
2140
2141         /*
2142          * The extent forks have been swapped, but crc=1,rmapbt=0 filesystems
2143          * have inode number owner values in the bmbt blocks that still refer to
2144          * the old inode. Scan each bmbt to fix up the owner values with the
2145          * inode number of the current inode.
2146          */
2147         if (src_log_flags & XFS_ILOG_DOWNER) {
2148                 error = xfs_swap_change_owner(&tp, ip, tip);
2149                 if (error)
2150                         goto out_trans_cancel;
2151         }
2152         if (target_log_flags & XFS_ILOG_DOWNER) {
2153                 error = xfs_swap_change_owner(&tp, tip, ip);
2154                 if (error)
2155                         goto out_trans_cancel;
2156         }
2157
2158         /*
2159          * If this is a synchronous mount, make sure that the
2160          * transaction goes to disk before returning to the user.
2161          */
2162         if (mp->m_flags & XFS_MOUNT_WSYNC)
2163                 xfs_trans_set_sync(tp);
2164
2165         error = xfs_trans_commit(tp);
2166
2167         trace_xfs_swap_extent_after(ip, 0);
2168         trace_xfs_swap_extent_after(tip, 1);
2169
2170         xfs_iunlock(ip, lock_flags);
2171         xfs_iunlock(tip, lock_flags);
2172         return error;
2173
2174 out_trans_cancel:
2175         xfs_trans_cancel(tp);
2176
2177 out_unlock:
2178         xfs_iunlock(ip, lock_flags);
2179         xfs_iunlock(tip, lock_flags);
2180         return error;
2181 }