forked from mirrors/linux
		
	Logfs: Allow NULL block_isbad() methods
Not all mtd drivers define block_isbad(). Let's assume no bad blocks instead of refusing to mount. Signed-off-by: Joern Engel <joern@logfs.org>
This commit is contained in:
		
							parent
							
								
									bbe0138712
								
							
						
					
					
						commit
						f2933e86ad
					
				
					 1 changed files with 12 additions and 14 deletions
				
			
		| 
						 | 
				
			
			@ -150,14 +150,13 @@ static struct page *mtd_find_first_sb(struct super_block *sb, u64 *ofs)
 | 
			
		|||
	filler_t *filler = mtd_readpage;
 | 
			
		||||
	struct mtd_info *mtd = super->s_mtd;
 | 
			
		||||
 | 
			
		||||
	if (!mtd->block_isbad)
 | 
			
		||||
		return NULL;
 | 
			
		||||
 | 
			
		||||
	*ofs = 0;
 | 
			
		||||
	while (mtd->block_isbad(mtd, *ofs)) {
 | 
			
		||||
		*ofs += mtd->erasesize;
 | 
			
		||||
		if (*ofs >= mtd->size)
 | 
			
		||||
			return NULL;
 | 
			
		||||
	if (mtd->block_isbad) {
 | 
			
		||||
		while (mtd->block_isbad(mtd, *ofs)) {
 | 
			
		||||
			*ofs += mtd->erasesize;
 | 
			
		||||
			if (*ofs >= mtd->size)
 | 
			
		||||
				return NULL;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	BUG_ON(*ofs & ~PAGE_MASK);
 | 
			
		||||
	return read_cache_page(mapping, *ofs >> PAGE_SHIFT, filler, sb);
 | 
			
		||||
| 
						 | 
				
			
			@ -170,14 +169,13 @@ static struct page *mtd_find_last_sb(struct super_block *sb, u64 *ofs)
 | 
			
		|||
	filler_t *filler = mtd_readpage;
 | 
			
		||||
	struct mtd_info *mtd = super->s_mtd;
 | 
			
		||||
 | 
			
		||||
	if (!mtd->block_isbad)
 | 
			
		||||
		return NULL;
 | 
			
		||||
 | 
			
		||||
	*ofs = mtd->size - mtd->erasesize;
 | 
			
		||||
	while (mtd->block_isbad(mtd, *ofs)) {
 | 
			
		||||
		*ofs -= mtd->erasesize;
 | 
			
		||||
		if (*ofs <= 0)
 | 
			
		||||
			return NULL;
 | 
			
		||||
	if (mtd->block_isbad) {
 | 
			
		||||
		while (mtd->block_isbad(mtd, *ofs)) {
 | 
			
		||||
			*ofs -= mtd->erasesize;
 | 
			
		||||
			if (*ofs <= 0)
 | 
			
		||||
				return NULL;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	*ofs = *ofs + mtd->erasesize - 0x1000;
 | 
			
		||||
	BUG_ON(*ofs & ~PAGE_MASK);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue