OPTION(filestore_debug_verify_split, OPT_BOOL, false)
OPTION(journal_dio, OPT_BOOL, true)
OPTION(journal_aio, OPT_BOOL, true)
+OPTION(journal_force_aio, OPT_BOOL, false)
// max bytes to search ahead in journal searching for corruption
OPTION(journal_max_corrupt_search, OPT_U64, 10<<20)
goto out_fd;
}
- if (S_ISBLK(st.st_mode))
+ if (S_ISBLK(st.st_mode)) {
ret = _open_block_device();
- else
+ } else {
+ if (aio && !force_aio) {
+ derr << "FileJournal::_open: disabling aio for non-block journal. Use "
+ << "journal_force_aio to force use of aio anyway" << dendl;
+ aio = false;
+ }
ret = _open_file(st.st_size, st.st_blksize, create);
+ }
if (ret)
goto out_fd;
off64_t max_size;
size_t block_size;
bool is_bdev;
- bool directio, aio;
+ bool directio, aio, force_aio;
bool must_write_header;
off64_t write_pos; // byte where the next entry to be written will go
off64_t read_pos; //
}
public:
- FileJournal(uuid_d fsid, Finisher *fin, Cond *sync_cond, const char *f, bool dio=false, bool ai=true) :
+ FileJournal(uuid_d fsid, Finisher *fin, Cond *sync_cond, const char *f, bool dio=false, bool ai=true, bool faio=false) :
Journal(fsid, fin, sync_cond),
finisher_lock("FileJournal::finisher_lock", false, true, false, g_ceph_context),
journaled_seq(0),
fn(f),
zero_buf(NULL),
max_size(0), block_size(0),
- is_bdev(false), directio(dio), aio(ai),
+ is_bdev(false), directio(dio), aio(ai), force_aio(faio),
must_write_header(false),
write_pos(0), read_pos(0),
#ifdef HAVE_LIBAIO
do_update(do_update),
m_journal_dio(g_conf->journal_dio),
m_journal_aio(g_conf->journal_aio),
+ m_journal_force_aio(g_conf->journal_force_aio),
m_osd_rollback_to_cluster_snap(g_conf->osd_rollback_to_cluster_snap),
m_osd_use_stale_snap(g_conf->osd_use_stale_snap),
m_filestore_queue_max_ops(g_conf->filestore_queue_max_ops),
if (journalpath.length()) {
dout(10) << "open_journal at " << journalpath << dendl;
journal = new FileJournal(fsid, &finisher, &sync_cond, journalpath.c_str(),
- m_journal_dio, m_journal_aio);
+ m_journal_dio, m_journal_aio, m_journal_force_aio);
if (journal)
journal->logger = logger;
}
bool m_filestore_fail_eio;
bool m_filestore_replica_fadvise;
int do_update;
- bool m_journal_dio, m_journal_aio;
+ bool m_journal_dio, m_journal_aio, m_journal_force_aio;
std::string m_osd_rollback_to_cluster_snap;
bool m_osd_use_stale_snap;
int m_filestore_queue_max_ops;