Since the back links are only used for deleting list nodes it might be beneficial to use singly linked lists or a tree structure. Most likely, a single list implementation will not be appropriate for all uses. I have found it to be of very little use when debugging, and each instance eats up a word of memory. This can add up and be a problem on memory-starved machines. File modification time is stored as a character string.
Profiles show that both operations are called about the same number of times.
Parsing RCS files is very expensive. This becomes very apparent with files with several hundred revisions. CVS parses RCS files in order to determine if work needs to be done, and then RCS parses the files again when it is performing the work. This would be much faster if CVS could do whatever is necessary by itself.