Index: vm_map.c =================================================================== --- vm_map.c +++ vm_map.c @@ -2189,15 +2189,19 @@ ("_vm_map_clip_start: invalid clip of entry %p", entry)); /* - * Split off the front portion -- note that we must insert the new - * entry BEFORE this one, so that this entry has the specified - * starting address. + * Create a new entry. Create a backing object now, if none exists, so + * that more individual objects won't be created after the map entry is + * split. */ vm_map_simplify_entry(map, entry); vm_map_entry_charge_object(map, entry); new_entry = vm_map_entry_create(map); *new_entry = *entry; + /* + * Split off the front portion. Insert the new entry BEFORE this one, + * so that this entry has the specified starting address. + */ new_entry->end = start; entry->offset += (start - entry->start); entry->start = start; @@ -2245,14 +2249,18 @@ KASSERT(entry->start < end && entry->end > end, ("_vm_map_clip_end: invalid clip of entry %p", entry)); - /* - * Create a new entry and insert it AFTER the specified entry + * Create a new entry. Create a backing object now, if none exists, so + * that more individual objects won't be created after the map entry is + * split. */ vm_map_entry_charge_object(map, entry); new_entry = vm_map_entry_create(map); *new_entry = *entry; + /* + * Insert new entry AFTER the specified entry. + */ new_entry->start = entry->end = end; new_entry->offset += (end - entry->start); if (new_entry->cred != NULL)