X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fmount-setup.c;h=f70c4d46f3b9a78f977e6086917eed63a9a20c0d;hp=abb0c19d2543e110478831b5ee9a5e944497b87f;hb=edb4977837cbf82b0edc29cf8cbefa00c380fa16;hpb=4d4c74866c12c98b2834e8eff218b74cb83bb608 diff --git a/src/mount-setup.c b/src/mount-setup.c index abb0c19d2..f70c4d46f 100644 --- a/src/mount-setup.c +++ b/src/mount-setup.c @@ -344,11 +344,18 @@ static int nftw_cb( struct FTW *ftwbuf) { /* No need to label /dev twice in a row... */ - if (ftwbuf->level == 0) - return 0; + if (_unlikely_(ftwbuf->level == 0)) + return FTW_CONTINUE; + + /* /run/initramfs is static data and big, no need to + * dynamically relabel it at boot... */ + if (_unlikely_(ftwbuf->level == 1 && + tflag == FTW_D && + streq(fpath, "/run/initramfs"))) + return FTW_SKIP_SUBTREE; label_fix(fpath, true); - return 0; + return FTW_CONTINUE; }; int mount_setup(bool loaded_policy) { @@ -381,8 +388,8 @@ int mount_setup(bool loaded_policy) { before_relabel = now(CLOCK_MONOTONIC); - nftw("/dev", nftw_cb, 64, FTW_MOUNT|FTW_PHYS); - nftw("/run", nftw_cb, 64, FTW_MOUNT|FTW_PHYS); + nftw("/dev", nftw_cb, 64, FTW_MOUNT|FTW_PHYS|FTW_ACTIONRETVAL); + nftw("/run", nftw_cb, 64, FTW_MOUNT|FTW_PHYS|FTW_ACTIONRETVAL); after_relabel = now(CLOCK_MONOTONIC);