diff options
author | Jeff Layton <jlayton@redhat.com> | 2014-02-03 12:13:09 -0500 |
---|---|---|
committer | Jeff Layton <jlayton@redhat.com> | 2014-03-31 08:24:42 -0400 |
commit | 3fd80cddc6af5ba53244514a61450d4b30a9fb9d (patch) | |
tree | cbca546dae6bcace6b933ef42130c7d3aa7ab2ca /fs/locks.c | |
parent | c918d42a27a9be0d78be490997d16d79cd5b9193 (diff) |
locks: report l_pid as -1 for FL_FILE_PVT locks
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.
Acked-by: J. Bruce Fields <bfields@fieldses.org>
Signed-off-by: Jeff Layton <jlayton@redhat.com>
Diffstat (limited to 'fs/locks.c')
-rw-r--r-- | fs/locks.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/fs/locks.c b/fs/locks.c index 0e1f0df8de12..57f1d5fc876a 100644 --- a/fs/locks.c +++ b/fs/locks.c | |||
@@ -1864,7 +1864,7 @@ EXPORT_SYMBOL_GPL(vfs_test_lock); | |||
1864 | 1864 | ||
1865 | static int posix_lock_to_flock(struct flock *flock, struct file_lock *fl) | 1865 | static int posix_lock_to_flock(struct flock *flock, struct file_lock *fl) |
1866 | { | 1866 | { |
1867 | flock->l_pid = fl->fl_pid; | 1867 | flock->l_pid = IS_FILE_PVT(fl) ? -1 : fl->fl_pid; |
1868 | #if BITS_PER_LONG == 32 | 1868 | #if BITS_PER_LONG == 32 |
1869 | /* | 1869 | /* |
1870 | * Make sure we can represent the posix lock via | 1870 | * 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) | |||
1886 | #if BITS_PER_LONG == 32 | 1886 | #if BITS_PER_LONG == 32 |
1887 | static void posix_lock_to_flock64(struct flock64 *flock, struct file_lock *fl) | 1887 | static void posix_lock_to_flock64(struct flock64 *flock, struct file_lock *fl) |
1888 | { | 1888 | { |
1889 | flock->l_pid = fl->fl_pid; | 1889 | flock->l_pid = IS_FILE_PVT(fl) ? -1 : fl->fl_pid; |
1890 | flock->l_start = fl->fl_start; | 1890 | flock->l_start = fl->fl_start; |
1891 | flock->l_len = fl->fl_end == OFFSET_MAX ? 0 : | 1891 | flock->l_len = fl->fl_end == OFFSET_MAX ? 0 : |
1892 | fl->fl_end - fl->fl_start + 1; | 1892 | fl->fl_end - fl->fl_start + 1; |