[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]
[PATCH] Only load a module if the filesystem is supported (#490795, #494108).
- From: Chris Lumens <clumens redhat com>
- To: anaconda-devel-list redhat com
- Cc:
- Subject: [PATCH] Only load a module if the filesystem is supported (#490795, #494108).
- Date: Mon, 6 Apr 2009 14:28:42 -0400
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.
---
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? """
--
1.6.1.3
[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]