Merge branch 'fix/opl3sa2-suspend' into topic/isa-misc
[linux-2.6] / fs / ubifs / gc.c
1 /*
2  * This file is part of UBIFS.
3  *
4  * Copyright (C) 2006-2008 Nokia Corporation.
5  *
6  * This program is free software; you can redistribute it and/or modify it
7  * under the terms of the GNU General Public License version 2 as published by
8  * the Free Software Foundation.
9  *
10  * This program is distributed in the hope that it will be useful, but WITHOUT
11  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
13  * more details.
14  *
15  * You should have received a copy of the GNU General Public License along with
16  * this program; if not, write to the Free Software Foundation, Inc., 51
17  * Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18  *
19  * Authors: Adrian Hunter
20  *          Artem Bityutskiy (Битюцкий Артём)
21  */
22
23 /*
24  * This file implements garbage collection. The procedure for garbage collection
25  * is different depending on whether a LEB as an index LEB (contains index
26  * nodes) or not. For non-index LEBs, garbage collection finds a LEB which
27  * contains a lot of dirty space (obsolete nodes), and copies the non-obsolete
28  * nodes to the journal, at which point the garbage-collected LEB is free to be
29  * reused. For index LEBs, garbage collection marks the non-obsolete index nodes
30  * dirty in the TNC, and after the next commit, the garbage-collected LEB is
31  * to be reused. Garbage collection will cause the number of dirty index nodes
32  * to grow, however sufficient space is reserved for the index to ensure the
33  * commit will never run out of space.
34  *
35  * Notes about dead watermark. At current UBIFS implementation we assume that
36  * LEBs which have less than @c->dead_wm bytes of free + dirty space are full
37  * and not worth garbage-collecting. The dead watermark is one min. I/O unit
38  * size, or min. UBIFS node size, depending on what is greater. Indeed, UBIFS
39  * Garbage Collector has to synchronize the GC head's write buffer before
40  * returning, so this is about wasting one min. I/O unit. However, UBIFS GC can
41  * actually reclaim even very small pieces of dirty space by garbage collecting
42  * enough dirty LEBs, but we do not bother doing this at this implementation.
43  *
44  * Notes about dark watermark. The results of GC work depends on how big are
45  * the UBIFS nodes GC deals with. Large nodes make GC waste more space. Indeed,
46  * if GC move data from LEB A to LEB B and nodes in LEB A are large, GC would
47  * have to waste large pieces of free space at the end of LEB B, because nodes
48  * from LEB A would not fit. And the worst situation is when all nodes are of
49  * maximum size. So dark watermark is the amount of free + dirty space in LEB
50  * which are guaranteed to be reclaimable. If LEB has less space, the GC migh
51  * be unable to reclaim it. So, LEBs with free + dirty greater than dark
52  * watermark are "good" LEBs from GC's point of few. The other LEBs are not so
53  * good, and GC takes extra care when moving them.
54  */
55
56 #include <linux/pagemap.h>
57 #include "ubifs.h"
58
59 /*
60  * GC tries to optimize the way it fit nodes to available space, and it sorts
61  * nodes a little. The below constants are watermarks which define "large",
62  * "medium", and "small" nodes.
63  */
64 #define MEDIUM_NODE_WM (UBIFS_BLOCK_SIZE / 4)
65 #define SMALL_NODE_WM  UBIFS_MAX_DENT_NODE_SZ
66
67 /*
68  * GC may need to move more than one LEB to make progress. The below constants
69  * define "soft" and "hard" limits on the number of LEBs the garbage collector
70  * may move.
71  */
72 #define SOFT_LEBS_LIMIT 4
73 #define HARD_LEBS_LIMIT 32
74
75 /**
76  * switch_gc_head - switch the garbage collection journal head.
77  * @c: UBIFS file-system description object
78  * @buf: buffer to write
79  * @len: length of the buffer to write
80  * @lnum: LEB number written is returned here
81  * @offs: offset written is returned here
82  *
83  * This function switch the GC head to the next LEB which is reserved in
84  * @c->gc_lnum. Returns %0 in case of success, %-EAGAIN if commit is required,
85  * and other negative error code in case of failures.
86  */
87 static int switch_gc_head(struct ubifs_info *c)
88 {
89         int err, gc_lnum = c->gc_lnum;
90         struct ubifs_wbuf *wbuf = &c->jheads[GCHD].wbuf;
91
92         ubifs_assert(gc_lnum != -1);
93         dbg_gc("switch GC head from LEB %d:%d to LEB %d (waste %d bytes)",
94                wbuf->lnum, wbuf->offs + wbuf->used, gc_lnum,
95                c->leb_size - wbuf->offs - wbuf->used);
96
97         err = ubifs_wbuf_sync_nolock(wbuf);
98         if (err)
99                 return err;
100
101         /*
102          * The GC write-buffer was synchronized, we may safely unmap
103          * 'c->gc_lnum'.
104          */
105         err = ubifs_leb_unmap(c, gc_lnum);
106         if (err)
107                 return err;
108
109         err = ubifs_add_bud_to_log(c, GCHD, gc_lnum, 0);
110         if (err)
111                 return err;
112
113         c->gc_lnum = -1;
114         err = ubifs_wbuf_seek_nolock(wbuf, gc_lnum, 0, UBI_LONGTERM);
115         return err;
116 }
117
118 /**
119  * joinup - bring data nodes for an inode together.
120  * @c: UBIFS file-system description object
121  * @sleb: describes scanned LEB
122  * @inum: inode number
123  * @blk: block number
124  * @data: list to which to add data nodes
125  *
126  * This function looks at the first few nodes in the scanned LEB @sleb and adds
127  * them to @data if they are data nodes from @inum and have a larger block
128  * number than @blk. This function returns %0 on success and a negative error
129  * code on failure.
130  */
131 static int joinup(struct ubifs_info *c, struct ubifs_scan_leb *sleb, ino_t inum,
132                   unsigned int blk, struct list_head *data)
133 {
134         int err, cnt = 6, lnum = sleb->lnum, offs;
135         struct ubifs_scan_node *snod, *tmp;
136         union ubifs_key *key;
137
138         list_for_each_entry_safe(snod, tmp, &sleb->nodes, list) {
139                 key = &snod->key;
140                 if (key_inum(c, key) == inum &&
141                     key_type(c, key) == UBIFS_DATA_KEY &&
142                     key_block(c, key) > blk) {
143                         offs = snod->offs;
144                         err = ubifs_tnc_has_node(c, key, 0, lnum, offs, 0);
145                         if (err < 0)
146                                 return err;
147                         list_del(&snod->list);
148                         if (err) {
149                                 list_add_tail(&snod->list, data);
150                                 blk = key_block(c, key);
151                         } else
152                                 kfree(snod);
153                         cnt = 6;
154                 } else if (--cnt == 0)
155                         break;
156         }
157         return 0;
158 }
159
160 /**
161  * move_nodes - move nodes.
162  * @c: UBIFS file-system description object
163  * @sleb: describes nodes to move
164  *
165  * This function moves valid nodes from data LEB described by @sleb to the GC
166  * journal head. The obsolete nodes are dropped.
167  *
168  * When moving nodes we have to deal with classical bin-packing problem: the
169  * space in the current GC journal head LEB and in @c->gc_lnum are the "bins",
170  * where the nodes in the @sleb->nodes list are the elements which should be
171  * fit optimally to the bins. This function uses the "first fit decreasing"
172  * strategy, although it does not really sort the nodes but just split them on
173  * 3 classes - large, medium, and small, so they are roughly sorted.
174  *
175  * This function returns zero in case of success, %-EAGAIN if commit is
176  * required, and other negative error codes in case of other failures.
177  */
178 static int move_nodes(struct ubifs_info *c, struct ubifs_scan_leb *sleb)
179 {
180         struct ubifs_scan_node *snod, *tmp;
181         struct list_head data, large, medium, small;
182         struct ubifs_wbuf *wbuf = &c->jheads[GCHD].wbuf;
183         int avail, err, min = INT_MAX;
184         unsigned int blk = 0;
185         ino_t inum = 0;
186
187         INIT_LIST_HEAD(&data);
188         INIT_LIST_HEAD(&large);
189         INIT_LIST_HEAD(&medium);
190         INIT_LIST_HEAD(&small);
191
192         while (!list_empty(&sleb->nodes)) {
193                 struct list_head *lst = sleb->nodes.next;
194
195                 snod = list_entry(lst, struct ubifs_scan_node, list);
196
197                 ubifs_assert(snod->type != UBIFS_IDX_NODE);
198                 ubifs_assert(snod->type != UBIFS_REF_NODE);
199                 ubifs_assert(snod->type != UBIFS_CS_NODE);
200
201                 err = ubifs_tnc_has_node(c, &snod->key, 0, sleb->lnum,
202                                          snod->offs, 0);
203                 if (err < 0)
204                         goto out;
205
206                 list_del(lst);
207                 if (!err) {
208                         /* The node is obsolete, remove it from the list */
209                         kfree(snod);
210                         continue;
211                 }
212
213                 /*
214                  * Sort the list of nodes so that data nodes go first, large
215                  * nodes go second, and small nodes go last.
216                  */
217                 if (key_type(c, &snod->key) == UBIFS_DATA_KEY) {
218                         if (inum != key_inum(c, &snod->key)) {
219                                 if (inum) {
220                                         /*
221                                          * Try to move data nodes from the same
222                                          * inode together.
223                                          */
224                                         err = joinup(c, sleb, inum, blk, &data);
225                                         if (err)
226                                                 goto out;
227                                 }
228                                 inum = key_inum(c, &snod->key);
229                                 blk = key_block(c, &snod->key);
230                         }
231                         list_add_tail(lst, &data);
232                 } else if (snod->len > MEDIUM_NODE_WM)
233                         list_add_tail(lst, &large);
234                 else if (snod->len > SMALL_NODE_WM)
235                         list_add_tail(lst, &medium);
236                 else
237                         list_add_tail(lst, &small);
238
239                 /* And find the smallest node */
240                 if (snod->len < min)
241                         min = snod->len;
242         }
243
244         /*
245          * Join the tree lists so that we'd have one roughly sorted list
246          * ('large' will be the head of the joined list).
247          */
248         list_splice(&data, &large);
249         list_splice(&medium, large.prev);
250         list_splice(&small, large.prev);
251
252         if (wbuf->lnum == -1) {
253                 /*
254                  * The GC journal head is not set, because it is the first GC
255                  * invocation since mount.
256                  */
257                 err = switch_gc_head(c);
258                 if (err)
259                         goto out;
260         }
261
262         /* Write nodes to their new location. Use the first-fit strategy */
263         while (1) {
264                 avail = c->leb_size - wbuf->offs - wbuf->used;
265                 list_for_each_entry_safe(snod, tmp, &large, list) {
266                         int new_lnum, new_offs;
267
268                         if (avail < min)
269                                 break;
270
271                         if (snod->len > avail)
272                                 /* This node does not fit */
273                                 continue;
274
275                         cond_resched();
276
277                         new_lnum = wbuf->lnum;
278                         new_offs = wbuf->offs + wbuf->used;
279                         err = ubifs_wbuf_write_nolock(wbuf, snod->node,
280                                                       snod->len);
281                         if (err)
282                                 goto out;
283                         err = ubifs_tnc_replace(c, &snod->key, sleb->lnum,
284                                                 snod->offs, new_lnum, new_offs,
285                                                 snod->len);
286                         if (err)
287                                 goto out;
288
289                         avail = c->leb_size - wbuf->offs - wbuf->used;
290                         list_del(&snod->list);
291                         kfree(snod);
292                 }
293
294                 if (list_empty(&large))
295                         break;
296
297                 /*
298                  * Waste the rest of the space in the LEB and switch to the
299                  * next LEB.
300                  */
301                 err = switch_gc_head(c);
302                 if (err)
303                         goto out;
304         }
305
306         return 0;
307
308 out:
309         list_for_each_entry_safe(snod, tmp, &large, list) {
310                 list_del(&snod->list);
311                 kfree(snod);
312         }
313         return err;
314 }
315
316 /**
317  * gc_sync_wbufs - sync write-buffers for GC.
318  * @c: UBIFS file-system description object
319  *
320  * We must guarantee that obsoleting nodes are on flash. Unfortunately they may
321  * be in a write-buffer instead. That is, a node could be written to a
322  * write-buffer, obsoleting another node in a LEB that is GC'd. If that LEB is
323  * erased before the write-buffer is sync'd and then there is an unclean
324  * unmount, then an existing node is lost. To avoid this, we sync all
325  * write-buffers.
326  *
327  * This function returns %0 on success or a negative error code on failure.
328  */
329 static int gc_sync_wbufs(struct ubifs_info *c)
330 {
331         int err, i;
332
333         for (i = 0; i < c->jhead_cnt; i++) {
334                 if (i == GCHD)
335                         continue;
336                 err = ubifs_wbuf_sync(&c->jheads[i].wbuf);
337                 if (err)
338                         return err;
339         }
340         return 0;
341 }
342
343 /**
344  * ubifs_garbage_collect_leb - garbage-collect a logical eraseblock.
345  * @c: UBIFS file-system description object
346  * @lp: describes the LEB to garbage collect
347  *
348  * This function garbage-collects an LEB and returns one of the @LEB_FREED,
349  * @LEB_RETAINED, etc positive codes in case of success, %-EAGAIN if commit is
350  * required, and other negative error codes in case of failures.
351  */
352 int ubifs_garbage_collect_leb(struct ubifs_info *c, struct ubifs_lprops *lp)
353 {
354         struct ubifs_scan_leb *sleb;
355         struct ubifs_scan_node *snod;
356         struct ubifs_wbuf *wbuf = &c->jheads[GCHD].wbuf;
357         int err = 0, lnum = lp->lnum;
358
359         ubifs_assert(c->gc_lnum != -1 || wbuf->offs + wbuf->used == 0 ||
360                      c->need_recovery);
361         ubifs_assert(c->gc_lnum != lnum);
362         ubifs_assert(wbuf->lnum != lnum);
363
364         /*
365          * We scan the entire LEB even though we only really need to scan up to
366          * (c->leb_size - lp->free).
367          */
368         sleb = ubifs_scan(c, lnum, 0, c->sbuf);
369         if (IS_ERR(sleb))
370                 return PTR_ERR(sleb);
371
372         ubifs_assert(!list_empty(&sleb->nodes));
373         snod = list_entry(sleb->nodes.next, struct ubifs_scan_node, list);
374
375         if (snod->type == UBIFS_IDX_NODE) {
376                 struct ubifs_gced_idx_leb *idx_gc;
377
378                 dbg_gc("indexing LEB %d (free %d, dirty %d)",
379                        lnum, lp->free, lp->dirty);
380                 list_for_each_entry(snod, &sleb->nodes, list) {
381                         struct ubifs_idx_node *idx = snod->node;
382                         int level = le16_to_cpu(idx->level);
383
384                         ubifs_assert(snod->type == UBIFS_IDX_NODE);
385                         key_read(c, ubifs_idx_key(c, idx), &snod->key);
386                         err = ubifs_dirty_idx_node(c, &snod->key, level, lnum,
387                                                    snod->offs);
388                         if (err)
389                                 goto out;
390                 }
391
392                 idx_gc = kmalloc(sizeof(struct ubifs_gced_idx_leb), GFP_NOFS);
393                 if (!idx_gc) {
394                         err = -ENOMEM;
395                         goto out;
396                 }
397
398                 idx_gc->lnum = lnum;
399                 idx_gc->unmap = 0;
400                 list_add(&idx_gc->list, &c->idx_gc);
401
402                 /*
403                  * Don't release the LEB until after the next commit, because
404                  * it may contain data which is needed for recovery. So
405                  * although we freed this LEB, it will become usable only after
406                  * the commit.
407                  */
408                 err = ubifs_change_one_lp(c, lnum, c->leb_size, 0, 0,
409                                           LPROPS_INDEX, 1);
410                 if (err)
411                         goto out;
412                 err = LEB_FREED_IDX;
413         } else {
414                 dbg_gc("data LEB %d (free %d, dirty %d)",
415                        lnum, lp->free, lp->dirty);
416
417                 err = move_nodes(c, sleb);
418                 if (err)
419                         goto out_inc_seq;
420
421                 err = gc_sync_wbufs(c);
422                 if (err)
423                         goto out_inc_seq;
424
425                 err = ubifs_change_one_lp(c, lnum, c->leb_size, 0, 0, 0, 0);
426                 if (err)
427                         goto out_inc_seq;
428
429                 /* Allow for races with TNC */
430                 c->gced_lnum = lnum;
431                 smp_wmb();
432                 c->gc_seq += 1;
433                 smp_wmb();
434
435                 if (c->gc_lnum == -1) {
436                         c->gc_lnum = lnum;
437                         err = LEB_RETAINED;
438                 } else {
439                         err = ubifs_wbuf_sync_nolock(wbuf);
440                         if (err)
441                                 goto out;
442
443                         err = ubifs_leb_unmap(c, lnum);
444                         if (err)
445                                 goto out;
446
447                         err = LEB_FREED;
448                 }
449         }
450
451 out:
452         ubifs_scan_destroy(sleb);
453         return err;
454
455 out_inc_seq:
456         /* We may have moved at least some nodes so allow for races with TNC */
457         c->gced_lnum = lnum;
458         smp_wmb();
459         c->gc_seq += 1;
460         smp_wmb();
461         goto out;
462 }
463
464 /**
465  * ubifs_garbage_collect - UBIFS garbage collector.
466  * @c: UBIFS file-system description object
467  * @anyway: do GC even if there are free LEBs
468  *
469  * This function does out-of-place garbage collection. The return codes are:
470  *   o positive LEB number if the LEB has been freed and may be used;
471  *   o %-EAGAIN if the caller has to run commit;
472  *   o %-ENOSPC if GC failed to make any progress;
473  *   o other negative error codes in case of other errors.
474  *
475  * Garbage collector writes data to the journal when GC'ing data LEBs, and just
476  * marking indexing nodes dirty when GC'ing indexing LEBs. Thus, at some point
477  * commit may be required. But commit cannot be run from inside GC, because the
478  * caller might be holding the commit lock, so %-EAGAIN is returned instead;
479  * And this error code means that the caller has to run commit, and re-run GC
480  * if there is still no free space.
481  *
482  * There are many reasons why this function may return %-EAGAIN:
483  * o the log is full and there is no space to write an LEB reference for
484  *   @c->gc_lnum;
485  * o the journal is too large and exceeds size limitations;
486  * o GC moved indexing LEBs, but they can be used only after the commit;
487  * o the shrinker fails to find clean znodes to free and requests the commit;
488  * o etc.
489  *
490  * Note, if the file-system is close to be full, this function may return
491  * %-EAGAIN infinitely, so the caller has to limit amount of re-invocations of
492  * the function. E.g., this happens if the limits on the journal size are too
493  * tough and GC writes too much to the journal before an LEB is freed. This
494  * might also mean that the journal is too large, and the TNC becomes to big,
495  * so that the shrinker is constantly called, finds not clean znodes to free,
496  * and requests commit. Well, this may also happen if the journal is all right,
497  * but another kernel process consumes too much memory. Anyway, infinite
498  * %-EAGAIN may happen, but in some extreme/misconfiguration cases.
499  */
500 int ubifs_garbage_collect(struct ubifs_info *c, int anyway)
501 {
502         int i, err, ret, min_space = c->dead_wm;
503         struct ubifs_lprops lp;
504         struct ubifs_wbuf *wbuf = &c->jheads[GCHD].wbuf;
505
506         ubifs_assert_cmt_locked(c);
507
508         if (ubifs_gc_should_commit(c))
509                 return -EAGAIN;
510
511         mutex_lock_nested(&wbuf->io_mutex, wbuf->jhead);
512
513         if (c->ro_media) {
514                 ret = -EROFS;
515                 goto out_unlock;
516         }
517
518         /* We expect the write-buffer to be empty on entry */
519         ubifs_assert(!wbuf->used);
520
521         for (i = 0; ; i++) {
522                 int space_before = c->leb_size - wbuf->offs - wbuf->used;
523                 int space_after;
524
525                 cond_resched();
526
527                 /* Give the commit an opportunity to run */
528                 if (ubifs_gc_should_commit(c)) {
529                         ret = -EAGAIN;
530                         break;
531                 }
532
533                 if (i > SOFT_LEBS_LIMIT && !list_empty(&c->idx_gc)) {
534                         /*
535                          * We've done enough iterations. Indexing LEBs were
536                          * moved and will be available after the commit.
537                          */
538                         dbg_gc("soft limit, some index LEBs GC'ed, -EAGAIN");
539                         ubifs_commit_required(c);
540                         ret = -EAGAIN;
541                         break;
542                 }
543
544                 if (i > HARD_LEBS_LIMIT) {
545                         /*
546                          * We've moved too many LEBs and have not made
547                          * progress, give up.
548                          */
549                         dbg_gc("hard limit, -ENOSPC");
550                         ret = -ENOSPC;
551                         break;
552                 }
553
554                 /*
555                  * Empty and freeable LEBs can turn up while we waited for
556                  * the wbuf lock, or while we have been running GC. In that
557                  * case, we should just return one of those instead of
558                  * continuing to GC dirty LEBs. Hence we request
559                  * 'ubifs_find_dirty_leb()' to return an empty LEB if it can.
560                  */
561                 ret = ubifs_find_dirty_leb(c, &lp, min_space, anyway ? 0 : 1);
562                 if (ret) {
563                         if (ret == -ENOSPC)
564                                 dbg_gc("no more dirty LEBs");
565                         break;
566                 }
567
568                 dbg_gc("found LEB %d: free %d, dirty %d, sum %d "
569                        "(min. space %d)", lp.lnum, lp.free, lp.dirty,
570                        lp.free + lp.dirty, min_space);
571
572                 if (lp.free + lp.dirty == c->leb_size) {
573                         /* An empty LEB was returned */
574                         dbg_gc("LEB %d is free, return it", lp.lnum);
575                         /*
576                          * ubifs_find_dirty_leb() doesn't return freeable index
577                          * LEBs.
578                          */
579                         ubifs_assert(!(lp.flags & LPROPS_INDEX));
580                         if (lp.free != c->leb_size) {
581                                 /*
582                                  * Write buffers must be sync'd before
583                                  * unmapping freeable LEBs, because one of them
584                                  * may contain data which obsoletes something
585                                  * in 'lp.pnum'.
586                                  */
587                                 ret = gc_sync_wbufs(c);
588                                 if (ret)
589                                         goto out;
590                                 ret = ubifs_change_one_lp(c, lp.lnum,
591                                                           c->leb_size, 0, 0, 0,
592                                                           0);
593                                 if (ret)
594                                         goto out;
595                         }
596                         ret = ubifs_leb_unmap(c, lp.lnum);
597                         if (ret)
598                                 goto out;
599                         ret = lp.lnum;
600                         break;
601                 }
602
603                 space_before = c->leb_size - wbuf->offs - wbuf->used;
604                 if (wbuf->lnum == -1)
605                         space_before = 0;
606
607                 ret = ubifs_garbage_collect_leb(c, &lp);
608                 if (ret < 0) {
609                         if (ret == -EAGAIN || ret == -ENOSPC) {
610                                 /*
611                                  * These codes are not errors, so we have to
612                                  * return the LEB to lprops. But if the
613                                  * 'ubifs_return_leb()' function fails, its
614                                  * failure code is propagated to the caller
615                                  * instead of the original '-EAGAIN' or
616                                  * '-ENOSPC'.
617                                  */
618                                 err = ubifs_return_leb(c, lp.lnum);
619                                 if (err)
620                                         ret = err;
621                                 break;
622                         }
623                         goto out;
624                 }
625
626                 if (ret == LEB_FREED) {
627                         /* An LEB has been freed and is ready for use */
628                         dbg_gc("LEB %d freed, return", lp.lnum);
629                         ret = lp.lnum;
630                         break;
631                 }
632
633                 if (ret == LEB_FREED_IDX) {
634                         /*
635                          * This was an indexing LEB and it cannot be
636                          * immediately used. And instead of requesting the
637                          * commit straight away, we try to garbage collect some
638                          * more.
639                          */
640                         dbg_gc("indexing LEB %d freed, continue", lp.lnum);
641                         continue;
642                 }
643
644                 ubifs_assert(ret == LEB_RETAINED);
645                 space_after = c->leb_size - wbuf->offs - wbuf->used;
646                 dbg_gc("LEB %d retained, freed %d bytes", lp.lnum,
647                        space_after - space_before);
648
649                 if (space_after > space_before) {
650                         /* GC makes progress, keep working */
651                         min_space >>= 1;
652                         if (min_space < c->dead_wm)
653                                 min_space = c->dead_wm;
654                         continue;
655                 }
656
657                 dbg_gc("did not make progress");
658
659                 /*
660                  * GC moved an LEB bud have not done any progress. This means
661                  * that the previous GC head LEB contained too few free space
662                  * and the LEB which was GC'ed contained only large nodes which
663                  * did not fit that space.
664                  *
665                  * We can do 2 things:
666                  * 1. pick another LEB in a hope it'll contain a small node
667                  *    which will fit the space we have at the end of current GC
668                  *    head LEB, but there is no guarantee, so we try this out
669                  *    unless we have already been working for too long;
670                  * 2. request an LEB with more dirty space, which will force
671                  *    'ubifs_find_dirty_leb()' to start scanning the lprops
672                  *    table, instead of just picking one from the heap
673                  *    (previously it already picked the dirtiest LEB).
674                  */
675                 if (i < SOFT_LEBS_LIMIT) {
676                         dbg_gc("try again");
677                         continue;
678                 }
679
680                 min_space <<= 1;
681                 if (min_space > c->dark_wm)
682                         min_space = c->dark_wm;
683                 dbg_gc("set min. space to %d", min_space);
684         }
685
686         if (ret == -ENOSPC && !list_empty(&c->idx_gc)) {
687                 dbg_gc("no space, some index LEBs GC'ed, -EAGAIN");
688                 ubifs_commit_required(c);
689                 ret = -EAGAIN;
690         }
691
692         err = ubifs_wbuf_sync_nolock(wbuf);
693         if (!err)
694                 err = ubifs_leb_unmap(c, c->gc_lnum);
695         if (err) {
696                 ret = err;
697                 goto out;
698         }
699 out_unlock:
700         mutex_unlock(&wbuf->io_mutex);
701         return ret;
702
703 out:
704         ubifs_assert(ret < 0);
705         ubifs_assert(ret != -ENOSPC && ret != -EAGAIN);
706         ubifs_ro_mode(c, ret);
707         ubifs_wbuf_sync_nolock(wbuf);
708         mutex_unlock(&wbuf->io_mutex);
709         ubifs_return_leb(c, lp.lnum);
710         return ret;
711 }
712
713 /**
714  * ubifs_gc_start_commit - garbage collection at start of commit.
715  * @c: UBIFS file-system description object
716  *
717  * If a LEB has only dirty and free space, then we may safely unmap it and make
718  * it free.  Note, we cannot do this with indexing LEBs because dirty space may
719  * correspond index nodes that are required for recovery.  In that case, the
720  * LEB cannot be unmapped until after the next commit.
721  *
722  * This function returns %0 upon success and a negative error code upon failure.
723  */
724 int ubifs_gc_start_commit(struct ubifs_info *c)
725 {
726         struct ubifs_gced_idx_leb *idx_gc;
727         const struct ubifs_lprops *lp;
728         int err = 0, flags;
729
730         ubifs_get_lprops(c);
731
732         /*
733          * Unmap (non-index) freeable LEBs. Note that recovery requires that all
734          * wbufs are sync'd before this, which is done in 'do_commit()'.
735          */
736         while (1) {
737                 lp = ubifs_fast_find_freeable(c);
738                 if (IS_ERR(lp)) {
739                         err = PTR_ERR(lp);
740                         goto out;
741                 }
742                 if (!lp)
743                         break;
744                 ubifs_assert(!(lp->flags & LPROPS_TAKEN));
745                 ubifs_assert(!(lp->flags & LPROPS_INDEX));
746                 err = ubifs_leb_unmap(c, lp->lnum);
747                 if (err)
748                         goto out;
749                 lp = ubifs_change_lp(c, lp, c->leb_size, 0, lp->flags, 0);
750                 if (IS_ERR(lp)) {
751                         err = PTR_ERR(lp);
752                         goto out;
753                 }
754                 ubifs_assert(!(lp->flags & LPROPS_TAKEN));
755                 ubifs_assert(!(lp->flags & LPROPS_INDEX));
756         }
757
758         /* Mark GC'd index LEBs OK to unmap after this commit finishes */
759         list_for_each_entry(idx_gc, &c->idx_gc, list)
760                 idx_gc->unmap = 1;
761
762         /* Record index freeable LEBs for unmapping after commit */
763         while (1) {
764                 lp = ubifs_fast_find_frdi_idx(c);
765                 if (IS_ERR(lp)) {
766                         err = PTR_ERR(lp);
767                         goto out;
768                 }
769                 if (!lp)
770                         break;
771                 idx_gc = kmalloc(sizeof(struct ubifs_gced_idx_leb), GFP_NOFS);
772                 if (!idx_gc) {
773                         err = -ENOMEM;
774                         goto out;
775                 }
776                 ubifs_assert(!(lp->flags & LPROPS_TAKEN));
777                 ubifs_assert(lp->flags & LPROPS_INDEX);
778                 /* Don't release the LEB until after the next commit */
779                 flags = (lp->flags | LPROPS_TAKEN) ^ LPROPS_INDEX;
780                 lp = ubifs_change_lp(c, lp, c->leb_size, 0, flags, 1);
781                 if (IS_ERR(lp)) {
782                         err = PTR_ERR(lp);
783                         kfree(idx_gc);
784                         goto out;
785                 }
786                 ubifs_assert(lp->flags & LPROPS_TAKEN);
787                 ubifs_assert(!(lp->flags & LPROPS_INDEX));
788                 idx_gc->lnum = lp->lnum;
789                 idx_gc->unmap = 1;
790                 list_add(&idx_gc->list, &c->idx_gc);
791         }
792 out:
793         ubifs_release_lprops(c);
794         return err;
795 }
796
797 /**
798  * ubifs_gc_end_commit - garbage collection at end of commit.
799  * @c: UBIFS file-system description object
800  *
801  * This function completes out-of-place garbage collection of index LEBs.
802  */
803 int ubifs_gc_end_commit(struct ubifs_info *c)
804 {
805         struct ubifs_gced_idx_leb *idx_gc, *tmp;
806         struct ubifs_wbuf *wbuf;
807         int err = 0;
808
809         wbuf = &c->jheads[GCHD].wbuf;
810         mutex_lock_nested(&wbuf->io_mutex, wbuf->jhead);
811         list_for_each_entry_safe(idx_gc, tmp, &c->idx_gc, list)
812                 if (idx_gc->unmap) {
813                         dbg_gc("LEB %d", idx_gc->lnum);
814                         err = ubifs_leb_unmap(c, idx_gc->lnum);
815                         if (err)
816                                 goto out;
817                         err = ubifs_change_one_lp(c, idx_gc->lnum, LPROPS_NC,
818                                           LPROPS_NC, 0, LPROPS_TAKEN, -1);
819                         if (err)
820                                 goto out;
821                         list_del(&idx_gc->list);
822                         kfree(idx_gc);
823                 }
824 out:
825         mutex_unlock(&wbuf->io_mutex);
826         return err;
827 }
828
829 /**
830  * ubifs_destroy_idx_gc - destroy idx_gc list.
831  * @c: UBIFS file-system description object
832  *
833  * This function destroys the @c->idx_gc list. It is called when unmounting
834  * so locks are not needed. Returns zero in case of success and a negative
835  * error code in case of failure.
836  */
837 void ubifs_destroy_idx_gc(struct ubifs_info *c)
838 {
839         while (!list_empty(&c->idx_gc)) {
840                 struct ubifs_gced_idx_leb *idx_gc;
841
842                 idx_gc = list_entry(c->idx_gc.next, struct ubifs_gced_idx_leb,
843                                     list);
844                 c->idx_gc_cnt -= 1;
845                 list_del(&idx_gc->list);
846                 kfree(idx_gc);
847         }
848 }
849
850 /**
851  * ubifs_get_idx_gc_leb - get a LEB from GC'd index LEB list.
852  * @c: UBIFS file-system description object
853  *
854  * Called during start commit so locks are not needed.
855  */
856 int ubifs_get_idx_gc_leb(struct ubifs_info *c)
857 {
858         struct ubifs_gced_idx_leb *idx_gc;
859         int lnum;
860
861         if (list_empty(&c->idx_gc))
862                 return -ENOSPC;
863         idx_gc = list_entry(c->idx_gc.next, struct ubifs_gced_idx_leb, list);
864         lnum = idx_gc->lnum;
865         /* c->idx_gc_cnt is updated by the caller when lprops are updated */
866         list_del(&idx_gc->list);
867         kfree(idx_gc);
868         return lnum;
869 }