From 0dddf4537e91162c54775aa3eb7d3881f7b2a001 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Sun, 21 Nov 2010 16:16:43 -0800 Subject: [PATCH] filestore: only warn about disk write cache on kernels <2.6.33 Signed-off-by: Sage Weil --- src/os/FileJournal.cc | 37 +++++++++++++++++++++++++++---------- 1 file changed, 27 insertions(+), 10 deletions(-) diff --git a/src/os/FileJournal.cc b/src/os/FileJournal.cc index c779f0f87817b..377259f4f227d 100644 --- a/src/os/FileJournal.cc +++ b/src/os/FileJournal.cc @@ -171,16 +171,33 @@ void FileJournal::_check_disk_write_cache() const int on; if (sscanf(s, " write-caching = %d", &on) == 1) { if (on) { - dout(0) << "WARNING: disk write cache is ON; journaling will not be reliable" << dendl; - dout(0) << " on kernels prior to 2.6.33 (recent kernels are safe)" << dendl; - dout(0) << " disable with 'hdparm -W 0 " << fn << "'" << dendl; - cout << TEXT_RED - << " ** WARNING: disk write cache is ON on " << fn << ".\n" - << " Journaling will not be reliable on kernels prior to 2.6.33\n" - << " (recent kernels are safe). You can disable the write cache with\n" - << " 'hdparm -W 0 " << fn << "'" - << TEXT_NORMAL - << std::endl; + + // check kenrel version + char buf[40]; + int fd = ::open("/proc/version", O_RDONLY); + ::read(fd, buf, 39); + buf[39] = 0; + ::close(fd); + + int b, c; + int r = sscanf(buf, "Linux version 2.%d.%d", &b, &c); + dout(0) << " kernel version is 2." << b << "." << c << dendl; + if (r == 2 && + b >= 6 && + c >= 33) { + // a-ok + } else { + dout(0) << "WARNING: disk write cache is ON; journaling will not be reliable" << dendl; + dout(0) << " on kernels prior to 2.6.33 (recent kernels are safe)" << dendl; + dout(0) << " disable with 'hdparm -W 0 " << fn << "'" << dendl; + cout << TEXT_RED + << " ** WARNING: disk write cache is ON on " << fn << ".\n" + << " Journaling will not be reliable on kernels prior to 2.6.33\n" + << " (recent kernels are safe). You can disable the write cache with\n" + << " 'hdparm -W 0 " << fn << "'" + << TEXT_NORMAL + << std::endl; + } } else { dout(10) << "_open disk write cache is off (good) on " << fn << dendl; } -- 2.39.5