From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-eopbgr70104.outbound.protection.outlook.com ([40.107.7.104]:19265 "EHLO EUR04-HE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1727371AbeHIKnv (ORCPT ); Thu, 9 Aug 2018 06:43:51 -0400 Subject: Re: [PATCH 0/2] fs/lock: show locks info owned by dead/invisible processes To: Murphy Zhou References: <20180608142712.32460-1-khorenko@virtuozzo.com> Cc: Kirill Gorkunov , Andrey Vagin , Benjamin Coddington , Jeff Layton , "J. Bruce Fields" , Alexander Viro , Vasily Averin , Linux-Fsdevel , linux-kernel@vger.kernel.org From: Konstantin Khorenko Message-ID: <0f167223-fd55-7629-2eb0-48ec937668d3@virtuozzo.com> Date: Thu, 9 Aug 2018 11:20:04 +0300 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Sender: linux-fsdevel-owner@vger.kernel.org List-ID: On 08/09/2018 10:16 AM, Murphy Zhou wrote: > Hi, > > Looks like this missed v4.18 ? Hi Murphy, yes, Jeff planned to push those patches into 4.19 and they are in "linux-next" now, but not in 4.18 "master" currently. On 06/14/2018 01:41 PM, Jeff Layton wrote: > These look fine to me. I'll plan to pick them up for v4.19 unless anyone > has objections. linux-next: 1cf8e5de4055 ("fs/lock: show locks taken by processes from another pidns") 826d7bc9f013 ("fs/lock: skip lock owner pid translation in case we are in init_pid_ns") -- Best regards, Konstantin Khorenko, Virtuozzo Linux Kernel Team > On Fri, Jun 8, 2018 at 10:27 PM, Konstantin Khorenko > wrote: >> The behavior has been changed after 9d5b86ac13c5 ("fs/locks: Remove fl_nspid >> and use fs-specific l_pid for remote locks") >> and now /proc/$PID/fdinfo/$FD does not show the info about the lock >> * if the flock owner process is dead and its pid has been already freed >> or >> * if the lock owner is not visible in current pidns. >> >> CRIU uses this interface to store locks info during dump and thus can break >> on v4.13 and newer. >> >> So let's show info about locks anyway in described cases (like it was before >> 9d5b86ac13c5), but show pid number saved in file_lock struct if we are in >> init_pid_ns (patch 1) or just zero otherwise (patch 2) like we do with SID. >> >> Reproducer: >> process A process A1 process A2 >> fork()---------> >> exit() open() >> flock() >> fork()---------> >> exit() sleep() >> >> Before the patch: >> ================ >> (root@vz7)/: cat /proc/${PID_A2}/fdinfo/3 >> pos: 4 >> flags: 02100002 >> mnt_id: 257 >> lock: (root@vz7)/: >> >> After the patch: >> =============== >> (root@vz7)/:cat /proc/${PID_A2}/fdinfo/3 >> pos: 4 >> flags: 02100002 >> mnt_id: 295 >> lock: 1: FLOCK ADVISORY WRITE ${PID_A1} b6:f8a61:529946 0 EOF >> >> =============== >> # cat flock1.c >> >> #include >> #include >> #include >> #include >> #include >> #include >> #include >> >> int main(void) >> { >> int fd; >> int err; >> pid_t child_pid; >> >> child_pid = fork(); >> if (child_pid == -1) >> perror("fork failed"); >> if (child_pid) { >> exit(0); >> } >> >> fd = open("/tmp/a", O_CREAT | O_RDWR); >> if (fd == -1) >> perror("Failed to open the file"); >> >> err = flock(fd, LOCK_EX); >> if (err == -1) >> perror("flock failed"); >> >> child_pid = fork(); >> if (child_pid == -1) >> perror("fork failed"); >> if (child_pid) >> exit(0); >> >> sleep(10000); >> >> return 0; >> } >> >> Konstantin Khorenko (2): >> fs/lock: skip lock owner pid translation in case we are in init_pid_ns >> fs/lock: show locks taken by processes from another pidns >> >> fs/locks.c | 15 ++++++++++----- >> 1 file changed, 10 insertions(+), 5 deletions(-) >> >> -- >> 2.15.1 >> > . >