aboutsummaryrefslogtreecommitdiffstats
path: root/Documentation/filesystems/Locking
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2018-06-28 12:43:44 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2018-06-28 13:40:47 -0400
commita11e1d432b51f63ba698d044441284a661f01144 (patch)
tree9f3c5a10bf0d7f9a342d5fb39c0c35ea14170124 /Documentation/filesystems/Locking
parentf57494321cbf5b1e7769b6135407d2995a369e28 (diff)
Revert changes to convert to ->poll_mask() and aio IOCB_CMD_POLL
The poll() changes were not well thought out, and completely unexplained. They also caused a huge performance regression, because "->poll()" was no longer a trivial file operation that just called down to the underlying file operations, but instead did at least two indirect calls. Indirect calls are sadly slow now with the Spectre mitigation, but the performance problem could at least be largely mitigated by changing the "->get_poll_head()" operation to just have a per-file-descriptor pointer to the poll head instead. That gets rid of one of the new indirections. But that doesn't fix the new complexity that is completely unwarranted for the regular case. The (undocumented) reason for the poll() changes was some alleged AIO poll race fixing, but we don't make the common case slower and more complex for some uncommon special case, so this all really needs way more explanations and most likely a fundamental redesign. [ This revert is a revert of about 30 different commits, not reverted individually because that would just be unnecessarily messy - Linus ] Cc: Al Viro <viro@zeniv.linux.org.uk> Cc: Christoph Hellwig <hch@lst.de> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'Documentation/filesystems/Locking')
-rw-r--r--Documentation/filesystems/Locking7
1 files changed, 1 insertions, 6 deletions
diff --git a/Documentation/filesystems/Locking b/Documentation/filesystems/Locking
index 2c391338c675..37bf0a9de75c 100644
--- a/Documentation/filesystems/Locking
+++ b/Documentation/filesystems/Locking
@@ -441,8 +441,6 @@ prototypes:
441 int (*iterate) (struct file *, struct dir_context *); 441 int (*iterate) (struct file *, struct dir_context *);
442 int (*iterate_shared) (struct file *, struct dir_context *); 442 int (*iterate_shared) (struct file *, struct dir_context *);
443 __poll_t (*poll) (struct file *, struct poll_table_struct *); 443 __poll_t (*poll) (struct file *, struct poll_table_struct *);
444 struct wait_queue_head * (*get_poll_head)(struct file *, __poll_t);
445 __poll_t (*poll_mask) (struct file *, __poll_t);
446 long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long); 444 long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long);
447 long (*compat_ioctl) (struct file *, unsigned int, unsigned long); 445 long (*compat_ioctl) (struct file *, unsigned int, unsigned long);
448 int (*mmap) (struct file *, struct vm_area_struct *); 446 int (*mmap) (struct file *, struct vm_area_struct *);
@@ -473,7 +471,7 @@ prototypes:
473}; 471};
474 472
475locking rules: 473locking rules:
476 All except for ->poll_mask may block. 474 All may block.
477 475
478->llseek() locking has moved from llseek to the individual llseek 476->llseek() locking has moved from llseek to the individual llseek
479implementations. If your fs is not using generic_file_llseek, you 477implementations. If your fs is not using generic_file_llseek, you
@@ -505,9 +503,6 @@ in sys_read() and friends.
505the lease within the individual filesystem to record the result of the 503the lease within the individual filesystem to record the result of the
506operation 504operation
507 505
508->poll_mask can be called with or without the waitqueue lock for the waitqueue
509returned from ->get_poll_head.
510
511--------------------------- dquot_operations ------------------------------- 506--------------------------- dquot_operations -------------------------------
512prototypes: 507prototypes:
513 int (*write_dquot) (struct dquot *); 508 int (*write_dquot) (struct dquot *);