forked from mirrors/linux
		
	ovl: During copy up, first copy up metadata and then data
Just a little re-ordering of code. This helps with next patch where after copying up metadata, we skip data copying step, if needed. Signed-off-by: Vivek Goyal <vgoyal@redhat.com> Reviewed-by: Amir Goldstein <amir73il@gmail.com> Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
This commit is contained in:
		
							parent
							
								
									d5791044d2
								
							
						
					
					
						commit
						bd64e57586
					
				
					 1 changed files with 17 additions and 19 deletions
				
			
		| 
						 | 
				
			
			@ -490,28 +490,10 @@ static int ovl_copy_up_inode(struct ovl_copy_up_ctx *c, struct dentry *temp)
 | 
			
		|||
{
 | 
			
		||||
	int err;
 | 
			
		||||
 | 
			
		||||
	if (S_ISREG(c->stat.mode)) {
 | 
			
		||||
		struct path upperpath;
 | 
			
		||||
 | 
			
		||||
		ovl_path_upper(c->dentry, &upperpath);
 | 
			
		||||
		BUG_ON(upperpath.dentry != NULL);
 | 
			
		||||
		upperpath.dentry = temp;
 | 
			
		||||
 | 
			
		||||
		err = ovl_copy_up_data(&c->lowerpath, &upperpath, c->stat.size);
 | 
			
		||||
		if (err)
 | 
			
		||||
			return err;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	err = ovl_copy_xattr(c->lowerpath.dentry, temp);
 | 
			
		||||
	if (err)
 | 
			
		||||
		return err;
 | 
			
		||||
 | 
			
		||||
	inode_lock(temp->d_inode);
 | 
			
		||||
	err = ovl_set_attr(temp, &c->stat);
 | 
			
		||||
	inode_unlock(temp->d_inode);
 | 
			
		||||
	if (err)
 | 
			
		||||
		return err;
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
	 * Store identifier of lower inode in upper inode xattr to
 | 
			
		||||
	 * allow lookup of the copy up origin inode.
 | 
			
		||||
| 
						 | 
				
			
			@ -525,7 +507,23 @@ static int ovl_copy_up_inode(struct ovl_copy_up_ctx *c, struct dentry *temp)
 | 
			
		|||
			return err;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
	if (S_ISREG(c->stat.mode)) {
 | 
			
		||||
		struct path upperpath;
 | 
			
		||||
 | 
			
		||||
		ovl_path_upper(c->dentry, &upperpath);
 | 
			
		||||
		BUG_ON(upperpath.dentry != NULL);
 | 
			
		||||
		upperpath.dentry = temp;
 | 
			
		||||
 | 
			
		||||
		err = ovl_copy_up_data(&c->lowerpath, &upperpath, c->stat.size);
 | 
			
		||||
		if (err)
 | 
			
		||||
			return err;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	inode_lock(temp->d_inode);
 | 
			
		||||
	err = ovl_set_attr(temp, &c->stat);
 | 
			
		||||
	inode_unlock(temp->d_inode);
 | 
			
		||||
 | 
			
		||||
	return err;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int ovl_copy_up_locked(struct ovl_copy_up_ctx *c)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue