Skip to content

Commit

Permalink
Merge pull request #1575 from harish-24/xfs_pmem_lib
Browse files Browse the repository at this point in the history
Use pmem library to create pmem devices and run xfstests
  • Loading branch information
PraveenPenguin authored Mar 11, 2020
2 parents fbc9972 + d29c975 commit 32be26f
Show file tree
Hide file tree
Showing 3 changed files with 93 additions and 26 deletions.
89 changes: 76 additions & 13 deletions fs/xfstests.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
from avocado import Test
from avocado import main
from avocado.utils import process, build, git, distro, partition
from avocado.utils import disk, data_structures
from avocado.utils import disk, data_structures, pmem
from avocado.utils.software_manager import SoftwareManager


Expand All @@ -51,6 +51,8 @@ def setUp(self):
"df -T / | awk 'END {print $2}'", shell=True).decode("utf-8")
if root_fs in ['ext3', 'ext4']:
self.use_dd = True
self.dev_type = self.params.get('type', default='loop')

sm = SoftwareManager()

self.detected_distro = distro.detect()
Expand All @@ -73,6 +75,10 @@ def setUp(self):
# on Avocado versions >= 50.0. This is a temporary compatibility
# enabler for older runners, but should be removed soon
elif self.detected_distro.name in ['centos', 'fedora', 'rhel', 'SuSE']:
if self.dev_type == 'nvdimm':
packages.extend(['ndctl', 'parted'])
if self.detected_distro.name == 'rhel':
packages.extend(['daxctl'])
packages.extend(['acl', 'bc', 'dump', 'indent', 'libtool', 'lvm2',
'xfsdump', 'psmisc', 'sed', 'libacl-devel',
'libattr-devel', 'libaio-devel', 'libuuid-devel',
Expand All @@ -97,15 +103,14 @@ def setUp(self):
if not sm.check_installed(package) and not sm.install(package):
self.cancel("Fail to install %s required for this test." %
package)

self.skip_dangerous = self.params.get('skip_dangerous', default=True)
self.test_range = self.params.get('test_range', default=None)
self.scratch_mnt = self.params.get(
'scratch_mnt', default='/mnt/scratch')
self.test_mnt = self.params.get('test_mnt', default='/mnt/test')
self.disk_mnt = self.params.get('disk_mnt', default='/mnt/loop_device')
self.dev_type = self.params.get('type', default='loop')
self.fs_to_test = self.params.get('fs', default='ext4')

if process.system('which mkfs.%s' % self.fs_to_test,
ignore_status=True):
self.cancel('Unknown filesystem %s' % self.fs_to_test)
Expand All @@ -129,6 +134,59 @@ def setUp(self):
else:
self.cancel('Need %s GB to create loop devices' % check)
self._create_loop_device(base_disk, loop_size, mount)
elif self.dev_type == 'nvdimm':
self.test_dev = self.params.get('disk_test', default=None)
self.scratch_dev = self.params.get('disk_scratch', default=None)
self.log_test = self.params.get('log_test', default='')
self.log_scratch = self.params.get('log_scratch', default='')
logflag = self.params.get('logdev', default=False)
self.plib = pmem.PMem()
regions = sorted(self.plib.run_ndctl_list(
'-R'), key=lambda i: i['size'], reverse=True)
if not (self.test_dev and self.scratch_dev):
if not regions:
self.plib.enable_region()
regions = sorted(self.plib.run_ndctl_list(
'-R'), key=lambda i: i['size'], reverse=True)
region = self.plib.run_ndctl_list_val(regions[0], 'dev')
if not self.plib.is_region_legacy(region):
self.plib.destroy_namespace(region=region, force=True)
self.plib.create_namespace(
region=region, size='21G', sector_size='512')
pmem_dev = self.plib.run_ndctl_list_val(
self.plib.run_ndctl_list('-N -r %s' % region)[0], 'blockdev')
if logflag:
if not (self.log_test and self.log_scratch):
self.plib.create_namespace(
region=region, size='3G', mode='sector', sector_size='512')
log_dev = self.plib.run_ndctl_list_val(self.plib.run_ndctl_list(
'-N -r %s -m sector' % region)[0], 'blockdev')
else:
self.plib.enable_region()
if not len(regions) > 1 and logflag:
self.cancel("Cannot use logdev with one region")
else:
reg_2 = self.plib.run_ndctl_list_val(regions[1], 'dev')
self.plib.create_namespace(
region=reg_2, size='3G', mode='sector', sector_size='512')
log_dev = self.plib.run_ndctl_list_val(self.plib.run_ndctl_list(
' -N -r %s -m sector' % reg_2)[0], 'blockdev')
pmem_dev = self.plib.run_ndctl_list_val(
self.plib.run_ndctl_list('-N -r %s' % region)[0], 'blockdev')
if process.system('parted -s -a optimal /dev/%s mklabel gpt --'
' mkpart primary xfs 1MiB 10GiB mkpart '
'primary xfs 10GiB 20GiB' % pmem_dev, shell=True):
self.cancel("Failed to setup PMEM partitions")
self.test_dev = "/dev/%sp1" % pmem_dev
self.scratch_dev = "/dev/%sp2" % pmem_dev
self.devices.extend([self.test_dev, self.scratch_dev])
if logflag and not (self.log_test and self.log_scratch):
if process.system('parted -s -a optimal /dev/%s mklabel gpt --'
' mkpart primary xfs 1MiB 1GiB mkpart '
'primary xfs 1GiB 2GiB' % log_dev, shell=True):
self.cancel("Failed to setup logdev partitions")
self.log_test = "/dev/%s1" % log_dev
self.log_scratch = "/dev/%s2" % log_dev
else:
self.test_dev = self.params.get('disk_test', default=None)
self.scratch_dev = self.params.get('disk_scratch', default=None)
Expand All @@ -138,8 +196,6 @@ def setUp(self):
cfg_file = os.path.join(self.teststmpdir, 'local.config')
self.mkfs_opt = self.params.get('mkfs_opt', default='')
self.mount_opt = self.params.get('mount_opt', default='')
self.log_test = self.params.get('log_test', default='')
self.log_scratch = self.params.get('log_scratch', default='')
with open(cfg_file, "r") as sources:
lines = sources.readlines()
with open(cfg_file, "w") as sources:
Expand All @@ -166,10 +222,12 @@ def setUp(self):
break
with open(cfg_file, "a") as sources:
if self.log_test:
sources.write('export USE_EXTERNAL=yes\n')
sources.write('export TEST_LOGDEV="%s"\n' % self.log_test)
self.log_devices.append(self.log_test)
if self.log_scratch:
sources.write('export SCRATCH_LOGDEV="%s"\n' % self.log_scratch)
sources.write('export SCRATCH_LOGDEV="%s"\n' %
self.log_scratch)
self.log_devices.append(self.log_scratch)
if self.mkfs_opt:
sources.write('MKFS_OPTIONS="%s"\n' % self.mkfs_opt)
Expand All @@ -182,7 +240,8 @@ def setUp(self):
for ite, dev in enumerate(self.devices):
dev_obj = partition.Partition(dev)
if self.logdev_opt:
dev_obj.mkfs(fstype=self.fs_to_test, args='%s %s=%s' % (self.mkfs_opt, self.logdev_opt, self.log_devices[ite]))
dev_obj.mkfs(fstype=self.fs_to_test, args='%s %s=%s' % (
self.mkfs_opt, self.logdev_opt, self.log_devices[ite]))
else:
dev_obj.mkfs(fstype=self.fs_to_test, args=self.mkfs_opt)

Expand Down Expand Up @@ -211,11 +270,15 @@ def setUp(self):
self._create_test_list(self.share_exclude, "shared",
dangerous=False)
if self.detected_distro.name is not 'SuSE':
process.run('useradd 123456-fsgqa', sudo=True)
process.run('useradd fsgqa', sudo=True)
if process.system('useradd 123456-fsgqa', sudo=True, ignore_status=True):
self.log.warn('useradd 123456-fsgqa failed')
if process.system('useradd fsgqa', sudo=True, ignore_status=True):
self.log.warn('useradd fsgqa failed')
else:
process.run('useradd -m -U fsgqa', sudo=True)
process.run('groupadd sys', sudo=True)
if process.system('useradd -m -U fsgqa', sudo=True, ignore_status=True):
self.log.warn('useradd fsgqa failed')
if process.system('groupadd sys', sudo=True, ignore_status=True):
self.log.warn('groupadd sys failed')
if not os.path.exists(self.scratch_mnt):
os.makedirs(self.scratch_mnt)
if not os.path.exists(self.test_mnt):
Expand Down Expand Up @@ -265,9 +328,9 @@ def tearDown(self):
process.system('umount %s %s' % (self.scratch_mnt, self.test_mnt),
sudo=True, ignore_status=True)
if os.path.exists(self.scratch_mnt):
os.rmdir(self.scratch_mnt)
shutil.rmtree(self.scratch_mnt)
if os.path.exists(self.test_mnt):
os.rmdir(self.test_mnt)
shutil.rmtree(self.test_mnt)
if self.dev_type == 'loop':
for dev in self.devices:
process.system('losetup -d %s' % dev, shell=True,
Expand Down
12 changes: 7 additions & 5 deletions fs/xfstests.py.data/nvdimm.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,10 @@ setup:
#share_exclude: '1-600'
fs_xfs:
fs: 'xfs'
mkfs_opt: '-b size=65536 -s size=4096'
disk_type: !mux
type: 'disk'
disk_test: /dev/pmem0
disk_scratch: /dev/pmem0.1
mkfs_opt: '-b size=65536 -s size=4096 -m reflink=0'
exclude:
gen_exclude:
disk_type:
type: 'nvdimm'
disk_test:
disk_scratch:
18 changes: 10 additions & 8 deletions fs/xfstests.py.data/nvdimm_log.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ setup:
scratch_mnt: '/mnt/scratch_pmem'
test_mnt: '/mnt/test_pmem'
mount_opt: '-o dax'
logdev: true
fs_type: !mux
fs_ext4:
fs: 'ext4'
Expand All @@ -12,12 +13,13 @@ setup:
#share_exclude: '1-300'
fs_xfs:
fs: 'xfs'
mkfs_opt: '-b size=65536 -s size=4096'
mkfs_opt: '-b size=65536 -s size=512 -m reflink=0'
logdev_opt: '-l logdev'
#gen_exclude: '388'
disk_type: !mux
type: 'disk'
disk_test: /dev/pmem0
disk_scratch: /dev/pmem0.1
log_test: /dev/pmem1s
log_scratch: /dev/pmem1.1s
exclude:
gen_exclude:
disk_type:
type: 'nvdimm'
disk_test:
disk_scratch:
log_test:
log_scratch:

0 comments on commit 32be26f

Please sign in to comment.