int sem_down(struct proc *p, int sem) { if (sem < 0) { fprintf(stderr, "sem_down: Invalid semaphor (pid %u)\n", p->pid); return 1; } switch (sem_p(sem)) { case -1: fprintf(stderr, "sem_down: error putting semaphor down (pid %u)\n", p->pid); return 1; case 0: return 0; case 1: if (retry_op(p) != 0) { fprintf(stderr, "sem_down: error resetting IC (pid %u)\n", p->pid); return 1; } sched_suspend(p->pid); if (insert_proc(&sem_wq[sem], p) != 0) { fprintf(stderr, "sem_down: error adding self to wait queue (pid %u)\n", p->pid); return 1; } return 0; default: fprintf(stderr, "sem_down: unexpected value returned from p() (pid %u)\n", p->pid); return 1; } }
static int init_libcfs_module(void) { int rc; libcfs_arch_init(); libcfs_init_nidstrings(); cfs_init_rwsem(&cfs_tracefile_sem); cfs_init_mutex(&cfs_trace_thread_sem); cfs_init_rwsem(&ioctl_list_sem); CFS_INIT_LIST_HEAD(&ioctl_list); rc = libcfs_debug_init(5 * 1024 * 1024); if (rc < 0) { printk(CFS_KERN_ERR "LustreError: libcfs_debug_init: %d\n", rc); return (rc); } #if LWT_SUPPORT rc = lwt_init(); if (rc != 0) { CERROR("lwt_init: error %d\n", rc); goto cleanup_debug; } #endif rc = cfs_psdev_register(&libcfs_dev); if (rc) { CERROR("misc_register: error %d\n", rc); goto cleanup_lwt; } rc = cfs_wi_startup(); if (rc) { CERROR("startup workitem: error %d\n", rc); goto cleanup_deregister; } rc = insert_proc(); if (rc) { CERROR("insert_proc: error %d\n", rc); goto cleanup_wi; } CDEBUG (D_OTHER, "portals setup OK\n"); return (0); cleanup_wi: cfs_wi_shutdown(); cleanup_deregister: cfs_psdev_deregister(&libcfs_dev); cleanup_lwt: #if LWT_SUPPORT lwt_fini(); cleanup_debug: #endif libcfs_debug_cleanup(); return rc; }
INT32 AddProc(PROC_ID pid, ProcInfo proc_info) { if(check_AddProc_parm(pid, proc_info)) { printf("check_AddProc_parm fail\n"); return API_RTN_ERROR; } Task_Struct * pTask_Struct_temp = create_task_struct(pid, proc_info); if(insert_proc(pTask_Struct_temp)) { printf("insert_proc fail\n"); return API_RTN_ERROR; } return API_RTN_OK; }
static int init_libcfs_module(void) { int rc; libcfs_arch_init(); libcfs_init_nidstrings(); init_rwsem(&cfs_tracefile_sem); mutex_init(&cfs_trace_thread_mutex); init_rwsem(&ioctl_list_sem); CFS_INIT_LIST_HEAD(&ioctl_list); init_waitqueue_head(&cfs_race_waitq); rc = libcfs_debug_init(5 * 1024 * 1024); if (rc < 0) { printk(KERN_ERR "LustreError: libcfs_debug_init: %d\n", rc); return (rc); } rc = cfs_cpu_init(); if (rc != 0) goto cleanup_debug; #if LWT_SUPPORT rc = lwt_init(); if (rc != 0) { CERROR("lwt_init: error %d\n", rc); goto cleanup_debug; } #endif rc = misc_register(&libcfs_dev); if (rc) { CERROR("misc_register: error %d\n", rc); goto cleanup_lwt; } rc = cfs_wi_startup(); if (rc) { CERROR("initialize workitem: error %d\n", rc); goto cleanup_deregister; } /* max to 4 threads, should be enough for rehash */ rc = min(cfs_cpt_weight(cfs_cpt_table, CFS_CPT_ANY), 4); rc = cfs_wi_sched_create("cfs_rh", cfs_cpt_table, CFS_CPT_ANY, rc, &cfs_sched_rehash); if (rc != 0) { CERROR("Startup workitem scheduler: error: %d\n", rc); goto cleanup_deregister; } rc = cfs_crypto_register(); if (rc) { CERROR("cfs_crypto_regster: error %d\n", rc); goto cleanup_wi; } rc = insert_proc(); if (rc) { CERROR("insert_proc: error %d\n", rc); goto cleanup_crypto; } CDEBUG (D_OTHER, "portals setup OK\n"); return 0; cleanup_crypto: cfs_crypto_unregister(); cleanup_wi: cfs_wi_shutdown(); cleanup_deregister: misc_deregister(&libcfs_dev); cleanup_lwt: #if LWT_SUPPORT lwt_fini(); #endif cleanup_debug: libcfs_debug_cleanup(); return rc; }