All of lore.kernel.org
 help / color / mirror / Atom feed
From: Xiao Yang <yangx.jy@cn.fujitsu.com>
To: ltp@lists.linux.it
Subject: [LTP] [PATCH] unshare01.sh: Setup parent mount flag before unshare testing
Date: Thu, 25 Feb 2021 18:57:39 +0800	[thread overview]
Message-ID: <603782A3.7030902@cn.fujitsu.com> (raw)
In-Reply-To: <F3D3F6AC3820BB4C9FCA340DB5C32CB40387A34B@dggeml511-mbs.china.huawei.com>

On 2021/2/25 18:02, zhaogongyi wrote:
> Hi Yang,
>
>> I don't like the approach which enforces mountpoint to be shared in
>> parent mount namespace.
>> I think we can tune expected value by checking propagation flag in parent
>> mount namespace because of two reasons:
>> 1) Make test cover more cases.
>> 2) Don't depend on the fixed tmpfs.
>
> If we have no fixed parent mount namespace, the test looks like will pass at any cases since we judge result by "grep -w 'dir_B' /proc/self/mountinfo | grep -qw 'shared'".
Hi Zhongyi,

This issue is caused by the state(e.g. share or private) of parent mount 
namespace and both of results are expected.

> It seems a bit tangential to our test objective as " # 6) If we run with "--mount --propagation shared", mount and unmount events propagate to its parent mount namespace. "
We also need to update the description of #6 because it is true only 
when the parent mount namespace is shared.
For example:
# 6) If we run with "--mount --propagation shared" and parent mount 
namespace is shared, mount and unmount events can do propagation. "
# 7) If we run with "--mount --propagation shared" and parent mount 
namespace is not shared, mount and unmount events cannot do propagation. "

