]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
Merge branch 'unstable' into filestore
authorSage Weil <sage@newdream.net>
Tue, 2 Feb 2010 19:05:46 +0000 (11:05 -0800)
committerSage Weil <sage@newdream.net>
Tue, 2 Feb 2010 19:05:46 +0000 (11:05 -0800)
Conflicts:

src/os/FileJournal.cc

1  2 
src/config.cc
src/config.h
src/os/FileJournal.cc
src/os/FileJournal.h
src/osd/OSD.cc
src/osd/ReplicatedPG.cc

diff --cc src/config.cc
Simple merge
diff --cc src/config.h
Simple merge
index e3eea0a75c2871253e20cb354d26cb6f56e92328,fa48a41ae45107f58d0702375f8876ee114ce448..b75de1930be7315dac87faf605ae20fab2405fe1
@@@ -289,58 -320,26 +320,35 @@@ bool FileJournal::check_for_full(__u64 
    if (full_commit_seq || full_restart_seq)
      return false;
  
 + retry:
+   off64_t room = (header.max_size - pos) + (header.start - get_top());
    if (do_sync_cond) {
-     __s64 approxroom = header.wrap ?
-       header.wrap + *pos - header.start :
-       header.max_size + header.start - *pos;
-     if (approxroom < (header.max_size >> 1) &&
-       approxroom + size > (header.max_size >> 1))
+     if (room < (header.max_size >> 1) &&
+       room + size > (header.max_size >> 1))
        do_sync_cond->Signal();  // initiate a real commit so we can trim
    }
  
-   // does it fit?
-   if (header.wrap) {
-     // we're wrapped.  don't overwrite ourselves.
-     if (*pos + size < header.start)
-       return true; // fits
-     dout(1) << "JOURNAL FULL (and wrapped), " << *pos << "+" << size
-            << " >= " << header.start
-            << dendl;
-   } else {
-     // we haven't wrapped.  
-     if (*pos + size < header.max_size)
-       return true; // fits
+   if (room >= size) {
+     dout(10) << "check_for_full at " << pos << " : " << size << " < " << room << dendl;
 +
-     if (!can_wrap)
-       return false;  // can't wrap just now..
++    // wait?
++    if (wait_on_full) {
++      dout(1) << "check_for_full waiting for a commit" << dendl;
++      commit_cond.Wait(write_lock);
++      goto retry;
++    }  
 +
-     // is there room if we wrap?
-     if (get_top() + size < header.start) {
-       // yes!
-       dout(10) << " wrapping from " << *pos << " to " << get_top() << dendl;
-       header.wrap = *pos;
-       *pos = get_top();
+     if (pos + size > header.max_size)
        must_write_header = true;
-       return true;
-     }
-     // no room.
-     dout(1) << "submit_entry JOURNAL FULL (and can't wrap), " << *pos << "+" << size
-            << " >= " << header.max_size
-            << dendl;
+     return true;
    }
  
-   // wait?
-   if (wait_on_full) {
-     dout(1) << "submit_entry waiting for a commit" << dendl;
-     commit_cond.Wait(write_lock);
-     goto retry;
-   }  
+   // full
+   dout(1) << "check_for_full at " << pos << " : JOURNAL FULL "
+         << pos << " >= " << room
+         << " (max_size " << header.max_size << " start " << header.start << ")"
+         << dendl;
    full_commit_seq = seq;
    full_restart_seq = seq+1;
    while (!writeq.empty()) {
@@@ -589,13 -576,10 +599,10 @@@ void FileJournal::write_thread_entry(
      }
      
      bufferlist bl;
-     if (directio)
-       prepare_single_dio_write(bl);
-     else
-       prepare_multi_write(bl);
+     prepare_multi_write(bl);
      do_write(bl);
    }
 -
 +  write_empty_cond.Signal();
    write_lock.Unlock();
    dout(10) << "write_thread_entry finish" << dendl;
  }
Simple merge
diff --cc src/osd/OSD.cc
Simple merge
Simple merge