Linux那些事儿之我是Block层(2)注册一个块设备驱动 – fudan

55 int register_blkdev(unsigned int major, const char *name)

56 {

57 struct blk_major_name **n, *p;

58 int index, ret = 0;

59

60 mutex_lock(&block_subsys_lock);

61

62 /* temporary */

63 if (major == 0) {

64 for (index = ARRAY_SIZE(major_names)-1; index > 0; index–) {

65 if (major_names[index] == NULL)

66 break;

67 }

68

69 if (index == 0) {

70 printk("register_blkdev: failed to get major for %s/n",

71 name);

72 ret = -EBUSY;

73 goto out;

74 }

75 major = index;

76 ret = major;

77 }

78

79 p = kmalloc(sizeof(struct blk_major_name), GFP_KERNEL);

80 if (p == NULL) {

81 ret = -ENOMEM;

82 goto out;

83 }

84

85 p->major = major;

86 strlcpy(p->name, name, sizeof(p->name));

87 p->next = NULL;

88 index = major_to_index(major);

89

90 for (n = &major_names[index]; *n; n = &(*n)->next) {

91 if ((*n)->major == major)

92 break;

93 }

94 if (!*n)

95 *n = p;

96 else

97 ret = -EBUSY;

98

99 if (ret < 0) {

100 printk("register_blkdev: cannot get major %d for %s/n",

101 major, name);

102 kfree(p);

103 }

104 out:

105 mutex_unlock(&block_subsys_lock);

106 return ret;

107 }

人,也总是很难发现自己的错误,

Linux那些事儿之我是Block层(2)注册一个块设备驱动 – fudan

相关文章:

你感兴趣的文章:

标签云: