aboutsummaryrefslogtreecommitdiffstats
path: root/pseudo.c
diff options
context:
space:
mode:
authorseebs <seebs@seebs.net>2016-07-28 14:02:12 -0500
committerseebs <seebs@seebs.net>2016-07-28 14:52:54 -0500
commit0d9071f3090bbd7880558f3b488b236ac19b44fc (patch)
tree36a3f6f00a32a2b868919adfbe677f89c735a3a8 /pseudo.c
parenteb47d855a831b6dc0ad34890e84b8f6f483693df (diff)
downloadpseudo-seebs/xattr_performance.tar.gz
pseudo-seebs/xattr_performance.tar.bz2
pseudo-seebs/xattr_performance.zip
Fix xattr performanceseebs/xattr_performance
When deleting files, we *do* know the inode and attribute, most of the time, so we pass those in whenever possible. The full purge of unmatched xattrs should not happen when the correct dev/ino are believed to be known. Signed-off-by: Seebs <seebs@seebs.net>
Diffstat (limited to 'pseudo.c')
-rw-r--r--pseudo.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/pseudo.c b/pseudo.c
index 52f649f..db1c400 100644
--- a/pseudo.c
+++ b/pseudo.c
@@ -600,7 +600,12 @@ pseudo_op(pseudo_msg_t *msg, const char *program, const char *tag, char **respon
if (by_path.deleting != 0) {
pseudo_debug(PDBGF_FILE, "inode mismatch for '%s' -- old one was marked for deletion, deleting.\n",
msg->path);
- pdb_did_unlink_file(msg->path, by_path.deleting);
+ /* in this case, we don't trust the
+ * existing entries, so we will do the
+ * more expensive sweep for stray
+ * xattrs.
+ */
+ pdb_did_unlink_file(msg->path, NULL, by_path.deleting);
} else {
pseudo_diag("inode mismatch: '%s' ino %llu in db, %llu in request.\n",
msg->path,
@@ -698,7 +703,7 @@ pseudo_op(pseudo_msg_t *msg, const char *program, const char *tag, char **respon
if (by_ino.deleting != 0) {
pseudo_debug(PDBGF_FILE, "inode mismatch for '%s' -- old one was marked for deletion, deleting.\n",
msg->path);
- pdb_did_unlink_file(path_by_ino, by_ino.deleting);
+ pdb_did_unlink_file(path_by_ino, &by_ino, by_ino.deleting);
} else {
pseudo_diag("path mismatch [%d link%s]: ino %llu db '%s' req '%s'.\n",
msg->nlink,
@@ -930,7 +935,7 @@ pseudo_op(pseudo_msg_t *msg, const char *program, const char *tag, char **respon
}
break;
case OP_DID_UNLINK:
- pdb_did_unlink_file(msg->path, msg->client);
+ pdb_did_unlink_file(msg->path, msg, msg->client);
break;
case OP_CANCEL_UNLINK:
pdb_cancel_unlink_file(msg);