summaryrefslogtreecommitdiffstats
path: root/fs/open.c
diff options
context:
space:
mode:
authorIngo Molnar2019-04-10 09:14:42 +0200
committerIngo Molnar2019-04-10 09:14:42 +0200
commit54bbfe75cbb10384b0a62efae80fde21deea1dd0 (patch)
treeeed22c29cdecce36153bbb83ee7a9da7eed60ccd /fs/open.c
parentlocking/rwsem: Optimize down_read_trylock() (diff)
parentBluetooth: btusb: request wake pin with NOAUTOEN (diff)
downloadkernel-qcow2-linux-54bbfe75cbb10384b0a62efae80fde21deea1dd0.tar.gz
kernel-qcow2-linux-54bbfe75cbb10384b0a62efae80fde21deea1dd0.tar.xz
kernel-qcow2-linux-54bbfe75cbb10384b0a62efae80fde21deea1dd0.zip
Merge branch 'linus' into locking/core, to pick up fixes
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'fs/open.c')
-rw-r--r--fs/open.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/fs/open.c b/fs/open.c
index f1c2f855fd43..a00350018a47 100644
--- a/fs/open.c
+++ b/fs/open.c
@@ -1215,3 +1215,21 @@ int nonseekable_open(struct inode *inode, struct file *filp)
}
EXPORT_SYMBOL(nonseekable_open);
+
+/*
+ * stream_open is used by subsystems that want stream-like file descriptors.
+ * Such file descriptors are not seekable and don't have notion of position
+ * (file.f_pos is always 0). Contrary to file descriptors of other regular
+ * files, .read() and .write() can run simultaneously.
+ *
+ * stream_open never fails and is marked to return int so that it could be
+ * directly used as file_operations.open .
+ */
+int stream_open(struct inode *inode, struct file *filp)
+{
+ filp->f_mode &= ~(FMODE_LSEEK | FMODE_PREAD | FMODE_PWRITE | FMODE_ATOMIC_POS);
+ filp->f_mode |= FMODE_STREAM;
+ return 0;
+}
+
+EXPORT_SYMBOL(stream_open);