[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20080716134124.GU8185@mit.edu>
Date: Wed, 16 Jul 2008 09:41:24 -0400
From: Theodore Tso <tytso@....edu>
To: Goswin von Brederlow <goswin-v-b@....de>
Cc: linux-ext4@...r.kernel.org
Subject: Re: Suggestions for a 64bit bitmap api
On Wed, Jul 16, 2008 at 02:12:02PM +0200, Goswin von Brederlow wrote:
>
> which api would you prefer?
There is a lot of comments about my plan for 64-bit bitmaps in the pu
branch of e2fsprogs, in lib/ext2fs/gen_bitmap64.c.
Quoting from there:
/*
* Design of 64-bit bitmaps
*
* In order maintain ABI compatibility with programs that don't
* understand about 64-bit blocks/inodes,
* ext2fs_allocate_inode_bitmap() and ext2fs_allocate_block_bitmap()
* will create old-style bitmaps unless the application passes the
* flag EXT2_FLAG_NEW_BITMAPS to ext2fs_open(). If this flag is
* passed, then we know the application has been recompiled, so we can
* use the new-style bitmaps. If it is not passed, we have to return
* an error if trying to open a filesystem which needs 64-bit bitmaps.
*
* The new bitmaps use a new set of structure magic numbers, so that
* both the old-style and new-style interfaces can identify which
* version of the data structure was used. Both the old-style and
* new-style interfaces will support either type of bitmap, although
* of course 64-bit operation will only be possible when both the
* new-style interface and the new-style bitmap are used.
*
* For example, the new bitmap interfaces will check the structure
* magic numbers and so will be able to detect old-stype bitmap. If
* they see an old-style bitmap, they will pass it to the gen_bitmap.c
* functions for handling. The same will be true for the old
* interfaces as well.
*
* The new-style interfaces will have several different back-end
* implementations, so we can support different encodings that are
* appropriate for different applications. In general the default
* should be whatever makes sense, and what the application/library
* will use. However, e2fsck may need specialized implementations for
* its own uses. For example, when doing parent directory pointer
* loop detections in pass 3, the bitmap will *always* be sparse, so
* e2fsck can request an encoding which is optimized for that.
*/
struct ext2fs_struct_generic_bitmap64 {
errcode_t magic;
ext2_filsys fs;
struct * bitmap_ops;
int flags;
__u64 start, end;
__u64 real_end;
char * description;
void * private;
errcode_t base_error_code;
};
struct ext2_bitmap_ops {
int type;
/* Generic bmap operators */
errcode_t (*new_bmap)(ext2_filsys fs, errcode_t magic,
int type, u64 start, __u64 end,
__u64 real_end,
const char * description,
ext2fs_generic_bitmap64 *bmap);
void (*free_bmap)(ext2fs_generic_bitmap64 bitmap);
void (*copy_bmap)(ext2fs_generic_bitmap64 src,
ext2fs_generic_bitmap64 *dest);
void (*resize_bmap)(ext2fs_generic_bitmap64 bitmap,
__u64 new_end,
__u64 new_real_end);
/* XXX still need file operators */
/* bit set/test operators */
void (*set_bmap)(ext2fs_generic_bitmap64 bitmap, __u64 arg);
void (*clear_bmap)(ext2fs_generic_bitmap64 bitmap, __u64 arg);
int (*test_bmap)(ext2fs_generic_bitmap64 bitmap, __u64 arg);
void (*set_bmap_range)(ext2fs_generic_bitmap64 bitmap, __u64 arg,
int num);
void (*clear_bmap_range)(ext2fs_generic_bitmap64 bitmap, __u64 arg,
int num);
};
extern errcode_t ext2fs_alloc_generic_bmap(ext2_filsys fs, errcode_t magic,
int type, u64 start, __u64 end,
__u64 real_end,
const char * description,
ext2fs_generic_bitmap64 *bmap);
extern void_t ext2fs_free_generic_bmap(ext2fs_generic_bitmap64 bmap);
extern errcode_t ext2fs_copy_generic_bmap(ext2fs_generic_bitmap64 src,
ext2fs_generic_bitmap64 *dest);
extern errcode_t ext2fs_resize_generic_bmap(ext2fs_generic_bitmap bmap,
__u64 new_end,
__u64 new_real_end);
extern void ext2fs_set_generic_bmap(ext2fs_generic_bitmap64 bitmap,
__u64 arg);
extern void ext2fs_clear_generic_bmap(ext2fs_generic_bitmap64 bitmap,
__u64 arg);
extern int ext2fs_test_generic_bmap(ext2fs_generic_bitmap64 bitmap,
__u64 arg);
extern void ext2fs_set_generic_bmap_range(ext2fs_generic_bitmap64 bitmap,
__u64 arg, int num);
extern void ext2fs_clear_generic_bmap_range(ext2fs_generic_bitmap64 bitmap,
__u64 arg, int num);
--
To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists