filter_destroy_internal is entered with inode references from
lookup and from the resource used by the extent lock, so the
check is changed to i_count != 2.
i=Vitaly Fertman
i=Johann Lombardi
struct inode *inode = dchild->d_inode;
int rc;
struct inode *inode = dchild->d_inode;
int rc;
- if (inode->i_nlink != 1 || atomic_read(&inode->i_count) != 1) {
+ /* There should be 2 references to the inode:
+ * 1) taken by filter_prepare_destroy
+ * 2) taken by filter_destroy */
+ if (inode->i_nlink != 1 || atomic_read(&inode->i_count) != 2) {
CERROR("destroying objid %.*s ino %lu nlink %lu count %d\n",
dchild->d_name.len, dchild->d_name.name, inode->i_ino,
(unsigned long)inode->i_nlink,
CERROR("destroying objid %.*s ino %lu nlink %lu count %d\n",
dchild->d_name.len, dchild->d_name.name, inode->i_ino,
(unsigned long)inode->i_nlink,