aboutsummaryrefslogtreecommitdiffstats
path: root/pseudo_db.c
diff options
context:
space:
mode:
Diffstat (limited to 'pseudo_db.c')
-rw-r--r--pseudo_db.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/pseudo_db.c b/pseudo_db.c
index 2008316..a9e294b 100644
--- a/pseudo_db.c
+++ b/pseudo_db.c
@@ -1495,7 +1495,7 @@ pdb_clear_unused_xattrs(void) {
static void
pdb_clear_xattrs(pseudo_msg_t *msg) {
static sqlite3_stmt *delete;
- char *delete_sql = "DELETE FROM xattrs WHERE dev = ? AND ino = ?;";
+ char *delete_sql = "DELETE FROM xattrs WHERE dev = ? AND ino = ? AND (SELECT COUNT(*) FROM files WHERE dev = ? AND ino = ?) = 0;";
int rc;
if (!msg)
@@ -1507,12 +1507,14 @@ pdb_clear_xattrs(pseudo_msg_t *msg) {
if (!delete) {
rc = sqlite3_prepare_v2(file_db, delete_sql, strlen(delete_sql), &delete, NULL);
if (rc) {
- dberr(file_db, "couldn't prepare DELETE statement for unused xattrs");
+ dberr(file_db, "couldn't prepare DELETE statement for specific inode xattrs");
return;
}
}
sqlite3_bind_int(delete, 1, msg->dev);
sqlite3_bind_int(delete, 2, msg->ino);
+ sqlite3_bind_int(delete, 3, msg->dev);
+ sqlite3_bind_int(delete, 4, msg->ino);
rc = sqlite3_step(delete);
if (rc != SQLITE_DONE) {
dberr(file_db, "delete of unused xattrs may have failed");