From: Josef Bacik <josef@toxicpanda.com>
To: fstests@vger.kernel.org, kernel-team@fb.com, linux-btrfs@vger.kernel.org
Subject: [PATCH 2/3] fsstress: add the ability to create snapshots
Date: Thu, 14 Nov 2019 10:58:35 -0500 [thread overview]
Message-ID: <20191114155836.3528-3-josef@toxicpanda.com> (raw)
In-Reply-To: <20191114155836.3528-1-josef@toxicpanda.com>
Snapshots are just fancy subvolumes, add this ability so we can stress
snapshot creation. We get the deletion with SUBVOL_DELETE.
Signed-off-by: Josef Bacik <josef@toxicpanda.com>
---
ltp/fsstress.c | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 53 insertions(+)
diff --git a/ltp/fsstress.c b/ltp/fsstress.c
index e0636a12..f7f5f1dc 100644
--- a/ltp/fsstress.c
+++ b/ltp/fsstress.c
@@ -129,6 +129,7 @@ typedef enum {
OP_SETATTR,
OP_SETFATTR,
OP_SETXATTR,
+ OP_SNAPSHOT,
OP_SPLICE,
OP_STAT,
OP_SUBVOL_CREATE,
@@ -255,6 +256,7 @@ void rmdir_f(int, long);
void setattr_f(int, long);
void setfattr_f(int, long);
void setxattr_f(int, long);
+void snapshot_f(int, long);
void splice_f(int, long);
void stat_f(int, long);
void subvol_create_f(int, long);
@@ -322,6 +324,7 @@ opdesc_t ops[] = {
{ OP_SETFATTR, "setfattr", setfattr_f, 2, 1 },
/* set project id (XFS_IOC_FSSETXATTR ioctl) */
{ OP_SETXATTR, "setxattr", setxattr_f, 1, 1 },
+ { OP_SNAPSHOT, "snapshot", snapshot_f, 1, 1 },
{ OP_SPLICE, "splice", splice_f, 1, 1 },
{ OP_STAT, "stat", stat_f, 1, 0 },
{ OP_SUBVOL_CREATE, "subvol_create", subvol_create_f, 1, 1},
@@ -1903,6 +1906,7 @@ zero_freq(void)
#define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0]))
opty_t btrfs_ops[] = {
+ OP_SNAPSHOT,
OP_SUBVOL_CREATE,
OP_SUBVOL_DELETE,
};
@@ -4703,6 +4707,55 @@ out:
free_pathname(&f);
}
+void
+snapshot_f(int opno, long r)
+{
+#ifdef HAVE_BTRFSUTIL_H
+ enum btrfs_util_error e;
+ pathname_t f;
+ pathname_t newf;
+ fent_t *fep;
+ int id;
+ int parid;
+ int v;
+ int v1;
+ int err;
+
+ init_pathname(&f);
+ if (!get_fname(FT_SUBVOLm, r, &f, NULL, &fep, &v)) {
+ if (v)
+ printf("%d/%d: snapshot - no subvolume\n", procid,
+ opno);
+ free_pathname(&f);
+ return;
+ }
+ init_pathname(&newf);
+ parid = fep->id;
+ err = generate_fname(fep, FT_SUBVOL, &newf, &id, &v1);
+ v |= v1;
+ if (!err) {
+ if (v) {
+ (void)fent_to_name(&f, fep);
+ printf("%d/%d: snapshot - no filename from %s\n",
+ procid, opno, f.path);
+ }
+ free_pathname(&f);
+ return;
+ }
+ e = btrfs_util_create_snapshot(f.path, newf.path, 0, NULL, NULL);
+ if (e == BTRFS_UTIL_OK)
+ add_to_flist(FT_SUBVOL, id, parid, 0);
+ if (v) {
+ printf("%d/%d: snapshot %s->%s %d(%s)\n", procid, opno,
+ f.path, newf.path, e, btrfs_util_strerror(e));
+ printf("%d/%d: snapshot add id=%d,parent=%d\n", procid, opno,
+ id, parid);
+ }
+ free_pathname(&newf);
+ free_pathname(&f);
+#endif
+}
+
void
stat_f(int opno, long r)
{
--
2.21.0
next prev parent reply other threads:[~2019-11-14 15:58 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-11-14 15:58 [PATCH 0/3] fsstress: add support for btrfs subvol and snapshot ops Josef Bacik
2019-11-14 15:58 ` [PATCH 1/3] fsstress: add the ability to create/delete subvolumes Josef Bacik
2019-11-14 18:14 ` [PATCH][v2] " Josef Bacik
2019-12-17 15:55 ` Filipe Manana
2019-11-14 15:58 ` Josef Bacik [this message]
2019-12-17 16:06 ` [PATCH 2/3] fsstress: add the ability to create snapshots Filipe Manana
2019-11-14 15:58 ` [PATCH 3/3] fsstress: allow operations to use either a directory or subvol Josef Bacik
2019-12-17 16:10 ` Filipe Manana
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20191114155836.3528-3-josef@toxicpanda.com \
--to=josef@toxicpanda.com \
--cc=fstests@vger.kernel.org \
--cc=kernel-team@fb.com \
--cc=linux-btrfs@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.