mirror of
https://github.com/matrix-construct/construct
synced 2024-11-17 15:30:52 +01:00
ircd::fs: Add support test for fallocate().
This commit is contained in:
parent
47d6fbb35f
commit
24e423c714
2 changed files with 37 additions and 0 deletions
|
@ -20,4 +20,7 @@ namespace ircd::fs::support
|
||||||
|
|
||||||
// Test if O_DIRECT supported at target path
|
// Test if O_DIRECT supported at target path
|
||||||
bool direct_io(const string_view &path);
|
bool direct_io(const string_view &path);
|
||||||
|
|
||||||
|
// Test if fallocate() is supported at target path
|
||||||
|
bool fallocate(const string_view &path, const write_opts &wopts = write_opts_default);
|
||||||
}
|
}
|
||||||
|
|
34
ircd/fs.cc
34
ircd/fs.cc
|
@ -313,6 +313,40 @@ ircd::fs::path(std::string s)
|
||||||
// fs/support.h
|
// fs/support.h
|
||||||
//
|
//
|
||||||
|
|
||||||
|
bool
|
||||||
|
ircd::fs::support::fallocate(const string_view &path,
|
||||||
|
const write_opts &wopts)
|
||||||
|
try
|
||||||
|
{
|
||||||
|
const fd::opts opts
|
||||||
|
{
|
||||||
|
std::ios::out
|
||||||
|
};
|
||||||
|
|
||||||
|
fs::fd fd
|
||||||
|
{
|
||||||
|
path, opts
|
||||||
|
};
|
||||||
|
|
||||||
|
fs::allocate(fd, info::page_size, wopts);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch(const std::system_error &e)
|
||||||
|
{
|
||||||
|
const auto &ec(e.code());
|
||||||
|
if(system_category(ec)) switch(ec.value())
|
||||||
|
{
|
||||||
|
case int(std::errc::invalid_argument):
|
||||||
|
case int(std::errc::operation_not_supported):
|
||||||
|
return false;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
ircd::fs::support::direct_io(const string_view &path)
|
ircd::fs::support::direct_io(const string_view &path)
|
||||||
try
|
try
|
||||||
|
|
Loading…
Reference in a new issue