Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/drivers/block/aoe/aoemain.c
26282 views
1
/* Copyright (c) 2012 Coraid, Inc. See COPYING for GPL terms. */
2
/*
3
* aoemain.c
4
* Module initialization routines, discover timer
5
*/
6
7
#include <linux/hdreg.h>
8
#include <linux/blkdev.h>
9
#include <linux/module.h>
10
#include <linux/skbuff.h>
11
#include "aoe.h"
12
13
MODULE_LICENSE("GPL");
14
MODULE_AUTHOR("Sam Hopkins <[email protected]>");
15
MODULE_DESCRIPTION("AoE block/char driver for 2.6.2 and newer 2.6 kernels");
16
MODULE_VERSION(VERSION);
17
18
static struct timer_list timer;
19
struct workqueue_struct *aoe_wq;
20
21
static void discover_timer(struct timer_list *t)
22
{
23
mod_timer(t, jiffies + HZ * 60); /* one minute */
24
25
aoecmd_cfg(0xffff, 0xff);
26
}
27
28
static void __exit
29
aoe_exit(void)
30
{
31
timer_delete_sync(&timer);
32
33
aoenet_exit();
34
unregister_blkdev(AOE_MAJOR, DEVICE_NAME);
35
aoecmd_exit();
36
aoechr_exit();
37
aoedev_exit();
38
aoeblk_exit(); /* free cache after de-allocating bufs */
39
destroy_workqueue(aoe_wq);
40
}
41
42
static int __init
43
aoe_init(void)
44
{
45
int ret;
46
47
aoe_wq = alloc_workqueue("aoe_wq", 0, 0);
48
if (!aoe_wq)
49
return -ENOMEM;
50
51
ret = aoedev_init();
52
if (ret)
53
goto dev_fail;
54
ret = aoechr_init();
55
if (ret)
56
goto chr_fail;
57
ret = aoeblk_init();
58
if (ret)
59
goto blk_fail;
60
ret = aoenet_init();
61
if (ret)
62
goto net_fail;
63
ret = aoecmd_init();
64
if (ret)
65
goto cmd_fail;
66
ret = register_blkdev(AOE_MAJOR, DEVICE_NAME);
67
if (ret < 0) {
68
printk(KERN_ERR "aoe: can't register major\n");
69
goto blkreg_fail;
70
}
71
printk(KERN_INFO "aoe: AoE v%s initialised.\n", VERSION);
72
73
timer_setup(&timer, discover_timer, 0);
74
discover_timer(&timer);
75
return 0;
76
blkreg_fail:
77
aoecmd_exit();
78
cmd_fail:
79
aoenet_exit();
80
net_fail:
81
aoeblk_exit();
82
blk_fail:
83
aoechr_exit();
84
chr_fail:
85
aoedev_exit();
86
dev_fail:
87
destroy_workqueue(aoe_wq);
88
89
printk(KERN_INFO "aoe: initialisation failure.\n");
90
return ret;
91
}
92
93
module_init(aoe_init);
94
module_exit(aoe_exit);
95
96
97