Message ID | BANLkTi=YnoTophc97QCbujJANpgHXaFpkw@mail.gmail.com |
---|---|
State | New, archived |
Headers | show |
Hi, thanks for the patches! On Tue, 2011-05-03 at 18:55 -0400, Matthew L. Creech wrote: > The leb_fixup flag can be set in the superblock of a new filesystem by > mkfs.ubifs to indicate that the filesystem's underlying eraseblocks should be > fixed-up the first time it's mounted (after which the flag is un-set). > > Signed-off-by: Matthew L. Creech <mlcreech@gmail.com> > --- > fs/ubifs/debug.c | 2 ++ > fs/ubifs/sb.c | 2 ++ > fs/ubifs/ubifs-media.h | 2 ++ > fs/ubifs/ubifs.h | 2 ++ > 4 files changed, 8 insertions(+), 0 deletions(-) > > diff --git a/fs/ubifs/debug.c b/fs/ubifs/debug.c > index f7515bd..fc2c48b 100644 > --- a/fs/ubifs/debug.c > +++ b/fs/ubifs/debug.c > @@ -316,6 +316,8 @@ void dbg_dump_node(const struct ubifs_info *c, > const void *node) > printk(KERN_DEBUG "\tflags %#x\n", sup_flags); > printk(KERN_DEBUG "\t big_lpt %u\n", > !!(sup_flags & UBIFS_FLG_BIGLPT)); > + printk(KERN_DEBUG "\t leb_fixup %u\n", > + !!(sup_flags & UBIFS_FLG_LEB_FIXUP)); I think "LEB fixup" is not the best name. In essence, we are fixing up the free space, not LEBs perse, so I'd suggest the "free space fix-up" as the long name and "space_fixup" as the short name for this process. > printk(KERN_DEBUG "\tmin_io_size %u\n", > le32_to_cpu(sup->min_io_size)); > printk(KERN_DEBUG "\tleb_size %u\n", > diff --git a/fs/ubifs/sb.c b/fs/ubifs/sb.c > index bf31b47..e3777d0 100644 > --- a/fs/ubifs/sb.c > +++ b/fs/ubifs/sb.c > @@ -165,6 +165,7 @@ static int create_default_filesystem(struct ubifs_info *c) > tmp64 = (long long)max_buds * c->leb_size; > if (big_lpt) > sup_flags |= UBIFS_FLG_BIGLPT; > + /* LEB fixup is not needed for a default filesystem */ I think this comment is much more confusing than useful, let's kill it.
diff --git a/fs/ubifs/debug.c b/fs/ubifs/debug.c index f7515bd..fc2c48b 100644 --- a/fs/ubifs/debug.c +++ b/fs/ubifs/debug.c @@ -316,6 +316,8 @@ void dbg_dump_node(const struct ubifs_info *c, const void *node) printk(KERN_DEBUG "\tflags %#x\n", sup_flags); printk(KERN_DEBUG "\t big_lpt %u\n", !!(sup_flags & UBIFS_FLG_BIGLPT)); + printk(KERN_DEBUG "\t leb_fixup %u\n", + !!(sup_flags & UBIFS_FLG_LEB_FIXUP)); printk(KERN_DEBUG "\tmin_io_size %u\n", le32_to_cpu(sup->min_io_size)); printk(KERN_DEBUG "\tleb_size %u\n", diff --git a/fs/ubifs/sb.c b/fs/ubifs/sb.c index bf31b47..e3777d0 100644 --- a/fs/ubifs/sb.c +++ b/fs/ubifs/sb.c @@ -165,6 +165,7 @@ static int create_default_filesystem(struct ubifs_info *c) tmp64 = (long long)max_buds * c->leb_size; if (big_lpt) sup_flags |= UBIFS_FLG_BIGLPT; + /* LEB fixup is not needed for a default filesystem */ sup->ch.node_type = UBIFS_SB_NODE; sup->key_hash = UBIFS_KEY_HASH_R5; @@ -616,6 +617,7 @@ int ubifs_read_superblock(struct ubifs_info *c) c->vfs_sb->s_time_gran = le32_to_cpu(sup->time_gran); memcpy(&c->uuid, &sup->uuid, 16); c->big_lpt = !!(sup_flags & UBIFS_FLG_BIGLPT); + c->leb_fixup = !!(sup_flags & UBIFS_FLG_LEB_FIXUP); /* Automatically increase file system size to the maximum size */ c->old_leb_cnt = c->leb_cnt; diff --git a/fs/ubifs/ubifs-media.h b/fs/ubifs/ubifs-media.h index b922f03..dfffa5a 100644 --- a/fs/ubifs/ubifs-media.h +++ b/fs/ubifs/ubifs-media.h @@ -408,9 +408,11 @@ enum { * Superblock flags. * * UBIFS_FLG_BIGLPT: if "big" LPT model is used if set + * UBIFS_FLG_LEB_FIXUP: first-mount "fixup" of empty pages in LEBs needed */ enum { UBIFS_FLG_BIGLPT = 0x02, + UBIFS_FLG_LEB_FIXUP = 0x04, }; /** diff --git a/fs/ubifs/ubifs.h b/fs/ubifs/ubifs.h index 26a7ebe..03e08ea 100644 --- a/fs/ubifs/ubifs.h +++ b/fs/ubifs/ubifs.h @@ -1014,6 +1014,7 @@ struct ubifs_debug_info; * @cmt_wq: wait queue to sleep on if the log is full and a commit is running * * @big_lpt: flag that LPT is too big to write whole during commit + * @leb_fixup: flag indicating that empty space in LEBs needs to be cleaned up * @no_chk_data_crc: do not check CRCs when reading data nodes (except during * recovery) * @bulk_read: enable bulk-reads @@ -1254,6 +1255,7 @@ struct ubifs_info { wait_queue_head_t cmt_wq; unsigned int big_lpt:1; + unsigned int leb_fixup:1; unsigned int no_chk_data_crc:1; unsigned int bulk_read:1; unsigned int default_compr:2;
The leb_fixup flag can be set in the superblock of a new filesystem by mkfs.ubifs to indicate that the filesystem's underlying eraseblocks should be fixed-up the first time it's mounted (after which the flag is un-set). Signed-off-by: Matthew L. Creech <mlcreech@gmail.com> --- fs/ubifs/debug.c | 2 ++ fs/ubifs/sb.c | 2 ++ fs/ubifs/ubifs-media.h | 2 ++ fs/ubifs/ubifs.h | 2 ++ 4 files changed, 8 insertions(+), 0 deletions(-)