Linux kernel & device driver programming

Cross-Referenced Linux and Device Driver Code

[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ]
Version: [ 2.6.11.8 ] [ 2.6.25 ] [ 2.6.25.8 ] [ 2.6.31.13 ] Architecture: [ i386 ]

Diff markup

Differences between /linux/fs/ubifs/commit.c (Version 2.6.31.13) and /linux/fs/ubifs/commit.c (Version 2.6.25)


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