Commit 41bdc602 authored by Joakim Tjernlund's avatar Joakim Tjernlund Committed by David Woodhouse

jffs2: Reduce excessive scan of empty blocks

Scanning 1024 bytes to see if an EB is empty is a bit much.
Lower it to 256 bytes and make sure the while loop is
optimized.
Signed-off-by: default avatarJoakim Tjernlund <Joakim.Tjernlund@transmode.se>
Signed-off-by: default avatarArtem Bityutskiy <Artem.Bityutskiy@nokia.com>
Signed-off-by: default avatarDavid Woodhouse <David.Woodhouse@intel.com>
parent 81cfc9f1
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
#include "summary.h" #include "summary.h"
#include "debug.h" #include "debug.h"
#define DEFAULT_EMPTY_SCAN_SIZE 1024 #define DEFAULT_EMPTY_SCAN_SIZE 256
#define noisy_printk(noise, args...) do { \ #define noisy_printk(noise, args...) do { \
if (*(noise)) { \ if (*(noise)) { \
...@@ -435,7 +435,7 @@ static int jffs2_scan_eraseblock (struct jffs2_sb_info *c, struct jffs2_eraseblo ...@@ -435,7 +435,7 @@ static int jffs2_scan_eraseblock (struct jffs2_sb_info *c, struct jffs2_eraseblo
unsigned char *buf, uint32_t buf_size, struct jffs2_summary *s) { unsigned char *buf, uint32_t buf_size, struct jffs2_summary *s) {
struct jffs2_unknown_node *node; struct jffs2_unknown_node *node;
struct jffs2_unknown_node crcnode; struct jffs2_unknown_node crcnode;
uint32_t ofs, prevofs; uint32_t ofs, prevofs, max_ofs;
uint32_t hdr_crc, buf_ofs, buf_len; uint32_t hdr_crc, buf_ofs, buf_len;
int err; int err;
int noise = 0; int noise = 0;
...@@ -550,12 +550,12 @@ static int jffs2_scan_eraseblock (struct jffs2_sb_info *c, struct jffs2_eraseblo ...@@ -550,12 +550,12 @@ static int jffs2_scan_eraseblock (struct jffs2_sb_info *c, struct jffs2_eraseblo
/* We temporarily use 'ofs' as a pointer into the buffer/jeb */ /* We temporarily use 'ofs' as a pointer into the buffer/jeb */
ofs = 0; ofs = 0;
max_ofs = EMPTY_SCAN_SIZE(c->sector_size);
/* Scan only 4KiB of 0xFF before declaring it's empty */ /* Scan only EMPTY_SCAN_SIZE of 0xFF before declaring it's empty */
while(ofs < EMPTY_SCAN_SIZE(c->sector_size) && *(uint32_t *)(&buf[ofs]) == 0xFFFFFFFF) while(ofs < max_ofs && *(uint32_t *)(&buf[ofs]) == 0xFFFFFFFF)
ofs += 4; ofs += 4;
if (ofs == EMPTY_SCAN_SIZE(c->sector_size)) { if (ofs == max_ofs) {
#ifdef CONFIG_JFFS2_FS_WRITEBUFFER #ifdef CONFIG_JFFS2_FS_WRITEBUFFER
if (jffs2_cleanmarker_oob(c)) { if (jffs2_cleanmarker_oob(c)) {
/* scan oob, take care of cleanmarker */ /* scan oob, take care of cleanmarker */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment