mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 12:28:41 +08:00
File locking fixes and enhancements for v4.19
-----BEGIN PGP SIGNATURE----- iQIcBAABAgAGBQJbcDltAAoJEAAOaEEZVoIV9YUP/ioYw3+kIXwRa05ec8Twbn6m O+1HOX9UAuDWX+97P2kCJSqi9a/TkpfLQxoGxZowDv97ZkVeHdzVaJVN/0sbH1uP Oj86b2Y5zGyrLk3D4c5VcyHkvogr16DUvhYeRtcjPyufSaKqefftCeetTntRvr4Z rZ8HLKYxa4AZlP/FkgVZ/S6PmvG7tH8rVLMFCfY+rASbSU4gBxmrS0nB2UgU4ycb b2SVZo4Zxycw0KiP14T5AgN4puid7VEofFezBpMKjNPjCUk1wJ3mtUyLeS8jRUEx M6qnl7DU4BWPRtGxiXNebN85M8iaJnlaeQglowklrubrFtqnVeDQM0rz42NiY2/S 2jk6q8b9XKvoDEev2VeKfmFztu4gGXypNR6xAolvgBnUZziKKFUJutZwJe95pZV1 kO6CvdchuCQdLMLdHPji2kk2AA8Go5webONfioFhoWYfeSvgjRELmOFTDjP22eNv s1/vfCsjuU6vdyaXXXZpN/7VMenoNegSQUXFoxhmHO7BtNuTqk+ZVFNgaWsOrXcx I0ZIjCAmOsU+DKLn+DTT8kDtU3ihZz/OCXXZJi9JPeLFZ6gSghDRnFThwYqcZvA+ syIn1XGGtn15Q7A5FZNvwGqYir1GtyOslrxxIKxGlhleovhT94HuKXkL1T+k74zl FXItKgRs0TPQfTsI8q+C =IMcz -----END PGP SIGNATURE----- Merge tag 'locks-v4.19-1' of git://git.kernel.org/pub/scm/linux/kernel/git/jlayton/linux Pull file locking updates from Jeff Layton: "Just a couple of patches from Konstantin to fix /proc/locks when the process that set the lock has exited, and a new tracepoint for the flock() codepath. Also threw in mailmap entries for my addresses and a comment cleanup" * tag 'locks-v4.19-1' of git://git.kernel.org/pub/scm/linux/kernel/git/jlayton/linux: locks: remove misleading obsolete comment mailmap: remap some of my email addresses to kernel.org address locks: add tracepoint in flock codepath fs/lock: show locks taken by processes from another pidns fs/lock: skip lock owner pid translation in case we are in init_pid_ns
This commit is contained in:
commit
575b94386b
3
.mailmap
3
.mailmap
@ -81,6 +81,9 @@ Javi Merino <javi.merino@kernel.org> <javi.merino@arm.com>
|
|||||||
<javier@osg.samsung.com> <javier.martinez@collabora.co.uk>
|
<javier@osg.samsung.com> <javier.martinez@collabora.co.uk>
|
||||||
Jean Tourrilhes <jt@hpl.hp.com>
|
Jean Tourrilhes <jt@hpl.hp.com>
|
||||||
Jeff Garzik <jgarzik@pretzel.yyz.us>
|
Jeff Garzik <jgarzik@pretzel.yyz.us>
|
||||||
|
Jeff Layton <jlayton@kernel.org> <jlayton@redhat.com>
|
||||||
|
Jeff Layton <jlayton@kernel.org> <jlayton@poochiereds.net>
|
||||||
|
Jeff Layton <jlayton@kernel.org> <jlayton@primarydata.com>
|
||||||
Jens Axboe <axboe@suse.de>
|
Jens Axboe <axboe@suse.de>
|
||||||
Jens Osterkamp <Jens.Osterkamp@de.ibm.com>
|
Jens Osterkamp <Jens.Osterkamp@de.ibm.com>
|
||||||
Johan Hovold <johan@kernel.org> <jhovold@gmail.com>
|
Johan Hovold <johan@kernel.org> <jhovold@gmail.com>
|
||||||
|
20
fs/locks.c
20
fs/locks.c
@ -202,10 +202,6 @@ static DEFINE_HASHTABLE(blocked_hash, BLOCKED_HASH_BITS);
|
|||||||
* we often hold the flc_lock as well. In certain cases, when reading the fields
|
* we often hold the flc_lock as well. In certain cases, when reading the fields
|
||||||
* protected by this lock, we can skip acquiring it iff we already hold the
|
* protected by this lock, we can skip acquiring it iff we already hold the
|
||||||
* flc_lock.
|
* flc_lock.
|
||||||
*
|
|
||||||
* In particular, adding an entry to the fl_block list requires that you hold
|
|
||||||
* both the flc_lock and the blocked_lock_lock (acquired in that order).
|
|
||||||
* Deleting an entry from the list however only requires the file_lock_lock.
|
|
||||||
*/
|
*/
|
||||||
static DEFINE_SPINLOCK(blocked_lock_lock);
|
static DEFINE_SPINLOCK(blocked_lock_lock);
|
||||||
|
|
||||||
@ -990,6 +986,7 @@ out:
|
|||||||
if (new_fl)
|
if (new_fl)
|
||||||
locks_free_lock(new_fl);
|
locks_free_lock(new_fl);
|
||||||
locks_dispose_list(&dispose);
|
locks_dispose_list(&dispose);
|
||||||
|
trace_flock_lock_inode(inode, request, error);
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2072,6 +2069,13 @@ static pid_t locks_translate_pid(struct file_lock *fl, struct pid_namespace *ns)
|
|||||||
return -1;
|
return -1;
|
||||||
if (IS_REMOTELCK(fl))
|
if (IS_REMOTELCK(fl))
|
||||||
return fl->fl_pid;
|
return fl->fl_pid;
|
||||||
|
/*
|
||||||
|
* If the flock owner process is dead and its pid has been already
|
||||||
|
* freed, the translation below won't work, but we still want to show
|
||||||
|
* flock owner pid number in init pidns.
|
||||||
|
*/
|
||||||
|
if (ns == &init_pid_ns)
|
||||||
|
return (pid_t)fl->fl_pid;
|
||||||
|
|
||||||
rcu_read_lock();
|
rcu_read_lock();
|
||||||
pid = find_pid_ns(fl->fl_pid, &init_pid_ns);
|
pid = find_pid_ns(fl->fl_pid, &init_pid_ns);
|
||||||
@ -2626,12 +2630,10 @@ static void lock_get_status(struct seq_file *f, struct file_lock *fl,
|
|||||||
|
|
||||||
fl_pid = locks_translate_pid(fl, proc_pidns);
|
fl_pid = locks_translate_pid(fl, proc_pidns);
|
||||||
/*
|
/*
|
||||||
* If there isn't a fl_pid don't display who is waiting on
|
* If lock owner is dead (and pid is freed) or not visible in current
|
||||||
* the lock if we are called from locks_show, or if we are
|
* pidns, zero is shown as a pid value. Check lock info from
|
||||||
* called from __show_fd_info - skip lock entirely
|
* init_pid_ns to get saved lock pid value.
|
||||||
*/
|
*/
|
||||||
if (fl_pid == 0)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (fl->fl_file != NULL)
|
if (fl->fl_file != NULL)
|
||||||
inode = locks_inode(fl->fl_file);
|
inode = locks_inode(fl->fl_file);
|
||||||
|
@ -112,8 +112,11 @@ DEFINE_EVENT(filelock_lock, locks_remove_posix,
|
|||||||
TP_PROTO(struct inode *inode, struct file_lock *fl, int ret),
|
TP_PROTO(struct inode *inode, struct file_lock *fl, int ret),
|
||||||
TP_ARGS(inode, fl, ret));
|
TP_ARGS(inode, fl, ret));
|
||||||
|
|
||||||
DECLARE_EVENT_CLASS(filelock_lease,
|
DEFINE_EVENT(filelock_lock, flock_lock_inode,
|
||||||
|
TP_PROTO(struct inode *inode, struct file_lock *fl, int ret),
|
||||||
|
TP_ARGS(inode, fl, ret));
|
||||||
|
|
||||||
|
DECLARE_EVENT_CLASS(filelock_lease,
|
||||||
TP_PROTO(struct inode *inode, struct file_lock *fl),
|
TP_PROTO(struct inode *inode, struct file_lock *fl),
|
||||||
|
|
||||||
TP_ARGS(inode, fl),
|
TP_ARGS(inode, fl),
|
||||||
|
Loading…
Reference in New Issue
Block a user