--- mm/swapfile.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) Index: linux-2.6.18-rc6-mm2/mm/swapfile.c =================================================================== --- linux-2.6.18-rc6-mm2.orig/mm/swapfile.c +++ linux-2.6.18-rc6-mm2/mm/swapfile.c @@ -1047,7 +1047,8 @@ add_swap_extent(struct swap_info_struct * This is extremely effective. The average number of iterations in * map_swap_page() has been measured at about 0.3 per page. - akpm. */ -static int setup_swap_extents(struct swap_info_struct *sis, sector_t *span) +static int setup_swap_extents(struct swap_info_struct *sis, sector_t *span, + sector_t *start) { struct inode *inode; unsigned blocks_per_page; @@ -1060,6 +1061,7 @@ static int setup_swap_extents(struct swa int nr_extents = 0; int ret; + *start = 0; inode = sis->swap_file->f_mapping->host; if (S_ISBLK(inode->i_mode)) { ret = add_swap_extent(sis, 0, sis->max, 0); @@ -1114,6 +1116,8 @@ static int setup_swap_extents(struct swa lowest_block = first_block; if (first_block > highest_block) highest_block = first_block; + } else { + *start = first_block; } /* @@ -1407,7 +1411,7 @@ asmlinkage long sys_swapon(const char __ int swap_header_version; unsigned int nr_good_pages = 0; int nr_extents = 0; - sector_t span; + sector_t span, start; unsigned long maxpages = 1; int swapfilesize; unsigned short *swap_map; @@ -1608,7 +1612,7 @@ asmlinkage long sys_swapon(const char __ p->swap_map[0] = SWAP_MAP_BAD; p->max = maxpages; p->pages = nr_good_pages; - nr_extents = setup_swap_extents(p, &span); + nr_extents = setup_swap_extents(p, &span, &start); if (nr_extents < 0) { error = nr_extents; goto bad_swap; @@ -1628,9 +1632,10 @@ asmlinkage long sys_swapon(const char __ total_swap_pages += nr_good_pages; printk(KERN_INFO "Adding %uk swap on %s. " - "Priority:%d extents:%d across:%lluk\n", + "Priority:%d extents:%d across:%lluk offset:%llu\n", nr_good_pages<<(PAGE_SHIFT-10), name, p->prio, - nr_extents, (unsigned long long)span<<(PAGE_SHIFT-10)); + nr_extents, (unsigned long long)span<<(PAGE_SHIFT-10), + (unsigned long long)start); /* insert swap space into swap_list: */ prev = -1;