diff options
Diffstat (limited to 'meta/recipes-devtools/syslinux/syslinux/0007-linux-syslinux-implement-ext_construct_sectmap_fs.patch')
-rw-r--r-- | meta/recipes-devtools/syslinux/syslinux/0007-linux-syslinux-implement-ext_construct_sectmap_fs.patch | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/meta/recipes-devtools/syslinux/syslinux/0007-linux-syslinux-implement-ext_construct_sectmap_fs.patch b/meta/recipes-devtools/syslinux/syslinux/0007-linux-syslinux-implement-ext_construct_sectmap_fs.patch new file mode 100644 index 0000000000..3913811917 --- /dev/null +++ b/meta/recipes-devtools/syslinux/syslinux/0007-linux-syslinux-implement-ext_construct_sectmap_fs.patch @@ -0,0 +1,84 @@ +From a95b831e18dd123f859bc5e6c4cecdcc0184ee37 Mon Sep 17 00:00:00 2001 +From: Robert Yang <liezhi.yang@windriver.com> +Date: Fri, 2 Jan 2015 12:18:02 +0800 +Subject: [PATCH 7/9] linux/syslinux: implement ext_construct_sectmap_fs() + +The ext_construct_sectmap_fs() constucts the sector according to the +bmap. + +Upstream-Status: Submitted + +Signed-off-by: Robert Yang <liezhi.yang@windriver.com> +Tested-by: Du Dolpher <dolpher.du@intel.com> +--- + linux/syslinux.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 50 insertions(+) + +diff --git a/linux/syslinux.c b/linux/syslinux.c +index f0c97a8..c741750 100755 +--- a/linux/syslinux.c ++++ b/linux/syslinux.c +@@ -421,10 +421,60 @@ int install_bootblock(int fd, const char *device) + { + } + ++/* The file's block count */ ++int block_count = 0; ++static int get_block_count(ext2_filsys fs EXT2FS_ATTR((unused)), ++ blk64_t *blocknr EXT2FS_ATTR((unused)), ++ e2_blkcnt_t blockcnt EXT2FS_ATTR((unused)), ++ blk64_t ref_block EXT2FS_ATTR((unused)), ++ int ref_offset EXT2FS_ATTR((unused)), ++ void *private EXT2FS_ATTR((unused))) ++{ ++ block_count++; ++ return 0; ++} ++ + /* Construct the boot file map */ + int ext_construct_sectmap_fs(ext2_filsys fs, ext2_ino_t newino, + sector_t *sectors, int nsect) + { ++ blk64_t pblk, blksize, blk = 0; ++ sector_t sec; ++ unsigned int i; ++ int retval; ++ ++ blksize = fs->blocksize; ++ blksize >>= SECTOR_SHIFT; ++ ++ /* Get the total blocks no. */ ++ retval = ext2fs_block_iterate3(fs, newino, BLOCK_FLAG_READ_ONLY, ++ NULL, get_block_count, NULL); ++ if (retval) { ++ fprintf(stderr, "%s: ERROR: ext2fs_block_iterate3() failed.\n", program); ++ return -1; ++ } ++ ++ while (nsect) { ++ if (block_count-- == 0) ++ break; ++ ++ /* Get the physical block no. (bmap) */ ++ retval = ext2fs_bmap2(fs, newino, 0, 0, 0, blk, 0, &pblk); ++ if (retval) { ++ fprintf(stderr, "%s: ERROR: ext2fs_bmap2() failed.\n", program); ++ return -1; ++ } ++ ++ blk++; ++ sec = (sector_t)pblk * blksize; ++ for (i = 0; i < blksize; i++) { ++ *sectors++ = sec++; ++ if (! --nsect) ++ break; ++ } ++ } ++ ++ return 0; + } + + static int handle_adv_on_ext(void) +-- +1.9.1 + |