Message ID | 20200214170520.160271-5-minchan@kernel.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | introduce memory hinting API for external process | expand |
On Fri, Feb 14, 2020 at 09:05:17AM -0800, Minchan Kim wrote: > process_madvise syscall needs pidfd_get_pid function to translate > pidfd to pid so this patch exports the function. For that it should not need to exported, but then again the actual patch doesn't export it anyway, so this is just a commit log issue. > extern struct pid *pidfd_pid(const struct file *file); > +extern struct pid *pidfd_get_pid(unsigned int fd); ... and there is no need for the extern keyword on prototypes in headers.
On Sun, Feb 16, 2020 at 11:59:40PM -0800, Christoph Hellwig wrote: > On Fri, Feb 14, 2020 at 09:05:17AM -0800, Minchan Kim wrote: > > process_madvise syscall needs pidfd_get_pid function to translate > > pidfd to pid so this patch exports the function. > > For that it should not need to exported, but then again the actual > patch doesn't export it anyway, so this is just a commit log issue. > > > extern struct pid *pidfd_pid(const struct file *file); > > +extern struct pid *pidfd_get_pid(unsigned int fd); > > ... and there is no need for the extern keyword on prototypes in > headers. Will fix new version. Thanks for the review!
diff --git a/include/linux/pid.h b/include/linux/pid.h index 998ae7d24450..023d9c3a8edc 100644 --- a/include/linux/pid.h +++ b/include/linux/pid.h @@ -75,6 +75,7 @@ extern const struct file_operations pidfd_fops; struct file; extern struct pid *pidfd_pid(const struct file *file); +extern struct pid *pidfd_get_pid(unsigned int fd); static inline struct pid *get_pid(struct pid *pid) { diff --git a/kernel/exit.c b/kernel/exit.c index 0b81b26a872a..43375f9d8bbc 100644 --- a/kernel/exit.c +++ b/kernel/exit.c @@ -1470,23 +1470,6 @@ static long do_wait(struct wait_opts *wo) return retval; } -static struct pid *pidfd_get_pid(unsigned int fd) -{ - struct fd f; - struct pid *pid; - - f = fdget(fd); - if (!f.file) - return ERR_PTR(-EBADF); - - pid = pidfd_pid(f.file); - if (!IS_ERR(pid)) - get_pid(pid); - - fdput(f); - return pid; -} - static long kernel_waitid(int which, pid_t upid, struct waitid_info *infop, int options, struct rusage *ru) { diff --git a/kernel/pid.c b/kernel/pid.c index 0f4ecb57214c..360ba480a2a9 100644 --- a/kernel/pid.c +++ b/kernel/pid.c @@ -496,6 +496,23 @@ struct pid *find_ge_pid(int nr, struct pid_namespace *ns) return idr_get_next(&ns->idr, &nr); } +struct pid *pidfd_get_pid(unsigned int fd) +{ + struct fd f; + struct pid *pid; + + f = fdget(fd); + if (!f.file) + return ERR_PTR(-EBADF); + + pid = pidfd_pid(f.file); + if (!IS_ERR(pid)) + get_pid(pid); + + fdput(f); + return pid; +} + /** * pidfd_create() - Create a new pid file descriptor. *