Dr. Werner Fink
2014-Jun-18 09:44 UTC
Re: [PATCH 10/11] Avoid doubling the efforts for /var/log/journal
On Mon, Jun 16, 2014 at 11:10:15AM -0400, Cristian Rodríguez wrote:> El 13/06/14 10:41, Werner Fink escribió: > > That is: set NOATIME, NOCOW, and NOCOMP for the journal directory > > > > --- > > src/journal/journald-server.c | 29 +++++++++++++++++++++++++++-- > > 1 file changed, 27 insertions(+), 2 deletions(-) > > > > diff --git src/journal/journald-server.c src/journal/journald-server.c > > index eda5dcf..37d6dc3 100644 > > --- src/journal/journald-server.c > > +++ src/journal/journald-server.c > > @@ -21,6 +21,7 @@ > > > > #include <sys/signalfd.h> > > #include <sys/ioctl.h> > > +#include <linux/fs.h> > > #include <linux/sockios.h> > > #include <sys/statvfs.h> > > #include <sys/mman.h> > > @@ -920,7 +921,7 @@ finish: > > > > > > static int system_journal_open(Server *s) { > > - int r; > > + int r, fd; > > _cleanup_close_ ... > > > + /* > > + * On journaling and/or compressing file systems avoid doubling the > > + * efforts for the system, that is set NOCOW and NOCOMP inode flags. > > + * Check for every single flag as otherwise some of the file systems > > + * may return EOPNOTSUPP on one unkown flag (like BtrFS does). > > + */ > > + if ((fd = open(fn, O_DIRECTORY)) >= 0) { > > O_CLOEXEC... > > > + long flags; > > + if (ioctl(fd, FS_IOC_GETFLAGS, &flags) == 0) { > > + int old = flags; > > + if (!(flags&FS_NOATIME_FL) && ioctl(fd, FS_IOC_SETFLAGS, flags|FS_NOATIME_FL) == 0) > > + flags |= FS_NOATIME_FL; > > + if (!(flags&FS_NOCOW_FL) && ioctl(fd, FS_IOC_SETFLAGS, flags|FS_NOCOW_FL) == 0) > > + flags |= FS_NOCOW_FL; > > + if (!(flags&FS_NOCOMP_FL) && s->compress) { > > + flags &= ~FS_COMPR_FL; > > + flags |= FS_NOCOMP_FL; > > + } > > + if (old != flags) > > + ioctl(fd, FS_IOC_SETFLAGS, flags); > > + } > > + close(fd); > > + } > > I agree that this should be done, however I remain unconvinced this is > the right place to do it..IMHO this is the correct place as it helps to speed up systemd-journal on BtrFS. This was the reason for this patch and is tested even if the patch does not use _cleanup_close_ and O_CLOEXEC ;) Werner -- "Having a smoking section in a restaurant is like having a peeing section in a swimming pool." -- Edward Burr _______________________________________________ systemd-devel mailing list systemd-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/systemd-devel