]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
Merge branch 'wannoying2'
authorColin Patrick McCabe <cmccabe@alumni.cmu.edu>
Fri, 4 Feb 2011 17:47:29 +0000 (09:47 -0800)
committerColin Patrick McCabe <cmccabe@alumni.cmu.edu>
Fri, 4 Feb 2011 17:47:29 +0000 (09:47 -0800)
Conflicts:
src/os/FileJournal.cc

1  2 
src/os/FileJournal.cc
src/os/FileStore.cc

index ae1811b6b1ebb7c7eb3da61ddca3e2e60e21363a,22befd238b7fc901c88b0be27b19f8960d9b4a74..613ae83c2c3b536c60340e6a8f59c7d096d02126
@@@ -255,11 -299,14 +299,15 @@@ int FileJournal::_open_file(int64_t old
  
  int FileJournal::create()
  {
+   char *buf = 0;
++  int64_t needed_space;
+   int ret;
+   buffer::ptr bp;
    dout(2) << "create " << fn << dendl;
  
-   int err = _open(true, true);
-   if (err < 0)
-     return err;
+   ret = _open(true, true);
+   if (ret < 0)
+     goto done;
  
    // write empty header
    memset(&header, 0, sizeof(header));
    }
  
    // zero first little bit, too.
-   char z[block_size];
-   memset(z, 0, block_size);
-   ::pwrite(fd, z, block_size, get_top());
-   TEMP_FAILURE_RETRY(::close(fd));
-   fd = -1;
+   ret = posix_memalign((void**)&buf, block_size, block_size);
+   if (ret) {
+     derr << "FileJournal::create: failed to allocate " << block_size
+        << " bytes of memory: " << cpp_strerror(ret) << dendl;
+     goto close_fd;
+   }
+   memset(buf, 0, block_size);
+   if (TEMP_FAILURE_RETRY(::pwrite(fd, buf, block_size, get_top())) < 0) {
+     ret = errno;
+     derr << "FileJournal::create: error zeroing first " << block_size
+        << " bytes " << cpp_strerror(ret) << dendl;
+     goto free_buf;
+   }
  
-   int64_t needed_space = g_conf.osd_max_write_size << 20;
++  needed_space = g_conf.osd_max_write_size << 20;
 +  needed_space += (2 * sizeof(entry_header_t)) + get_top();
 +  if (header.max_size - header.start < needed_space) {
-     derr << "OSD journal is not large enough to hold osd_max_write_size bytes!"
-          << dendl;
-     return -ENOSPC;
++    derr << "FileJournal::create: OSD journal is not large enough to hold "
++       << "osd_max_write_size bytes!" << dendl;
++    ret = -ENOSPC;
++    goto free_buf;
 +  }
 +
    dout(2) << "create done" << dendl;
-   return 0;
+   ret = 0;
+ free_buf:
+   free(buf);
+   buf = 0;
+ close_fd:
+   if (TEMP_FAILURE_RETRY(::close(fd)) < 0) {
+     ret = errno;
+     derr << "FileJournal::create: error closing fd: " << cpp_strerror(ret)
+        << dendl;
+     goto done;
+   }
+ done:
+   fd = -1;
+   return ret;
  }
  
  int FileJournal::open(uint64_t next_seq)
Simple merge