아무것도 몰라요

DeNOVA Test

8. Dedup Queue insert (dedup-queue 2부)

telomere37 2021. 7. 21. 14:10

1. dedup-queue 자료구조 변경

// fs/nova/dedup.h

/* nova_dedup_queue
   queue of entries that needs to be deduplicated
   */
struct nova_dedup_queue{
  u64 write_entry_address;
  struct list_head list;
};

2. write path를 따라가서 write-entry의 pmem주소 찾기

Write entry 기록 과정

// fs/nova/log.c

  /* DEDUP NOVA KHJ */
  if(type == FILE_WRITE){
    nova_dedup_queue_push(curr_p);
  }
  /*****************/

해당 함수에는 다른 entry도 들어오기 때문에 Write entry인지 확인을 해준다. 

(현재 queue init은 write path안에서 해주고 있다.)

 

3. push한 주소 꺼내서 읽어보기

// fs/nova/dedup.c

// Get next Dedup queue entry
u64 nova_dedup_queue_get_next_entry(void){
  struct nova_dedup_queue *ptr;
  
  if(nova_dedup_queue_head.list.next){
    ptr = list_entry(nova_dedup_queue_head.list.next, struct nova_dedup_queue, list);
    printk("checking~ %llu\n",ptr->write_entry_address);
    return 1;
  }
  else{
    return 0;
  }
}

4. 결과

빨간줄 아래로 dedup syscall

마지막으로 저장된 주소와 pop했을 때의 주소가 같다. 성공!