OSDN Git Service

powerpc/pseries: Allow not having ibm, hypertas-functions::hcall-multi-tce for DDW
[sagit-ice-cold/kernel_xiaomi_msm8998.git] / fs / xfs / xfs_icache.c
1 /*
2  * Copyright (c) 2000-2005 Silicon Graphics, Inc.
3  * All Rights Reserved.
4  *
5  * This program is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU General Public License as
7  * published by the Free Software Foundation.
8  *
9  * This program is distributed in the hope that it would be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write the Free Software Foundation,
16  * Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
17  */
18 #include "xfs.h"
19 #include "xfs_fs.h"
20 #include "xfs_format.h"
21 #include "xfs_log_format.h"
22 #include "xfs_trans_resv.h"
23 #include "xfs_sb.h"
24 #include "xfs_mount.h"
25 #include "xfs_inode.h"
26 #include "xfs_error.h"
27 #include "xfs_trans.h"
28 #include "xfs_trans_priv.h"
29 #include "xfs_inode_item.h"
30 #include "xfs_quota.h"
31 #include "xfs_trace.h"
32 #include "xfs_icache.h"
33 #include "xfs_bmap_util.h"
34 #include "xfs_dquot_item.h"
35 #include "xfs_dquot.h"
36
37 #include <linux/kthread.h>
38 #include <linux/freezer.h>
39
40 STATIC void __xfs_inode_clear_reclaim_tag(struct xfs_mount *mp,
41                                 struct xfs_perag *pag, struct xfs_inode *ip);
42
43 /*
44  * Allocate and initialise an xfs_inode.
45  */
46 struct xfs_inode *
47 xfs_inode_alloc(
48         struct xfs_mount        *mp,
49         xfs_ino_t               ino)
50 {
51         struct xfs_inode        *ip;
52
53         /*
54          * if this didn't occur in transactions, we could use
55          * KM_MAYFAIL and return NULL here on ENOMEM. Set the
56          * code up to do this anyway.
57          */
58         ip = kmem_zone_alloc(xfs_inode_zone, KM_SLEEP);
59         if (!ip)
60                 return NULL;
61         if (inode_init_always(mp->m_super, VFS_I(ip))) {
62                 kmem_zone_free(xfs_inode_zone, ip);
63                 return NULL;
64         }
65
66         XFS_STATS_INC(mp, vn_active);
67         ASSERT(atomic_read(&ip->i_pincount) == 0);
68         ASSERT(!spin_is_locked(&ip->i_flags_lock));
69         ASSERT(!xfs_isiflocked(ip));
70         ASSERT(ip->i_ino == 0);
71
72         mrlock_init(&ip->i_iolock, MRLOCK_BARRIER, "xfsio", ip->i_ino);
73
74         /* initialise the xfs inode */
75         ip->i_ino = ino;
76         ip->i_mount = mp;
77         memset(&ip->i_imap, 0, sizeof(struct xfs_imap));
78         ip->i_afp = NULL;
79         memset(&ip->i_df, 0, sizeof(xfs_ifork_t));
80         ip->i_flags = 0;
81         ip->i_delayed_blks = 0;
82         memset(&ip->i_d, 0, sizeof(xfs_icdinode_t));
83
84         return ip;
85 }
86
87 STATIC void
88 xfs_inode_free_callback(
89         struct rcu_head         *head)
90 {
91         struct inode            *inode = container_of(head, struct inode, i_rcu);
92         struct xfs_inode        *ip = XFS_I(inode);
93
94         kmem_zone_free(xfs_inode_zone, ip);
95 }
96
97 void
98 xfs_inode_free(
99         struct xfs_inode        *ip)
100 {
101         switch (ip->i_d.di_mode & S_IFMT) {
102         case S_IFREG:
103         case S_IFDIR:
104         case S_IFLNK:
105                 xfs_idestroy_fork(ip, XFS_DATA_FORK);
106                 break;
107         }
108
109         if (ip->i_afp)
110                 xfs_idestroy_fork(ip, XFS_ATTR_FORK);
111
112         if (ip->i_itemp) {
113                 ASSERT(!(ip->i_itemp->ili_item.li_flags & XFS_LI_IN_AIL));
114                 xfs_inode_item_destroy(ip);
115                 ip->i_itemp = NULL;
116         }
117
118         /*
119          * Because we use RCU freeing we need to ensure the inode always
120          * appears to be reclaimed with an invalid inode number when in the
121          * free state. The ip->i_flags_lock provides the barrier against lookup
122          * races.
123          */
124         spin_lock(&ip->i_flags_lock);
125         ip->i_flags = XFS_IRECLAIM;
126         ip->i_ino = 0;
127         spin_unlock(&ip->i_flags_lock);
128
129         /* asserts to verify all state is correct here */
130         ASSERT(atomic_read(&ip->i_pincount) == 0);
131         ASSERT(!xfs_isiflocked(ip));
132         XFS_STATS_DEC(ip->i_mount, vn_active);
133
134         call_rcu(&VFS_I(ip)->i_rcu, xfs_inode_free_callback);
135 }
136
137 /*
138  * Check the validity of the inode we just found it the cache
139  */
140 static int
141 xfs_iget_cache_hit(
142         struct xfs_perag        *pag,
143         struct xfs_inode        *ip,
144         xfs_ino_t               ino,
145         int                     flags,
146         int                     lock_flags) __releases(RCU)
147 {
148         struct inode            *inode = VFS_I(ip);
149         struct xfs_mount        *mp = ip->i_mount;
150         int                     error;
151
152         /*
153          * check for re-use of an inode within an RCU grace period due to the
154          * radix tree nodes not being updated yet. We monitor for this by
155          * setting the inode number to zero before freeing the inode structure.
156          * If the inode has been reallocated and set up, then the inode number
157          * will not match, so check for that, too.
158          */
159         spin_lock(&ip->i_flags_lock);
160         if (ip->i_ino != ino) {
161                 trace_xfs_iget_skip(ip);
162                 XFS_STATS_INC(mp, xs_ig_frecycle);
163                 error = -EAGAIN;
164                 goto out_error;
165         }
166
167
168         /*
169          * If we are racing with another cache hit that is currently
170          * instantiating this inode or currently recycling it out of
171          * reclaimabe state, wait for the initialisation to complete
172          * before continuing.
173          *
174          * XXX(hch): eventually we should do something equivalent to
175          *           wait_on_inode to wait for these flags to be cleared
176          *           instead of polling for it.
177          */
178         if (ip->i_flags & (XFS_INEW|XFS_IRECLAIM)) {
179                 trace_xfs_iget_skip(ip);
180                 XFS_STATS_INC(mp, xs_ig_frecycle);
181                 error = -EAGAIN;
182                 goto out_error;
183         }
184
185         /*
186          * If lookup is racing with unlink return an error immediately.
187          */
188         if (ip->i_d.di_mode == 0 && !(flags & XFS_IGET_CREATE)) {
189                 error = -ENOENT;
190                 goto out_error;
191         }
192
193         /*
194          * If IRECLAIMABLE is set, we've torn down the VFS inode already.
195          * Need to carefully get it back into useable state.
196          */
197         if (ip->i_flags & XFS_IRECLAIMABLE) {
198                 trace_xfs_iget_reclaim(ip);
199
200                 /*
201                  * We need to set XFS_IRECLAIM to prevent xfs_reclaim_inode
202                  * from stomping over us while we recycle the inode.  We can't
203                  * clear the radix tree reclaimable tag yet as it requires
204                  * pag_ici_lock to be held exclusive.
205                  */
206                 ip->i_flags |= XFS_IRECLAIM;
207
208                 spin_unlock(&ip->i_flags_lock);
209                 rcu_read_unlock();
210
211                 error = inode_init_always(mp->m_super, inode);
212                 if (error) {
213                         bool wake;
214                         /*
215                          * Re-initializing the inode failed, and we are in deep
216                          * trouble.  Try to re-add it to the reclaim list.
217                          */
218                         rcu_read_lock();
219                         spin_lock(&ip->i_flags_lock);
220                         wake = !!__xfs_iflags_test(ip, XFS_INEW);
221                         ip->i_flags &= ~(XFS_INEW | XFS_IRECLAIM);
222                         if (wake)
223                                 wake_up_bit(&ip->i_flags, __XFS_INEW_BIT);
224                         ASSERT(ip->i_flags & XFS_IRECLAIMABLE);
225                         trace_xfs_iget_reclaim_fail(ip);
226                         goto out_error;
227                 }
228
229                 spin_lock(&pag->pag_ici_lock);
230                 spin_lock(&ip->i_flags_lock);
231
232                 /*
233                  * Clear the per-lifetime state in the inode as we are now
234                  * effectively a new inode and need to return to the initial
235                  * state before reuse occurs.
236                  */
237                 ip->i_flags &= ~XFS_IRECLAIM_RESET_FLAGS;
238                 ip->i_flags |= XFS_INEW;
239                 __xfs_inode_clear_reclaim_tag(mp, pag, ip);
240                 inode->i_state = I_NEW;
241
242                 ASSERT(!rwsem_is_locked(&ip->i_iolock.mr_lock));
243                 mrlock_init(&ip->i_iolock, MRLOCK_BARRIER, "xfsio", ip->i_ino);
244
245                 spin_unlock(&ip->i_flags_lock);
246                 spin_unlock(&pag->pag_ici_lock);
247         } else {
248                 /* If the VFS inode is being torn down, pause and try again. */
249                 if (!igrab(inode)) {
250                         trace_xfs_iget_skip(ip);
251                         error = -EAGAIN;
252                         goto out_error;
253                 }
254
255                 /* We've got a live one. */
256                 spin_unlock(&ip->i_flags_lock);
257                 rcu_read_unlock();
258                 trace_xfs_iget_hit(ip);
259         }
260
261         if (lock_flags != 0)
262                 xfs_ilock(ip, lock_flags);
263
264         xfs_iflags_clear(ip, XFS_ISTALE | XFS_IDONTCACHE);
265         XFS_STATS_INC(mp, xs_ig_found);
266
267         return 0;
268
269 out_error:
270         spin_unlock(&ip->i_flags_lock);
271         rcu_read_unlock();
272         return error;
273 }
274
275
276 static int
277 xfs_iget_cache_miss(
278         struct xfs_mount        *mp,
279         struct xfs_perag        *pag,
280         xfs_trans_t             *tp,
281         xfs_ino_t               ino,
282         struct xfs_inode        **ipp,
283         int                     flags,
284         int                     lock_flags)
285 {
286         struct xfs_inode        *ip;
287         int                     error;
288         xfs_agino_t             agino = XFS_INO_TO_AGINO(mp, ino);
289         int                     iflags;
290
291         ip = xfs_inode_alloc(mp, ino);
292         if (!ip)
293                 return -ENOMEM;
294
295         error = xfs_iread(mp, tp, ip, flags);
296         if (error)
297                 goto out_destroy;
298
299         trace_xfs_iget_miss(ip);
300
301         if ((ip->i_d.di_mode == 0) && !(flags & XFS_IGET_CREATE)) {
302                 error = -ENOENT;
303                 goto out_destroy;
304         }
305
306         /*
307          * Preload the radix tree so we can insert safely under the
308          * write spinlock. Note that we cannot sleep inside the preload
309          * region. Since we can be called from transaction context, don't
310          * recurse into the file system.
311          */
312         if (radix_tree_preload(GFP_NOFS)) {
313                 error = -EAGAIN;
314                 goto out_destroy;
315         }
316
317         /*
318          * Because the inode hasn't been added to the radix-tree yet it can't
319          * be found by another thread, so we can do the non-sleeping lock here.
320          */
321         if (lock_flags) {
322                 if (!xfs_ilock_nowait(ip, lock_flags))
323                         BUG();
324         }
325
326         /*
327          * These values must be set before inserting the inode into the radix
328          * tree as the moment it is inserted a concurrent lookup (allowed by the
329          * RCU locking mechanism) can find it and that lookup must see that this
330          * is an inode currently under construction (i.e. that XFS_INEW is set).
331          * The ip->i_flags_lock that protects the XFS_INEW flag forms the
332          * memory barrier that ensures this detection works correctly at lookup
333          * time.
334          */
335         iflags = XFS_INEW;
336         if (flags & XFS_IGET_DONTCACHE)
337                 iflags |= XFS_IDONTCACHE;
338         ip->i_udquot = NULL;
339         ip->i_gdquot = NULL;
340         ip->i_pdquot = NULL;
341         xfs_iflags_set(ip, iflags);
342
343         /* insert the new inode */
344         spin_lock(&pag->pag_ici_lock);
345         error = radix_tree_insert(&pag->pag_ici_root, agino, ip);
346         if (unlikely(error)) {
347                 WARN_ON(error != -EEXIST);
348                 XFS_STATS_INC(mp, xs_ig_dup);
349                 error = -EAGAIN;
350                 goto out_preload_end;
351         }
352         spin_unlock(&pag->pag_ici_lock);
353         radix_tree_preload_end();
354
355         *ipp = ip;
356         return 0;
357
358 out_preload_end:
359         spin_unlock(&pag->pag_ici_lock);
360         radix_tree_preload_end();
361         if (lock_flags)
362                 xfs_iunlock(ip, lock_flags);
363 out_destroy:
364         __destroy_inode(VFS_I(ip));
365         xfs_inode_free(ip);
366         return error;
367 }
368
369 static void
370 xfs_inew_wait(
371         struct xfs_inode        *ip)
372 {
373         wait_queue_head_t *wq = bit_waitqueue(&ip->i_flags, __XFS_INEW_BIT);
374         DEFINE_WAIT_BIT(wait, &ip->i_flags, __XFS_INEW_BIT);
375
376         do {
377                 prepare_to_wait(wq, &wait.wait, TASK_UNINTERRUPTIBLE);
378                 if (!xfs_iflags_test(ip, XFS_INEW))
379                         break;
380                 schedule();
381         } while (true);
382         finish_wait(wq, &wait.wait);
383 }
384
385 /*
386  * Look up an inode by number in the given file system.
387  * The inode is looked up in the cache held in each AG.
388  * If the inode is found in the cache, initialise the vfs inode
389  * if necessary.
390  *
391  * If it is not in core, read it in from the file system's device,
392  * add it to the cache and initialise the vfs inode.
393  *
394  * The inode is locked according to the value of the lock_flags parameter.
395  * This flag parameter indicates how and if the inode's IO lock and inode lock
396  * should be taken.
397  *
398  * mp -- the mount point structure for the current file system.  It points
399  *       to the inode hash table.
400  * tp -- a pointer to the current transaction if there is one.  This is
401  *       simply passed through to the xfs_iread() call.
402  * ino -- the number of the inode desired.  This is the unique identifier
403  *        within the file system for the inode being requested.
404  * lock_flags -- flags indicating how to lock the inode.  See the comment
405  *               for xfs_ilock() for a list of valid values.
406  */
407 int
408 xfs_iget(
409         xfs_mount_t     *mp,
410         xfs_trans_t     *tp,
411         xfs_ino_t       ino,
412         uint            flags,
413         uint            lock_flags,
414         xfs_inode_t     **ipp)
415 {
416         xfs_inode_t     *ip;
417         int             error;
418         xfs_perag_t     *pag;
419         xfs_agino_t     agino;
420
421         /*
422          * xfs_reclaim_inode() uses the ILOCK to ensure an inode
423          * doesn't get freed while it's being referenced during a
424          * radix tree traversal here.  It assumes this function
425          * aqcuires only the ILOCK (and therefore it has no need to
426          * involve the IOLOCK in this synchronization).
427          */
428         ASSERT((lock_flags & (XFS_IOLOCK_EXCL | XFS_IOLOCK_SHARED)) == 0);
429
430         /* reject inode numbers outside existing AGs */
431         if (!ino || XFS_INO_TO_AGNO(mp, ino) >= mp->m_sb.sb_agcount)
432                 return -EINVAL;
433
434         XFS_STATS_INC(mp, xs_ig_attempts);
435
436         /* get the perag structure and ensure that it's inode capable */
437         pag = xfs_perag_get(mp, XFS_INO_TO_AGNO(mp, ino));
438         agino = XFS_INO_TO_AGINO(mp, ino);
439
440 again:
441         error = 0;
442         rcu_read_lock();
443         ip = radix_tree_lookup(&pag->pag_ici_root, agino);
444
445         if (ip) {
446                 error = xfs_iget_cache_hit(pag, ip, ino, flags, lock_flags);
447                 if (error)
448                         goto out_error_or_again;
449         } else {
450                 rcu_read_unlock();
451                 XFS_STATS_INC(mp, xs_ig_missed);
452
453                 error = xfs_iget_cache_miss(mp, pag, tp, ino, &ip,
454                                                         flags, lock_flags);
455                 if (error)
456                         goto out_error_or_again;
457         }
458         xfs_perag_put(pag);
459
460         *ipp = ip;
461
462         /*
463          * If we have a real type for an on-disk inode, we can setup the inode
464          * now.  If it's a new inode being created, xfs_ialloc will handle it.
465          */
466         if (xfs_iflags_test(ip, XFS_INEW) && ip->i_d.di_mode != 0)
467                 xfs_setup_existing_inode(ip);
468         return 0;
469
470 out_error_or_again:
471         if (error == -EAGAIN) {
472                 delay(1);
473                 goto again;
474         }
475         xfs_perag_put(pag);
476         return error;
477 }
478
479 /*
480  * The inode lookup is done in batches to keep the amount of lock traffic and
481  * radix tree lookups to a minimum. The batch size is a trade off between
482  * lookup reduction and stack usage. This is in the reclaim path, so we can't
483  * be too greedy.
484  */
485 #define XFS_LOOKUP_BATCH        32
486
487 STATIC int
488 xfs_inode_ag_walk_grab(
489         struct xfs_inode        *ip,
490         int                     flags)
491 {
492         struct inode            *inode = VFS_I(ip);
493         bool                    newinos = !!(flags & XFS_AGITER_INEW_WAIT);
494
495         ASSERT(rcu_read_lock_held());
496
497         /*
498          * check for stale RCU freed inode
499          *
500          * If the inode has been reallocated, it doesn't matter if it's not in
501          * the AG we are walking - we are walking for writeback, so if it
502          * passes all the "valid inode" checks and is dirty, then we'll write
503          * it back anyway.  If it has been reallocated and still being
504          * initialised, the XFS_INEW check below will catch it.
505          */
506         spin_lock(&ip->i_flags_lock);
507         if (!ip->i_ino)
508                 goto out_unlock_noent;
509
510         /* avoid new or reclaimable inodes. Leave for reclaim code to flush */
511         if ((!newinos && __xfs_iflags_test(ip, XFS_INEW)) ||
512             __xfs_iflags_test(ip, XFS_IRECLAIMABLE | XFS_IRECLAIM))
513                 goto out_unlock_noent;
514         spin_unlock(&ip->i_flags_lock);
515
516         /* nothing to sync during shutdown */
517         if (XFS_FORCED_SHUTDOWN(ip->i_mount))
518                 return -EFSCORRUPTED;
519
520         /* If we can't grab the inode, it must on it's way to reclaim. */
521         if (!igrab(inode))
522                 return -ENOENT;
523
524         /* inode is valid */
525         return 0;
526
527 out_unlock_noent:
528         spin_unlock(&ip->i_flags_lock);
529         return -ENOENT;
530 }
531
532 STATIC int
533 xfs_inode_ag_walk(
534         struct xfs_mount        *mp,
535         struct xfs_perag        *pag,
536         int                     (*execute)(struct xfs_inode *ip, int flags,
537                                            void *args),
538         int                     flags,
539         void                    *args,
540         int                     tag,
541         int                     iter_flags)
542 {
543         uint32_t                first_index;
544         int                     last_error = 0;
545         int                     skipped;
546         int                     done;
547         int                     nr_found;
548
549 restart:
550         done = 0;
551         skipped = 0;
552         first_index = 0;
553         nr_found = 0;
554         do {
555                 struct xfs_inode *batch[XFS_LOOKUP_BATCH];
556                 int             error = 0;
557                 int             i;
558
559                 rcu_read_lock();
560
561                 if (tag == -1)
562                         nr_found = radix_tree_gang_lookup(&pag->pag_ici_root,
563                                         (void **)batch, first_index,
564                                         XFS_LOOKUP_BATCH);
565                 else
566                         nr_found = radix_tree_gang_lookup_tag(
567                                         &pag->pag_ici_root,
568                                         (void **) batch, first_index,
569                                         XFS_LOOKUP_BATCH, tag);
570
571                 if (!nr_found) {
572                         rcu_read_unlock();
573                         break;
574                 }
575
576                 /*
577                  * Grab the inodes before we drop the lock. if we found
578                  * nothing, nr == 0 and the loop will be skipped.
579                  */
580                 for (i = 0; i < nr_found; i++) {
581                         struct xfs_inode *ip = batch[i];
582
583                         if (done || xfs_inode_ag_walk_grab(ip, iter_flags))
584                                 batch[i] = NULL;
585
586                         /*
587                          * Update the index for the next lookup. Catch
588                          * overflows into the next AG range which can occur if
589                          * we have inodes in the last block of the AG and we
590                          * are currently pointing to the last inode.
591                          *
592                          * Because we may see inodes that are from the wrong AG
593                          * due to RCU freeing and reallocation, only update the
594                          * index if it lies in this AG. It was a race that lead
595                          * us to see this inode, so another lookup from the
596                          * same index will not find it again.
597                          */
598                         if (XFS_INO_TO_AGNO(mp, ip->i_ino) != pag->pag_agno)
599                                 continue;
600                         first_index = XFS_INO_TO_AGINO(mp, ip->i_ino + 1);
601                         if (first_index < XFS_INO_TO_AGINO(mp, ip->i_ino))
602                                 done = 1;
603                 }
604
605                 /* unlock now we've grabbed the inodes. */
606                 rcu_read_unlock();
607
608                 for (i = 0; i < nr_found; i++) {
609                         if (!batch[i])
610                                 continue;
611                         if ((iter_flags & XFS_AGITER_INEW_WAIT) &&
612                             xfs_iflags_test(batch[i], XFS_INEW))
613                                 xfs_inew_wait(batch[i]);
614                         error = execute(batch[i], flags, args);
615                         IRELE(batch[i]);
616                         if (error == -EAGAIN) {
617                                 skipped++;
618                                 continue;
619                         }
620                         if (error && last_error != -EFSCORRUPTED)
621                                 last_error = error;
622                 }
623
624                 /* bail out if the filesystem is corrupted.  */
625                 if (error == -EFSCORRUPTED)
626                         break;
627
628                 cond_resched();
629
630         } while (nr_found && !done);
631
632         if (skipped) {
633                 delay(1);
634                 goto restart;
635         }
636         return last_error;
637 }
638
639 /*
640  * Background scanning to trim post-EOF preallocated space. This is queued
641  * based on the 'speculative_prealloc_lifetime' tunable (5m by default).
642  */
643 STATIC void
644 xfs_queue_eofblocks(
645         struct xfs_mount *mp)
646 {
647         rcu_read_lock();
648         if (radix_tree_tagged(&mp->m_perag_tree, XFS_ICI_EOFBLOCKS_TAG))
649                 queue_delayed_work(mp->m_eofblocks_workqueue,
650                                    &mp->m_eofblocks_work,
651                                    msecs_to_jiffies(xfs_eofb_secs * 1000));
652         rcu_read_unlock();
653 }
654
655 void
656 xfs_eofblocks_worker(
657         struct work_struct *work)
658 {
659         struct xfs_mount *mp = container_of(to_delayed_work(work),
660                                 struct xfs_mount, m_eofblocks_work);
661         xfs_icache_free_eofblocks(mp, NULL);
662         xfs_queue_eofblocks(mp);
663 }
664
665 int
666 xfs_inode_ag_iterator_flags(
667         struct xfs_mount        *mp,
668         int                     (*execute)(struct xfs_inode *ip, int flags,
669                                            void *args),
670         int                     flags,
671         void                    *args,
672         int                     iter_flags)
673 {
674         struct xfs_perag        *pag;
675         int                     error = 0;
676         int                     last_error = 0;
677         xfs_agnumber_t          ag;
678
679         ag = 0;
680         while ((pag = xfs_perag_get(mp, ag))) {
681                 ag = pag->pag_agno + 1;
682                 error = xfs_inode_ag_walk(mp, pag, execute, flags, args, -1,
683                                           iter_flags);
684                 xfs_perag_put(pag);
685                 if (error) {
686                         last_error = error;
687                         if (error == -EFSCORRUPTED)
688                                 break;
689                 }
690         }
691         return last_error;
692 }
693
694 int
695 xfs_inode_ag_iterator(
696         struct xfs_mount        *mp,
697         int                     (*execute)(struct xfs_inode *ip, int flags,
698                                            void *args),
699         int                     flags,
700         void                    *args)
701 {
702         return xfs_inode_ag_iterator_flags(mp, execute, flags, args, 0);
703 }
704
705 int
706 xfs_inode_ag_iterator_tag(
707         struct xfs_mount        *mp,
708         int                     (*execute)(struct xfs_inode *ip, int flags,
709                                            void *args),
710         int                     flags,
711         void                    *args,
712         int                     tag)
713 {
714         struct xfs_perag        *pag;
715         int                     error = 0;
716         int                     last_error = 0;
717         xfs_agnumber_t          ag;
718
719         ag = 0;
720         while ((pag = xfs_perag_get_tag(mp, ag, tag))) {
721                 ag = pag->pag_agno + 1;
722                 error = xfs_inode_ag_walk(mp, pag, execute, flags, args, tag,
723                                           0);
724                 xfs_perag_put(pag);
725                 if (error) {
726                         last_error = error;
727                         if (error == -EFSCORRUPTED)
728                                 break;
729                 }
730         }
731         return last_error;
732 }
733
734 /*
735  * Queue a new inode reclaim pass if there are reclaimable inodes and there
736  * isn't a reclaim pass already in progress. By default it runs every 5s based
737  * on the xfs periodic sync default of 30s. Perhaps this should have it's own
738  * tunable, but that can be done if this method proves to be ineffective or too
739  * aggressive.
740  */
741 static void
742 xfs_reclaim_work_queue(
743         struct xfs_mount        *mp)
744 {
745
746         rcu_read_lock();
747         if (radix_tree_tagged(&mp->m_perag_tree, XFS_ICI_RECLAIM_TAG)) {
748                 queue_delayed_work(mp->m_reclaim_workqueue, &mp->m_reclaim_work,
749                         msecs_to_jiffies(xfs_syncd_centisecs / 6 * 10));
750         }
751         rcu_read_unlock();
752 }
753
754 /*
755  * This is a fast pass over the inode cache to try to get reclaim moving on as
756  * many inodes as possible in a short period of time. It kicks itself every few
757  * seconds, as well as being kicked by the inode cache shrinker when memory
758  * goes low. It scans as quickly as possible avoiding locked inodes or those
759  * already being flushed, and once done schedules a future pass.
760  */
761 void
762 xfs_reclaim_worker(
763         struct work_struct *work)
764 {
765         struct xfs_mount *mp = container_of(to_delayed_work(work),
766                                         struct xfs_mount, m_reclaim_work);
767
768         xfs_reclaim_inodes(mp, SYNC_TRYLOCK);
769         xfs_reclaim_work_queue(mp);
770 }
771
772 static void
773 __xfs_inode_set_reclaim_tag(
774         struct xfs_perag        *pag,
775         struct xfs_inode        *ip)
776 {
777         radix_tree_tag_set(&pag->pag_ici_root,
778                            XFS_INO_TO_AGINO(ip->i_mount, ip->i_ino),
779                            XFS_ICI_RECLAIM_TAG);
780
781         if (!pag->pag_ici_reclaimable) {
782                 /* propagate the reclaim tag up into the perag radix tree */
783                 spin_lock(&ip->i_mount->m_perag_lock);
784                 radix_tree_tag_set(&ip->i_mount->m_perag_tree,
785                                 XFS_INO_TO_AGNO(ip->i_mount, ip->i_ino),
786                                 XFS_ICI_RECLAIM_TAG);
787                 spin_unlock(&ip->i_mount->m_perag_lock);
788
789                 /* schedule periodic background inode reclaim */
790                 xfs_reclaim_work_queue(ip->i_mount);
791
792                 trace_xfs_perag_set_reclaim(ip->i_mount, pag->pag_agno,
793                                                         -1, _RET_IP_);
794         }
795         pag->pag_ici_reclaimable++;
796 }
797
798 /*
799  * We set the inode flag atomically with the radix tree tag.
800  * Once we get tag lookups on the radix tree, this inode flag
801  * can go away.
802  */
803 void
804 xfs_inode_set_reclaim_tag(
805         xfs_inode_t     *ip)
806 {
807         struct xfs_mount *mp = ip->i_mount;
808         struct xfs_perag *pag;
809
810         pag = xfs_perag_get(mp, XFS_INO_TO_AGNO(mp, ip->i_ino));
811         spin_lock(&pag->pag_ici_lock);
812         spin_lock(&ip->i_flags_lock);
813         __xfs_inode_set_reclaim_tag(pag, ip);
814         __xfs_iflags_set(ip, XFS_IRECLAIMABLE);
815         spin_unlock(&ip->i_flags_lock);
816         spin_unlock(&pag->pag_ici_lock);
817         xfs_perag_put(pag);
818 }
819
820 STATIC void
821 __xfs_inode_clear_reclaim(
822         xfs_perag_t     *pag,
823         xfs_inode_t     *ip)
824 {
825         pag->pag_ici_reclaimable--;
826         if (!pag->pag_ici_reclaimable) {
827                 /* clear the reclaim tag from the perag radix tree */
828                 spin_lock(&ip->i_mount->m_perag_lock);
829                 radix_tree_tag_clear(&ip->i_mount->m_perag_tree,
830                                 XFS_INO_TO_AGNO(ip->i_mount, ip->i_ino),
831                                 XFS_ICI_RECLAIM_TAG);
832                 spin_unlock(&ip->i_mount->m_perag_lock);
833                 trace_xfs_perag_clear_reclaim(ip->i_mount, pag->pag_agno,
834                                                         -1, _RET_IP_);
835         }
836 }
837
838 STATIC void
839 __xfs_inode_clear_reclaim_tag(
840         xfs_mount_t     *mp,
841         xfs_perag_t     *pag,
842         xfs_inode_t     *ip)
843 {
844         radix_tree_tag_clear(&pag->pag_ici_root,
845                         XFS_INO_TO_AGINO(mp, ip->i_ino), XFS_ICI_RECLAIM_TAG);
846         __xfs_inode_clear_reclaim(pag, ip);
847 }
848
849 /*
850  * Grab the inode for reclaim exclusively.
851  * Return 0 if we grabbed it, non-zero otherwise.
852  */
853 STATIC int
854 xfs_reclaim_inode_grab(
855         struct xfs_inode        *ip,
856         int                     flags)
857 {
858         ASSERT(rcu_read_lock_held());
859
860         /* quick check for stale RCU freed inode */
861         if (!ip->i_ino)
862                 return 1;
863
864         /*
865          * If we are asked for non-blocking operation, do unlocked checks to
866          * see if the inode already is being flushed or in reclaim to avoid
867          * lock traffic.
868          */
869         if ((flags & SYNC_TRYLOCK) &&
870             __xfs_iflags_test(ip, XFS_IFLOCK | XFS_IRECLAIM))
871                 return 1;
872
873         /*
874          * The radix tree lock here protects a thread in xfs_iget from racing
875          * with us starting reclaim on the inode.  Once we have the
876          * XFS_IRECLAIM flag set it will not touch us.
877          *
878          * Due to RCU lookup, we may find inodes that have been freed and only
879          * have XFS_IRECLAIM set.  Indeed, we may see reallocated inodes that
880          * aren't candidates for reclaim at all, so we must check the
881          * XFS_IRECLAIMABLE is set first before proceeding to reclaim.
882          */
883         spin_lock(&ip->i_flags_lock);
884         if (!__xfs_iflags_test(ip, XFS_IRECLAIMABLE) ||
885             __xfs_iflags_test(ip, XFS_IRECLAIM)) {
886                 /* not a reclaim candidate. */
887                 spin_unlock(&ip->i_flags_lock);
888                 return 1;
889         }
890         __xfs_iflags_set(ip, XFS_IRECLAIM);
891         spin_unlock(&ip->i_flags_lock);
892         return 0;
893 }
894
895 /*
896  * Inodes in different states need to be treated differently. The following
897  * table lists the inode states and the reclaim actions necessary:
898  *
899  *      inode state          iflush ret         required action
900  *      ---------------      ----------         ---------------
901  *      bad                     -               reclaim
902  *      shutdown                EIO             unpin and reclaim
903  *      clean, unpinned         0               reclaim
904  *      stale, unpinned         0               reclaim
905  *      clean, pinned(*)        0               requeue
906  *      stale, pinned           EAGAIN          requeue
907  *      dirty, async            -               requeue
908  *      dirty, sync             0               reclaim
909  *
910  * (*) dgc: I don't think the clean, pinned state is possible but it gets
911  * handled anyway given the order of checks implemented.
912  *
913  * Also, because we get the flush lock first, we know that any inode that has
914  * been flushed delwri has had the flush completed by the time we check that
915  * the inode is clean.
916  *
917  * Note that because the inode is flushed delayed write by AIL pushing, the
918  * flush lock may already be held here and waiting on it can result in very
919  * long latencies.  Hence for sync reclaims, where we wait on the flush lock,
920  * the caller should push the AIL first before trying to reclaim inodes to
921  * minimise the amount of time spent waiting.  For background relaim, we only
922  * bother to reclaim clean inodes anyway.
923  *
924  * Hence the order of actions after gaining the locks should be:
925  *      bad             => reclaim
926  *      shutdown        => unpin and reclaim
927  *      pinned, async   => requeue
928  *      pinned, sync    => unpin
929  *      stale           => reclaim
930  *      clean           => reclaim
931  *      dirty, async    => requeue
932  *      dirty, sync     => flush, wait and reclaim
933  */
934 STATIC int
935 xfs_reclaim_inode(
936         struct xfs_inode        *ip,
937         struct xfs_perag        *pag,
938         int                     sync_mode)
939 {
940         struct xfs_buf          *bp = NULL;
941         int                     error;
942
943 restart:
944         error = 0;
945         xfs_ilock(ip, XFS_ILOCK_EXCL);
946         if (!xfs_iflock_nowait(ip)) {
947                 if (!(sync_mode & SYNC_WAIT))
948                         goto out;
949                 xfs_iflock(ip);
950         }
951
952         if (XFS_FORCED_SHUTDOWN(ip->i_mount)) {
953                 xfs_iunpin_wait(ip);
954                 xfs_iflush_abort(ip, false);
955                 goto reclaim;
956         }
957         if (xfs_ipincount(ip)) {
958                 if (!(sync_mode & SYNC_WAIT))
959                         goto out_ifunlock;
960                 xfs_iunpin_wait(ip);
961         }
962         if (xfs_iflags_test(ip, XFS_ISTALE))
963                 goto reclaim;
964         if (xfs_inode_clean(ip))
965                 goto reclaim;
966
967         /*
968          * Never flush out dirty data during non-blocking reclaim, as it would
969          * just contend with AIL pushing trying to do the same job.
970          */
971         if (!(sync_mode & SYNC_WAIT))
972                 goto out_ifunlock;
973
974         /*
975          * Now we have an inode that needs flushing.
976          *
977          * Note that xfs_iflush will never block on the inode buffer lock, as
978          * xfs_ifree_cluster() can lock the inode buffer before it locks the
979          * ip->i_lock, and we are doing the exact opposite here.  As a result,
980          * doing a blocking xfs_imap_to_bp() to get the cluster buffer would
981          * result in an ABBA deadlock with xfs_ifree_cluster().
982          *
983          * As xfs_ifree_cluser() must gather all inodes that are active in the
984          * cache to mark them stale, if we hit this case we don't actually want
985          * to do IO here - we want the inode marked stale so we can simply
986          * reclaim it.  Hence if we get an EAGAIN error here,  just unlock the
987          * inode, back off and try again.  Hopefully the next pass through will
988          * see the stale flag set on the inode.
989          */
990         error = xfs_iflush(ip, &bp);
991         if (error == -EAGAIN) {
992                 xfs_iunlock(ip, XFS_ILOCK_EXCL);
993                 /* backoff longer than in xfs_ifree_cluster */
994                 delay(2);
995                 goto restart;
996         }
997
998         if (!error) {
999                 error = xfs_bwrite(bp);
1000                 xfs_buf_relse(bp);
1001         }
1002
1003         xfs_iflock(ip);
1004 reclaim:
1005         xfs_ifunlock(ip);
1006         xfs_iunlock(ip, XFS_ILOCK_EXCL);
1007
1008         XFS_STATS_INC(ip->i_mount, xs_ig_reclaims);
1009         /*
1010          * Remove the inode from the per-AG radix tree.
1011          *
1012          * Because radix_tree_delete won't complain even if the item was never
1013          * added to the tree assert that it's been there before to catch
1014          * problems with the inode life time early on.
1015          */
1016         spin_lock(&pag->pag_ici_lock);
1017         if (!radix_tree_delete(&pag->pag_ici_root,
1018                                 XFS_INO_TO_AGINO(ip->i_mount, ip->i_ino)))
1019                 ASSERT(0);
1020         __xfs_inode_clear_reclaim(pag, ip);
1021         spin_unlock(&pag->pag_ici_lock);
1022
1023         /*
1024          * Here we do an (almost) spurious inode lock in order to coordinate
1025          * with inode cache radix tree lookups.  This is because the lookup
1026          * can reference the inodes in the cache without taking references.
1027          *
1028          * We make that OK here by ensuring that we wait until the inode is
1029          * unlocked after the lookup before we go ahead and free it.
1030          */
1031         xfs_ilock(ip, XFS_ILOCK_EXCL);
1032         xfs_qm_dqdetach(ip);
1033         xfs_iunlock(ip, XFS_ILOCK_EXCL);
1034
1035         xfs_inode_free(ip);
1036         return error;
1037
1038 out_ifunlock:
1039         xfs_ifunlock(ip);
1040 out:
1041         xfs_iflags_clear(ip, XFS_IRECLAIM);
1042         xfs_iunlock(ip, XFS_ILOCK_EXCL);
1043         /*
1044          * We could return -EAGAIN here to make reclaim rescan the inode tree in
1045          * a short while. However, this just burns CPU time scanning the tree
1046          * waiting for IO to complete and the reclaim work never goes back to
1047          * the idle state. Instead, return 0 to let the next scheduled
1048          * background reclaim attempt to reclaim the inode again.
1049          */
1050         return 0;
1051 }
1052
1053 /*
1054  * Walk the AGs and reclaim the inodes in them. Even if the filesystem is
1055  * corrupted, we still want to try to reclaim all the inodes. If we don't,
1056  * then a shut down during filesystem unmount reclaim walk leak all the
1057  * unreclaimed inodes.
1058  */
1059 STATIC int
1060 xfs_reclaim_inodes_ag(
1061         struct xfs_mount        *mp,
1062         int                     flags,
1063         int                     *nr_to_scan)
1064 {
1065         struct xfs_perag        *pag;
1066         int                     error = 0;
1067         int                     last_error = 0;
1068         xfs_agnumber_t          ag;
1069         int                     trylock = flags & SYNC_TRYLOCK;
1070         int                     skipped;
1071
1072 restart:
1073         ag = 0;
1074         skipped = 0;
1075         while ((pag = xfs_perag_get_tag(mp, ag, XFS_ICI_RECLAIM_TAG))) {
1076                 unsigned long   first_index = 0;
1077                 int             done = 0;
1078                 int             nr_found = 0;
1079
1080                 ag = pag->pag_agno + 1;
1081
1082                 if (trylock) {
1083                         if (!mutex_trylock(&pag->pag_ici_reclaim_lock)) {
1084                                 skipped++;
1085                                 xfs_perag_put(pag);
1086                                 continue;
1087                         }
1088                         first_index = pag->pag_ici_reclaim_cursor;
1089                 } else
1090                         mutex_lock(&pag->pag_ici_reclaim_lock);
1091
1092                 do {
1093                         struct xfs_inode *batch[XFS_LOOKUP_BATCH];
1094                         int     i;
1095
1096                         rcu_read_lock();
1097                         nr_found = radix_tree_gang_lookup_tag(
1098                                         &pag->pag_ici_root,
1099                                         (void **)batch, first_index,
1100                                         XFS_LOOKUP_BATCH,
1101                                         XFS_ICI_RECLAIM_TAG);
1102                         if (!nr_found) {
1103                                 done = 1;
1104                                 rcu_read_unlock();
1105                                 break;
1106                         }
1107
1108                         /*
1109                          * Grab the inodes before we drop the lock. if we found
1110                          * nothing, nr == 0 and the loop will be skipped.
1111                          */
1112                         for (i = 0; i < nr_found; i++) {
1113                                 struct xfs_inode *ip = batch[i];
1114
1115                                 if (done || xfs_reclaim_inode_grab(ip, flags))
1116                                         batch[i] = NULL;
1117
1118                                 /*
1119                                  * Update the index for the next lookup. Catch
1120                                  * overflows into the next AG range which can
1121                                  * occur if we have inodes in the last block of
1122                                  * the AG and we are currently pointing to the
1123                                  * last inode.
1124                                  *
1125                                  * Because we may see inodes that are from the
1126                                  * wrong AG due to RCU freeing and
1127                                  * reallocation, only update the index if it
1128                                  * lies in this AG. It was a race that lead us
1129                                  * to see this inode, so another lookup from
1130                                  * the same index will not find it again.
1131                                  */
1132                                 if (XFS_INO_TO_AGNO(mp, ip->i_ino) !=
1133                                                                 pag->pag_agno)
1134                                         continue;
1135                                 first_index = XFS_INO_TO_AGINO(mp, ip->i_ino + 1);
1136                                 if (first_index < XFS_INO_TO_AGINO(mp, ip->i_ino))
1137                                         done = 1;
1138                         }
1139
1140                         /* unlock now we've grabbed the inodes. */
1141                         rcu_read_unlock();
1142
1143                         for (i = 0; i < nr_found; i++) {
1144                                 if (!batch[i])
1145                                         continue;
1146                                 error = xfs_reclaim_inode(batch[i], pag, flags);
1147                                 if (error && last_error != -EFSCORRUPTED)
1148                                         last_error = error;
1149                         }
1150
1151                         *nr_to_scan -= XFS_LOOKUP_BATCH;
1152
1153                         cond_resched();
1154
1155                 } while (nr_found && !done && *nr_to_scan > 0);
1156
1157                 if (trylock && !done)
1158                         pag->pag_ici_reclaim_cursor = first_index;
1159                 else
1160                         pag->pag_ici_reclaim_cursor = 0;
1161                 mutex_unlock(&pag->pag_ici_reclaim_lock);
1162                 xfs_perag_put(pag);
1163         }
1164
1165         /*
1166          * if we skipped any AG, and we still have scan count remaining, do
1167          * another pass this time using blocking reclaim semantics (i.e
1168          * waiting on the reclaim locks and ignoring the reclaim cursors). This
1169          * ensure that when we get more reclaimers than AGs we block rather
1170          * than spin trying to execute reclaim.
1171          */
1172         if (skipped && (flags & SYNC_WAIT) && *nr_to_scan > 0) {
1173                 trylock = 0;
1174                 goto restart;
1175         }
1176         return last_error;
1177 }
1178
1179 int
1180 xfs_reclaim_inodes(
1181         xfs_mount_t     *mp,
1182         int             mode)
1183 {
1184         int             nr_to_scan = INT_MAX;
1185
1186         return xfs_reclaim_inodes_ag(mp, mode, &nr_to_scan);
1187 }
1188
1189 /*
1190  * Scan a certain number of inodes for reclaim.
1191  *
1192  * When called we make sure that there is a background (fast) inode reclaim in
1193  * progress, while we will throttle the speed of reclaim via doing synchronous
1194  * reclaim of inodes. That means if we come across dirty inodes, we wait for
1195  * them to be cleaned, which we hope will not be very long due to the
1196  * background walker having already kicked the IO off on those dirty inodes.
1197  */
1198 long
1199 xfs_reclaim_inodes_nr(
1200         struct xfs_mount        *mp,
1201         int                     nr_to_scan)
1202 {
1203         /* kick background reclaimer and push the AIL */
1204         xfs_reclaim_work_queue(mp);
1205         xfs_ail_push_all(mp->m_ail);
1206
1207         return xfs_reclaim_inodes_ag(mp, SYNC_TRYLOCK | SYNC_WAIT, &nr_to_scan);
1208 }
1209
1210 /*
1211  * Return the number of reclaimable inodes in the filesystem for
1212  * the shrinker to determine how much to reclaim.
1213  */
1214 int
1215 xfs_reclaim_inodes_count(
1216         struct xfs_mount        *mp)
1217 {
1218         struct xfs_perag        *pag;
1219         xfs_agnumber_t          ag = 0;
1220         int                     reclaimable = 0;
1221
1222         while ((pag = xfs_perag_get_tag(mp, ag, XFS_ICI_RECLAIM_TAG))) {
1223                 ag = pag->pag_agno + 1;
1224                 reclaimable += pag->pag_ici_reclaimable;
1225                 xfs_perag_put(pag);
1226         }
1227         return reclaimable;
1228 }
1229
1230 STATIC int
1231 xfs_inode_match_id(
1232         struct xfs_inode        *ip,
1233         struct xfs_eofblocks    *eofb)
1234 {
1235         if ((eofb->eof_flags & XFS_EOF_FLAGS_UID) &&
1236             !uid_eq(VFS_I(ip)->i_uid, eofb->eof_uid))
1237                 return 0;
1238
1239         if ((eofb->eof_flags & XFS_EOF_FLAGS_GID) &&
1240             !gid_eq(VFS_I(ip)->i_gid, eofb->eof_gid))
1241                 return 0;
1242
1243         if ((eofb->eof_flags & XFS_EOF_FLAGS_PRID) &&
1244             xfs_get_projid(ip) != eofb->eof_prid)
1245                 return 0;
1246
1247         return 1;
1248 }
1249
1250 /*
1251  * A union-based inode filtering algorithm. Process the inode if any of the
1252  * criteria match. This is for global/internal scans only.
1253  */
1254 STATIC int
1255 xfs_inode_match_id_union(
1256         struct xfs_inode        *ip,
1257         struct xfs_eofblocks    *eofb)
1258 {
1259         if ((eofb->eof_flags & XFS_EOF_FLAGS_UID) &&
1260             uid_eq(VFS_I(ip)->i_uid, eofb->eof_uid))
1261                 return 1;
1262
1263         if ((eofb->eof_flags & XFS_EOF_FLAGS_GID) &&
1264             gid_eq(VFS_I(ip)->i_gid, eofb->eof_gid))
1265                 return 1;
1266
1267         if ((eofb->eof_flags & XFS_EOF_FLAGS_PRID) &&
1268             xfs_get_projid(ip) == eofb->eof_prid)
1269                 return 1;
1270
1271         return 0;
1272 }
1273
1274 STATIC int
1275 xfs_inode_free_eofblocks(
1276         struct xfs_inode        *ip,
1277         int                     flags,
1278         void                    *args)
1279 {
1280         int ret;
1281         struct xfs_eofblocks *eofb = args;
1282         bool need_iolock = true;
1283         int match;
1284
1285         ASSERT(!eofb || (eofb && eofb->eof_scan_owner != 0));
1286
1287         if (!xfs_can_free_eofblocks(ip, false)) {
1288                 /* inode could be preallocated or append-only */
1289                 trace_xfs_inode_free_eofblocks_invalid(ip);
1290                 xfs_inode_clear_eofblocks_tag(ip);
1291                 return 0;
1292         }
1293
1294         /*
1295          * If the mapping is dirty the operation can block and wait for some
1296          * time. Unless we are waiting, skip it.
1297          */
1298         if (!(flags & SYNC_WAIT) &&
1299             mapping_tagged(VFS_I(ip)->i_mapping, PAGECACHE_TAG_DIRTY))
1300                 return 0;
1301
1302         if (eofb) {
1303                 if (eofb->eof_flags & XFS_EOF_FLAGS_UNION)
1304                         match = xfs_inode_match_id_union(ip, eofb);
1305                 else
1306                         match = xfs_inode_match_id(ip, eofb);
1307                 if (!match)
1308                         return 0;
1309
1310                 /* skip the inode if the file size is too small */
1311                 if (eofb->eof_flags & XFS_EOF_FLAGS_MINFILESIZE &&
1312                     XFS_ISIZE(ip) < eofb->eof_min_file_size)
1313                         return 0;
1314
1315                 /*
1316                  * A scan owner implies we already hold the iolock. Skip it in
1317                  * xfs_free_eofblocks() to avoid deadlock. This also eliminates
1318                  * the possibility of EAGAIN being returned.
1319                  */
1320                 if (eofb->eof_scan_owner == ip->i_ino)
1321                         need_iolock = false;
1322         }
1323
1324         ret = xfs_free_eofblocks(ip->i_mount, ip, need_iolock);
1325
1326         /* don't revisit the inode if we're not waiting */
1327         if (ret == -EAGAIN && !(flags & SYNC_WAIT))
1328                 ret = 0;
1329
1330         return ret;
1331 }
1332
1333 int
1334 xfs_icache_free_eofblocks(
1335         struct xfs_mount        *mp,
1336         struct xfs_eofblocks    *eofb)
1337 {
1338         int flags = SYNC_TRYLOCK;
1339
1340         if (eofb && (eofb->eof_flags & XFS_EOF_FLAGS_SYNC))
1341                 flags = SYNC_WAIT;
1342
1343         return xfs_inode_ag_iterator_tag(mp, xfs_inode_free_eofblocks, flags,
1344                                          eofb, XFS_ICI_EOFBLOCKS_TAG);
1345 }
1346
1347 /*
1348  * Run eofblocks scans on the quotas applicable to the inode. For inodes with
1349  * multiple quotas, we don't know exactly which quota caused an allocation
1350  * failure. We make a best effort by including each quota under low free space
1351  * conditions (less than 1% free space) in the scan.
1352  */
1353 int
1354 xfs_inode_free_quota_eofblocks(
1355         struct xfs_inode *ip)
1356 {
1357         int scan = 0;
1358         struct xfs_eofblocks eofb = {0};
1359         struct xfs_dquot *dq;
1360
1361         ASSERT(xfs_isilocked(ip, XFS_IOLOCK_EXCL));
1362
1363         /*
1364          * Set the scan owner to avoid a potential livelock. Otherwise, the scan
1365          * can repeatedly trylock on the inode we're currently processing. We
1366          * run a sync scan to increase effectiveness and use the union filter to
1367          * cover all applicable quotas in a single scan.
1368          */
1369         eofb.eof_scan_owner = ip->i_ino;
1370         eofb.eof_flags = XFS_EOF_FLAGS_UNION|XFS_EOF_FLAGS_SYNC;
1371
1372         if (XFS_IS_UQUOTA_ENFORCED(ip->i_mount)) {
1373                 dq = xfs_inode_dquot(ip, XFS_DQ_USER);
1374                 if (dq && xfs_dquot_lowsp(dq)) {
1375                         eofb.eof_uid = VFS_I(ip)->i_uid;
1376                         eofb.eof_flags |= XFS_EOF_FLAGS_UID;
1377                         scan = 1;
1378                 }
1379         }
1380
1381         if (XFS_IS_GQUOTA_ENFORCED(ip->i_mount)) {
1382                 dq = xfs_inode_dquot(ip, XFS_DQ_GROUP);
1383                 if (dq && xfs_dquot_lowsp(dq)) {
1384                         eofb.eof_gid = VFS_I(ip)->i_gid;
1385                         eofb.eof_flags |= XFS_EOF_FLAGS_GID;
1386                         scan = 1;
1387                 }
1388         }
1389
1390         if (scan)
1391                 xfs_icache_free_eofblocks(ip->i_mount, &eofb);
1392
1393         return scan;
1394 }
1395
1396 void
1397 xfs_inode_set_eofblocks_tag(
1398         xfs_inode_t     *ip)
1399 {
1400         struct xfs_mount *mp = ip->i_mount;
1401         struct xfs_perag *pag;
1402         int tagged;
1403
1404         pag = xfs_perag_get(mp, XFS_INO_TO_AGNO(mp, ip->i_ino));
1405         spin_lock(&pag->pag_ici_lock);
1406         trace_xfs_inode_set_eofblocks_tag(ip);
1407
1408         tagged = radix_tree_tagged(&pag->pag_ici_root,
1409                                    XFS_ICI_EOFBLOCKS_TAG);
1410         radix_tree_tag_set(&pag->pag_ici_root,
1411                            XFS_INO_TO_AGINO(ip->i_mount, ip->i_ino),
1412                            XFS_ICI_EOFBLOCKS_TAG);
1413         if (!tagged) {
1414                 /* propagate the eofblocks tag up into the perag radix tree */
1415                 spin_lock(&ip->i_mount->m_perag_lock);
1416                 radix_tree_tag_set(&ip->i_mount->m_perag_tree,
1417                                    XFS_INO_TO_AGNO(ip->i_mount, ip->i_ino),
1418                                    XFS_ICI_EOFBLOCKS_TAG);
1419                 spin_unlock(&ip->i_mount->m_perag_lock);
1420
1421                 /* kick off background trimming */
1422                 xfs_queue_eofblocks(ip->i_mount);
1423
1424                 trace_xfs_perag_set_eofblocks(ip->i_mount, pag->pag_agno,
1425                                               -1, _RET_IP_);
1426         }
1427
1428         spin_unlock(&pag->pag_ici_lock);
1429         xfs_perag_put(pag);
1430 }
1431
1432 void
1433 xfs_inode_clear_eofblocks_tag(
1434         xfs_inode_t     *ip)
1435 {
1436         struct xfs_mount *mp = ip->i_mount;
1437         struct xfs_perag *pag;
1438
1439         pag = xfs_perag_get(mp, XFS_INO_TO_AGNO(mp, ip->i_ino));
1440         spin_lock(&pag->pag_ici_lock);
1441         trace_xfs_inode_clear_eofblocks_tag(ip);
1442
1443         radix_tree_tag_clear(&pag->pag_ici_root,
1444                              XFS_INO_TO_AGINO(ip->i_mount, ip->i_ino),
1445                              XFS_ICI_EOFBLOCKS_TAG);
1446         if (!radix_tree_tagged(&pag->pag_ici_root, XFS_ICI_EOFBLOCKS_TAG)) {
1447                 /* clear the eofblocks tag from the perag radix tree */
1448                 spin_lock(&ip->i_mount->m_perag_lock);
1449                 radix_tree_tag_clear(&ip->i_mount->m_perag_tree,
1450                                      XFS_INO_TO_AGNO(ip->i_mount, ip->i_ino),
1451                                      XFS_ICI_EOFBLOCKS_TAG);
1452                 spin_unlock(&ip->i_mount->m_perag_lock);
1453                 trace_xfs_perag_clear_eofblocks(ip->i_mount, pag->pag_agno,
1454                                                -1, _RET_IP_);
1455         }
1456
1457         spin_unlock(&pag->pag_ici_lock);
1458         xfs_perag_put(pag);
1459 }
1460