Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1226972 > unrolled thread
| Started by | Jeff Layton <jlayton@poochiereds.net> |
|---|---|
| First post | 2015-09-17 14:50 +0200 |
| Last post | 2015-09-17 14:50 +0200 |
| Articles | 2 — 1 participant |
Back to article view | Back to linux.kernel
[PATCH v2 0/4] fs: allow userland tasks to use delayed_fput infrastructure Jeff Layton <jlayton@poochiereds.net> - 2015-09-17 14:50 +0200
[PATCH v2 4/4] fs: export flush_delayed_fput Jeff Layton <jlayton@poochiereds.net> - 2015-09-17 14:50 +0200
| From | Jeff Layton <jlayton@poochiereds.net> |
|---|---|
| Date | 2015-09-17 14:50 +0200 |
| Subject | [PATCH v2 0/4] fs: allow userland tasks to use delayed_fput infrastructure |
| Message-ID | <q9GNs-3OP-5@gated-at.bofh.it> |
v2: - kerneldoc header cleanups. Hopefully they are more clear now - make fput_queue return bool, telling whether the final reference was put. Caller can use that to tell whether it should call flush_delayed_fput. Only minor changes since the last set. Al, does this look any more reasonable? Original cover letter follows: I'm breaking this piece out of the open file cache work for nfsd to see if we can get this piece settled before I re-post the whole set. If this looks like a reasonable approach we can sort out how it should be merged (either by you directly, or via Bruce's tree with the rest of the open file cache patches). For those just joining in, some background: We want to add an open file cache for nfsd to reduce the open/close overhead on READ/WRITE RPCs, and so we can eliminate the raparm cache. The basic idea is to keep a cache of open files, and close them down on certain sorts of activity -- primarily, after an unlink that takes the link count to 0, or before setting a lease. The setlease part is problematic though. The plan is to have a notifier callback into nfsd from vfs_setlease that will tell nfsd to close any open files that are associated with the inode so we don't block lease attempts solely due to cached but otherwise idle nfsd files. That means that we need to be able to close out the files and ensure that the final __fput runs before we try to set a lease. My latest pass involved making __fput_sync available to userland tasks, but Al had concerns that that could lead to stack blowouts and locking issues. This patchset is an alternative approach that allows userland tasks to use the delayed_fput infrastructure instead. The idea is that we'd have the pre-setlease notifier do a fput_queue() and then call flush_delayed_fput to ensure that any queued __fput() calls complete before setting the lease. There's also a fix for a potential race in flush_delayed_fput in here and some doc comment cleanups. Jeff Layton (4): fs: have flush_delayed_fput flush the workqueue job fs: add a kerneldoc header to fput fs: add fput_queue fs: export flush_delayed_fput fs/file_table.c | 76 +++++++++++++++++++++++++++++++++++++++++++--------- include/linux/file.h | 1 + 2 files changed, 64 insertions(+), 13 deletions(-) -- 2.4.3 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[toc] | [next] | [standalone]
| From | Jeff Layton <jlayton@poochiereds.net> |
|---|---|
| Date | 2015-09-17 14:50 +0200 |
| Subject | [PATCH v2 4/4] fs: export flush_delayed_fput |
| Message-ID | <q9GNt-3OP-27@gated-at.bofh.it> |
| In reply to | #1226972 |
...and clean up the comments over it a bit. The nfsd code will need to
be able to call back into this.
Signed-off-by: Jeff Layton <jeff.layton@primarydata.com>
---
fs/file_table.c | 22 +++++++++++++---------
1 file changed, 13 insertions(+), 9 deletions(-)
diff --git a/fs/file_table.c b/fs/file_table.c
index 95361d2b8a08..899c19687cfa 100644
--- a/fs/file_table.c
+++ b/fs/file_table.c
@@ -246,20 +246,24 @@ static void ____fput(struct callback_head *work)
static DECLARE_DELAYED_WORK(delayed_fput_work, delayed_fput);
-/*
- * If kernel thread really needs to have the final fput() it has done
- * to complete, call this. The only user right now is the boot - we
- * *do* need to make sure our writes to binaries on initramfs has
- * not left us with opened struct file waiting for __fput() - execve()
- * won't work without that. Please, don't add more callers without
- * very good reasons; in particular, never call that with locks
- * held and never call that from a thread that might need to do
- * some work on any kind of umount.
+/**
+ * flush_delayed_fput - ensure that all delayed_fput work is complete
+ *
+ * If kernel thread or task that has used fput_queue really needs to have the
+ * final fput() it has done to complete, call this. One of the main users is
+ * the boot - we *do* need to make sure our writes to binaries on initramfs has
+ * not left us with opened struct file waiting for __fput() - execve() won't
+ * work without that.
+ *
+ * Please, don't add more callers without very good reasons; in particular,
+ * never call that with locks held and never from a thread that might need to
+ * do some work on any kind of umount.
*/
void flush_delayed_fput(void)
{
flush_delayed_work(&delayed_fput_work);
}
+EXPORT_SYMBOL(flush_delayed_fput);
/**
* fput - put a struct file reference
--
2.4.3
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web