From 3e7446afe578dcad987076fdd340740d2c2f53d2 Mon Sep 17 00:00:00 2001 From: Matt Fleming Date: Tue, 12 Jun 2012 11:24:04 +0100 Subject: [PATCH] fs: Add .copy_super to struct fs_ops commit c0d18deeee2 ("elflink: Fix boot sector booting") makes reference to vfat_copy_superblock() which is only implemented for SYSLINUX, resulting in an undefined symbol when booting ISOLINUX or PXELINUX. Move the superblock copy operation to struct fs_ops so that we don't need to add a stub implementation of vfat_copy_superblock() to ISOLINUX and PXELINUX. Signed-off-by: Matt Fleming --- com32/elflink/ldlinux/chainboot.c | 2 +- core/fs/fat/fat.c | 3 ++- core/include/fs.h | 5 ++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/com32/elflink/ldlinux/chainboot.c b/com32/elflink/ldlinux/chainboot.c index 33589e0..c1efadf 100644 --- a/com32/elflink/ldlinux/chainboot.c +++ b/com32/elflink/ldlinux/chainboot.c @@ -97,7 +97,7 @@ void chainboot_file(const char *file, enum kernel_type type) * superblock. */ if (sdi->c.filesystem == SYSLINUX_FS_SYSLINUX && - type == KT_BSS && vfat_copy_superblock(buf)) + type == KT_BSS && this_fs->fs_ops->copy_super(buf)) goto bail; if (sdi->c.filesystem == SYSLINUX_FS_PXELINUX) { diff --git a/core/fs/fat/fat.c b/core/fs/fat/fat.c index 2c8dc31..127a24d 100644 --- a/core/fs/fat/fat.c +++ b/core/fs/fat/fat.c @@ -779,7 +779,7 @@ static int vfat_fs_init(struct fs_info *fs) return fs->block_shift; } -int vfat_copy_superblock(void *buf) +static int vfat_copy_superblock(void *buf) { struct fat_bpb fat; struct disk *disk; @@ -821,4 +821,5 @@ const struct fs_ops vfat_fs_ops = { .iget_root = vfat_iget_root, .iget = vfat_iget, .next_extent = fat_next_extent, + .copy_super = vfat_copy_superblock, }; diff --git a/core/include/fs.h b/core/include/fs.h index ded8c15..08ac738 100644 --- a/core/include/fs.h +++ b/core/include/fs.h @@ -72,6 +72,8 @@ struct fs_ops { int (*readdir)(struct file *, struct dirent *); int (*next_extent)(struct inode *, uint32_t); + + int (*copy_super)(void *buf); }; /* @@ -234,7 +236,4 @@ uint32_t generic_getfssec(struct file *file, char *buf, /* nonextextent.c */ int no_next_extent(struct inode *, uint32_t); -/* fat.c */ -int vfat_copy_superblock(void *buf); - #endif /* FS_H */ -- 2.7.4