From 5356fc247d70e1c034324324b55e8fe3c2a2db14 Mon Sep 17 00:00:00 2001 From: "cantab.net!aia21" Date: Mon, 20 Sep 2004 15:27:55 +0000 Subject: [PATCH] - Only write out dirty attribute list if such is present. - Use TestAndClearDirty and SetDirty on error for concurency fix. (Logical change 1.573) --- libntfs/inode.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/libntfs/inode.c b/libntfs/inode.c index bdb87171..da842c9e 100644 --- a/libntfs/inode.c +++ b/libntfs/inode.c @@ -388,7 +388,8 @@ int ntfs_inode_sync(ntfs_inode *ni) Dprintf("%s(): Entring for inode 0x%llx.\n", __FUNCTION__, ni->mft_no); /* Write out attribute list from cache to disk. */ - if (ni->nr_extents != -1 && NInoAttrListDirty(ni)) { + if (ni->nr_extents != -1 && NInoAttrList(ni) && + NInoAttrListTestAndClearDirty(ni)) { ntfs_attr *na; na = ntfs_attr_open(ni, AT_ATTRIBUTE_LIST, 0, 0); @@ -400,6 +401,7 @@ int ntfs_inode_sync(ntfs_inode *ni) Dprintf("%s(): Attribute list sync failed " "(open failed).\n", __FUNCTION__); } + NInoAttrListSetDirty(ni); } else { if (na->data_size == ni->attr_list_size) { if (ntfs_attr_pwrite(na, 0, ni->attr_list_size, @@ -414,12 +416,13 @@ int ntfs_inode_sync(ntfs_inode *ni) __FUNCTION__); } - } else - NInoAttrListClearDirty(ni); + NInoAttrListSetDirty(ni); + } } else { err = EIO; Dprintf("%s(): Attribute list sync failed " "(invalid size).\n", __FUNCTION__); + NInoAttrListSetDirty(ni); } ntfs_attr_close(na); }