Re: [PATCH v4 2/4] generic: test mmap io fom DAX to non-DAX

[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]



On Wed, Apr 19, 2017 at 1:40 AM, Xiong Zhou <xzhou@xxxxxxxxxx> wrote:
> On Mon, Apr 17, 2017 at 07:14:32AM -0700, Dan Williams wrote:
>> On Mon, Apr 17, 2017 at 12:14 AM, Xiong Zhou <xzhou@xxxxxxxxxx> wrote:
>> > Mount TEST_DEV as non-DAX, SCRATCH_DEV as DAX, then
>> > do mmap DIO from DAX to non-DAX.
>> >
>> > This test is split from generic/413. Since DIO from DAX
>> > to non-DAX is only supported/doable when device underneath
>> > has memory(struct page) backend.
>> >
>> > By ndctl looking at SCRATCH_DEV, skip this test if it is
>> > not in "memory mode".
>> >
>> > Adding helper to check pmem device status, which requires new
>> > PROGs ndctl to tweaking pmem devices and jq to parse ndctl's
>> > JSON format outputs.
>> >
>> > Signed-off-by: Xiong Zhou <xzhou@xxxxxxxxxx>
>> > ---
>> >  common/rc             |  45 ++++++++++++++++++++
>> >  tests/generic/423     | 113 ++++++++++++++++++++++++++++++++++++++++++++++++++
>> >  tests/generic/423.out |   2 +
>> >  tests/generic/group   |   1 +
>> >  4 files changed, 161 insertions(+)
>> >  create mode 100755 tests/generic/423
>> >  create mode 100644 tests/generic/423.out
>> >
>> > diff --git a/common/rc b/common/rc
>> > index 78a2101..73ac79c 100644
>> > --- a/common/rc
>> > +++ b/common/rc
>> > @@ -3151,6 +3151,51 @@ _require_chattr()
>> >         rm -f $TEST_DIR/syscalltest.out
>> >  }
>> >
>> > +# Require test/scratch device nvdimm and having specific
>> > +# arttibute key/value we need.
>> > +#
>> > +# This is designed to get attr values of nvdimm persistent
>> > +# memory device, by searching sysfs.
>> > +#
>> > +# Other non-nvdimm or non-persistent-memory devices would
>> > +# fail this helper anyway.
>> > +#
>> > +# So, ONLY use this helper when you REALLY need nvdimm and
>> > +# specific attr on it.
>> > +#
>> > +_require_pmem_key_value()
>> > +{
>> > +       local dev=${1#/dev/}
>> > +       local key=$2
>> > +       local value=$3
>> > +       local region index keyfile dev_value
>> > +
>> > +       # find a filename string contains the region of dev, eg:
>> > +       #  /sys/devices/platform/e820_pmem/ndbus0/region1/\
>> > +       #  namespace1.0/block/pmem1
>> > +       #
>> > +       region=$(find /sys/ | grep $dev | grep region | head -1)
>> > +       [ -z "$region" ] && \
>> > +         _notrun "requires persistent memory $dev $key $value"
>>
>> Running 'find' in sysfs is overkill. You can go directly to the sysfs
>> path for a given block device by stat(1) on the block device special
>> file to get the device major and minor numbers. Then go directly to
>> the sysfs path for that device by following this link
>
>> /sys/dev/block/$major:$minor.
>
> This sounds better. While I have trouble with getting the right region
> mode through this sysfs path.
>
> sh-4.2# ndctl list -r 2 -N
> {
>   "dev":"namespace2.0",
>   "mode":"raw",
>   "size":8589934592,
>   "blockdev":"pmem2"
> }
> sh-4.2# cat /sys/devices/LNXSYSTM:00/device:00/ACPI0012:00/ndbus0/region2/namespace2.0/mode
> raw
> sh-4.2# stat -c %t:%T /dev/pmem2
> 103:2
> sh-4.2# cat /sys/dev/block/259\:2/device/mode
> raw
> sh-4.2# ndctl create-namespace -f -e namespace2.0 -m memory
> {
>   "dev":"namespace2.0",
>   "mode":"memory",
>   "size":8453619712,
>   "uuid":"66d5afc1-6876-4e8b-a0ba-0082af84bf82",
>   "blockdev":"pmem2"
> }
> sh-4.2# stat -c %t:%T /dev/pmem2
> 103:2
> sh-4.2# cat /sys/dev/block/259\:2/device/mode     # Here
> pmem

This is another reason to use ndctl and not sysfs directly. After the
create-namespace command the namespace is "claimed" by a pfn-device
instance which writes metadata to the device to indicate where the
struct page memmap is located. In this case the sysfs path for the
parent device is a pfn-device. So the "device/mode" link is pointing
to:

    /sys/devices/LNXSYSTM:00/device:00/ACPI0012:00/ndbus0/region2/pfn2.0/mode

...and in that case "pmem" means that the struct page memmap is being
allocated on the pmem range directly.
--
To unsubscribe from this list: send the line "unsubscribe fstests" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Filesystems Development]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux