.\" This manpage has been automatically generated by docbook2man
.\" from a DocBook document. This tool can be found at:
.\"
.\" Please send any bug reports, improvements, comments, patches,
.\" etc. to Steve Cheng .
.TH "NTFS_MERGE_RUN_LISTS" "" "06 October 2005" "" ""
.SH NAME
ntfs_merge_run_lists \- merge two run_lists into one
.SH SYNOPSIS
"SYNOPSIS"
.sp
\fB
.sp
run_list_element * ntfs_merge_run_lists (run_list_element * \fIdrl\fB, run_list_element * \fIsrl\fB);
\fR
.SH "ARGUMENTS"
.TP
\fB\fIdrl\fB\fR
original run list to be worked on
.TP
\fB\fIsrl\fB\fR
new run list to be merged into \fIdrl\fR
.SH "DESCRIPTION"
.PP
First we sanity check the two run lists \fIsrl\fR and \fIdrl\fR to make sure that they
are sensible and can be merged. The run list \fIsrl\fR must be either after the
run list \fIdrl\fR or completely within a hole (or unmapped region) in \fIdrl\fR\&.
.PP
It is up to the caller to serialize access to the run lists \fIdrl\fR and \fIsrl\fR\&.
.SH "MERGING OF RUN LISTS IS NECESSARY IN TWO CASES"
.PP
1. When attribute lists are used and a further extent is being mapped.
2. When new clusters are allocated to fill a hole or extend a file.
.PP
There are four possible ways \fIsrl\fR can be merged. It can:
- be inserted at the beginning of a hole,
- split the hole in two and be inserted between the two fragments,
- be appended at the end of a hole, or it can
- replace the whole hole.
It can also be appended to the end of the run list, which is just a variant
of the insert case.
.PP
On success, return a pointer to the new, combined, run list. Note, both
run lists \fIdrl\fR and \fIsrl\fR are deallocated before returning so you cannot use
the pointers for anything any more. (Strictly speaking the returned run list
may be the same as \fIdst\fR but this is irrelevant.)
.PP
On error, return -errno. Both run lists are left unmodified. The following
.SH "ERROR CODES ARE DEFINED"
.PP
-ENOMEM - Not enough memory to allocate run list array.
-EINVAL - Invalid parameters were passed in.
-ERANGE - The run lists overlap and cannot be merged.