为什么Linux内核驱动sr.c sr_block_ioctl要做mutex_lock?

为什么Linux内核驱动sr.c sr_block_ioctl要做mutex_lock?

我的电脑有两个光盘驱动器 (ODD)。我同时将文件(3.8 G)刻录到两个 ODD 上。

  • 在 CentOS 6.9 Linux Kernel 2.6.32 上,大约需要 10 分钟
  • 在 CentOS 7.2 Linux Kernel 3.10.0 上,大约需要 16 分钟

我查看了系统日志,发现同一时间只能运行一个命令。这意味着同时向 ODD1 和 ODD2 发送 ATAPI 命令。它们不是并行执行的。

我检查了 Linux 内核驱动程序sr.c sr_block_ioctl()

他们mutex_lock在 Linux 内核 2.6.36 中添加了此功能。

我发现这使得 ATAPI 命令不能并行执行。我添加了调试日志来转储&sr_mutex,我发现两个 ODD 使用相同的互斥锁密钥...sr_mutex是 (static DEFINE_MUTEX(sr_mutex);) 中的全局变量。sr.c另一方面,我发现在 Linux 中sd.c没有使用锁ioctl内核最新版本...

问题:

  1. 为什么两个ODD驱动程序使用相同的全局变量?

  2. 为什么要添加到mutex_lock这里呢? ODD可能需要2~3秒才能完成一个命令。

答案1

我有同样的问题。

我找到了这个补丁:[PATCH] [SCSI] sr:通过使用每设备互斥体修复多驱动器性能

应用这个补丁,也许问题就会被解决。

相关内容