#endif
}
+ // static zeroed buffer for alignment padding
+ zero_buf = new char[header.alignment];
+ memset(zero_buf, 0, header.alignment);
+
dout(2) << "_open " << fn << " fd " << fd
<< ": " << max_size << " bytes, block size " << block_size << dendl;
// pad...
if (queue_pos % header.alignment) {
int pad = header.alignment - (queue_pos % header.alignment);
- bufferptr bp(pad);
- bp.zero();
+ bufferptr bp = buffer::create_static(pad, zero_buf);
bl.push_back(bp);
queue_pos += pad;
//dout(20) << " padding with " << pad << " bytes, queue_pos now " << queue_pos << dendl;
private:
string fn;
+ char *zero_buf;
+
off64_t max_size;
size_t block_size;
bool directio;
public:
FileJournal(__u64 fsid, Finisher *fin, Cond *sync_cond, const char *f, bool dio=false) :
Journal(fsid, fin, sync_cond), fn(f),
+ zero_buf(NULL),
max_size(0), block_size(0),
directio(dio),
writing(false), must_write_header(false),
fd(-1),
write_lock("FileJournal::write_lock"),
write_stop(false), write_thread(this) { }
- ~FileJournal() {}
+ ~FileJournal() {
+ delete zero_buf;
+ }
int create();
int open(__u64 last_seq);