To make e2fsck happy. Otherwise, all the features using
local directories (quota, nodemap, nid tables) can leave
orphaned objects as nlink doesn't drop to 0.
Signed-off-by: Alex Zhuravlev <bzzz@whamcloud.com>
Change-Id: I9e20a304d66c61f312168715e888757bc06b6ed0
Reviewed-on: https://review.whamcloud.com/38844
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Mike Pershin <mpershin@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
+ if (S_ISDIR(p->do_lu.lo_header->loh_attr)) {
+ rc = dt_declare_ref_del(env, p, th);
+ if (rc < 0)
+ return rc;
+ }
+
rc = dt_declare_ref_del(env, c, th);
if (rc < 0)
return rc;
rc = dt_declare_ref_del(env, c, th);
if (rc < 0)
return rc;
if (rc < 0)
GOTO(stop, rc);
if (rc < 0)
GOTO(stop, rc);
+ if (S_ISDIR(dto->do_lu.lo_header->loh_attr)) {
+ dt_write_lock(env, parent, 0);
+ rc = dt_ref_del(env, parent, th);
+ dt_write_unlock(env, parent);
+ if (rc)
+ GOTO(stop, rc);
+ }
+
dt_write_lock(env, dto, 0);
rc = dt_delete(env, parent, (struct dt_key *)name, th);
if (rc < 0)
dt_write_lock(env, dto, 0);
rc = dt_delete(env, parent, (struct dt_key *)name, th);
if (rc < 0)