[prev in list] [next in list] [prev in thread] [next in thread]
List: linux-unionfs
Subject: [PATCH v4 17/25] ovl: factor out ovl_copy_up_inode() helper
From: Amir Goldstein <amir73il () gmail ! com>
Date: 2017-06-21 12:28:48
Message-ID: 1498048136-28218-18-git-send-email-amir73il () gmail ! com
[Download RAW message or body]
Factor out helper for copying lower inode data and metadata to temp
upper inode, that is common to copy up using O_TMPFILE and workdir.
Signed-off-by: Amir Goldstein <amir73il@gmail.com>
---
fs/overlayfs/copy_up.c | 64 +++++++++++++++++++++++++++++---------------------
1 file changed, 37 insertions(+), 27 deletions(-)
diff --git a/fs/overlayfs/copy_up.c b/fs/overlayfs/copy_up.c
index f6570bc127e7..e642a51f3be4 100644
--- a/fs/overlayfs/copy_up.c
+++ b/fs/overlayfs/copy_up.c
@@ -316,6 +316,42 @@ static int ovl_set_origin(struct dentry *dentry, struct dentry *lower,
return err;
}
+static int ovl_copy_up_inode(struct dentry *dentry, struct dentry *temp,
+ struct path *lowerpath, struct kstat *stat)
+{
+ int err;
+
+ if (S_ISREG(stat->mode)) {
+ struct path upperpath;
+
+ ovl_path_upper(dentry, &upperpath);
+ BUG_ON(upperpath.dentry != NULL);
+ upperpath.dentry = temp;
+
+ err = ovl_copy_up_data(lowerpath, &upperpath, stat->size);
+ if (err)
+ return err;
+ }
+
+ err = ovl_copy_xattr(lowerpath->dentry, temp);
+ if (err)
+ return err;
+
+ inode_lock(temp->d_inode);
+ err = ovl_set_attr(temp, 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.
+ */
+ err = ovl_set_origin(dentry, lowerpath->dentry, temp);
+
+ return err;
+}
+
static int ovl_copy_up_locked(struct dentry *workdir, struct dentry *upperdir,
struct dentry *dentry, struct path *lowerpath,
struct kstat *stat, const char *link,
@@ -375,33 +411,7 @@ static int ovl_copy_up_locked(struct dentry *workdir, struct dentry *upperdir,
if (err)
goto out2;
- if (S_ISREG(stat->mode)) {
- struct path upperpath;
-
- ovl_path_upper(dentry, &upperpath);
- BUG_ON(upperpath.dentry != NULL);
- upperpath.dentry = temp;
-
- err = ovl_copy_up_data(lowerpath, &upperpath, stat->size);
- if (err)
- goto out_cleanup;
- }
-
- err = ovl_copy_xattr(lowerpath->dentry, temp);
- if (err)
- goto out_cleanup;
-
- inode_lock(temp->d_inode);
- err = ovl_set_attr(temp, stat);
- inode_unlock(temp->d_inode);
- if (err)
- goto out_cleanup;
-
- /*
- * Store identifier of lower inode in upper inode xattr to
- * allow lookup of the copy up origin inode.
- */
- err = ovl_set_origin(dentry, lowerpath->dentry, temp);
+ err = ovl_copy_up_inode(dentry, temp, lowerpath, stat);
if (err)
goto out_cleanup;
--
2.7.4
--
To unsubscribe from this list: send the line "unsubscribe linux-unionfs" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic