On Wed, May 06, 2015 at 04:11:57AM +0000, Zbigniew Jędrzejewski-Szmek wrote: > On Thu, Apr 30, 2015 at 08:50:38PM +0200, Michael Olbrich wrote: > > On read-only filesystems trying to create the target will not fail with > > EEXIST but with EROFS. Handle EROFS by checking if the target already > > exists, and if empty when truncating. > > This avoids reporting errors if tmpfiles doesn't actually needs to do > > anything. > > --- > > > > This is a rework of a patch I wrote some time ago[1]. This time reacting to > > EROFS instead of preempting it. > Applied, with some small changes, see below. > > > > > Michael > > > > [1] > > http://lists.freedesktop.org/archives/systemd-devel/2014-August/022158.html > > > > src/tmpfiles/tmpfiles.c | 12 +++++++++--- > > 1 file changed, 9 insertions(+), 3 deletions(-) > > > > diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c > > index 218d55051410..4473bf019911 100644 > > --- a/src/tmpfiles/tmpfiles.c > > +++ b/src/tmpfiles/tmpfiles.c > > @@ -983,9 +983,11 @@ static int write_one_file(Item *i, const char *path) { > > log_debug_errno(errno, "Not writing \"%s\": %m", > > path); > > return 0; > > } > > - > > - log_error_errno(errno, "Failed to create file %s: %m", > > path); > > - return -errno; > > + r = -errno; > > + if (i->argument || r != -EROFS || stat(path, &st) < 0 || > > (i->type == TRUNCATE_FILE && st.st_size > 0)) { > > + log_error_errno(r, "Failed to create file %s: %m", > > path); > > + return r; > > + } > I reverted the condition, because it seems safer to whitelist instead of > blacklisting. Also, if the condition didn't succeed, we'd do stat twice. > Please check that it still works as intended.
Looks good here. Michael -- Pengutronix e.K. | | Industrial Linux Solutions | http://www.pengutronix.de/ | Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | _______________________________________________ systemd-devel mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/systemd-devel
