diff options
Diffstat (limited to 'fs/ntfs3/record.c')
-rw-r--r-- | fs/ntfs3/record.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/fs/ntfs3/record.c b/fs/ntfs3/record.c index d48a5e6c5045..61e3f2fb619f 100644 --- a/fs/ntfs3/record.c +++ b/fs/ntfs3/record.c @@ -489,7 +489,8 @@ struct ATTRIB *mi_insert_attr(struct mft_inode *mi, enum ATTR_TYPE type, * * NOTE: The source attr will point to next attribute. */ -bool mi_remove_attr(struct mft_inode *mi, struct ATTRIB *attr) +bool mi_remove_attr(struct ntfs_inode *ni, struct mft_inode *mi, + struct ATTRIB *attr) { struct MFT_REC *rec = mi->mrec; u32 aoff = PtrOffset(rec, attr); @@ -499,6 +500,11 @@ bool mi_remove_attr(struct mft_inode *mi, struct ATTRIB *attr) if (aoff + asize > used) return false; + if (ni && is_attr_indexed(attr)) { + le16_add_cpu(&ni->mi.mrec->hard_links, -1); + ni->mi.dirty = true; + } + used -= asize; memmove(attr, Add2Ptr(attr, asize), used - aoff); rec->used = cpu_to_le32(used); |