Message ID | d916d401a80e9834c95970d86ca71c0154e988a6.1553677194.git.kirr@nexedi.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | fuse: allow filesystems to have precise control over data cache | expand |
On Wed, Mar 27, 2019 at 10:15 AM Kirill Smelkov <kirr@nexedi.com> wrote: > > Functions, like pr_err, are a more modern variant of printing compared to > printk. They could be used to denoise sources by using needed level in > the print function name, and by automatically inserting per-driver / > function / ... print prefix as defined by pr_fmt macro. pr_* are also > said to be used in Documentation/process/coding-style.rst and more > recent code - for example overlayfs - uses them instead of printk. > > Convert CUSE and FUSE to use the new pr_* functions. > > CUSE output stays completely unchanged, while FUSE output is amended a > bit for "trying to steal weird page" warning - the second line now comes > also with "fuse:" prefix. I hope it is ok. Yep. Applied, thanks. Miklos
+torvalds On Tue, Apr 23, 2019 at 04:57:58PM +0200, Miklos Szeredi wrote: > On Wed, Mar 27, 2019 at 10:15 AM Kirill Smelkov <kirr@nexedi.com> wrote: > > > > Functions, like pr_err, are a more modern variant of printing compared to > > printk. They could be used to denoise sources by using needed level in > > the print function name, and by automatically inserting per-driver / > > function / ... print prefix as defined by pr_fmt macro. pr_* are also > > said to be used in Documentation/process/coding-style.rst and more > > recent code - for example overlayfs - uses them instead of printk. > > > > Convert CUSE and FUSE to use the new pr_* functions. > > > > CUSE output stays completely unchanged, while FUSE output is amended a > > bit for "trying to steal weird page" warning - the second line now comes > > also with "fuse:" prefix. I hope it is ok. > > Yep. Applied, thanks. Miklos, thanks for feedback. Could you please clarify where the patch is applied? Here is what linux/MAINTAINERS says FUSE: FILESYSTEM IN USERSPACE M: Miklos Szeredi <miklos@szeredi.hu> L: linux-fsdevel@vger.kernel.org W: http://fuse.sourceforge.net/ T: git git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/fuse.git S: Maintained F: fs/fuse/ F: include/uapi/linux/fuse.h F: Documentation/filesystems/fuse.txt but git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/fuse.git was not updated for ~ 2 months. I see other "Applied, thanks" replies from you on linux-fsdevel in recent days and it suggests that patches are indeed applied, but where they are integrated is the question. Linux-next also has no post-5.1 fuse patches at all, so I'm really puzzled about what is going on. Is there any reason not to keep for-next fuse branch publicly available? Or am I missing something? Could you please also have a look at other posted patches? I'm struggling for months sending them to you and not getting feedback. It is kind of frustrating to work in this mode. Here they are: - FOPEN_STREAM to fix read/write deadlock on stream-like files: https://lore.kernel.org/linux-fsdevel/20190424071316.11967-1-kirr@nexedi.com/ the basis for this patch was landed to master already: git.kernel.org/linus/10dce8af3422 - FUSE_PRECISE_INVAL_DATA to allow filesystems to have precise control over data cache and in particular not to loose the whole data cache on file size change: https://lore.kernel.org/linux-fsdevel/e0b43507976d6ea9010f1bacaef067f18de49f1f.1553677194.git.kirr@nexedi.com/ cover letter: https://lore.kernel.org/linux-fsdevel/cover.1553677194.git.kirr@nexedi.com/ this patch is essential for my filesystem which cares very deeply about not loosing local file cache. ( "fuse: convert printk -> pr_*" was only a preparatory patch in that series suggested by Kirill Tkhai ) - don't stuck clients on retrieve_notify with size > max_write https://lore.kernel.org/linux-fsdevel/cover.1553680185.git.kirr@nexedi.com/ https://lore.kernel.org/linux-fsdevel/12f7d0d98555ee0d174d04bb47644f65c07f035a.1553680185.git.kirr@nexedi.com/ https://lore.kernel.org/linux-fsdevel/d74b17b9d33c3dcc7a1f2fa2914fb3c4e7cda127.1553680185.git.kirr@nexedi.com/ this is kind of no-op if server behaves sanely, but for slightly misbehaving server changes kernel to return a regular error instead of promising to userspace that it will send a reply and not doing so, thus getting userspace stuck. when I got my filesystem initially stuck it required to dig a lot to understand what was going on https://marc.info/?l=linux-fsdevel&m=155057023600853&w=2 (starting from "I've hit this bug for real ...") Even though go-fuse (the fuse library that was slightly misbehaving) is now fixed https://github.com/hanwen/go-fuse/commit/58dcd77a24, it is a big difference if userspace gets an error, or it gets "ok" return and is further stuck waiting for promised message. Besides libfuse and go-fuse there are several other fuse libraries and by fixing kernel behaviour here we care about all fuse users. In February you set 10 lines budget for this "non-bug fix" and this budget is met with the patches which cumulatively are 2 lines of code change and 7 lines of comments. Thanks beforehand, Kirill
On Wed, Apr 24, 2019 at 10:38 AM Kirill Smelkov <kirr@nexedi.com> wrote: > > +torvalds > > On Tue, Apr 23, 2019 at 04:57:58PM +0200, Miklos Szeredi wrote: > > On Wed, Mar 27, 2019 at 10:15 AM Kirill Smelkov <kirr@nexedi.com> wrote: > > > > > > Functions, like pr_err, are a more modern variant of printing compared to > > > printk. They could be used to denoise sources by using needed level in > > > the print function name, and by automatically inserting per-driver / > > > function / ... print prefix as defined by pr_fmt macro. pr_* are also > > > said to be used in Documentation/process/coding-style.rst and more > > > recent code - for example overlayfs - uses them instead of printk. > > > > > > Convert CUSE and FUSE to use the new pr_* functions. > > > > > > CUSE output stays completely unchanged, while FUSE output is amended a > > > bit for "trying to steal weird page" warning - the second line now comes > > > also with "fuse:" prefix. I hope it is ok. > > > > Yep. Applied, thanks. > > Miklos, thanks for feedback. Could you please clarify where the patch is > applied? Here is what linux/MAINTAINERS says > > FUSE: FILESYSTEM IN USERSPACE > M: Miklos Szeredi <miklos@szeredi.hu> > L: linux-fsdevel@vger.kernel.org > W: http://fuse.sourceforge.net/ > T: git git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/fuse.git > S: Maintained > F: fs/fuse/ > F: include/uapi/linux/fuse.h > F: Documentation/filesystems/fuse.txt > > but git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/fuse.git was > not updated for ~ 2 months. I see other "Applied, thanks" replies from > you on linux-fsdevel in recent days and it suggests that patches are > indeed applied, but where they are integrated is the question. My private patch queue. > Linux-next also has no post-5.1 fuse patches at all, so I'm really > puzzled about what is going on. > > Is there any reason not to keep for-next fuse branch publicly available? > Or am I missing something? I usually push to fuse.git#for-next within a day or two of adding it to my queue. > Could you please also have a look at other posted patches? I'm > struggling for months sending them to you and not getting feedback. It > is kind of frustrating to work in this mode. I see. I'll try to give more frequent feedback on patches. The reason for not replying is not that I intentionally ignore incoming patches, but because I'm working on something else and context switching between completely different projects is not easy for me. Thanks, Miklos
On Wed, Apr 24, 2019 at 10:57:35AM +0200, Miklos Szeredi wrote: > On Wed, Apr 24, 2019 at 10:38 AM Kirill Smelkov <kirr@nexedi.com> wrote: > > > > +torvalds > > > > On Tue, Apr 23, 2019 at 04:57:58PM +0200, Miklos Szeredi wrote: > > > On Wed, Mar 27, 2019 at 10:15 AM Kirill Smelkov <kirr@nexedi.com> wrote: > > > > > > > > Functions, like pr_err, are a more modern variant of printing compared to > > > > printk. They could be used to denoise sources by using needed level in > > > > the print function name, and by automatically inserting per-driver / > > > > function / ... print prefix as defined by pr_fmt macro. pr_* are also > > > > said to be used in Documentation/process/coding-style.rst and more > > > > recent code - for example overlayfs - uses them instead of printk. > > > > > > > > Convert CUSE and FUSE to use the new pr_* functions. > > > > > > > > CUSE output stays completely unchanged, while FUSE output is amended a > > > > bit for "trying to steal weird page" warning - the second line now comes > > > > also with "fuse:" prefix. I hope it is ok. > > > > > > Yep. Applied, thanks. > > > > Miklos, thanks for feedback. Could you please clarify where the patch is > > applied? Here is what linux/MAINTAINERS says > > > > FUSE: FILESYSTEM IN USERSPACE > > M: Miklos Szeredi <miklos@szeredi.hu> > > L: linux-fsdevel@vger.kernel.org > > W: http://fuse.sourceforge.net/ > > T: git git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/fuse.git > > S: Maintained > > F: fs/fuse/ > > F: include/uapi/linux/fuse.h > > F: Documentation/filesystems/fuse.txt > > > > but git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/fuse.git was > > not updated for ~ 2 months. I see other "Applied, thanks" replies from > > you on linux-fsdevel in recent days and it suggests that patches are > > indeed applied, but where they are integrated is the question. > > My private patch queue. > > > Linux-next also has no post-5.1 fuse patches at all, so I'm really > > puzzled about what is going on. > > > > Is there any reason not to keep for-next fuse branch publicly available? > > Or am I missing something? > > I usually push to fuse.git#for-next within a day or two of adding it > to my queue. Miklos, first of all thanks a lot for feedback. I see about fuse.git#for-next. I was checking linux-fsdevel and saw one patch said to be applied ~ one week ago. That timeframe was bigger than a private queue for in-house testing that I was imagining, and that's why I asked. https://lore.kernel.org/linux-fsdevel/CAJfpegsyuNtS7afL3Wqjx7m2ewPUUih9pznRmxtrsHYOKER2Gw@mail.gmail.com/ > > Could you please also have a look at other posted patches? I'm > > struggling for months sending them to you and not getting feedback. It > > is kind of frustrating to work in this mode. > > I see. I'll try to give more frequent feedback on patches. The > reason for not replying is not that I intentionally ignore incoming > patches, but because I'm working on something else and context > switching between completely different projects is not easy for me. I see. I understand about context switching difficulty especially that it is similarly not easy on my side. However big latency on patches feedback creates uncertainty e.g. whether a patch will be considered at all or dropped? If it will be considered there are chances that it will have to be reworked, and if feedback is e.g. once per cycle (~2.5 months) the reworked patch will have to wait for another cycle which gets it close to half a year. And with those latencies it starts to be close to kill the motivation to do the work at all. (a record example - I once got first reply after 5 _years_ since posting a patch) We all have limited resources and I'm not talking about getting feedback (though that would be appreciated) in the days timeframe. Getting feedback in one or two weeks should be reasonably though. With more delay, at least for me, it starts to be on the edge and the patch considered to be lost. It is very appreciated if you could indeed try to provide feedback more frequently. I apologize if maybe my email touched some pain points. I asked because it was not clear what to do with the patches and my filesystem becomes completely useless without e.g. precise-cache fix. I was just trying to find what should be the way for my fuse changes into the kernel. Thanks a lot, once again, for your feedback. Kirill
diff --git a/fs/fuse/cuse.c b/fs/fuse/cuse.c index 55a26f351467..4b41df1d4642 100644 --- a/fs/fuse/cuse.c +++ b/fs/fuse/cuse.c @@ -33,6 +33,8 @@ * closed. */ +#define pr_fmt(fmt) "CUSE: " fmt + #include <linux/fuse.h> #include <linux/cdev.h> #include <linux/device.h> @@ -225,7 +227,7 @@ static int cuse_parse_one(char **pp, char *end, char **keyp, char **valp) return 0; if (end[-1] != '\0') { - printk(KERN_ERR "CUSE: info not properly terminated\n"); + pr_err("info not properly terminated\n"); return -EINVAL; } @@ -242,7 +244,7 @@ static int cuse_parse_one(char **pp, char *end, char **keyp, char **valp) key = strstrip(key); if (!strlen(key)) { - printk(KERN_ERR "CUSE: zero length info key specified\n"); + pr_err("zero length info key specified\n"); return -EINVAL; } @@ -282,12 +284,11 @@ static int cuse_parse_devinfo(char *p, size_t len, struct cuse_devinfo *devinfo) if (strcmp(key, "DEVNAME") == 0) devinfo->name = val; else - printk(KERN_WARNING "CUSE: unknown device info \"%s\"\n", - key); + pr_warn("unknown device info \"%s\"\n", key); } if (!devinfo->name || !strlen(devinfo->name)) { - printk(KERN_ERR "CUSE: DEVNAME unspecified\n"); + pr_err("DEVNAME unspecified\n"); return -EINVAL; } @@ -341,7 +342,7 @@ static void cuse_process_init_reply(struct fuse_conn *fc, struct fuse_req *req) else rc = register_chrdev_region(devt, 1, devinfo.name); if (rc) { - printk(KERN_ERR "CUSE: failed to register chrdev region\n"); + pr_err("failed to register chrdev region\n"); goto err; } diff --git a/fs/fuse/dev.c b/fs/fuse/dev.c index 8a63e52785e9..ccb4c3980829 100644 --- a/fs/fuse/dev.c +++ b/fs/fuse/dev.c @@ -906,8 +906,8 @@ static int fuse_check_page(struct page *page) 1 << PG_lru | 1 << PG_active | 1 << PG_reclaim))) { - printk(KERN_WARNING "fuse: trying to steal weird page\n"); - printk(KERN_WARNING " page=%p index=%li flags=%08lx, count=%i, mapcount=%i, mapping=%p\n", page, page->index, page->flags, page_count(page), page_mapcount(page), page->mapping); + pr_warn("trying to steal weird page\n"); + pr_warn(" page=%p index=%li flags=%08lx, count=%i, mapcount=%i, mapping=%p\n", page, page->index, page->flags, page_count(page), page_mapcount(page), page->mapping); return 1; } return 0; diff --git a/fs/fuse/fuse_i.h b/fs/fuse/fuse_i.h index 0920c0c032a0..e6195bc8f836 100644 --- a/fs/fuse/fuse_i.h +++ b/fs/fuse/fuse_i.h @@ -9,6 +9,10 @@ #ifndef _FS_FUSE_I_H #define _FS_FUSE_I_H +#ifndef pr_fmt +# define pr_fmt(fmt) "fuse: " fmt +#endif + #include <linux/fuse.h> #include <linux/fs.h> #include <linux/mount.h> diff --git a/fs/fuse/inode.c b/fs/fuse/inode.c index 1b3f3b67d9f0..1bca5023bcc5 100644 --- a/fs/fuse/inode.c +++ b/fs/fuse/inode.c @@ -1397,8 +1397,8 @@ static int __init fuse_init(void) { int res; - printk(KERN_INFO "fuse init (API version %i.%i)\n", - FUSE_KERNEL_VERSION, FUSE_KERNEL_MINOR_VERSION); + pr_info("init (API version %i.%i)\n", + FUSE_KERNEL_VERSION, FUSE_KERNEL_MINOR_VERSION); INIT_LIST_HEAD(&fuse_conn_list); res = fuse_fs_init(); @@ -1434,7 +1434,7 @@ static int __init fuse_init(void) static void __exit fuse_exit(void) { - printk(KERN_DEBUG "fuse exit\n"); + pr_debug("exit\n"); fuse_ctl_cleanup(); fuse_sysfs_cleanup();