diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2016-04-20 17:08:21 -0400 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2016-05-02 19:49:28 -0400 |
commit | 63b6df14134ddd048984c8afadb46e721815bfc6 (patch) | |
tree | 7fecdc7f3ee6d9780b3fa5328a0acd1bb739b16e /include | |
parent | 9902af79c01a8e39bb99b922fa3eef6d4ea23d69 (diff) | |
download | linux-stable-63b6df14134ddd048984c8afadb46e721815bfc6.tar.gz linux-stable-63b6df14134ddd048984c8afadb46e721815bfc6.tar.bz2 linux-stable-63b6df14134ddd048984c8afadb46e721815bfc6.zip |
give readdir(2)/getdents(2)/etc. uniform exclusion with lseek()
same as read() on regular files has, and for the same reason.
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/file.h | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/include/linux/file.h b/include/linux/file.h index f87d30882a24..7444f5feda12 100644 --- a/include/linux/file.h +++ b/include/linux/file.h @@ -44,6 +44,7 @@ extern struct file *fget_raw(unsigned int fd); extern unsigned long __fdget(unsigned int fd); extern unsigned long __fdget_raw(unsigned int fd); extern unsigned long __fdget_pos(unsigned int fd); +extern void __f_unlock_pos(struct file *); static inline struct fd __to_fd(unsigned long v) { @@ -60,6 +61,18 @@ static inline struct fd fdget_raw(unsigned int fd) return __to_fd(__fdget_raw(fd)); } +static inline struct fd fdget_pos(int fd) +{ + return __to_fd(__fdget_pos(fd)); +} + +static inline void fdput_pos(struct fd f) +{ + if (f.flags & FDPUT_POS_UNLOCK) + __f_unlock_pos(f.file); + fdput(f); +} + extern int f_dupfd(unsigned int from, struct file *file, unsigned flags); extern int replace_fd(unsigned fd, struct file *file, unsigned flags); extern void set_close_on_exec(unsigned int fd, int flag); |