[systemd-devel] [PATCH 1/2] Revert patch 11689d2a which force the NOCOW attribute
Lennart Poettering
lennart at poettering.net
Wed Apr 8 14:12:22 PDT 2015
On Sat, 21.03.15 12:56, Goffredo Baroncelli (kreijack at libero.it) wrote:
> From: Goffredo Baroncelli <kreijack at inwind.it>
>
> Revert patch 11689d2a, which force the NOCOW attribute for the journal files.
> This patch was introduced to allievate the perfomances problem that
> journald shows on the BTRFS filesystem.
>
> #include "btrfs-util.h"
> #include "journal-def.h"
> @@ -142,17 +141,8 @@ void journal_file_close(JournalFile *f) {
> if (f->mmap && f->fd >= 0)
> mmap_cache_close_fd(f->mmap, f->fd);
>
> - if (f->fd >= 0 && f->defrag_on_close) {
> -
> - /* Be friendly to btrfs: turn COW back on again now,
> - * and defragment the file. We won't write to the file
> - * ever again, hence remove all fragmentation, and
> - * reenable all the good bits COW usually provides
> - * (such as data checksumming). */
> -
> - (void) chattr_fd(f->fd, false, FS_NOCOW_FL);
> - (void) btrfs_defrag_fd(f->fd);
> - }
> + if (f->fd >= 0 && f->defrag_on_close)
> + btrfs_defrag_fd(f->fd);
I think this part should probably stay... I mean, it's actually
without effect since btrfs doesn't allow unsetting the COW flag right
now if the file is non-empty. But I still think we should do this, in
case it learns it one day. And after rotating the file there's really
no need to disable COW anymore...
>
> /* btrfs doesn't cope well with our write pattern and
> * fragments heavily. Let's defrag all files we rotate */
> -
> - (void) chattr_path(p, false, FS_NOCOW_FL);
> (void) btrfs_defrag(p);
This case is similar.
>
> log_warning("File %s corrupted or uncleanly shut down, renaming and replacing.", fname);
> diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c
> index 55c7786..abb9d0c 100644
> --- a/src/journal/journalctl.c
> +++ b/src/journal/journalctl.c
> @@ -1290,7 +1290,7 @@ static int setup_keys(void) {
> size_t mpk_size, seed_size, state_size, i;
> uint8_t *mpk, *seed, *state;
> ssize_t l;
> - int fd = -1, r;
> + int fd = -1, r, attr = 0;
> sd_id128_t machine, boot;
> char *p = NULL, *k = NULL;
> struct FSSHeader h;
> @@ -1385,9 +1385,13 @@ static int setup_keys(void) {
>
> /* Enable secure remove, exclusion from dump, synchronous
> * writing and in-place updating */
> - r = chattr_fd(fd, true, FS_SECRM_FL|FS_NODUMP_FL|FS_SYNC_FL|FS_NOCOW_FL);
> - if (r < 0)
> - log_warning_errno(errno, "Failed to set file attributes: %m");
> + if (ioctl(fd, FS_IOC_GETFLAGS, &attr) < 0)
> + log_warning_errno(errno, "FS_IOC_GETFLAGS failed: %m");
> +
> + attr |= FS_SECRM_FL|FS_NODUMP_FL|FS_SYNC_FL|FS_NOCOW_FL;
> +
> + if (ioctl(fd, FS_IOC_SETFLAGS, &attr) < 0)
> + log_warning_errno(errno, "FS_IOC_SETFLAGS failed: %m");
This is unrelated, and should not be reverted at all.
Lennart
--
Lennart Poettering, Red Hat
More information about the systemd-devel
mailing list