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