From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jeff Layton Subject: [PATCH v7 11/17] locks: report l_pid as -1 for FL_FILE_PVT locks Date: Wed, 19 Mar 2014 16:45:55 -0400 Message-ID: <1395261961-10855-12-git-send-email-jlayton@redhat.com> References: <1395261961-10855-1-git-send-email-jlayton@redhat.com> Cc: linux-fsdevel@vger.kernel.org, bfields@fieldses.org To: viro@ZenIV.linux.org.uk Return-path: Received: from mail-qc0-f181.google.com ([209.85.216.181]:57520 "EHLO mail-qc0-f181.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755117AbaCSUq1 (ORCPT ); Wed, 19 Mar 2014 16:46:27 -0400 Received: by mail-qc0-f181.google.com with SMTP id e9so10343028qcy.26 for ; Wed, 19 Mar 2014 13:46:26 -0700 (PDT) In-Reply-To: <1395261961-10855-1-git-send-email-jlayton@redhat.com> Sender: linux-fsdevel-owner@vger.kernel.org List-ID: FL_FILE_PVT locks are no longer tied to a particular pid, and are instead inheritable by child processes. Report a l_pid of '-1' for these sorts of locks since the pid is somewhat meaningless for them. This precedent comes from FreeBSD. There, POSIX and flock() locks can conflict with one another. If fcntl(F_GETLK, ...) returns a lock set with flock() then the l_pid member cannot be a process ID because the lock is not held by a process as such. Signed-off-by: Jeff Layton --- fs/locks.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fs/locks.c b/fs/locks.c index f1b9b149dd39..5953b2cdef9c 100644 --- a/fs/locks.c +++ b/fs/locks.c @@ -1864,7 +1864,7 @@ EXPORT_SYMBOL_GPL(vfs_test_lock); static int posix_lock_to_flock(struct flock *flock, struct file_lock *fl) { - flock->l_pid = fl->fl_pid; + flock->l_pid = IS_FILE_PVT(fl) ? -1 : fl->fl_pid; #if BITS_PER_LONG == 32 /* * Make sure we can represent the posix lock via @@ -1886,7 +1886,7 @@ static int posix_lock_to_flock(struct flock *flock, struct file_lock *fl) #if BITS_PER_LONG == 32 static void posix_lock_to_flock64(struct flock64 *flock, struct file_lock *fl) { - flock->l_pid = fl->fl_pid; + flock->l_pid = IS_FILE_PVT(fl) ? -1 : fl->fl_pid; flock->l_start = fl->fl_start; flock->l_len = fl->fl_end == OFFSET_MAX ? 0 : fl->fl_end - fl->fl_start + 1; -- 1.8.5.3