Merge branch 'fix/hda' into for-linus
[safe/jmp/linux-2.6] / fs / ubifs / commit.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 functions that manage the running of the commit process.
25  * Each affected module has its own functions to accomplish their part in the
26  * commit and those functions are called here.
27  *
28  * The commit is the process whereby all updates to the index and LEB properties
29  * are written out together and the journal becomes empty. This keeps the
30  * file system consistent - at all times the state can be recreated by reading
31  * the index and LEB properties and then replaying the journal.
32  *
33  * The commit is split into two parts named "commit start" and "commit end".
34  * During commit start, the commit process has exclusive access to the journal
35  * by holding the commit semaphore down for writing. As few I/O operations as
36  * possible are performed during commit start, instead the nodes that are to be
37  * written are merely identified. During commit end, the commit semaphore is no
38  * longer held and the journal is again in operation, allowing users to continue
39  * to use the file system while the bulk of the commit I/O is performed. The
40  * purpose of this two-step approach is to prevent the commit from causing any
41  * latency blips. Note that in any case, the commit does not prevent lookups
42  * (as permitted by the TNC mutex), or access to VFS data structures e.g. page
43  * cache.
44  */
45
46 #include <linux/freezer.h>
47 #include <linux/kthread.h>
48 #include <linux/slab.h>
49 #include "ubifs.h"
50
51 /**
52  * do_commit - commit the journal.
53  * @c: UBIFS file-system description object
54  *
55  * This function implements UBIFS commit. It has to be called with commit lock
56  * locked. Returns zero in case of success and a negative error code in case of
57  * failure.
58  */
59 static int do_commit(struct ubifs_info *c)
60 {
61         int err, new_ltail_lnum, old_ltail_lnum, i;
62         struct ubifs_zbranch zroot;
63         struct ubifs_lp_stats lst;
64
65         dbg_cmt("start");
66         if (c->ro_media) {
67                 err = -EROFS;
68                 goto out_up;
69         }
70
71         /* Sync all write buffers (necessary for recovery) */
72         for (i = 0; i < c->jhead_cnt; i++) {
73                 err = ubifs_wbuf_sync(&c->jheads[i].wbuf);
74                 if (err)
75                         goto out_up;
76         }
77
78         c->cmt_no += 1;
79         err = ubifs_gc_start_commit(c);
80         if (err)
81                 goto out_up;
82         err = dbg_check_lprops(c);
83         if (err)
84                 goto out_up;
85         err = ubifs_log_start_commit(c, &new_ltail_lnum);
86         if (err)
87                 goto out_up;
88         err = ubifs_tnc_start_commit(c, &zroot);
89         if (err)
90                 goto out_up;
91         err = ubifs_lpt_start_commit(c);
92         if (err)
93                 goto out_up;
94         err = ubifs_orphan_start_commit(c);
95         if (err)
96                 goto out_up;
97
98         ubifs_get_lp_stats(c, &lst);
99
100         up_write(&c->commit_sem);
101
102         err = ubifs_tnc_end_commit(c);
103         if (err)
104                 goto out;
105         err = ubifs_lpt_end_commit(c);
106         if (err)
107                 goto out;
108         err = ubifs_orphan_end_commit(c);
109         if (err)
110                 goto out;
111         old_ltail_lnum = c->ltail_lnum;
112         err = ubifs_log_end_commit(c, new_ltail_lnum);
113         if (err)
114                 goto out;
115         err = dbg_check_old_index(c, &zroot);
116         if (err)
117                 goto out;
118
119         mutex_lock(&c->mst_mutex);
120         c->mst_node->cmt_no      = cpu_to_le64(c->cmt_no);
121         c->mst_node->log_lnum    = cpu_to_le32(new_ltail_lnum);
122         c->mst_node->root_lnum   = cpu_to_le32(zroot.lnum);
123         c->mst_node->root_offs   = cpu_to_le32(zroot.offs);
124         c->mst_node->root_len    = cpu_to_le32(zroot.len);
125         c->mst_node->ihead_lnum  = cpu_to_le32(c->ihead_lnum);
126         c->mst_node->ihead_offs  = cpu_to_le32(c->ihead_offs);
127         c->mst_node->index_size  = cpu_to_le64(c->old_idx_sz);
128         c->mst_node->lpt_lnum    = cpu_to_le32(c->lpt_lnum);
129         c->mst_node->lpt_offs    = cpu_to_le32(c->lpt_offs);
130         c->mst_node->nhead_lnum  = cpu_to_le32(c->nhead_lnum);
131         c->mst_node->nhead_offs  = cpu_to_le32(c->nhead_offs);
132         c->mst_node->ltab_lnum   = cpu_to_le32(c->ltab_lnum);
133         c->mst_node->ltab_offs   = cpu_to_le32(c->ltab_offs);
134         c->mst_node->lsave_lnum  = cpu_to_le32(c->lsave_lnum);
135         c->mst_node->lsave_offs  = cpu_to_le32(c->lsave_offs);
136         c->mst_node->lscan_lnum  = cpu_to_le32(c->lscan_lnum);
137         c->mst_node->empty_lebs  = cpu_to_le32(lst.empty_lebs);
138         c->mst_node->idx_lebs    = cpu_to_le32(lst.idx_lebs);
139         c->mst_node->total_free  = cpu_to_le64(lst.total_free);
140         c->mst_node->total_dirty = cpu_to_le64(lst.total_dirty);
141         c->mst_node->total_used  = cpu_to_le64(lst.total_used);
142         c->mst_node->total_dead  = cpu_to_le64(lst.total_dead);
143         c->mst_node->total_dark  = cpu_to_le64(lst.total_dark);
144         if (c->no_orphs)
145                 c->mst_node->flags |= cpu_to_le32(UBIFS_MST_NO_ORPHS);
146         else
147                 c->mst_node->flags &= ~cpu_to_le32(UBIFS_MST_NO_ORPHS);
148         err = ubifs_write_master(c);
149         mutex_unlock(&c->mst_mutex);
150         if (err)
151                 goto out;
152
153         err = ubifs_log_post_commit(c, old_ltail_lnum);
154         if (err)
155                 goto out;
156         err = ubifs_gc_end_commit(c);
157         if (err)
158                 goto out;
159         err = ubifs_lpt_post_commit(c);
160         if (err)
161                 goto out;
162
163         spin_lock(&c->cs_lock);
164         c->cmt_state = COMMIT_RESTING;
165         wake_up(&c->cmt_wq);
166         dbg_cmt("commit end");
167         spin_unlock(&c->cs_lock);
168
169         return 0;
170
171 out_up:
172         up_write(&c->commit_sem);
173 out:
174         ubifs_err("commit failed, error %d", err);
175         spin_lock(&c->cs_lock);
176         c->cmt_state = COMMIT_BROKEN;
177         wake_up(&c->cmt_wq);
178         spin_unlock(&c->cs_lock);
179         ubifs_ro_mode(c, err);
180         return err;
181 }
182
183 /**
184  * run_bg_commit - run background commit if it is needed.
185  * @c: UBIFS file-system description object
186  *
187  * This function runs background commit if it is needed. Returns zero in case
188  * of success and a negative error code in case of failure.
189  */
190 static int run_bg_commit(struct ubifs_info *c)
191 {
192         spin_lock(&c->cs_lock);
193         /*
194          * Run background commit only if background commit was requested or if
195          * commit is required.
196          */
197         if (c->cmt_state != COMMIT_BACKGROUND &&
198             c->cmt_state != COMMIT_REQUIRED)
199                 goto out;
200         spin_unlock(&c->cs_lock);
201
202         down_write(&c->commit_sem);
203         spin_lock(&c->cs_lock);
204         if (c->cmt_state == COMMIT_REQUIRED)
205                 c->cmt_state = COMMIT_RUNNING_REQUIRED;
206         else if (c->cmt_state == COMMIT_BACKGROUND)
207                 c->cmt_state = COMMIT_RUNNING_BACKGROUND;
208         else
209                 goto out_cmt_unlock;
210         spin_unlock(&c->cs_lock);
211
212         return do_commit(c);
213
214 out_cmt_unlock:
215         up_write(&c->commit_sem);
216 out:
217         spin_unlock(&c->cs_lock);
218         return 0;
219 }
220
221 /**
222  * ubifs_bg_thread - UBIFS background thread function.
223  * @info: points to the file-system description object
224  *
225  * This function implements various file-system background activities:
226  * o when a write-buffer timer expires it synchronizes the appropriate
227  *   write-buffer;
228  * o when the journal is about to be full, it starts in-advance commit.
229  *
230  * Note, other stuff like background garbage collection may be added here in
231  * future.
232  */
233 int ubifs_bg_thread(void *info)
234 {
235         int err;
236         struct ubifs_info *c = info;
237
238         dbg_msg("background thread \"%s\" started, PID %d",
239                 c->bgt_name, current->pid);
240         set_freezable();
241
242         while (1) {
243                 if (kthread_should_stop())
244                         break;
245
246                 if (try_to_freeze())
247                         continue;
248
249                 set_current_state(TASK_INTERRUPTIBLE);
250                 /* Check if there is something to do */
251                 if (!c->need_bgt) {
252                         /*
253                          * Nothing prevents us from going sleep now and
254                          * be never woken up and block the task which
255                          * could wait in 'kthread_stop()' forever.
256                          */
257                         if (kthread_should_stop())
258                                 break;
259                         schedule();
260                         continue;
261                 } else
262                         __set_current_state(TASK_RUNNING);
263
264                 c->need_bgt = 0;
265                 err = ubifs_bg_wbufs_sync(c);
266                 if (err)
267                         ubifs_ro_mode(c, err);
268
269                 run_bg_commit(c);
270                 cond_resched();
271         }
272
273         dbg_msg("background thread \"%s\" stops", c->bgt_name);
274         return 0;
275 }
276
277 /**
278  * ubifs_commit_required - set commit state to "required".
279  * @c: UBIFS file-system description object
280  *
281  * This function is called if a commit is required but cannot be done from the
282  * calling function, so it is just flagged instead.
283  */
284 void ubifs_commit_required(struct ubifs_info *c)
285 {
286         spin_lock(&c->cs_lock);
287         switch (c->cmt_state) {
288         case COMMIT_RESTING:
289         case COMMIT_BACKGROUND:
290                 dbg_cmt("old: %s, new: %s", dbg_cstate(c->cmt_state),
291                         dbg_cstate(COMMIT_REQUIRED));
292                 c->cmt_state = COMMIT_REQUIRED;
293                 break;
294         case COMMIT_RUNNING_BACKGROUND:
295                 dbg_cmt("old: %s, new: %s", dbg_cstate(c->cmt_state),
296                         dbg_cstate(COMMIT_RUNNING_REQUIRED));
297                 c->cmt_state = COMMIT_RUNNING_REQUIRED;
298                 break;
299         case COMMIT_REQUIRED:
300         case COMMIT_RUNNING_REQUIRED:
301         case COMMIT_BROKEN:
302                 break;
303         }
304         spin_unlock(&c->cs_lock);
305 }
306
307 /**
308  * ubifs_request_bg_commit - notify the background thread to do a commit.
309  * @c: UBIFS file-system description object
310  *
311  * This function is called if the journal is full enough to make a commit
312  * worthwhile, so background thread is kicked to start it.
313  */
314 void ubifs_request_bg_commit(struct ubifs_info *c)
315 {
316         spin_lock(&c->cs_lock);
317         if (c->cmt_state == COMMIT_RESTING) {
318                 dbg_cmt("old: %s, new: %s", dbg_cstate(c->cmt_state),
319                         dbg_cstate(COMMIT_BACKGROUND));
320                 c->cmt_state = COMMIT_BACKGROUND;
321                 spin_unlock(&c->cs_lock);
322                 ubifs_wake_up_bgt(c);
323         } else
324                 spin_unlock(&c->cs_lock);
325 }
326
327 /**
328  * wait_for_commit - wait for commit.
329  * @c: UBIFS file-system description object
330  *
331  * This function sleeps until the commit operation is no longer running.
332  */
333 static int wait_for_commit(struct ubifs_info *c)
334 {
335         dbg_cmt("pid %d goes sleep", current->pid);
336
337         /*
338          * The following sleeps if the condition is false, and will be woken
339          * when the commit ends. It is possible, although very unlikely, that we
340          * will wake up and see the subsequent commit running, rather than the
341          * one we were waiting for, and go back to sleep.  However, we will be
342          * woken again, so there is no danger of sleeping forever.
343          */
344         wait_event(c->cmt_wq, c->cmt_state != COMMIT_RUNNING_BACKGROUND &&
345                               c->cmt_state != COMMIT_RUNNING_REQUIRED);
346         dbg_cmt("commit finished, pid %d woke up", current->pid);
347         return 0;
348 }
349
350 /**
351  * ubifs_run_commit - run or wait for commit.
352  * @c: UBIFS file-system description object
353  *
354  * This function runs commit and returns zero in case of success and a negative
355  * error code in case of failure.
356  */
357 int ubifs_run_commit(struct ubifs_info *c)
358 {
359         int err = 0;
360
361         spin_lock(&c->cs_lock);
362         if (c->cmt_state == COMMIT_BROKEN) {
363                 err = -EINVAL;
364                 goto out;
365         }
366
367         if (c->cmt_state == COMMIT_RUNNING_BACKGROUND)
368                 /*
369                  * We set the commit state to 'running required' to indicate
370                  * that we want it to complete as quickly as possible.
371                  */
372                 c->cmt_state = COMMIT_RUNNING_REQUIRED;
373
374         if (c->cmt_state == COMMIT_RUNNING_REQUIRED) {
375                 spin_unlock(&c->cs_lock);
376                 return wait_for_commit(c);
377         }
378         spin_unlock(&c->cs_lock);
379
380         /* Ok, the commit is indeed needed */
381
382         down_write(&c->commit_sem);
383         spin_lock(&c->cs_lock);
384         /*
385          * Since we unlocked 'c->cs_lock', the state may have changed, so
386          * re-check it.
387          */
388         if (c->cmt_state == COMMIT_BROKEN) {
389                 err = -EINVAL;
390                 goto out_cmt_unlock;
391         }
392
393         if (c->cmt_state == COMMIT_RUNNING_BACKGROUND)
394                 c->cmt_state = COMMIT_RUNNING_REQUIRED;
395
396         if (c->cmt_state == COMMIT_RUNNING_REQUIRED) {
397                 up_write(&c->commit_sem);
398                 spin_unlock(&c->cs_lock);
399                 return wait_for_commit(c);
400         }
401         c->cmt_state = COMMIT_RUNNING_REQUIRED;
402         spin_unlock(&c->cs_lock);
403
404         err = do_commit(c);
405         return err;
406
407 out_cmt_unlock:
408         up_write(&c->commit_sem);
409 out:
410         spin_unlock(&c->cs_lock);
411         return err;
412 }
413
414 /**
415  * ubifs_gc_should_commit - determine if it is time for GC to run commit.
416  * @c: UBIFS file-system description object
417  *
418  * This function is called by garbage collection to determine if commit should
419  * be run. If commit state is @COMMIT_BACKGROUND, which means that the journal
420  * is full enough to start commit, this function returns true. It is not
421  * absolutely necessary to commit yet, but it feels like this should be better
422  * then to keep doing GC. This function returns %1 if GC has to initiate commit
423  * and %0 if not.
424  */
425 int ubifs_gc_should_commit(struct ubifs_info *c)
426 {
427         int ret = 0;
428
429         spin_lock(&c->cs_lock);
430         if (c->cmt_state == COMMIT_BACKGROUND) {
431                 dbg_cmt("commit required now");
432                 c->cmt_state = COMMIT_REQUIRED;
433         } else
434                 dbg_cmt("commit not requested");
435         if (c->cmt_state == COMMIT_REQUIRED)
436                 ret = 1;
437         spin_unlock(&c->cs_lock);
438         return ret;
439 }
440
441 #ifdef CONFIG_UBIFS_FS_DEBUG
442
443 /**
444  * struct idx_node - hold index nodes during index tree traversal.
445  * @list: list
446  * @iip: index in parent (slot number of this indexing node in the parent
447  *       indexing node)
448  * @upper_key: all keys in this indexing node have to be less or equivalent to
449  *             this key
450  * @idx: index node (8-byte aligned because all node structures must be 8-byte
451  *       aligned)
452  */
453 struct idx_node {
454         struct list_head list;
455         int iip;
456         union ubifs_key upper_key;
457         struct ubifs_idx_node idx __attribute__((aligned(8)));
458 };
459
460 /**
461  * dbg_old_index_check_init - get information for the next old index check.
462  * @c: UBIFS file-system description object
463  * @zroot: root of the index
464  *
465  * This function records information about the index that will be needed for the
466  * next old index check i.e. 'dbg_check_old_index()'.
467  *
468  * This function returns %0 on success and a negative error code on failure.
469  */
470 int dbg_old_index_check_init(struct ubifs_info *c, struct ubifs_zbranch *zroot)
471 {
472         struct ubifs_idx_node *idx;
473         int lnum, offs, len, err = 0;
474         struct ubifs_debug_info *d = c->dbg;
475
476         d->old_zroot = *zroot;
477         lnum = d->old_zroot.lnum;
478         offs = d->old_zroot.offs;
479         len = d->old_zroot.len;
480
481         idx = kmalloc(c->max_idx_node_sz, GFP_NOFS);
482         if (!idx)
483                 return -ENOMEM;
484
485         err = ubifs_read_node(c, idx, UBIFS_IDX_NODE, len, lnum, offs);
486         if (err)
487                 goto out;
488
489         d->old_zroot_level = le16_to_cpu(idx->level);
490         d->old_zroot_sqnum = le64_to_cpu(idx->ch.sqnum);
491 out:
492         kfree(idx);
493         return err;
494 }
495
496 /**
497  * dbg_check_old_index - check the old copy of the index.
498  * @c: UBIFS file-system description object
499  * @zroot: root of the new index
500  *
501  * In order to be able to recover from an unclean unmount, a complete copy of
502  * the index must exist on flash. This is the "old" index. The commit process
503  * must write the "new" index to flash without overwriting or destroying any
504  * part of the old index. This function is run at commit end in order to check
505  * that the old index does indeed exist completely intact.
506  *
507  * This function returns %0 on success and a negative error code on failure.
508  */
509 int dbg_check_old_index(struct ubifs_info *c, struct ubifs_zbranch *zroot)
510 {
511         int lnum, offs, len, err = 0, uninitialized_var(last_level), child_cnt;
512         int first = 1, iip;
513         struct ubifs_debug_info *d = c->dbg;
514         union ubifs_key uninitialized_var(lower_key), upper_key, l_key, u_key;
515         unsigned long long uninitialized_var(last_sqnum);
516         struct ubifs_idx_node *idx;
517         struct list_head list;
518         struct idx_node *i;
519         size_t sz;
520
521         if (!(ubifs_chk_flags & UBIFS_CHK_OLD_IDX))
522                 goto out;
523
524         INIT_LIST_HEAD(&list);
525
526         sz = sizeof(struct idx_node) + ubifs_idx_node_sz(c, c->fanout) -
527              UBIFS_IDX_NODE_SZ;
528
529         /* Start at the old zroot */
530         lnum = d->old_zroot.lnum;
531         offs = d->old_zroot.offs;
532         len = d->old_zroot.len;
533         iip = 0;
534
535         /*
536          * Traverse the index tree preorder depth-first i.e. do a node and then
537          * its subtrees from left to right.
538          */
539         while (1) {
540                 struct ubifs_branch *br;
541
542                 /* Get the next index node */
543                 i = kmalloc(sz, GFP_NOFS);
544                 if (!i) {
545                         err = -ENOMEM;
546                         goto out_free;
547                 }
548                 i->iip = iip;
549                 /* Keep the index nodes on our path in a linked list */
550                 list_add_tail(&i->list, &list);
551                 /* Read the index node */
552                 idx = &i->idx;
553                 err = ubifs_read_node(c, idx, UBIFS_IDX_NODE, len, lnum, offs);
554                 if (err)
555                         goto out_free;
556                 /* Validate index node */
557                 child_cnt = le16_to_cpu(idx->child_cnt);
558                 if (child_cnt < 1 || child_cnt > c->fanout) {
559                         err = 1;
560                         goto out_dump;
561                 }
562                 if (first) {
563                         first = 0;
564                         /* Check root level and sqnum */
565                         if (le16_to_cpu(idx->level) != d->old_zroot_level) {
566                                 err = 2;
567                                 goto out_dump;
568                         }
569                         if (le64_to_cpu(idx->ch.sqnum) != d->old_zroot_sqnum) {
570                                 err = 3;
571                                 goto out_dump;
572                         }
573                         /* Set last values as though root had a parent */
574                         last_level = le16_to_cpu(idx->level) + 1;
575                         last_sqnum = le64_to_cpu(idx->ch.sqnum) + 1;
576                         key_read(c, ubifs_idx_key(c, idx), &lower_key);
577                         highest_ino_key(c, &upper_key, INUM_WATERMARK);
578                 }
579                 key_copy(c, &upper_key, &i->upper_key);
580                 if (le16_to_cpu(idx->level) != last_level - 1) {
581                         err = 3;
582                         goto out_dump;
583                 }
584                 /*
585                  * The index is always written bottom up hence a child's sqnum
586                  * is always less than the parents.
587                  */
588                 if (le64_to_cpu(idx->ch.sqnum) >= last_sqnum) {
589                         err = 4;
590                         goto out_dump;
591                 }
592                 /* Check key range */
593                 key_read(c, ubifs_idx_key(c, idx), &l_key);
594                 br = ubifs_idx_branch(c, idx, child_cnt - 1);
595                 key_read(c, &br->key, &u_key);
596                 if (keys_cmp(c, &lower_key, &l_key) > 0) {
597                         err = 5;
598                         goto out_dump;
599                 }
600                 if (keys_cmp(c, &upper_key, &u_key) < 0) {
601                         err = 6;
602                         goto out_dump;
603                 }
604                 if (keys_cmp(c, &upper_key, &u_key) == 0)
605                         if (!is_hash_key(c, &u_key)) {
606                                 err = 7;
607                                 goto out_dump;
608                         }
609                 /* Go to next index node */
610                 if (le16_to_cpu(idx->level) == 0) {
611                         /* At the bottom, so go up until can go right */
612                         while (1) {
613                                 /* Drop the bottom of the list */
614                                 list_del(&i->list);
615                                 kfree(i);
616                                 /* No more list means we are done */
617                                 if (list_empty(&list))
618                                         goto out;
619                                 /* Look at the new bottom */
620                                 i = list_entry(list.prev, struct idx_node,
621                                                list);
622                                 idx = &i->idx;
623                                 /* Can we go right */
624                                 if (iip + 1 < le16_to_cpu(idx->child_cnt)) {
625                                         iip = iip + 1;
626                                         break;
627                                 } else
628                                         /* Nope, so go up again */
629                                         iip = i->iip;
630                         }
631                 } else
632                         /* Go down left */
633                         iip = 0;
634                 /*
635                  * We have the parent in 'idx' and now we set up for reading the
636                  * child pointed to by slot 'iip'.
637                  */
638                 last_level = le16_to_cpu(idx->level);
639                 last_sqnum = le64_to_cpu(idx->ch.sqnum);
640                 br = ubifs_idx_branch(c, idx, iip);
641                 lnum = le32_to_cpu(br->lnum);
642                 offs = le32_to_cpu(br->offs);
643                 len = le32_to_cpu(br->len);
644                 key_read(c, &br->key, &lower_key);
645                 if (iip + 1 < le16_to_cpu(idx->child_cnt)) {
646                         br = ubifs_idx_branch(c, idx, iip + 1);
647                         key_read(c, &br->key, &upper_key);
648                 } else
649                         key_copy(c, &i->upper_key, &upper_key);
650         }
651 out:
652         err = dbg_old_index_check_init(c, zroot);
653         if (err)
654                 goto out_free;
655
656         return 0;
657
658 out_dump:
659         dbg_err("dumping index node (iip=%d)", i->iip);
660         dbg_dump_node(c, idx);
661         list_del(&i->list);
662         kfree(i);
663         if (!list_empty(&list)) {
664                 i = list_entry(list.prev, struct idx_node, list);
665                 dbg_err("dumping parent index node");
666                 dbg_dump_node(c, &i->idx);
667         }
668 out_free:
669         while (!list_empty(&list)) {
670                 i = list_entry(list.next, struct idx_node, list);
671                 list_del(&i->list);
672                 kfree(i);
673         }
674         ubifs_err("failed, error %d", err);
675         if (err > 0)
676                 err = -EINVAL;
677         return err;
678 }
679
680 #endif /* CONFIG_UBIFS_FS_DEBUG */