@@ -71,6 +71,10 @@ int ext4fs_read_file(struct ext2fs_node *node, loff_t pos,
ext_cache_init(&cache);
+ /* Higher layer has ensured to pass block aligned range here. */
+ assert(IS_ALIGNED(pos, blocksize));
+ assert(IS_ALIGNED(len, blocksize));
+
/* Adjust len so it we can't read past the end of the file. */
if (len + pos > filesize)
len = (filesize - pos);
@@ -183,6 +187,13 @@ int ext4fs_read_file(struct ext2fs_node *node, loff_t pos,
return 0;
}
+int ext4fs_get_blocksize(const char *filename)
+{
+ struct ext_filesystem *fs = get_fs();
+
+ return fs->blksz;
+}
+
int ext4fs_ls(const char *dirname)
{
struct ext2fs_node *dirnode = NULL;
@@ -236,7 +236,7 @@ static struct fstype_info fstypes[] = {
.exists = ext4fs_exists,
.size = ext4fs_size,
.read = ext4_read_file,
- .get_blocksize = fs_get_blocksize_unsupported,
+ .get_blocksize = ext4fs_get_blocksize,
#ifdef CONFIG_CMD_EXT4_WRITE
.write = ext4_write_file,
.ln = ext4fs_create_link,
@@ -146,6 +146,7 @@ int ext4fs_create_link(const char *target, const char *fname);
struct ext_filesystem *get_fs(void);
int ext4fs_open(const char *filename, loff_t *len);
int ext4fs_read(char *buf, loff_t offset, loff_t len, loff_t *actread);
+int ext4fs_get_blocksize(const char *filename);
int ext4fs_mount(unsigned part_length);
void ext4fs_close(void);
void ext4fs_reinit_global(void);
Since _fs_read() is handling the unaligned read internally, ext4 driver only need to handle block aligned read. Unfortunately I'm not familiar with ext4 and its driver, thus not confident enough to cleanup all the unaligned read related code. So here we will have some dead code, and any help to clean them up is appreciated. Cc: Tom Rini <trini@konsulko.com> Signed-off-by: Qu Wenruo <wqu@suse.com> --- fs/ext4/ext4fs.c | 11 +++++++++++ fs/fs.c | 2 +- include/ext4fs.h | 1 + 3 files changed, 13 insertions(+), 1 deletion(-)