ubd_set_bit(sector + i, bitmap); } 
if(!update_bitmap) return;  *cow_offset = sector / (sizeof(unsigned long) * 8);  /* This takes care of the case where we're exactly at the end of the * device, and *cow_offset + 1 is off the end.  So, just back it up * by one word.  Thanks to Lynn Kerby for the fix and James McMechan * for the original diagnosis. */ if(*cow_offset == ((bitmap_len + sizeof(unsigned long) - 1) / sizeof(unsigned long) - 1)) (*cow_offset)--;  bitmap_words[0] = bitmap[*cow_offset]; bitmap_words[1] = bitmap[*cow_offset + 1];  *cow_offset *= sizeof(unsigned long); *cow_offset += bitmap_offset; 
static void cowify_bitmap(struct io_thread_req *req, unsigned long *bitmap){        __u64 sector = req->offset / req->sectorsize;        int i;        for(i = 0; i < req->length / req->sectorsize; i++){                if(ubd_test_bit(sector + i, bitmap))                        continue;                if(req->bitmap_start == -1)                        req->bitmap_start = sector + i;                req->bitmap_end = sector + i + 1;                ubd_set_bit(sector + i, bitmap);        }}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/91acb21f084aa244f26839406ae7ed8aa3668058/ubd_kern.c/buggy/arch/um/drivers/ubd_kern.c