Best Regards,
Xiao Yang
>
> Thanks!
>
> ==========================================================
>
>> Hi Zhongyi, Petr
>>
>> I don't like the approach which enforces mountpoint to be shared in
>> parent mount namespace.
>> I think we can tune expected value by checking propagation flag in parent
>> mount namespace because of two reasons:
>> 1) Make test cover more cases.
>> 2) Don't depend on the fixed tmpfs.
>>
>> Zhongyi,  could you test the following patch on your enviorment?
>> -------------------------------------------------------------------------------------------------
>> diff --git a/testcases/commands/unshare/unshare01.sh
>> b/testcases/commands/unshare/unshare01.sh
>> index bf163a7f4..78ea83fc0 100755
>> --- a/testcases/commands/unshare/unshare01.sh
>> +++ b/testcases/commands/unshare/unshare01.sh
>> @@ -40,6 +40,17 @@
>> max_mntns_path="/proc/sys/user/max_mnt_namespaces"
>>    default_max_userns=-1
>>    default_max_mntns=-1
>>
>> +parse_propagation_flag()
>> +{
>> +       mount --bind dir_A dir_B
>> +       if grep -w 'dir_B' /proc/self/mountinfo | grep -qw 'shared'; then
>> +               echo "mounted"
>> +       else
>> +               echo "unmounted"
>> +       fi
>> +       umount dir_B
>> +}
>> +
>>    setup()
>>    {
>>           # On some distributions(e.g RHEL7.4), the default value of @@
>> -149,7 +160,8 @@ do_test()
>>           4) unshare_test "--user --map-root-user" "id -g" "0";;
>>           5) unshare_test "--mount" "mount --bind dir_A dir_B"
>> "unmounted";;
>>           6) unshare_test "--mount --propagation shared" \
>> -                       "mount --bind dir_A dir_B" "mounted";;
>> +                       "mount --bind dir_A dir_B" \
>> +                       "$(parse_propagation_flag)";;
>>           7) unshare_test "--user --map-root-user --mount" \
>>                           "mount --bind dir_A dir_B" "unmounted";;
>>           8) unshare_test "--user --map-root-user --mount --propagation
>> shared" \
>> --
>> ------------------------------------------------------------------------------------------
>>
>> Best Regards,
>> Xiao Yang
>> On 2021/2/24 9:40, Petr Vorel wrote:
>>> Hi,
>>>
>>>> We need setup parent mount flag to shared before unshare testing, or
>>>> it will fail for system which has no systemd service since the
>>>> propagation flag is changed by systemd. From man 7
>> mount_namespaces.
>>> Do I understand correctly that all distros without systemd are
>>> affected, because systemd "automatically remounts all mount points as
>>> MS_SHARED on system startup" and test expect it?
>>>
>>>> Signed-off-by: Zhao Gongyi<zhaogongyi@huawei.com>
>>>> ---
>>>>    testcases/commands/unshare/unshare01.sh | 9 ++++++++-
>>>>    1 file changed, 8 insertions(+), 1 deletion(-) diff --git
>>>> a/testcases/commands/unshare/unshare01.sh
>>>> b/testcases/commands/unshare/unshare01.sh
>>>> index bf163a7f4..e1fb15035 100755
>>>> --- a/testcases/commands/unshare/unshare01.sh
>>>> +++ b/testcases/commands/unshare/unshare01.sh
>>>> @@ -31,7 +31,6 @@ TST_SETUP=setup
>>>>    TST_CLEANUP=cleanup
>>>>    TST_TESTFUNC=do_test
>>>>    TST_NEEDS_ROOT=1
>>>> -TST_NEEDS_TMPDIR=1
>>> You still need TST_NEEDS_TMPDIR=1, because you create files and
>> directories.
>>> Also your patch breaks bind test on very old systems (kernel 2.6,
>>> util-linux 2.17.2, glibc 2.12):
>>> unshare01 5 TFAIL: unshare --mount mount --bind dir_A dir_B got bind
>>> info
>>>
>>> Any idea why (how to avoid this regression)?
>>>
>>>>    TST_NEEDS_CMDS="unshare id mount umount"
>>>>    . tst_test.sh
>>>> @@ -39,6 +38,7 @@
>> max_userns_path="/proc/sys/user/max_user_namespaces"
>>>>    max_mntns_path="/proc/sys/user/max_mnt_namespaces"
>>>>    default_max_userns=-1
>>>>    default_max_mntns=-1
>>>> +CURR=$(pwd)
>>> Instead of $CURR, cd - can be used.
>>>
>>>>    setup()
>>>>    {
>>>> @@ -55,6 +55,10 @@ setup()
>>>>    		echo 1024>   "${max_mntns_path}"
>>>>    	fi
>>>> +	mkdir $CURR/dir_C
>>> just mkdir dir_C
>>>> +	mount -t tmpfs none dir_C
>>>> +	mount --make-shared dir_C
>>> FYI We have tst_mount, but it'd not help much here.
>>>
>>>> +	cd dir_C
>>>>    	mkdir -p dir_A dir_B
>>>>    	touch dir_A/A dir_B/B
>>>>    }
>>>> @@ -66,6 +70,9 @@ cleanup()
>>>>    		echo ${default_max_userns}>   "${max_userns_path}"
>>>>    	[ ${default_max_mntns} -ne -1 ]&&   \
>>>>    		echo ${default_max_mntns}>   "${max_mntns_path}"
>>>> +	cd $CURR
>>>> +	umount dir_C
>>> tst_umount dir_C
>>>
>>>> +	rm -rf dir_C
>>> rm is not needed (cleanup is done automatically).
>>>>    }
>>>>    check_id()
>>> Full diff of changes I propose below.
>>>
>>> Kind regards,
>>> Petr
>>>
>>> diff --git testcases/commands/unshare/unshare01.sh
>>> testcases/commands/unshare/unshare01.sh
>>> index e1fb15035..0b5c56811 100755
>>> --- testcases/commands/unshare/unshare01.sh
>>> +++ testcases/commands/unshare/unshare01.sh
>>> @@ -31,6 +31,7 @@ TST_SETUP=setup
>>>    TST_CLEANUP=cleanup
>>>    TST_TESTFUNC=do_test
>>>    TST_NEEDS_ROOT=1
>>> +TST_NEEDS_TMPDIR=1
>>>    TST_NEEDS_CMDS="unshare id mount umount"
>>>    . tst_test.sh
>>>
>>> @@ -38,7 +39,6 @@
>> max_userns_path="/proc/sys/user/max_user_namespaces"
>>>    max_mntns_path="/proc/sys/user/max_mnt_namespaces"
>>>    default_max_userns=-1
>>>    default_max_mntns=-1
>>> -CURR=$(pwd)
>>>
>>>    setup()
>>>    {
>>> @@ -55,7 +55,7 @@ setup()
>>>    		echo 1024>   "${max_mntns_path}"
>>>    	fi
>>>
>>> -	mkdir $CURR/dir_C
>>> +	mkdir dir_C
>>>    	mount -t tmpfs none dir_C
>>>    	mount --make-shared dir_C
>>>    	cd dir_C
>>> @@ -70,9 +70,8 @@ cleanup()
>>>    		echo ${default_max_userns}>   "${max_userns_path}"
>>>    	[ ${default_max_mntns} -ne -1 ]&&   \
>>>    		echo ${default_max_mntns}>   "${max_mntns_path}"
>>> -	cd $CURR
>>> -	umount dir_C
>>> -	rm -rf dir_C
>>> +	cd ->/dev/null
>>> +	tst_umount dir_C
>>>    }
>>>
>>>    check_id()
>>>
>>
>
>
> .
>




  reply	other threads:[~2021-02-25 10:57 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-02-25 10:02 [LTP] [PATCH] unshare01.sh: Setup parent mount flag before unshare testing zhaogongyi
2021-02-25 10:57 ` Xiao Yang [this message]
  -- strict thread matches above, loose matches on Subject: below --
2021-03-01  1:13 zhaogongyi
2021-02-27  9:46 zhaogongyi
2021-02-28 12:22 ` Xiao Yang
2021-02-25  9:38 zhaogongyi
2021-02-23 14:03 Zhao Gongyi
2021-02-24  1:40 ` Petr Vorel
2021-02-24  5:01   ` Xiao Yang
2021-06-07  9:42     ` Petr Vorel

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=603782A3.7030902@cn.fujitsu.com \
    --to=yangx.jy@cn.fujitsu.com \
    --cc=ltp@lists.linux.it \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.