From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1168089AbcKAIt7 (ORCPT ); Tue, 1 Nov 2016 04:49:59 -0400 Received: from mail-db5eur01on0119.outbound.protection.outlook.com ([104.47.2.119]:36863 "EHLO EUR01-DB5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1168064AbcKAItx (ORCPT ); Tue, 1 Nov 2016 04:49:53 -0400 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=avagin@virtuozzo.com; Date: Mon, 31 Oct 2016 23:14:23 -0700 From: Andrei Vagin To: "Eric W. Biederman" CC: Andrey Vagin , Alexander Viro , Linux Containers , linux-fsdevel , LKML Subject: Re: [RFC][PATCH v2] mount: In propagate_umount handle overlapping mount propagation trees Message-ID: <20161101061422.GA14866@outlook.office365.com> References: <87wphb4pjn.fsf@x220.int.ebiederm.org> <8737jy3htt.fsf_-_@x220.int.ebiederm.org> <20161018024000.GA4901@outlook.office365.com> <87r37e9mnj.fsf@xmission.com> <877f95ngpr.fsf_-_@xmission.com> <20161020213052.GA25226@outlook.office365.com> <87pomtec6c.fsf@xmission.com> <877f90b27o.fsf_-_@xmission.com> <20161025205846.GA25080@outlook.office365.com> <87mvhs14s7.fsf@xmission.com> MIME-Version: 1.0 Content-Type: text/plain; charset="koi8-r" Content-Disposition: inline In-Reply-To: <87mvhs14s7.fsf@xmission.com> User-Agent: Mutt/1.7.0 (2016-08-17) X-Originating-IP: [2601:8c3:8000:27b8::189e] X-ClientProxiedBy: BN6PR20CA0017.namprd20.prod.outlook.com (10.173.158.155) To DB6PR0801MB1976.eurprd08.prod.outlook.com (10.168.85.149) X-MS-Office365-Filtering-Correlation-Id: f257c936-c3cc-4155-5829-08d4021e5b8b X-Microsoft-Exchange-Diagnostics: 1;DB6PR0801MB1976;2:y7sTUTQt43ra7F0X5arT6Dxuf0bdaWxcNxTj3roUJPLIBuieUCHNfo+RuSkQ+6v0LtPouzsfhKqn0AHX4L/KCoTPUX+DWZ2tT/sbvhqgCdgQb5/coVuomwQy8yjDlUqHRkmEpnY3HGjCsfDBHJEavP+iItIWvqP/SOX1fnbuPYdEmxlN11SsFFr2Qq67DueFQ9J9xtzLCTPNc4nbg9h5gA==;3:Ekoi1m/49FeGu9Myn7nwCNBWsOHRJjIqXDRFuUe0BufUi4P6W3N95Zx3sDAF7nb6uIY2f2y8YDtz+vgy/vAiRgBW1TSZBIU03v+4tkliG7CdwQdqzSY5Hxc4gW2h1zdr+yDUTQacOEiLDPYZ861mOA==;25:DIbAdQl6FXFw3r2Z6dcGlasKOCDQIp/YTuLcb0qwnR9uZLkNPSRsuH98HsmW8xqhW/v9tIwU/ZTiegmYV3D2s8YXO3xyfXBa7ID8/92P6c+d5CkIhuYoH9uG0/PLf7NwFb6x3qmTmiFyl0bNjDNSH0b+IXipVscIrYNu1S6AGIY2oIXtyE5cEOEpBIiVWLsEJp69iQgFo0K1Ib3y91uOhG6/RYctbdn5+B5FTmhJLpLo+5iHPX2QcxbYvGFwx3CN8kAs9GEccLRkaA4IG26U9bbr9AqAhDG04tKg4xR7Y+ubMAJRn6UdyyOlroL4l6VEt5ucZRYxEy1XPC/gI8yY1CXHijYer6edWMgTwsuym4n1FJ3He1Ax+A0OqzkTbGfQBjk0/Gmw5utLbnn9TilCF42u/D1qZcwvUwrL1gy2+tA= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:DB6PR0801MB1976; X-Microsoft-Exchange-Diagnostics: 1;DB6PR0801MB1976;31:/e+sGfqPxXd0s23VDTrWAm36sgiy3WFFr3rKdcx0GhACnZrWNlzAUEYm0Mf4nURI3VIN/mOVtfP0A5J/Nw+z72H6tRVEr+vkxJhCH3QXyiSiJrgSOy9ZrErEUVuy5QkpOca2zK97pbMbEg3GmLK3CjWOV4C7r6fdhDoJnSXSmApbpMpQCgieg5/hBlClsvkFqN/KGSB5tJp7mZcpGi6UoiFaPIBKJt4iBQqxykTGj+f0GNJ4lGDbTcn/06Hx5n6syUaM0qpBQNU92r69QCQs4A==;4:tdLDCMhtrJM68mWv6EUTFzAPGYC/+RrkuDkg/fDlEAd0rtWxJ9Emdu7xz/GG8OHApoxEZP2R/Zgwu/au/E459VQNFkhCYx9dnSLrD25O2LTj11xuJ0yw/pjI2FEgAJjmL41jv1fn/xixe7xa3bs/qpTdKdatCVzdpYvy86J0ZlIrulpxzZOgboion9T0LG3pFfP2eWnHyj3lIbnLHVvtgGSDDjcNGJYmbIjp6kdxvTQtWfJWrRKlfRF3+Uy226EDSHk4A4fFMQMA9haxr3ci5+5JeHcAeGIj+JEZNZCEXuqCqZV2oyABLokD/z3RBMXw9+JshHORlSOaraxoaFtpSxEBUqIKOtyVWESVb0kN2aHD5zaaKaVH7pbObbCksdDJm4XuqOBbVRh4t4uf0ZMg0ysmeUcVlofeeottdgEb/nA9LjrPJy+DLgejnp8XOGcZ X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040176)(601004)(2401047)(5005006)(8121501046)(10201501046)(3002001)(6043046)(6042046);SRVR:DB6PR0801MB1976;BCL:0;PCL:0;RULEID:;SRVR:DB6PR0801MB1976; X-Forefront-PRVS: 01136D2D90 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6009001)(7916002)(24454002)(189002)(199003)(6916009)(586003)(83506001)(2950100002)(6116002)(68736007)(7736002)(105586002)(50986999)(97736004)(93886004)(101416001)(4001350100001)(106356001)(110136003)(305945005)(54356999)(76176999)(53416004)(19580395003)(92566002)(19580405001)(81156014)(81166006)(69596002)(1076002)(42186005)(50466002)(8676002)(23686003)(2906002)(7846002)(6666003)(9686002)(33656002)(77096005)(5660300001)(4326007)(5890100001)(86362001)(575784001)(47776003)(189998001)(18370500001)(26326002);DIR:OUT;SFP:1102;SCL:1;SRVR:DB6PR0801MB1976;H:outlook.office365.com;FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?koi8-r?Q?1;DB6PR0801MB1976;23:8JHuYrYFvG/VWJosAz6pM08kg9MAbp9H9v7YpWpp3?= =?koi8-r?Q?jfjI3K2CpACNQZh9hNRkFGhKbeGLmLcoTcWZSORyOUO1o2hK2nmILsz5Sbq86W?= =?koi8-r?Q?k3W8kG3UaF6k+2HOtUz98E37a792dZi+p3uxpntxZquegrMh9dauHxdWFvarRU?= =?koi8-r?Q?9uBMHqYGYzZFj4uvi7D8z6orUmoxBIQBXAV++SQau2iGzH1l4uMT6J+bYkZDzN?= =?koi8-r?Q?7i2Y8f1Vn/4BytcWCq58iIsURQFFcXpieKCY9hvIYPOZcPtny5t4TlJdtpP+mA?= =?koi8-r?Q?wfyLlqZ2MV35LWOx4Njq6CE27JzoyUcQXjm9uZpo9Z3TSVd2lZpWWvHIP7Qwh1?= =?koi8-r?Q?6uDgPKOi8n/yU0U9jh1PS1LdeRGxzWYU2xjUcGg9bH4xcI0+Q0XV8VbrcwOrP8?= =?koi8-r?Q?D9GCpXAG+U5ynL0DFEoStEf42xJDwqEDxfHeVaPBUqLI3aPjSTt5tiOAMRbjME?= =?koi8-r?Q?Zr5fNTS+8YKqxSIyud00MwCOxBvbDLPC154NxLqYajxx3lRvKtAmldzlKeG7/b?= =?koi8-r?Q?8elCdrh4nu3NkV/SsVVSgfbam0NCuxsXQLZGC7qGXv7OiYraJJZ/nfl02DbQ8Z?= =?koi8-r?Q?7S89A+PsV5wugVPkwcUT6BoV8MrFSGwKFiE5i16Wrv7aZd+CU422Uksklp/Yui?= =?koi8-r?Q?nmDEpErR5fcgkLhiKN0FnZJj/Wyb28DomtH3fCx27ACuDIIUYvTI4Ihb85iQRR?= =?koi8-r?Q?5uiJjvkZdbLNitk62oI0PaJKmp2zKzPjBT8OKZ5p3igHUbhDPFgt0vxRnN/a3m?= =?koi8-r?Q?bIYOO0CYLIQHLwJOXjrii3JGwXetXc+hHauGaRwoJP+qkEeeLlWkUzBd7OGmr4?= =?koi8-r?Q?bcGAamSsili6iZNSwUSx5tcPIFljrrApcZHauyV5D6rSplv6GrnODm20mRgC0I?= =?koi8-r?Q?xqSl61AtlndyjSdk/JDwPrcxnchyy9492ElMVWqZdr24OYvSwQ5bB1K0UuAjxk?= =?koi8-r?Q?/6ie1mnOyuNLcFYO6XjXTn6SMJkiWseZ65xOggQvpc0/ZfSJaABbd3ttYTJlws?= =?koi8-r?Q?7yxy69mdz2yDsm6n4DuCKmvqfwVBf3nVUY0PVxk3sBocPIwLHdVqgYGY0t9GzI?= =?koi8-r?Q?ZY8OWG9nh+foXmZPla3g8kVDWFpA3NTb8jMI86DqubMq16f3/7R24cJxfrkH8w?= =?koi8-r?Q?c+8vC95jBv5c4PxoIQT07/7E3hxg2jssSN5PSRg1hNRSy9flt08ZtNiM574fZ5?= =?koi8-r?Q?hoQMpkklYIupTb9/Mo1ilzWvUodg+Lr+sU09kTrDJtQkNpebtgeAf8jE8irY3?= X-Microsoft-Exchange-Diagnostics: 1;DB6PR0801MB1976;6:suh2b03wJoMJMS3jb7+WomfWRFSOnKd9X0IKwB5jhxx5tfa/5nAiHQAi+i6UBEbFHbw/QQ7A92rVGgtvaexRuEdwU6UlarexPYxYXvKAzp6/I7ouiy/97BYLrabrS/Hi9Oi6jRuDrqg9JgiCO1nkWfvktT7aEZTHQf0NZQPwekeLPmXuSa6FJvx4iIfmWtNJmyujnRQzbI7kep4/qFSncLPcRIvYV03hqll9rmPp1RAcWC5wC9Jx8h8yQdOupEWDoHxKhT3V6scyNYqfjP2p0nwIt7ZyBypZmR8wJzDDs0/TXBOFLlxBn+oejzHQz+ifJfk4dlW9OYUybJLBgvtMbg==;5:JXGKsiANs15SvcGiwWqIb2gH0Bgi9ozVyz59393h9ohFYJhzD11vSFefpN2/d7xrnPrD7gII+DZ2QlMhtwPyKdE7rpXRJPWjy7ZmwNhtuAeutYlUxZqu53vfZS9mFbaJaqMxm8ZQw19sdx+BQJeLFA==;24:PPshr1iwC0b/ydag2KuXDD5PJ2kPd5aSMd5S0zxb6FmeZC/4+LkLKi4QJxRs4QIibVEaGuIgFoZiSDm5f1tI23WTb2/YqYLJScunbBMh+c0= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;DB6PR0801MB1976;7:qgcvFMczgoSbUBqmMnvsDV5HDvetu+2CIqe4b0ToF6SbHkmVqKOTVgo/asvTUrilCAUzu2e4mA+ANZZQvAKQyp5TSWWO8OxdpqmMlbPXYJE+dK7UKrL7IJeRknq5njdwOjZyMoal9yNr3IUgAM5y53arF+XORZm016d43aaiwfug9A7wHGk6WbOBGv0iIMaNqc4FklNc50MsEAGY/+fO0FNFGI06JbDjzPrh68ecwpMYaYn6zqaNFkyx5o1rmgtJOILnwEWstkra8TDoE8XFu6Aqc7Gv6wMUD3GINzEyc4ReGgniFvOvVjK+IKTmrOjaGoAzMNJBtenZUgWbvVfj/PHf+tMA7ALqSMP1r6AY9eo=;20:3dt5NHkzePcmBgs/LOp32Fi3FYE2l6FtHoT17fuBdsWednb2phVYDmYFbhxOviv/rlxOdKHSOrTsVkCrVXtVH4AWvP2lcTnX/kzM/26TxtFYnM2PjV3a+Bfb/ZgPd+x2Jp2UHe4OrmePNyA6n1IzEZ3oaB0Yk81/zJNTRlgkm1Q= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Nov 2016 06:14:35.6631 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0801MB1976 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Oct 25, 2016 at 04:45:44PM -0500, Eric W. Biederman wrote: > Andrei Vagin writes: > > > > From 8e0f45c0272aa1f789d1657a0acc98c58919dcc3 Mon Sep 17 00:00:00 2001 > > From: Andrei Vagin > > Date: Tue, 25 Oct 2016 13:57:31 -0700 > > Subject: [PATCH] mount: skip all mounts from a shared group if one is marked > > > > If we meet a marked mount, it means that all mounts from > > its group have been already revised. > > > > Signed-off-by: Andrei Vagin > > --- > > fs/pnode.c | 18 +++++++++++++++--- > > 1 file changed, 15 insertions(+), 3 deletions(-) > > > > diff --git a/fs/pnode.c b/fs/pnode.c > > index 8fd1a3f..ebb7134 100644 > > --- a/fs/pnode.c > > +++ b/fs/pnode.c > > @@ -426,10 +426,16 @@ static struct mount *propagation_visit_child(struct mount *last_child, > > if (child && !IS_MNT_MARKED(child)) > > return child; > > > > - if (!child) > > + if (!child) { > > m = propagation_next(m, origin); > > - else > > + } else { > > + if (IS_MNT_MARKED(child)) { > > + if (m->mnt_group_id == origin->mnt_group_id) > > + return NULL; > > + m = m->mnt_master; > > + } > > m = propagation_next_sib(m, origin); > > + } > > } > > return NULL; > > } > > @@ -456,8 +462,14 @@ static struct mount *propagation_revisit_child(struct mount *last_child, > > > > if (!child) > > m = propagation_next(m, origin); > > - else > > + else { > > + if (!IS_MNT_MARKED(child)) { > > + if (m->mnt_group_id == origin->mnt_group_id) > > + return NULL; > > + m = m->mnt_master; > > + } > > m = propagation_next_sib(m, origin); > > + } > > } > > return NULL; > > } > > That is certainly interesting. The problem is that the reason we were > going slow is that there were in fact mounts that had not been traversed > in the share group. > > And in fact the entire idea of visiting a vfsmount mountpoint pair > exactly once is wrong in the face of shadow mounts. For a vfsmount > mountpoint pair that has shadow mounts the number of shadow mounts needs > to be descreased by one each time the propgation tree is traversed > during unmount. Which means that as far as I can see we have to kill > shadow mounts to correctly optimize this code. Once shadow mounts are > gone I don't know of a case where need your optimization. I am not sure that now shadow mounts are worked as you described here. start_umount_propagation() doesn't remove a mount from mnt_hash, so in a second time we will look up the same mount again. Look at this script: [root@fc24 mounts]# cat ./opus02.sh set -e mkdir -p /mnt mount -t tmpfs zdtm /mnt mkdir -p /mnt/A/a mkdir -p /mnt/B/a mount --bind --make-shared /mnt/A /mnt/A mount --bind /mnt/A /mnt/B mount --bind /mnt/A/a /mnt/A/a mount --bind /mnt/A/a /mnt/A/a umount -l /mnt/A cat /proc/self/mountinfo | grep zdtm [root@fc24 mounts]# unshare --propagation private -m ./opus02.sh 159 121 0:46 / /mnt rw,relatime - tmpfs zdtm rw 162 159 0:46 /A /mnt/B rw,relatime shared:67 - tmpfs zdtm rw 167 162 0:46 /A/a /mnt/B/a rw,relatime shared:67 - tmpfs zdtm rw We mount nothing into /mnt/B, but when we umount everything from A, we still have something in B. Thanks, Andrei > > I am busily verifying my patch to kill shadow mounts but the following > patch is the minimal version. As far as I can see propagate_one > is the only place we create shadow mounts, and holding the > namespace_lock over attach_recursive_mnt, propagate_mnt, and > propgate_one is sufficient for that __lookup_mnt to be competely safe. > > diff --git a/fs/pnode.c b/fs/pnode.c > index 234a9ac49958..b14119b370d4 100644 > --- a/fs/pnode.c > +++ b/fs/pnode.c > @@ -217,6 +217,9 @@ static int propagate_one(struct mount *m) > /* skip if mountpoint isn't covered by it */ > if (!is_subdir(mp->m_dentry, m->mnt.mnt_root)) > return 0; > + /* skip if mountpoint already has a mount on it */ > + if (__lookup_mnt(&m->mnt, mp->m_dentry)) > + return 0; > if (peers(m, last_dest)) { > type = CL_MAKE_SHARED; > } else { > > If you run with that patch you will see that there are go faster stripes. > > Eric >