Loading fs/ntfs3/record.c +14 −2 Original line number Diff line number Diff line Loading @@ -535,9 +535,21 @@ bool mi_remove_attr(struct ntfs_inode *ni, struct mft_inode *mi, return false; if (ni && is_attr_indexed(attr)) { le16_add_cpu(&ni->mi.mrec->hard_links, -1); u16 links = le16_to_cpu(ni->mi.mrec->hard_links); struct ATTR_FILE_NAME *fname = attr->type != ATTR_NAME ? NULL : resident_data_ex(attr, SIZEOF_ATTRIBUTE_FILENAME); if (fname && fname->type == FILE_NAME_DOS) { /* Do not decrease links count deleting DOS name. */ } else if (!links) { /* minor error. Not critical. */ } else { ni->mi.mrec->hard_links = cpu_to_le16(links - 1); ni->mi.dirty = true; } } used -= asize; memmove(attr, Add2Ptr(attr, asize), used - aoff); Loading Loading
fs/ntfs3/record.c +14 −2 Original line number Diff line number Diff line Loading @@ -535,9 +535,21 @@ bool mi_remove_attr(struct ntfs_inode *ni, struct mft_inode *mi, return false; if (ni && is_attr_indexed(attr)) { le16_add_cpu(&ni->mi.mrec->hard_links, -1); u16 links = le16_to_cpu(ni->mi.mrec->hard_links); struct ATTR_FILE_NAME *fname = attr->type != ATTR_NAME ? NULL : resident_data_ex(attr, SIZEOF_ATTRIBUTE_FILENAME); if (fname && fname->type == FILE_NAME_DOS) { /* Do not decrease links count deleting DOS name. */ } else if (!links) { /* minor error. Not critical. */ } else { ni->mi.mrec->hard_links = cpu_to_le16(links - 1); ni->mi.dirty = true; } } used -= asize; memmove(attr, Add2Ptr(attr, asize), used - aoff); Loading