[lxc-devel] [PATCH] add process_lock()/unlock() in save_config()

Dwight Engen dwight.engen at oracle.com
Tue Nov 12 21:33:18 UTC 2013


On Tue, 12 Nov 2013 14:42:54 -0600
Serge Hallyn <serge.hallyn at ubuntu.com> wrote:

> Quoting Dwight Engen (dwight.engen at oracle.com):
> > This is likely unnecessary, but is consistent with other uses of
> > fopen()/fclose() in lxc.
> > 
> > Signed-off-by: Dwight Engen <dwight.engen at oracle.com>
> 
> Do you think, regardless of your other fix, that it would still be
> worth adding an fsync?

Hmm, good question. I guess its possible lxcapi_save_config() could be
called by two different user processes for the same container and we'd
wind up with a similar situation. Seems like we're trying to use the
disk lock to protect against that, but it wasn't enough so maybe we do
need the fflush and fsync in there too. I think I'd have to write a
test to show the corruption and also then that the fflush and fsync
fixes it like it did for the create() flow to convince myself :)

> 
> Acked-by: Serge E. Hallyn <serge.hallyn at ubuntu.com>
> 
> > ---
> >  src/lxc/lxccontainer.c | 4 ++++
> >  1 file changed, 4 insertions(+)
> > 
> > diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c
> > index ede0113..c7b2f5e 100644
> > --- a/src/lxc/lxccontainer.c
> > +++ b/src/lxc/lxccontainer.c
> > @@ -1696,11 +1696,15 @@ static bool lxcapi_save_config(struct
> > lxc_container *c, const char *alt_file) if (lret)
> >  		return false;
> >  
> > +	process_lock();
> >  	fout = fopen(alt_file, "w");
> > +	process_unlock();
> >  	if (!fout)
> >  		goto out;
> >  	write_config(fout, c->lxc_conf);
> > +	process_lock();
> >  	fclose(fout);
> > +	process_unlock();
> >  	ret = true;
> >  
> >  out:
> > -- 
> > 1.8.3.1
> > 
> > 
> > ------------------------------------------------------------------------------
> > DreamFactory - Open Source REST & JSON Services for HTML5 & Native
> > Apps OAuth, Users, Roles, SQL, NoSQL, BLOB Storage and External API
> > Access Free app hosting. Or install the open source package on any
> > LAMP server. Sign up and see examples for AngularJS, jQuery, Sencha
> > Touch and Native!
> > http://pubads.g.doubleclick.net/gampad/clk?id=63469471&iu=/4140/ostg.clktrk
> > _______________________________________________ Lxc-devel mailing
> > list Lxc-devel at lists.sourceforge.net
> > https://lists.sourceforge.net/lists/listinfo/lxc-devel





More information about the lxc-devel mailing list