[blivet:master 17/21] Rewrite TmpFS class definition.

mulhern amulhern at redhat.com
Thu Jan 15 18:39:44 UTC 2015


Principle changes are:

* Abstract calculating the format for the size mount option into
_sizeOption method.

* Substitute FS.mountopts for TmpFS._options instance variable.

* Whether mounting or remounting always use default options if no
special options set and always use size mount option if required.

* do not set size to what the tmpfs default usually is. When it is
necessary to get the actual size, TmpFS._getExistingSize() will be used.
---
 blivet/formats/fs.py | 63 +++++++++++++++++++---------------------------------
 1 file changed, 23 insertions(+), 40 deletions(-)

diff --git a/blivet/formats/fs.py b/blivet/formats/fs.py
index c1bc3ed..b1172d1 100644
--- a/blivet/formats/fs.py
+++ b/blivet/formats/fs.py
@@ -1550,22 +1550,9 @@ class TmpFS(NoDevFS):
         # just use the default maxsize, which is 0, this disables
         # resizing but other operations such as mounting should work fine
 
-        # check if fixed filesystem size has been specified,
-        # if no size is specified, tmpfs will by default
-        # be limited to half of the system RAM
-        # (sizes of all tmpfs mounts are independent)
-        fsoptions = kwargs.get("mountopts")
-        self._size_option = ""
-        if fsoptions:
-            # some mount options were specified, replace the default value
-            self._options = fsoptions
-        if self._size:
-            # absolute size for the tmpfs mount has been specified
-            self._size_option = "size=%dm" % self._size.convertTo(MiB)
-        else:
-            # if no size option is specified, the tmpfs mount size will be 50%
-            # of system RAM by default
-            self._size = util.total_memory()/2
+        # if the size is 0, which is probably not set, accept the default
+        # size when mounting.
+        self._accept_default_size = not(self._size)
 
     def create(self, **kwargs):
         """ A filesystem is created automatically once tmpfs is mounted. """
@@ -1606,6 +1593,15 @@ class TmpFS(NoDevFS):
     def mountable(self):
         return True
 
+    def _sizeOption(self, size):
+        """ Returns a size option string appropriate for mounting tmpfs.
+
+            :param Size size: any size
+            :returns: size option
+            :rtype: str
+        """
+        return "size=%dm" % size.convertTo(MiB)
+
     def _getOptions(self):
         # if the size option string is defined,
         # append it to options
@@ -1614,11 +1610,12 @@ class TmpFS(NoDevFS):
         # when the filesystem is resized;
         # replacing the size option in the otherwise free-form
         # options string would get messy fast)
-        opts = ",".join([o for o in [self._options, self._size_option] if o])
-        return opts or "defaults"
-
-    def _setOptions(self, options):
-        self._options = options
+        opts = super(TmpFS, self)._getOptions()
+        if self._accept_default_size:
+            size_opt = None
+        else:
+            size_opt = self._sizeOption(self._size)
+        return ",".join(o for o in (opts, size_opt) if o)
 
     @property
     def free(self):
@@ -1643,29 +1640,15 @@ class TmpFS(NoDevFS):
     def resizeArgs(self):
         # a live tmpfs mount can be resized by remounting it with
         # the mount command
-
-        # add the remount flag, size and any options
-        remount_options = 'remount,size=%dm' % self.targetSize.convertTo(MiB)
-        # if any mount options are defined, append them
-        if self._options:
-            remount_options = "%s,%s" % (remount_options, self._options)
-        return ['-o', remount_options, self._type, self._mountpoint]
+        options = ("remount", self._sizeOption(self.targetSize), self.mountopts or ",".join(self.defaultMountOptions))
+        return ['-o', ",".join(options), self._type, self._mountpoint]
 
     def doResize(self):
-        # we need to override doResize, because the
-        # self._size_option string needs to be updated in case
-        # the tmpfs mount is successfully resized, using the new
-        # self._size value
+        # Override superclass method to record whether mount options
+        # should include an explicit size specification.
         original_size = self._size
         FS.doResize(self)
-        # after a successful resize, self._size
-        # is set to be equal to self.targetSize,
-        # so it can be used to check if resize took place
-        if original_size != self._size:
-            # update the size option string
-            # -> please note that resizing always sets the
-            # size of this tmpfs mount to an absolute value
-            self._size_option = "size=%dm" % self._size.convertTo(MiB)
+        self._accept_default_size = self._accept_default_size and original_size == self._size
 
 register_device_format(TmpFS)
 
-- 
1.9.3



More information about the anaconda-patches mailing list