[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