--- nono/vm/scsidev.cpp 2026/04/29 17:05:51 1.1.1.22 +++ nono/vm/scsidev.cpp 2026/04/29 17:06:01 1.1.1.23 @@ -62,7 +62,7 @@ SCSIHostDevice::SCSIHostDevice(SCSIDomai // イニシエータの ID は実行時にコントローラによって決まる。 devtype = SCSI::DevType::Initiator; - SetName(string_format("(SCSIHost.%s)", domain_->GetConfigName())); + SetName(string_format("(SCSIHost.%s)", domain_->GetDomainName())); SetLogLevel(parent->loglevel); } @@ -568,17 +568,26 @@ SCSIDisk::SCSIDisk(SCSIDomain *domain_, devtype = devtype_; const char *devtypename = SCSI::GetDevTypeName(devtype); + const char *domainname = domain->GetDomainName(); + // ドライブ自身のログ表示名は "HD(SPC0-6)" のような形式にする。 + // ログ指定はそれに合わせて "spc0-6" のような完全形と + // "hd6" のような短縮形を用意してみる。 + // SCSI コントローラ2台目ではこの短縮形だけなくす? + // // コンストラクタの初期化子では devtypename を組み込みにくいので、 // コンストラクタ本文でログ名などを設定する。その時の作法に // 従っているのですこし面倒な手法が必要。 // lib/object.h 参照。 - SetName(string_format("SCSI%s%u", devtypename, id)); + std::string name = string_format("%s-%u", domainname, id); + SetName(string_format("%s(%s)", devtypename, name.c_str())); ClearAlias(); - AddAlias(string_format("SCSI%s%u", devtypename, id)); - AddAlias(string_format("SCSI%u", id)); + AddAlias(name); AddAlias(string_format("%s%u", devtypename, id)); + // image はコンストラクタがないので、このあたりで代入する。 + image.SetName(name); + switch (devtype) { case SCSI::DevType::HD: removable_device = false; @@ -643,7 +652,7 @@ SCSIDisk::Init() // オープン前に writeignore をチェック。 // この後パス名を処理するとすぐに UI に通知を出すため、それより前で // 行わないといけない。うーん。 - write_ignore = gConfig->Find(wikey).AsInt(); + write_ignore = gConfig->Find(wikey).AsBool(); // writeignore が決まったので状態を初期化。 Clear(); @@ -652,11 +661,12 @@ SCSIDisk::Init() if (filename.empty() == false) { std::string path = gMainApp.NormalizePath(filename); if (LoadDisk(path) == false) { + itemimg.Err("Could not open %s", path.c_str()); return false; } } - // 平均シークタイム。設定は [msec]、変数は [nsec]。 + // 平均シークタイム。設定は [msec]、変数は [tsec]。 // virtio-scsi にはない。 if (strncmp(stkey.c_str(), "virtio", 6) != 0) { seektime = gConfig->Find(stkey).AsInt(); @@ -696,7 +706,6 @@ SCSIDisk::LoadDisk(const std::string& pa { bool unloaded; off_t size; - int w_ok; bool read_only; // すでにあればクローズ (ここでは通知は行わない) @@ -708,11 +717,6 @@ SCSIDisk::LoadDisk(const std::string& pa goto done; } - w_ok = image.IsWriteable(); - if (w_ok < 0) { - goto done; - } - // 書き込みモードをここで確定。 // // デバイス特性 イメージ write_ignore write_mode @@ -731,7 +735,10 @@ SCSIDisk::LoadDisk(const std::string& pa if (write_ignore) { write_mode = RW::WriteIgnore; } else { - if (w_ok) { + int w_ok = image.IsWriteable(); + if (w_ok < 0) { + goto done; + } else if (w_ok) { write_mode = RW::Writeable; } else { write_mode = RW::WriteProtect;