* [PATCH v2 5/7] fsstress: add operation for deleting xattrs from files and directories
@ 2019-04-01 12:51 fdmanana
0 siblings, 0 replies; only message in thread
From: fdmanana @ 2019-04-01 12:51 UTC (permalink / raw)
To: fstests; +Cc: linux-btrfs, Filipe Manana
From: Filipe Manana <fdmanana@suse.com>
The previous patches added support for operations to set and get xattrs on
regular files and directories, this patch just adds one operation to delete
xattrs on files and directories.
Signed-off-by: Filipe Manana <fdmanana@suse.com>
---
V2: Use a different name for the operation (delfattr) and make use of the
helper functions for opening and closing files or directories, introduced
in the first patch of this series.
ltp/fsstress.c | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 53 insertions(+)
diff --git a/ltp/fsstress.c b/ltp/fsstress.c
index 53e6a847..1694c5a2 100644
--- a/ltp/fsstress.c
+++ b/ltp/fsstress.c
@@ -60,6 +60,7 @@ typedef enum {
OP_COPYRANGE,
OP_CREAT,
OP_DEDUPERANGE,
+ OP_DELFATTR,
OP_DREAD,
OP_DWRITE,
OP_FALLOCATE,
@@ -175,6 +176,7 @@ void clonerange_f(int, long);
void copyrange_f(int, long);
void creat_f(int, long);
void deduperange_f(int, long);
+void delfattr_f(int, long);
void dread_f(int, long);
void dwrite_f(int, long);
void fallocate_f(int, long);
@@ -228,6 +230,7 @@ opdesc_t ops[] = {
{ OP_COPYRANGE, "copyrange", copyrange_f, 4, 1 },
{ OP_CREAT, "creat", creat_f, 4, 1 },
{ OP_DEDUPERANGE, "deduperange", deduperange_f, 4, 1},
+ { OP_DELFATTR, "delfattr", delfattr_f, 2, 1 },
{ OP_DREAD, "dread", dread_f, 4, 0 },
{ OP_DWRITE, "dwrite", dwrite_f, 4, 1 },
{ OP_FALLOCATE, "fallocate", fallocate_f, 1, 1 },
@@ -3066,6 +3069,56 @@ creat_f(int opno, long r)
}
void
+delfattr_f(int opno, long r)
+{
+ int fd;
+ fent_t *fep;
+ int e;
+ pathname_t f;
+ int v;
+ char name[XATTR_NAME_BUF_SIZE];
+ int xattr_num;
+ DIR *dir;
+
+ init_pathname(&f);
+ if (!get_fname(FT_REGFILE | FT_DIRm, r, &f, NULL, &fep, &v)) {
+ if (v)
+ printf("%d/%d: delfattr - no filename\n", procid, opno);
+ free_pathname(&f);
+ return;
+ }
+ fd = open_file_or_dir(&f, O_WRONLY, &dir);
+ e = fd < 0 ? errno : 0;
+ if (fd < 0) {
+ if (v)
+ printf("%d/%d: delfattr - open %s failed %d\n",
+ procid, opno, f.path, e);
+ free_pathname(&f);
+ return;
+ }
+ check_cwd();
+
+ /*
+ * If the file/dir has xattrs, pick one randomly, otherwise attempt to
+ * remove a xattr that doesn't exist (fremovexattr should fail with
+ * errno set to ENOATTR (61) in this case).
+ */
+ if (fep->xattr_counter > 0)
+ xattr_num = (random() % fep->xattr_counter) + 1;
+ else
+ xattr_num = 0;
+
+ generate_xattr_name(xattr_num, name);
+
+ e = fremovexattr(fd, name) < 0 ? errno : 0;
+ if (v)
+ printf("%d/%d: delfattr file %s name %s %d\n",
+ procid, opno, f.path, name, e);
+ free_pathname(&f);
+ close_file_or_dir(fd, dir);
+}
+
+void
dread_f(int opno, long r)
{
int64_t align;
--
2.11.0
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2019-04-01 12:51 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-04-01 12:51 [PATCH v2 5/7] fsstress: add operation for deleting xattrs from files and directories fdmanana
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).