2012-10-05 04:16:38 +04:00
/* Copyright (c) 2012 Coraid, Inc. See COPYING for GPL terms. */
2005-04-17 02:20:36 +04:00
/*
* aoemain . c
* Module initialization routines , discover timer
*/
# include <linux/hdreg.h>
# include <linux/blkdev.h>
# include <linux/module.h>
2008-09-22 09:36:49 +04:00
# include <linux/skbuff.h>
2005-04-17 02:20:36 +04:00
# include "aoe.h"
MODULE_LICENSE ( " GPL " ) ;
MODULE_AUTHOR ( " Sam Hopkins <sah@coraid.com> " ) ;
2006-01-19 21:46:29 +03:00
MODULE_DESCRIPTION ( " AoE block/char driver for 2.6.2 and newer 2.6 kernels " ) ;
2005-04-17 02:20:36 +04:00
MODULE_VERSION ( VERSION ) ;
2017-08-31 00:53:24 +03:00
static struct timer_list timer ;
2005-04-17 02:20:36 +04:00
2017-08-31 00:53:24 +03:00
static void discover_timer ( struct timer_list * t )
2005-04-17 02:20:36 +04:00
{
2017-08-31 00:53:24 +03:00
mod_timer ( t , jiffies + HZ * 60 ) ; /* one minute */
2005-04-17 02:20:36 +04:00
2017-08-31 00:53:24 +03:00
aoecmd_cfg ( 0xffff , 0xff ) ;
2005-04-17 02:20:36 +04:00
}
static void
aoe_exit ( void )
{
2017-08-31 00:53:24 +03:00
del_timer_sync ( & timer ) ;
2005-04-17 02:20:36 +04:00
aoenet_exit ( ) ;
unregister_blkdev ( AOE_MAJOR , DEVICE_NAME ) ;
2012-10-05 04:16:21 +04:00
aoecmd_exit ( ) ;
2005-04-17 02:20:36 +04:00
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 ;
2012-10-05 04:16:21 +04:00
ret = aoecmd_init ( ) ;
if ( ret )
goto cmd_fail ;
2005-04-17 02:20:36 +04:00
ret = register_blkdev ( AOE_MAJOR , DEVICE_NAME ) ;
if ( ret < 0 ) {
2006-09-20 22:36:51 +04:00
printk ( KERN_ERR " aoe: can't register major \n " ) ;
2005-04-17 02:20:36 +04:00
goto blkreg_fail ;
}
2006-09-20 22:36:51 +04:00
printk ( KERN_INFO " aoe: AoE v%s initialised. \n " , VERSION ) ;
2017-08-31 00:53:24 +03:00
timer_setup ( & timer , discover_timer , 0 ) ;
discover_timer ( & timer ) ;
2005-04-17 02:20:36 +04:00
return 0 ;
blkreg_fail :
2012-10-05 04:16:21 +04:00
aoecmd_exit ( ) ;
cmd_fail :
2005-04-17 02:20:36 +04:00
aoenet_exit ( ) ;
net_fail :
aoeblk_exit ( ) ;
blk_fail :
aoechr_exit ( ) ;
chr_fail :
aoedev_exit ( ) ;
2012-12-18 04:03:39 +04:00
2006-09-20 22:36:51 +04:00
printk ( KERN_INFO " aoe: initialisation failure. \n " ) ;
2005-04-17 02:20:36 +04:00
return ret ;
}
module_init ( aoe_init ) ;
module_exit ( aoe_exit ) ;