From 40e27b4251bec6d60ce0a6310a5ac7094980f9a3 Mon Sep 17 00:00:00 2001 From: Hongchao Zhang Date: Sat, 22 Jun 2024 05:51:31 +0800 Subject: [PATCH] LU-17985 osd-ldiskfs: drop osd object if failed to create In osd_create, if the newly created inode had already contained correct XATTR_NAME_LMA but failed to update the OI, it will clear osd_object->oo_inode, the osd_object should also be dropped. Signed-off-by: Hongchao Zhang Change-Id: I4ff5952c154ce459c78514b88b1810471635c703 Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/55571 Tested-by: jenkins Tested-by: Maloo Reviewed-by: Oleg Drokin Reviewed-by: Andreas Dilger Reviewed-by: Alex Zhuravlev --- lustre/osd-ldiskfs/osd_handler.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lustre/osd-ldiskfs/osd_handler.c b/lustre/osd-ldiskfs/osd_handler.c index e9f3eef..d252df3 100644 --- a/lustre/osd-ldiskfs/osd_handler.c +++ b/lustre/osd-ldiskfs/osd_handler.c @@ -4459,6 +4459,10 @@ static int osd_create(const struct lu_env *env, struct dt_object *dt, result = __osd_oi_insert(env, obj, fid, th); if (result && inode) { + set_bit(LU_OBJECT_HEARD_BANSHEE, + &obj->oo_dt.do_lu.lo_header->loh_flags); + obj->oo_dt.do_lu.lo_header->loh_attr &= ~LOHA_EXISTS; + spin_lock(&obj->oo_guard); clear_nlink(inode); spin_unlock(&obj->oo_guard); -- 1.8.3.1