diff options
Diffstat (limited to 'fs/ubifs/log.c')
| -rw-r--r-- | fs/ubifs/log.c | 105 | 
1 files changed, 21 insertions, 84 deletions
diff --git a/fs/ubifs/log.c b/fs/ubifs/log.c index 4d0cb124146..a902c5919e4 100644 --- a/fs/ubifs/log.c +++ b/fs/ubifs/log.c @@ -29,11 +29,7 @@  #include "ubifs.h" -#ifdef CONFIG_UBIFS_FS_DEBUG  static int dbg_check_bud_bytes(struct ubifs_info *c); -#else -#define dbg_check_bud_bytes(c) 0 -#endif  /**   * ubifs_search_bud - search bud LEB. @@ -100,20 +96,6 @@ struct ubifs_wbuf *ubifs_get_wbuf(struct ubifs_info *c, int lnum)  }  /** - * next_log_lnum - switch to the next log LEB. - * @c: UBIFS file-system description object - * @lnum: current log LEB - */ -static inline int next_log_lnum(const struct ubifs_info *c, int lnum) -{ -	lnum += 1; -	if (lnum > c->log_last) -		lnum = UBIFS_LOG_LNUM; - -	return lnum; -} - -/**   * empty_log_bytes - calculate amount of empty space in the log.   * @c: UBIFS file-system description object   */ @@ -175,26 +157,6 @@ void ubifs_add_bud(struct ubifs_info *c, struct ubifs_bud *bud)  }  /** - * ubifs_create_buds_lists - create journal head buds lists for remount rw. - * @c: UBIFS file-system description object - */ -void ubifs_create_buds_lists(struct ubifs_info *c) -{ -	struct rb_node *p; - -	spin_lock(&c->buds_lock); -	p = rb_first(&c->buds); -	while (p) { -		struct ubifs_bud *bud = rb_entry(p, struct ubifs_bud, rb); -		struct ubifs_jhead *jhead = &c->jheads[bud->jhead]; - -		list_add_tail(&bud->list, &jhead->buds_list); -		p = rb_next(p); -	} -	spin_unlock(&c->buds_lock); -} - -/**   * ubifs_add_bud_to_log - add a new bud to the log.   * @c: UBIFS file-system description object   * @jhead: journal head the bud belongs to @@ -277,7 +239,7 @@ int ubifs_add_bud_to_log(struct ubifs_info *c, int jhead, int lnum, int offs)  	ref->jhead = cpu_to_le32(jhead);  	if (c->lhead_offs > c->leb_size - c->ref_node_alsz) { -		c->lhead_lnum = next_log_lnum(c, c->lhead_lnum); +		c->lhead_lnum = ubifs_next_log_lnum(c, c->lhead_lnum);  		c->lhead_offs = 0;  	} @@ -296,7 +258,7 @@ int ubifs_add_bud_to_log(struct ubifs_info *c, int jhead, int lnum, int offs)  		 * an unclean reboot, because the target LEB might have been  		 * unmapped, but not yet physically erased.  		 */ -		err = ubi_leb_map(c->ubi, bud->lnum, UBI_SHORTTERM); +		err = ubifs_leb_map(c, bud->lnum);  		if (err)  			goto out_unlock;  	} @@ -304,7 +266,7 @@ int ubifs_add_bud_to_log(struct ubifs_info *c, int jhead, int lnum, int offs)  	dbg_log("write ref LEB %d:%d",  		c->lhead_lnum, c->lhead_offs);  	err = ubifs_write_node(c, ref, UBIFS_REF_NODE_SZ, c->lhead_lnum, -			       c->lhead_offs, UBI_SHORTTERM); +			       c->lhead_offs);  	if (err)  		goto out_unlock; @@ -317,8 +279,6 @@ int ubifs_add_bud_to_log(struct ubifs_info *c, int jhead, int lnum, int offs)  	return 0;  out_unlock: -	if (err != -EAGAIN) -		ubifs_ro_mode(c, err);  	mutex_unlock(&c->log_mutex);  	kfree(ref);  	kfree(bud); @@ -355,17 +315,15 @@ static void remove_buds(struct ubifs_info *c)  			 * heads (non-closed buds).  			 */  			c->cmt_bud_bytes += wbuf->offs - bud->start; -			dbg_log("preserve %d:%d, jhead %s, bud bytes %d, " -				"cmt_bud_bytes %lld", bud->lnum, bud->start, -				dbg_jhead(bud->jhead), wbuf->offs - bud->start, -				c->cmt_bud_bytes); +			dbg_log("preserve %d:%d, jhead %s, bud bytes %d, cmt_bud_bytes %lld", +				bud->lnum, bud->start, dbg_jhead(bud->jhead), +				wbuf->offs - bud->start, c->cmt_bud_bytes);  			bud->start = wbuf->offs;  		} else {  			c->cmt_bud_bytes += c->leb_size - bud->start; -			dbg_log("remove %d:%d, jhead %s, bud bytes %d, " -				"cmt_bud_bytes %lld", bud->lnum, bud->start, -				dbg_jhead(bud->jhead), c->leb_size - bud->start, -				c->cmt_bud_bytes); +			dbg_log("remove %d:%d, jhead %s, bud bytes %d, cmt_bud_bytes %lld", +				bud->lnum, bud->start, dbg_jhead(bud->jhead), +				c->leb_size - bud->start, c->cmt_bud_bytes);  			rb_erase(p1, &c->buds);  			/*  			 * If the commit does not finish, the recovery will need @@ -445,7 +403,7 @@ int ubifs_log_start_commit(struct ubifs_info *c, int *ltail_lnum)  	/* Switch to the next log LEB */  	if (c->lhead_offs) { -		c->lhead_lnum = next_log_lnum(c, c->lhead_lnum); +		c->lhead_lnum = ubifs_next_log_lnum(c, c->lhead_lnum);  		c->lhead_offs = 0;  	} @@ -458,7 +416,7 @@ int ubifs_log_start_commit(struct ubifs_info *c, int *ltail_lnum)  	len = ALIGN(len, c->min_io_size);  	dbg_log("writing commit start at LEB %d:0, len %d", c->lhead_lnum, len); -	err = ubifs_leb_write(c, c->lhead_lnum, cs, 0, len, UBI_SHORTTERM); +	err = ubifs_leb_write(c, c->lhead_lnum, cs, 0, len);  	if (err)  		goto out; @@ -466,7 +424,7 @@ int ubifs_log_start_commit(struct ubifs_info *c, int *ltail_lnum)  	c->lhead_offs += len;  	if (c->lhead_offs == c->leb_size) { -		c->lhead_lnum = next_log_lnum(c, c->lhead_lnum); +		c->lhead_lnum = ubifs_next_log_lnum(c, c->lhead_lnum);  		c->lhead_offs = 0;  	} @@ -553,7 +511,7 @@ int ubifs_log_post_commit(struct ubifs_info *c, int old_ltail_lnum)  	}  	mutex_lock(&c->log_mutex);  	for (lnum = old_ltail_lnum; lnum != c->ltail_lnum; -	     lnum = next_log_lnum(c, lnum)) { +	     lnum = ubifs_next_log_lnum(c, lnum)) {  		dbg_log("unmap log LEB %d", lnum);  		err = ubifs_leb_unmap(c, lnum);  		if (err) @@ -616,27 +574,10 @@ static int done_already(struct rb_root *done_tree, int lnum)   */  static void destroy_done_tree(struct rb_root *done_tree)  { -	struct rb_node *this = done_tree->rb_node; -	struct done_ref *dr; +	struct done_ref *dr, *n; -	while (this) { -		if (this->rb_left) { -			this = this->rb_left; -			continue; -		} else if (this->rb_right) { -			this = this->rb_right; -			continue; -		} -		dr = rb_entry(this, struct done_ref, rb); -		this = rb_parent(this); -		if (this) { -			if (this->rb_left == &dr->rb) -				this->rb_left = NULL; -			else -				this->rb_right = NULL; -		} +	rbtree_postorder_for_each_entry_safe(dr, n, done_tree, rb)  		kfree(dr); -	}  }  /** @@ -659,10 +600,10 @@ static int add_node(struct ubifs_info *c, void *buf, int *lnum, int *offs,  		int sz = ALIGN(*offs, c->min_io_size), err;  		ubifs_pad(c, buf + *offs, sz - *offs); -		err = ubifs_leb_change(c, *lnum, buf, sz, UBI_SHORTTERM); +		err = ubifs_leb_change(c, *lnum, buf, sz);  		if (err)  			return err; -		*lnum = next_log_lnum(c, *lnum); +		*lnum = ubifs_next_log_lnum(c, *lnum);  		*offs = 0;  	}  	memcpy(buf + *offs, node, len); @@ -732,13 +673,13 @@ int ubifs_consolidate_log(struct ubifs_info *c)  		ubifs_scan_destroy(sleb);  		if (lnum == c->lhead_lnum)  			break; -		lnum = next_log_lnum(c, lnum); +		lnum = ubifs_next_log_lnum(c, lnum);  	}  	if (offs) {  		int sz = ALIGN(offs, c->min_io_size);  		ubifs_pad(c, buf + offs, sz - offs); -		err = ubifs_leb_change(c, write_lnum, buf, sz, UBI_SHORTTERM); +		err = ubifs_leb_change(c, write_lnum, buf, sz);  		if (err)  			goto out_free;  		offs = ALIGN(offs, c->min_io_size); @@ -752,7 +693,7 @@ int ubifs_consolidate_log(struct ubifs_info *c)  	/* Unmap remaining LEBs */  	lnum = write_lnum;  	do { -		lnum = next_log_lnum(c, lnum); +		lnum = ubifs_next_log_lnum(c, lnum);  		err = ubifs_leb_unmap(c, lnum);  		if (err)  			return err; @@ -770,8 +711,6 @@ out_free:  	return err;  } -#ifdef CONFIG_UBIFS_FS_DEBUG -  /**   * dbg_check_bud_bytes - make sure bud bytes calculation are all right.   * @c: UBIFS file-system description object @@ -786,7 +725,7 @@ static int dbg_check_bud_bytes(struct ubifs_info *c)  	struct ubifs_bud *bud;  	long long bud_bytes = 0; -	if (!(ubifs_chk_flags & UBIFS_CHK_GEN)) +	if (!dbg_is_chk_gen(c))  		return 0;  	spin_lock(&c->buds_lock); @@ -803,5 +742,3 @@ static int dbg_check_bud_bytes(struct ubifs_info *c)  	return err;  } - -#endif /* CONFIG_UBIFS_FS_DEBUG */  | 
