@@ -737,8 +737,8 @@ linux_cdev_pager_populate(vm_object_t vm_obj, vm_pindex_t pidx, int fault_type,
737
737
}
738
738
739
739
struct list_head lcdev_handle_list ;
740
+
740
741
struct lcdev_handle_ref {
741
- volatile int refcnt ;
742
742
void * handle ;
743
743
void * data ;
744
744
struct list_head list ;
@@ -754,23 +754,20 @@ linux_cdev_handle_insert(void *handle, void *data, int size)
754
754
rw_rlock (& linux_global_rw );
755
755
list_for_each (h , & lcdev_handle_list ) {
756
756
r = __containerof (h , struct lcdev_handle_ref , list );
757
- if (r -> handle == handle )
758
- break ;
759
- }
760
- if (r && r -> handle == handle ) {
761
- atomic_add_int (& r -> refcnt , 1 );
762
- rw_runlock (& linux_global_rw );
763
- return ;
757
+ if (r -> handle == handle ) {
758
+ rw_runlock (& linux_global_rw );
759
+ return ;
760
+ }
764
761
}
765
762
rw_runlock (& linux_global_rw );
766
763
r = lkpi_malloc (sizeof (struct lcdev_handle_ref ), M_KMALLOC , M_WAITOK );
767
- r -> refcnt = 1 ;
768
764
r -> handle = handle ;
769
765
datap = lkpi_malloc (size , M_KMALLOC , M_WAITOK );
770
766
memcpy (datap , data , size );
771
767
r -> data = datap ;
772
- INIT_LIST_HEAD (& r -> list );
768
+ INIT_LIST_HEAD (& r -> list ); /* XXX why _HEAD? */
773
769
rw_wlock (& linux_global_rw );
770
+ /* XXX need to re-lookup */
774
771
list_add_tail (& r -> list , & lcdev_handle_list );
775
772
rw_wunlock (& linux_global_rw );
776
773
}
@@ -788,13 +785,10 @@ linux_cdev_handle_remove(void *handle)
788
785
break ;
789
786
}
790
787
MPASS (r && r -> handle == handle );
791
- if (atomic_fetchadd_int (& r -> refcnt , -1 ) == 0 ) {
792
- list_del (& r -> list );
793
- rw_wunlock (& linux_global_rw );
794
- lkpi_free (r -> data , M_KMALLOC );
795
- lkpi_free (r , M_KMALLOC );
796
- } else
797
- rw_wunlock (& linux_global_rw );
788
+ list_del (& r -> list );
789
+ rw_wunlock (& linux_global_rw );
790
+ lkpi_free (r -> data , M_KMALLOC );
791
+ lkpi_free (r , M_KMALLOC );
798
792
}
799
793
800
794
static void *
0 commit comments