NTFS: Fix a nasty runlist merge bug when merging two holes.
authorAnton Altaparmakov <aia21@cantab.net>
Fri, 18 Feb 2005 10:03:13 +0000 (10:03 +0000)
committerAnton Altaparmakov <aia21@cantab.net>
Thu, 5 May 2005 10:03:01 +0000 (11:03 +0100)
Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
fs/ntfs/ChangeLog
fs/ntfs/runlist.c

index 0ef1cd3..53bb6c1 100644 (file)
@@ -72,9 +72,10 @@ ToDo/Notes:
          runlist.  This allows us to find runlist elements with the runlist
          lock already held without having to drop and reacquire it around the
          call.  Adapt all callers.
-       - Change time to u64 time.h::ntfs2utc() as it otherwise generates a
+       - Change time to u64 in time.h::ntfs2utc() as it otherwise generates a
          warning in the do_div() call on sparc32.  Thanks to Meelis Roos for
          the report and analysis of the warning.
+       - Fix a nasty runlist merge bug when merging two holes.
 
 2.1.22 - Many bug and race fixes and error handling improvements.
 
index 5244687..1b344dd 100644 (file)
@@ -113,8 +113,11 @@ static inline BOOL ntfs_are_rl_mergeable(runlist_element *dst,
        BUG_ON(!dst);
        BUG_ON(!src);
 
-       if ((dst->lcn < 0) || (src->lcn < 0))     /* Are we merging holes? */
+       if ((dst->lcn < 0) || (src->lcn < 0)) {   /* Are we merging holes? */
+               if (dst->lcn == LCN_HOLE && src->lcn == LCN_HOLE)
+                       return TRUE;
                return FALSE;
+       }
        if ((dst->lcn + dst->length) != src->lcn) /* Are the runs contiguous? */
                return FALSE;
        if ((dst->vcn + dst->length) != src->vcn) /* Are the runs misaligned? */