main.c 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /******************************************************************************
  3. *******************************************************************************
  4. **
  5. ** Copyright (C) Sistina Software, Inc. 1997-2003 All rights reserved.
  6. ** Copyright (C) 2004-2007 Red Hat, Inc. All rights reserved.
  7. **
  8. **
  9. *******************************************************************************
  10. ******************************************************************************/
  11. #include <linux/module.h>
  12. #include "dlm_internal.h"
  13. #include "lockspace.h"
  14. #include "lock.h"
  15. #include "user.h"
  16. #include "memory.h"
  17. #include "config.h"
  18. #include "midcomms.h"
  19. #define CREATE_TRACE_POINTS
  20. #include <trace/events/dlm.h>
  21. struct workqueue_struct *dlm_wq;
  22. static int __init init_dlm(void)
  23. {
  24. int error;
  25. error = dlm_memory_init();
  26. if (error)
  27. goto out;
  28. dlm_midcomms_init();
  29. error = dlm_lockspace_init();
  30. if (error)
  31. goto out_mem;
  32. error = dlm_config_init();
  33. if (error)
  34. goto out_lockspace;
  35. dlm_register_debugfs();
  36. error = dlm_user_init();
  37. if (error)
  38. goto out_debug;
  39. error = dlm_plock_init();
  40. if (error)
  41. goto out_user;
  42. dlm_wq = alloc_workqueue("dlm_wq", WQ_PERCPU, 0);
  43. if (!dlm_wq) {
  44. error = -ENOMEM;
  45. goto out_plock;
  46. }
  47. printk("DLM installed\n");
  48. return 0;
  49. out_plock:
  50. dlm_plock_exit();
  51. out_user:
  52. dlm_user_exit();
  53. out_debug:
  54. dlm_unregister_debugfs();
  55. dlm_config_exit();
  56. out_lockspace:
  57. dlm_lockspace_exit();
  58. out_mem:
  59. dlm_midcomms_exit();
  60. dlm_memory_exit();
  61. out:
  62. return error;
  63. }
  64. static void __exit exit_dlm(void)
  65. {
  66. /* be sure every pending work e.g. freeing is done */
  67. destroy_workqueue(dlm_wq);
  68. dlm_plock_exit();
  69. dlm_user_exit();
  70. dlm_config_exit();
  71. dlm_lockspace_exit();
  72. dlm_midcomms_exit();
  73. dlm_unregister_debugfs();
  74. dlm_memory_exit();
  75. }
  76. module_init(init_dlm);
  77. module_exit(exit_dlm);
  78. MODULE_DESCRIPTION("Distributed Lock Manager");
  79. MODULE_AUTHOR("Red Hat, Inc.");
  80. MODULE_LICENSE("GPL");
  81. EXPORT_SYMBOL_GPL(dlm_new_lockspace);
  82. EXPORT_SYMBOL_GPL(dlm_release_lockspace);
  83. EXPORT_SYMBOL_GPL(dlm_lock);
  84. EXPORT_SYMBOL_GPL(dlm_unlock);