On Mon, May 03, 2010 at 09:40:04PM -0400, Valdis.Kletnieks@xxxxxx wrote: > On Mon, 03 May 2010 16:12:26 PDT, Valerie Aurora said: > > When a file on the read-only layer of a union mount is altered, it > > must be copied up to the topmost read-write layer. This patch creates > > union_copyup() and its supporting routines. > > --- > > fs/union.c | 244 +++++++++++++++++++++++++++++++++++++++++++++++ > > > +/** > > + * union_copyup_data - Copy up len bytes of old's data to new > > + * > > + * @old: source file > > + * @new: target file > > + * @len: number of bytes to copy > > + */ > > + > > +static int union_copyup_data(struct path *old, struct vfsmount *new_mnt, > > + struct dentry *new_dentry, size_t len) > > +{ > > + struct file *old_file; > > + struct file *new_file; > > + const struct cred *cred = current_cred(); > > + loff_t offset = 0; > > + long bytes; > > + int error; > > Should this be 'int error = 0;' ? > > > + > > + if (len == 0) > > + return 0; > > + > > + /* Get reference to balance later fput() */ > > + path_get(old); > > + old_file = dentry_open(old->dentry, old->mnt, O_RDONLY, cred); > > + if (IS_ERR(old_file)) > > + return PTR_ERR(old_file); > > + > > + dget(new_dentry); > > + mntget(new_mnt); > > + new_file = dentry_open(new_dentry, new_mnt, O_WRONLY, cred); > > + if (IS_ERR(new_file)) { > > + error = PTR_ERR(new_file); > > + goto out_fput; > > + } > > + > > + bytes = do_splice_direct(old_file, &offset, new_file, len, > > + SPLICE_F_MOVE); > > + if (bytes < 0) > > + error = bytes; > > + > > + fput(new_file); > > +out_fput: > > + fput(old_file); > > + return error; > > +} > > because otherwise if do_splice_direct() returns a non-negative value, > we can hit 'return error;' without ever having set error to anything? Yes, I think you're right. Thanks! -VAL -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html