Changes by: flatcap
Update of /cvsroot/linux-ntfs/ntfs-driver-tng/linux/fs/ntfs
In directory usw-pr-cvs1:/tmp/cvs-serv7519/linux/fs/ntfs
Modified Files:
attrib.c
Log Message:
synchronise test program and driver
Index: attrib.c
===================================================================
RCS file: /cvsroot/linux-ntfs/ntfs-driver-tng/linux/fs/ntfs/attrib.c,v
retrieving revision 1.60
retrieving revision 1.61
diff -U2 -r1.60 -r1.61
--- attrib.c 10 Feb 2002 02:34:09 -0000 1.60
+++ attrib.c 11 Feb 2002 05:32:27 -0000 1.61
@@ -66,8 +66,8 @@
run_list *nrl;
- old = PAGE_ALIGN (old * sizeof (run_list));
- new = PAGE_ALIGN (new * sizeof (run_list));
if (old == new)
return orig;
+ old = PAGE_ALIGN (old * sizeof (run_list));
+ new = PAGE_ALIGN (new * sizeof (run_list));
nrl = ntfs_malloc_nofs (new);
@@ -144,4 +144,9 @@
res[loc].length = res[loc+1].vcn - res[loc].vcn;
+ if (!right) {
+ if (res[loc+nsize+1].lcn == LCN_ENOENT)
+ res[loc+nsize+1].vcn = res[loc+nsize].vcn + res[loc+nsize].length;
+ }
+
return res;
}
@@ -184,4 +189,6 @@
}
+ //ntfs_debug("left = %i, disc = %i, hole = %i\n", left, disc, hole);
+
res = ntfs_rl_realloc (orig, osize, osize + nsize - left + disc - hole);
if (IS_ERR (res))
@@ -191,10 +198,12 @@
rl_mc (res, loc + disc - hole, new, left, nsize - left);
- if (res[loc+nsize-left+disc-hole].lcn >= LCN_HOLE) {
+ if (res[loc+nsize-left+disc-hole].lcn == LCN_HOLE) {
+ res[loc+nsize-left+disc-hole].length -= (new[nsize-1].vcn +
+ new[nsize-1].length - new[0].vcn);
+ }
+ if (res[loc+nsize-left+disc-hole].lcn <= LCN_HOLE) {
res[loc+nsize-left+disc-hole].vcn =
res[loc+nsize-left+disc-hole-1].vcn +
res[loc+nsize-left+disc-hole-1].length;
- res[loc+nsize-left+disc-hole].length -= (new[nsize-1].vcn +
- new[nsize-1].length - new[0].vcn);
}
@@ -215,4 +224,10 @@
}
+ if (disc) {
+ if (res[loc+nsize-left+disc].lcn == LCN_ENOENT)
+ res[loc+nsize-left+disc].vcn = res[loc+nsize-left+disc-1].vcn +
+ res[loc+nsize-left+disc-1].length;
+ }
+
return res;
}
@@ -257,4 +272,10 @@
rl_mc (res, loc, new, left, nsize - left);
+ if (!right) {
+ if (res[loc+nsize-left].lcn == LCN_ENOENT)
+ res[loc+nsize-left].vcn = res[loc+nsize-left-1].vcn +
+ res[loc+nsize-left-1].length;
+ }
+
return res;
}
@@ -294,17 +315,4 @@
res[loc+nsize+1].length -= (new[nsize-1].vcn + new[nsize-1].length - new[0].vcn) + res[loc].length;
-#if 0
- #define hole1 (*(res + loc)) // preceding hole
- #define first (*(res + loc + 1)) // first inserted element
- #define last (*(res + nsize)) // last inserted element
- #define hole2 (*(res + nsize + 1)) // following hole
- #define newf (*(new + 0)) // first new element
- #define newl (*(new + nsize - 1)) // last new element
-
- hole1.length = first.vcn - hole1.vcn;
- hole2.vcn = last.vcn + last.length;
- hole2.length -= newl.vcn + newl.length - newf.vcn + hole1.length;
-#endif
-
return res;
}
@@ -443,31 +451,31 @@
BOOL start;
BOOL finish;
- int ds = dend - dstart + 1; /* Number of elements in drl & srl */
+ int ds = dend + 1; /* Number of elements in drl & srl */
int ss = sfinal - sstart + 1;
- // FIXME: This looks dodgy... drl[dins].lcn might well be LCN_ENOENT
- // at end of file. Is just the comment wrong? (AIA)
- start = ((drl[dins].lcn == LCN_RL_NOT_MAPPED) || /* End of file */
+ start = ((drl[dins].lcn < LCN_HOLE) || /* End of file */
(drl[dins].vcn == srl[sstart].vcn)); /* Start of hole */
- finish = ((drl[dins].lcn != LCN_RL_NOT_MAPPED) && /* End of file */
+ finish = ((drl[dins].lcn >= LCN_RL_NOT_MAPPED) && /* End of file */
((drl[dins].vcn + drl[dins].length) <= /* End of hole */
(srl[send-1].vcn + srl[send-1].length)));
+ //ntfs_debug("dstart = %i, dfinal = %i, dend = %i\n", dstart, dfinal, dend);
+ //ntfs_debug("sstart = %i, sfinal = %i, send = %i\n", sstart, sfinal, send);
+ //ntfs_debug("start = %i, finish = %i\n", start, finish);
+ //ntfs_debug("ds = %i, ss = %i, dins = %i\n", ds, ss, dins);
if (start)
if (finish)
- nrl = ntfs_rl_replace (drl, ds, srl, ss, dins);
+ nrl = ntfs_rl_replace (drl, ds, srl + sstart, ss, dins);
else
- nrl = ntfs_rl_insert (drl, ds, srl, ss, dins);
+ nrl = ntfs_rl_insert (drl, ds, srl + sstart, ss, dins);
else
if (finish)
- nrl = ntfs_rl_append (drl, ds, srl, ss, dins);
+ nrl = ntfs_rl_append (drl, ds, srl + sstart, ss, dins);
else
- nrl = ntfs_rl_split (drl, ds, srl, ss, dins);
+ nrl = ntfs_rl_split (drl, ds, srl + sstart, ss, dins);
}
if (likely (!IS_ERR (nrl))) {
/* The merge was completed successfully. */
- if (nrl != drl)
- ntfs_free (drl);
finished:
if (nrl != srl)
|