On Mon, 2009-04-06 at 14:28 -0400, Chris Lumens wrote: > For filesystems that we officially support, there is no change here. For > those that require a cmdline option for support, module loading has now > moved from within the loader to inside the __init__ methods for the formats > themselves. The intention here is to avoid kernel errors in modules that > the user never even wants to have involved. Seems good to me. > --- > loader/loader.c | 2 +- > storage/formats/fs.py | 37 +++++++++++++++++++++++++++++++++++++ > 2 files changed, 38 insertions(+), 1 deletions(-) > > diff --git a/loader/loader.c b/loader/loader.c > index 98ea24c..4224268 100644 > --- a/loader/loader.c > +++ b/loader/loader.c > @@ -2071,7 +2071,7 @@ int main(int argc, char ** argv) { > stop_fw_loader(&loaderData); > start_fw_loader(&loaderData); > > - mlLoadModuleSet("raid0:raid1:raid5:raid6:raid456:raid10:linear:fat:msdos:gfs2:reiserfs:jfs:xfs:btrfs:dm-mod:dm-zero:dm-mirror:dm-snapshot:dm-multipath:dm-round-robin:dm-crypt:cbc:sha256:lrw:xts"); > + mlLoadModuleSet("raid0:raid1:raid5:raid6:raid456:raid10:linear:fat:msdos:xfs:dm-mod:dm-zero:dm-mirror:dm-snapshot:dm-multipath:dm-round-robin:dm-crypt:cbc:sha256:lrw:xts"); > > if (!access("/mnt/runtime/usr/lib/libunicode-lite.so.1", R_OK)) > setenv("LD_PRELOAD", "/mnt/runtime/usr/lib/libunicode-lite.so.1", 1); > diff --git a/storage/formats/fs.py b/storage/formats/fs.py > index 0e155eb..9ee2d55 100644 > --- a/storage/formats/fs.py > +++ b/storage/formats/fs.py > @@ -118,6 +118,7 @@ class FS(DeviceFormat): > _type = "Abstract Filesystem Class" # fs type name > _name = None > _mkfs = "" # mkfs utility > + _module = None # kernel module required for support > _resizefs = "" # resize utility > _labelfs = "" # labeling utility > _fsck = "" # fs check utility > @@ -427,6 +428,21 @@ class FS(DeviceFormat): > if rc >= 4: > raise FSError("filesystem check failed: %s" % rc) > > + def loadModule(self): > + """Load whatever kernel module is required to support this filesystem.""" > + if not self._module: > + return > + > + try: > + rc = iutil.execWithRedirect("modprobe", [self._module], > + stdout="/dev/tty5", stderr="/dev/tty5", > + searchPath=1) > + except Exception as e: > + raise FSError("Could not load %s kernel module: %s" % (self._module, e)) > + > + if rc: > + raise FSError("Could not load %s kernel module." % self._module) > + > def mount(self, *args, **kwargs): > """ Mount this filesystem. > > @@ -821,6 +837,7 @@ class BTRFS(FS): > """ btrfs filesystem """ > _type = "btrfs" > _mkfs = "mkfs.btrfs" > + _module = "btrfs" > _resizefs = "btrfsctl" > _formattable = True > _linuxNative = True > @@ -832,6 +849,12 @@ class BTRFS(FS): > _packages = ["btrfs-progs"] > _maxSize = 16 * 1024 * 1024 > > + def __init__(self, *args, **kwargs): > + if self.supported: > + self.loadModule() > + > + FS.__init__(self, *args, **kwargs) > + > def _getFormatOptions(self, options=None): > argv = [] > if options and isinstance(options, list): > @@ -863,6 +886,7 @@ class GFS2(FS): > """ gfs2 filesystem. """ > _type = "gfs2" > _mkfs = "mkfs.gfs2" > + _module = "gfs2" > _formattable = True > _defaultFormatOptions = ["-j", "1", "-p", "lock_nolock", "-O"] > _linuxNative = True > @@ -871,6 +895,12 @@ class GFS2(FS): > _check = True > _packages = ["gfs2-utils"] > > + def __init__(self, *args, **kwargs): > + if self.supported: > + self.loadModule() > + > + FS.__init__(self, *args, **kwargs) > + > @property > def supported(self): > """ Is this filesystem a supported type? """ > @@ -887,6 +917,7 @@ class JFS(FS): > """ JFS filesystem """ > _type = "jfs" > _mkfs = "mkfs.jfs" > + _module = "jfs" > _labelfs = "jfs_tune" > _defaultFormatOptions = ["-q"] > _defaultLabelOptions = ["-L"] > @@ -898,6 +929,12 @@ class JFS(FS): > _dump = True > _check = True > > + def __init__(self, *args, **kwargs): > + if self.supported: > + self.loadModule() > + > + FS.__init__(self, *args, **kwargs) > + > @property > def supported(self): > """ Is this filesystem a supported type? """ _______________________________________________ Anaconda-devel-list mailing list Anaconda-devel-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/anaconda-devel-list