aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ntfs/runlist.c
diff options
context:
space:
mode:
authorAnton Altaparmakov <aia21@cantab.net>2005-09-08 15:23:06 -0400
committerAnton Altaparmakov <aia21@cantab.net>2005-09-08 15:23:06 -0400
commit3ffc5a443824fcf426d8d35dc632acc4dd9fb6d1 (patch)
tree7d8108fed6ed170766ffc0bd95945c69498e740a /fs/ntfs/runlist.c
parentf94ad38e68e1623660fdbb063d0c580ba6661c29 (diff)
NTFS: Change ntfs_rl_truncate_nolock() to throw away the runlist if the new
length is zero. Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
Diffstat (limited to 'fs/ntfs/runlist.c')
-rw-r--r--fs/ntfs/runlist.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/fs/ntfs/runlist.c b/fs/ntfs/runlist.c
index e4c4716939de..539fa2b7f361 100644
--- a/fs/ntfs/runlist.c
+++ b/fs/ntfs/runlist.c
@@ -1455,6 +1455,7 @@ err_out:
1455 1455
1456/** 1456/**
1457 * ntfs_rl_truncate_nolock - truncate a runlist starting at a specified vcn 1457 * ntfs_rl_truncate_nolock - truncate a runlist starting at a specified vcn
1458 * @vol: ntfs volume (needed for error output)
1458 * @runlist: runlist to truncate 1459 * @runlist: runlist to truncate
1459 * @new_length: the new length of the runlist in VCNs 1460 * @new_length: the new length of the runlist in VCNs
1460 * 1461 *
@@ -1462,12 +1463,16 @@ err_out:
1462 * holding the runlist elements to a length of @new_length VCNs. 1463 * holding the runlist elements to a length of @new_length VCNs.
1463 * 1464 *
1464 * If @new_length lies within the runlist, the runlist elements with VCNs of 1465 * If @new_length lies within the runlist, the runlist elements with VCNs of
1465 * @new_length and above are discarded. 1466 * @new_length and above are discarded. As a special case if @new_length is
1467 * zero, the runlist is discarded and set to NULL.
1466 * 1468 *
1467 * If @new_length lies beyond the runlist, a sparse runlist element is added to 1469 * If @new_length lies beyond the runlist, a sparse runlist element is added to
1468 * the end of the runlist @runlist or if the last runlist element is a sparse 1470 * the end of the runlist @runlist or if the last runlist element is a sparse
1469 * one already, this is extended. 1471 * one already, this is extended.
1470 * 1472 *
1473 * Note, no checking is done for unmapped runlist elements. It is assumed that
1474 * the caller has mapped any elements that need to be mapped already.
1475 *
1471 * Return 0 on success and -errno on error. 1476 * Return 0 on success and -errno on error.
1472 * 1477 *
1473 * Locking: The caller must hold @runlist->lock for writing. 1478 * Locking: The caller must hold @runlist->lock for writing.
@@ -1482,6 +1487,13 @@ int ntfs_rl_truncate_nolock(const ntfs_volume *vol, runlist *const runlist,
1482 BUG_ON(!runlist); 1487 BUG_ON(!runlist);
1483 BUG_ON(new_length < 0); 1488 BUG_ON(new_length < 0);
1484 rl = runlist->rl; 1489 rl = runlist->rl;
1490 if (!new_length) {
1491 ntfs_debug("Freeing runlist.");
1492 runlist->rl = NULL;
1493 if (rl)
1494 ntfs_free(rl);
1495 return 0;
1496 }
1485 if (unlikely(!rl)) { 1497 if (unlikely(!rl)) {
1486 /* 1498 /*
1487 * Create a runlist consisting of a sparse runlist element of 1499 * Create a runlist consisting of a sparse runlist element of