ext4: Use new buffer_head flag to check uninit group bitmaps initialization
For uninit block group, the on-disk bitmap is not initialized. That implies we cannot depend on the uptodate flag on the bitmap buffer_head to find bitmap validity. Use a new buffer_head flag which would be set after we properly initialize the bitmap. This also prevents (re-)initializing the uninit group bitmap every time we call ext4_read_block_bitmap(). Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com> Signed-off-by: "Theodore Ts'o" <tytso@mit.edu> Cc: stable@kernel.org
This commit is contained in:
committed by
Theodore Ts'o
parent
393418676a
commit
2ccb5fb9f1
@@ -19,6 +19,7 @@
|
||||
#include <linux/types.h>
|
||||
#include <linux/blkdev.h>
|
||||
#include <linux/magic.h>
|
||||
#include <linux/jbd2.h>
|
||||
#include "ext4_i.h"
|
||||
|
||||
/*
|
||||
@@ -1352,6 +1353,23 @@ extern int ext4_get_blocks_wrap(handle_t *handle, struct inode *inode,
|
||||
extern int ext4_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
|
||||
__u64 start, __u64 len);
|
||||
|
||||
/*
|
||||
* Add new method to test wether block and inode bitmaps are properly
|
||||
* initialized. With uninit_bg reading the block from disk is not enough
|
||||
* to mark the bitmap uptodate. We need to also zero-out the bitmap
|
||||
*/
|
||||
#define BH_BITMAP_UPTODATE BH_JBDPrivateStart
|
||||
|
||||
static inline int bitmap_uptodate(struct buffer_head *bh)
|
||||
{
|
||||
return (buffer_uptodate(bh) &&
|
||||
test_bit(BH_BITMAP_UPTODATE, &(bh)->b_state));
|
||||
}
|
||||
static inline void set_bitmap_uptodate(struct buffer_head *bh)
|
||||
{
|
||||
set_bit(BH_BITMAP_UPTODATE, &(bh)->b_state);
|
||||
}
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
#endif /* _EXT4_H */
|
||||
|
Reference in New Issue
Block a user