Unverified Commit 1918c10e authored by Konstantin Komarov's avatar Konstantin Komarov
Browse files

fs/ntfs3: Correct hard links updating when dealing with DOS names

parent 6a799c92
Loading
Loading
Loading
Loading
+14 −2
Original line number Diff line number Diff line
@@ -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);