1*a6e3b99dSJohn Edward Broadbent #include "util.hpp" 2*a6e3b99dSJohn Edward Broadbent 3*a6e3b99dSJohn Edward Broadbent #include <linux/fs.h> 4*a6e3b99dSJohn Edward Broadbent 5*a6e3b99dSJohn Edward Broadbent #include <phosphor-logging/lg2.hpp> 6*a6e3b99dSJohn Edward Broadbent #include <stdplus/fd/create.hpp> 7*a6e3b99dSJohn Edward Broadbent #include <stdplus/fd/managed.hpp> 8*a6e3b99dSJohn Edward Broadbent #include <stdplus/handle/managed.hpp> 9*a6e3b99dSJohn Edward Broadbent #include <xyz/openbmc_project/Common/error.hpp> 10*a6e3b99dSJohn Edward Broadbent 11*a6e3b99dSJohn Edward Broadbent #include <string_view> 12*a6e3b99dSJohn Edward Broadbent 13*a6e3b99dSJohn Edward Broadbent namespace estoraged 14*a6e3b99dSJohn Edward Broadbent { 15*a6e3b99dSJohn Edward Broadbent namespace util 16*a6e3b99dSJohn Edward Broadbent { 17*a6e3b99dSJohn Edward Broadbent using ::sdbusplus::xyz::openbmc_project::Common::Error::InternalFailure; 18*a6e3b99dSJohn Edward Broadbent using ::stdplus::fd::ManagedFd; 19*a6e3b99dSJohn Edward Broadbent 20*a6e3b99dSJohn Edward Broadbent uint64_t Util::findSizeOfBlockDevice(const std::string& devPath) 21*a6e3b99dSJohn Edward Broadbent { 22*a6e3b99dSJohn Edward Broadbent ManagedFd fd; 23*a6e3b99dSJohn Edward Broadbent uint64_t bytes = 0; 24*a6e3b99dSJohn Edward Broadbent try 25*a6e3b99dSJohn Edward Broadbent { 26*a6e3b99dSJohn Edward Broadbent // open block dev 27*a6e3b99dSJohn Edward Broadbent fd = stdplus::fd::open(devPath, stdplus::fd::OpenAccess::ReadOnly); 28*a6e3b99dSJohn Edward Broadbent // get block size 29*a6e3b99dSJohn Edward Broadbent fd.ioctl(BLKGETSIZE64, &bytes); 30*a6e3b99dSJohn Edward Broadbent } 31*a6e3b99dSJohn Edward Broadbent catch (...) 32*a6e3b99dSJohn Edward Broadbent { 33*a6e3b99dSJohn Edward Broadbent lg2::error("erase unable to open blockdev", "REDFISH_MESSAGE_ID", 34*a6e3b99dSJohn Edward Broadbent std::string("OpenBMC.0.1.DriveEraseFailure"), 35*a6e3b99dSJohn Edward Broadbent "REDFISH_MESSAGE_ARGS", std::to_string(fd.get())); 36*a6e3b99dSJohn Edward Broadbent throw InternalFailure(); 37*a6e3b99dSJohn Edward Broadbent } 38*a6e3b99dSJohn Edward Broadbent return bytes; 39*a6e3b99dSJohn Edward Broadbent } 40*a6e3b99dSJohn Edward Broadbent 41*a6e3b99dSJohn Edward Broadbent } // namespace util 42*a6e3b99dSJohn Edward Broadbent 43*a6e3b99dSJohn Edward Broadbent } // namespace estoraged 44