@@ -47,7 +47,7 @@ pub struct LoopDevice {
4747 inner : SpinLock < LoopDeviceInner > , //加锁保护LoopDeviceInner
4848 //有主设备次设备号
4949 block_dev_meta : BlockDevMeta ,
50- dev_id : Arc < DeviceId > ,
50+ // dev_id: Arc<DeviceId>,
5151 locked_kobj_state : LockedKObjectState , //对Kobject状态的锁
5252 self_ref : Weak < Self > , //对自身的弱引用
5353 fs : RwLock < Weak < DevFS > > , //文件系统弱引用
@@ -59,7 +59,7 @@ pub struct LoopDeviceInner {
5959 pub file_inode : Option < Arc < dyn IndexNode > > ,
6060 // 文件大小
6161 pub file_size : usize ,
62- // 设备名称
62+ // 设备名称 Major和Minor
6363 pub device_number : DeviceNumber ,
6464 // 数据偏移量
6565 pub offset : usize ,
@@ -73,7 +73,9 @@ pub struct LoopDeviceInner {
7373 pub visible : bool ,
7474 // 使用弱引用避免循环引用
7575 pub self_ref : Weak < LoopDevice > ,
76+ // KObject的公共数据
7677 pub kobject_common : KObjectCommonData ,
78+ // 设备的公共数据
7779 pub device_common : DeviceCommonData ,
7880}
7981impl Debug for LoopDevice {
@@ -86,13 +88,11 @@ impl Debug for LoopDevice {
8688}
8789impl LoopDevice {
8890 fn inner ( & self ) -> SpinLockGuard < LoopDeviceInner > {
91+ // 获取 LoopDeviceInner 的自旋锁
8992 self . inner . lock ( )
9093 }
91- pub fn new_empty_loop_device (
92- devname : DevName ,
93- dev_id : Arc < DeviceId > ,
94- minor : u32 ,
95- ) -> Option < Arc < Self > > {
94+ //注册一个新的空loop设备占位
95+ pub fn new_empty_loop_device ( devname : DevName , minor : u32 ) -> Option < Arc < Self > > {
9696 // 创建一个空的 LoopDevice
9797 let dev = Arc :: new_cyclic ( |self_ref| Self {
9898 inner : SpinLock :: new ( LoopDeviceInner {
@@ -110,7 +110,6 @@ impl LoopDevice {
110110 } ) ,
111111 //只用重复8次,就会有从0-7八个次设备号
112112 block_dev_meta : BlockDevMeta :: new ( devname, Major :: new ( 7 ) ) , // Loop 设备主设备号为 7
113- dev_id,
114113 locked_kobj_state : LockedKObjectState :: default ( ) ,
115114 self_ref : self_ref. clone ( ) ,
116115 fs : RwLock :: new ( Weak :: default ( ) ) ,
@@ -453,17 +452,14 @@ impl BlockDevice for LoopDevice {
453452 Vec :: new ( )
454453 }
455454}
456- //注册8个loop设备
457455use crate :: init:: initcall:: INITCALL_DEVICE ;
458456#[ unified_init( INITCALL_DEVICE ) ]
459457pub fn register_loop_devices ( ) -> Result < ( ) , SystemError > {
460458 for minor in 0 ..8 {
461459 let devname = DevName :: new ( format ! ( "loop{}" , minor) , minor) ;
462460 let dev_id =
463461 DeviceId :: new ( None , Some ( devname. name ( ) . to_string ( ) ) ) . ok_or ( SystemError :: EINVAL ) ?;
464- if let Some ( loop_dev) =
465- LoopDevice :: new_empty_loop_device ( devname. clone ( ) , dev_id, minor as u32 )
466- {
462+ if let Some ( loop_dev) = LoopDevice :: new_empty_loop_device ( devname. clone ( ) , minor as u32 ) {
467463 log:: info!(
468464 "Registering loop device: {}" ,
469465 loop_dev. block_dev_meta. devname
0 commit comments