mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-24 12:44:11 +08:00
fs: remove no_llseek
Now that all callers of ->llseek are going through vfs_llseek(), we don't gain anything by keeping no_llseek around. Nothing actually calls it and setting ->llseek to no_lseek is completely equivalent to leaving it NULL. Longer term (== by the end of merge window) we want to remove all such intializations. To simplify the merge window this commit does *not* touch initializers - it only defines no_llseek as NULL (and simplifies the tests on file opening). At -rc1 we'll need do a mechanical removal of no_llseek - git grep -l -w no_llseek | grep -v porting.rst | while read i; do sed -i '/\<no_llseek\>/d' $i done would do it. Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
97ef77c52b
commit
868941b144
@ -914,3 +914,11 @@ Calling conventions for file_open_root() changed; now it takes struct path *
|
|||||||
instead of passing mount and dentry separately. For callers that used to
|
instead of passing mount and dentry separately. For callers that used to
|
||||||
pass <mnt, mnt->mnt_root> pair (i.e. the root of given mount), a new helper
|
pass <mnt, mnt->mnt_root> pair (i.e. the root of given mount), a new helper
|
||||||
is provided - file_open_root_mnt(). In-tree users adjusted.
|
is provided - file_open_root_mnt(). In-tree users adjusted.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**mandatory**
|
||||||
|
|
||||||
|
no_llseek is gone; don't set .llseek to that - just leave it NULL instead.
|
||||||
|
Checks for "does that file have llseek(2), or should it fail with ESPIPE"
|
||||||
|
should be done by looking at FMODE_LSEEK in file->f_mode.
|
||||||
|
@ -552,8 +552,7 @@ EXPORT_SYMBOL(drm_release_noglobal);
|
|||||||
* Since events are used by the KMS API for vblank and page flip completion this
|
* Since events are used by the KMS API for vblank and page flip completion this
|
||||||
* means all modern display drivers must use it.
|
* means all modern display drivers must use it.
|
||||||
*
|
*
|
||||||
* @offset is ignored, DRM events are read like a pipe. Therefore drivers also
|
* @offset is ignored, DRM events are read like a pipe. Polling support is
|
||||||
* must set the &file_operation.llseek to no_llseek(). Polling support is
|
|
||||||
* provided by drm_poll().
|
* provided by drm_poll().
|
||||||
*
|
*
|
||||||
* This function will only ever read a full event. Therefore userspace must
|
* This function will only ever read a full event. Therefore userspace must
|
||||||
|
@ -235,7 +235,7 @@ static struct file *alloc_file(const struct path *path, int flags,
|
|||||||
file->f_mapping = path->dentry->d_inode->i_mapping;
|
file->f_mapping = path->dentry->d_inode->i_mapping;
|
||||||
file->f_wb_err = filemap_sample_wb_err(file->f_mapping);
|
file->f_wb_err = filemap_sample_wb_err(file->f_mapping);
|
||||||
file->f_sb_err = file_sample_sb_err(file);
|
file->f_sb_err = file_sample_sb_err(file);
|
||||||
if (fop->llseek && fop->llseek != no_llseek)
|
if (fop->llseek)
|
||||||
file->f_mode |= FMODE_LSEEK;
|
file->f_mode |= FMODE_LSEEK;
|
||||||
if ((file->f_mode & FMODE_READ) &&
|
if ((file->f_mode & FMODE_READ) &&
|
||||||
likely(fop->read || fop->read_iter))
|
likely(fop->read || fop->read_iter))
|
||||||
|
@ -860,8 +860,6 @@ static int do_dentry_open(struct file *f,
|
|||||||
f->f_mode |= FMODE_CAN_WRITE;
|
f->f_mode |= FMODE_CAN_WRITE;
|
||||||
if ((f->f_mode & FMODE_LSEEK) && !f->f_op->llseek)
|
if ((f->f_mode & FMODE_LSEEK) && !f->f_op->llseek)
|
||||||
f->f_mode &= ~FMODE_LSEEK;
|
f->f_mode &= ~FMODE_LSEEK;
|
||||||
if ((f->f_mode & FMODE_LSEEK) && f->f_op->llseek == no_llseek)
|
|
||||||
f->f_mode &= ~FMODE_LSEEK;
|
|
||||||
if (f->f_mapping->a_ops && f->f_mapping->a_ops->direct_IO)
|
if (f->f_mapping->a_ops && f->f_mapping->a_ops->direct_IO)
|
||||||
f->f_mode |= FMODE_CAN_ODIRECT;
|
f->f_mode |= FMODE_CAN_ODIRECT;
|
||||||
|
|
||||||
|
@ -227,12 +227,6 @@ loff_t noop_llseek(struct file *file, loff_t offset, int whence)
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL(noop_llseek);
|
EXPORT_SYMBOL(noop_llseek);
|
||||||
|
|
||||||
loff_t no_llseek(struct file *file, loff_t offset, int whence)
|
|
||||||
{
|
|
||||||
return -ESPIPE;
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL(no_llseek);
|
|
||||||
|
|
||||||
loff_t default_llseek(struct file *file, loff_t offset, int whence)
|
loff_t default_llseek(struct file *file, loff_t offset, int whence)
|
||||||
{
|
{
|
||||||
struct inode *inode = file_inode(file);
|
struct inode *inode = file_inode(file);
|
||||||
|
@ -3022,7 +3022,7 @@ extern long do_splice_direct(struct file *in, loff_t *ppos, struct file *out,
|
|||||||
extern void
|
extern void
|
||||||
file_ra_state_init(struct file_ra_state *ra, struct address_space *mapping);
|
file_ra_state_init(struct file_ra_state *ra, struct address_space *mapping);
|
||||||
extern loff_t noop_llseek(struct file *file, loff_t offset, int whence);
|
extern loff_t noop_llseek(struct file *file, loff_t offset, int whence);
|
||||||
extern loff_t no_llseek(struct file *file, loff_t offset, int whence);
|
#define no_llseek NULL
|
||||||
extern loff_t vfs_setpos(struct file *file, loff_t offset, loff_t maxsize);
|
extern loff_t vfs_setpos(struct file *file, loff_t offset, loff_t maxsize);
|
||||||
extern loff_t generic_file_llseek(struct file *file, loff_t offset, int whence);
|
extern loff_t generic_file_llseek(struct file *file, loff_t offset, int whence);
|
||||||
extern loff_t generic_file_llseek_size(struct file *file, loff_t offset,
|
extern loff_t generic_file_llseek_size(struct file *file, loff_t offset,
|
||||||
|
@ -81,10 +81,9 @@ static bool bpf_iter_support_resched(struct seq_file *seq)
|
|||||||
#define MAX_ITER_OBJECTS 1000000
|
#define MAX_ITER_OBJECTS 1000000
|
||||||
|
|
||||||
/* bpf_seq_read, a customized and simpler version for bpf iterator.
|
/* bpf_seq_read, a customized and simpler version for bpf iterator.
|
||||||
* no_llseek is assumed for this file.
|
|
||||||
* The following are differences from seq_read():
|
* The following are differences from seq_read():
|
||||||
* . fixed buffer size (PAGE_SIZE)
|
* . fixed buffer size (PAGE_SIZE)
|
||||||
* . assuming no_llseek
|
* . assuming NULL ->llseek()
|
||||||
* . stop() may call bpf program, handling potential overflow there
|
* . stop() may call bpf program, handling potential overflow there
|
||||||
*/
|
*/
|
||||||
static ssize_t bpf_seq_read(struct file *file, char __user *buf, size_t size,
|
static ssize_t bpf_seq_read(struct file *file, char __user *buf, size_t size,
|
||||||
|
Loading…
Reference in New Issue
Block a user