[CRIU] [PATCH 08/16] files-ids: generate id-s accoding with mnt_id, st->st_dev and st->st_ino

Andrew Vagin avagin at parallels.com
Wed Apr 9 22:12:34 PDT 2014


On Wed, Apr 09, 2014 at 07:00:32PM +0400, Pavel Emelyanov wrote:
> On 04/09/2014 03:35 AM, Andrey Vagin wrote:
> > One device can be mounted a few times, so files are identical only,
> > if they have the same mnt_id.
> 
> I see no changes in fdid generation, only it the caching.
> 

...

> > -static struct fd_id *fd_id_cache_lookup(struct stat *st)
> > +static struct fd_id *fd_id_cache_lookup(struct fd_parms *p)
> >  {
> > +	struct stat *st = &p->stat;
> >  	struct fd_id *fi;
> >  
> >  	for (fi = fd_id_cache[fdid_hashfn(st->st_dev, st->st_ino)];
> >  			fi; fi = fi->n)
> > -		if (fi->dev == st->st_dev && fi->ino == st->st_ino)
> > +		if (fi->dev == st->st_dev &&
> > +		    fi->ino == st->st_ino &&
> > +		    fi->mnt_id == p->mnt_id)


^^^ check mnt_id
> >  			return fi;
> >  
> >  	return NULL;
> >  }
> >  
> > -int fd_id_generate_special(struct stat *st, u32 *id)
> > +int fd_id_generate_special(struct fd_parms *p, u32 *id)
> >  {
> > -	if (st) {
> > +	if (p) {
> >  		struct fd_id *fi;
> >  
> > -		fi = fd_id_cache_lookup(st);
> > +		fi = fd_id_cache_lookup(p);

If we don't have file with this mnt_id, we will generate a new id for
the file.

> >  		if (fi) {
> >  			*id = fi->id;
> >  			return 0;


More information about the CRIU mailing list