Skip to content

Commit 032e7d3

Browse files
author
Gioh Kim
committed
Updates md-moduleioctl-setarrayinfo.md
Auto commit by GitBook Editor
1 parent 8a85f2c commit 032e7d3

File tree

2 files changed

+92
-1
lines changed

2 files changed

+92
-1
lines changed

md-moduleioctl-getarrayinfo.md

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
2+
3+
```
4+
Breakpoint 3, md_ioctl (bdev=0xffff880006174000, mode=393375, cmd=2152204561, arg=140731375340208)
5+
at drivers/md/md.c:6691
6+
6691 {
7+
(gdb) p/x cmd
8+
$19 = 0x80480911
9+
......
10+
(gdb) n
11+
6697 if (!md_ioctl_valid(cmd))
12+
(gdb) n
13+
6732 mddev = bdev->bd_disk->private_data;
14+
(gdb) n
15+
(gdb) p mddev->gendisk->disk_name
16+
$26 = "md0", '\000' <repeats 28 times>
17+
18+
```

md-moduleioctl-setarrayinfo.md

+74-1
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,77 @@ static int md_ioctl(struct block_device *bdev, fmode_t mode,
1919
......
2020
mddev = bdev->bd_disk->private_data;
2121
22-
```
22+
```
23+
24+
25+
```
26+
if (cmd == SET_ARRAY_INFO) {
27+
mdu_array_info_t info;
28+
if (!arg)
29+
memset(&info, 0, sizeof(info));
30+
else if (copy_from_user(&info, argp, sizeof(info))) {
31+
err = -EFAULT;
32+
goto unlock;
33+
}
34+
```
35+
36+
37+
```
38+
(gdb) p info
39+
$36 = {major_version = 1, minor_version = 2, patch_version = 0, ctime = 0, level = 0, size = 0,
40+
nr_disks = 0, raid_disks = 0, md_minor = 0, not_persistent = 0, utime = 0, state = 0,
41+
active_disks = 0, working_disks = 0, failed_disks = 0, spare_disks = 0, layout = 0,
42+
chunk_size = 0}
43+
```
44+
45+
46+
47+
```
48+
if (mddev->pers) {
49+
err = update_array_info(mddev, &info);
50+
if (err) {
51+
printk(KERN_WARNING "md: couldn't update"
52+
" array info. %d\n", err);
53+
goto unlock;
54+
}
55+
goto unlock;
56+
}
57+
if (!list_empty(&mddev->disks)) {
58+
printk(KERN_WARNING
59+
"md: array %s already has disks!\n",
60+
mdname(mddev));
61+
err = -EBUSY;
62+
goto unlock;
63+
}
64+
if (mddev->raid_disks) {
65+
printk(KERN_WARNING
66+
"md: array %s already initialised!\n",
67+
mdname(mddev));
68+
err = -EBUSY;
69+
goto unlock;
70+
}
71+
```
72+
73+
아직 생성이 안된 md 디스크이기때문에 mddev 객체에는 아무 정보도 없습니다.
74+
```
75+
(gdb) p mddev->pers
76+
$39 = (struct md_personality *) 0x0 <irq_stack_union>
77+
(gdb) p mddev->raid_disks
78+
$37 = 0
79+
(gdb) p mddev->disks
80+
$38 = {next = 0xffff880006832818, prev = 0xffff880006832818}
81+
```
82+
83+
84+
```
85+
err = set_array_info(mddev, &info);
86+
if (err) {
87+
printk(KERN_WARNING "md: couldn't set"
88+
" array info. %d\n", err);
89+
goto unlock;
90+
}
91+
goto unlock;
92+
}
93+
```
94+
95+

0 commit comments

Comments
 (0)