我需要知道如何编写一个系统调用来阻塞(锁定)和解锁(解锁)存档(inode)或分区(super_block)以实现读写功能。
示例:这些函数在fs.h中
lock_super(struct super_block *);
unlock_super(struct super_block *);
如何获取super_block(例如/ dev / sda1)?
答案 0 :(得分:2)
lock_super和unlock_super调用并不意味着由用户级进程直接控制。当用户进程调用文件系统上的操作(对inode操作)时,它仅用于由VFS层调用。如果您仍希望这样做,则必须编写自己的设备驱动程序并将所需的功能(锁定解锁inode)公开给用户级别。
目前没有允许您锁定,解锁inode的系统调用。在没有适当考虑的情况下,实施新系统调用不明智的原因有很多。但是如果你想这样做,你需要在内核中编写自己系统调用的处理程序。您似乎希望对文件系统进行细粒度控制,也许您正在实现用户级文件系统。
关于如何获取super_block的答案,每个文件系统模块都使用VFS(虚拟文件系统)注册自己。 VFS充当用户和实际文件系统之间的中间层。因此,VFS知道lock_super和unlock_super方法的函数指针。 VFS超级块包含“设备信息”和“指向文件系统超级块的指针集”。你可以从这里得到那些指针并打电话给他们。但请记住,因为实际的文件系统是由VFS管理的,所以你可能会破坏数据。