[CRIU] [PATCH] [RFC] fsnotify: don't call check_open_handle() for remapped and ghost files

Andrew Vagin avagin at parallels.com
Thu Sep 4 01:41:43 PDT 2014


On Wed, Sep 03, 2014 at 09:05:54PM +0400, Pavel Emelyanov wrote:
> On 09/02/2014 02:17 PM, Andrey Vagin wrote:
> > Handles are not used for restoring these files. AUFS can't open unlinked
> > files by handle.
> > 
> > Signed-off-by: Andrey Vagin <avagin at openvz.org>
> > ---
> >  fsnotify.c | 19 ++++++++++---------
> >  1 file changed, 10 insertions(+), 9 deletions(-)
> > 
> > diff --git a/fsnotify.c b/fsnotify.c
> > index 09b793d..9a1c7dd 100644
> > --- a/fsnotify.c
> > +++ b/fsnotify.c
> > @@ -215,11 +215,6 @@ static int dump_inotify_entry(union fdinfo_entries *e, void *arg)
> >  			we->f_handle->bytes, we->f_handle->type,
> >  			we->f_handle->handle[0], we->f_handle->handle[1]);
> >  
> > -	if (check_open_handle(we->s_dev, we->i_ino, we->f_handle)) {
> > -		free_inotify_wd_entry(e);
> > -		return -1;
> > -	}
> > -
> 
> You move check_open_handle from dump to restore stage. This is not
> nice from my POV, as handle checking is important at dump stage since
> it gives us ... some guarantee, that we will have chances to use it
> on restore.

Yes, you are right. Just drop this patch.
> 
> >  	list_add(&wd_entry->node, &wd_list->list);
> >  	wd_list->n++;
> >  
> > @@ -299,9 +294,6 @@ static int dump_fanotify_entry(union fdinfo_entries *e, void *arg)
> >  		pr_info("\t[fhandle] bytes 0x%08x type 0x%08x __handle 0x%016"PRIx64":0x%016"PRIx64"\n",
> >  			fme->ie->f_handle->bytes, fme->ie->f_handle->type,
> >  			fme->ie->f_handle->handle[0], fme->ie->f_handle->handle[1]);
> > -
> > -		if (check_open_handle(fme->s_dev, fme->ie->i_ino, fme->ie->f_handle))
> > -			goto out;
> >  	}
> >  
> >  	if (fme->type == MARK_TYPE__MOUNT) {
> > @@ -668,6 +660,11 @@ static int __collect_inotify_mark(struct fsnotify_file_info *p, struct fsnotify_
> >  
> >  	list_add_tail(&mark->list, &m->list);
> >  	mark->remap = lookup_ghost_remap(mark->iwe->s_dev, mark->iwe->i_ino);
> > +	if (mark->remap == NULL &&
> > +            check_open_handle(mark->iwe->s_dev, mark->iwe->i_ino, mark->iwe->f_handle)) {
> > +			return -1;
> > +	}
> > +
> >  	return 0;
> >  }
> >  
> > @@ -686,9 +683,13 @@ static int __collect_fanotify_mark(struct fsnotify_file_info *p,
> >  				struct fsnotify_mark_info *mark)
> >  {
> >  	list_add(&mark->list, &p->marks);
> > -	if (mark->fme->type == MARK_TYPE__INODE)
> > +	if (mark->fme->type == MARK_TYPE__INODE) {
> >  		mark->remap = lookup_ghost_remap(mark->fme->s_dev,
> >  						 mark->fme->ie->i_ino);
> > +		if (mark->remap == NULL &&
> > +		    check_open_handle(mark->fme->s_dev, mark->fme->ie->i_ino, mark->fme->ie->f_handle))
> > +			return -1;
> > +	}
> >  	return 0;
> >  }
> >  
> > 
> 


More information about the CRIU mailing list