Alan Somers [Tue, 15 Oct 2013 20:26:13 +0000 (13:26 -0700)]
os/FileStore: fix fiemap double-free(s)
If GenericFileStoreBackend::do_fiemap returns anything other than 0, then
fiemap will not be allocated. However,
GenericFileStoreBackend::detect_features will free fiemap regardless,
triggering an assertion in tcmalloc. The attached patch will fix the bug
by only freeing fiemap when necessary.
In my case, do_fiemap returns -ENOSYS because fiemap is not implemented
on FreeBSD. However, this bug could also happen on Linux when do_fiemap
returns -ENOMEM.
Fixes: #6504 Signed-off-by: Alan Somers <asomers@gmail.com> Reviewed-by: Sage Weil <sage@inktank.com>
Alan Somers [Tue, 15 Oct 2013 20:06:06 +0000 (13:06 -0700)]
ceph-dencoder: select_generated() should properly validate its input
If m_list.size() == 0, then calling select_generated(0) will result in
uninitialized data being assigned to m_object, which will cause a segfault
down the road. This patch fixes that.
To Reproduce:
$ ceph-dencoder type MWatchNotify select_test 0 encode decode
Segmentation fault (core dumped)
After the patch:
$ ./ceph-dencoder type MWatchNotify select_test 0 encode decode
error: invalid id for generated object
$ echo $?
1
Fixes: #6510 Signed-off-by: Alan Somers <asomers@gmail.com>
Alan Somers [Tue, 8 Oct 2013 22:24:00 +0000 (15:24 -0700)]
SignalHandler: fix infinite loop on BSD systems
SignalHandler::entry shouldn't poll for POLLOUT, because it never actually
writes to the pipes in question. Polling for POLLOUT causes poll(2) to
immediately return, so the function spins the CPU and never blocks. Remove
the POLLOUT flag, unnecessarily introduced in commit 8e4a78f169eda716c7d6811cb6db5c757dc67207 when switching from select() to poll().
This fixes the problem on FreeBSD and doesn't break anything (AFAICT) on
Linux. Tested on FreeBSD 9.1 amd64 and Ubuntu Server 13.04 amd64.
Fixes: #6492 Signed-off-by: Alan Somers <asomers@gmail.com> Reviewed-by: Greg Farnum <greg@inktank.com>
Yehuda Sadeh [Thu, 3 Oct 2013 18:49:33 +0000 (11:49 -0700)]
librados: drop reference to completion in container destructor
Move the PoolAsyncCompletionImpl reference drop from
C_PoolAsync_Safe::finish() to ~C_PoolAsyncSafe(), as finish() is only
called when the async request is actually sent.
Sage Weil [Thu, 10 Oct 2013 14:10:16 +0000 (07:10 -0700)]
osdc/Objecter: clean up completion handlers that set *prval=0
If the OSD operations returns 0, these are unnecessary. If it does not,
then these are misleading. In both cases here, the OSD sets the result to
zero, so this has no client-visible change.r
mon: OSDMonitor: split 'osd pool set' out of 'prepare_command'
We should start doing this across the whole 'prepare_command' function.
Makes it prettier to the reader, and easier to add new code.
Change the command to send a string instead of an int to allow us to have
non-integer pool paramters that can be modified. Support input json with
both int and string values so that we work with all flavors of client.
Signed-off-by: Joao Eduardo Luis <joao.luis@inktank.com>
Yan, Zheng [Fri, 11 Oct 2013 06:03:13 +0000 (14:03 +0800)]
mds: avoid leaking objects when purging file.
The filer implementation does not delete stripe objects that are truncated
to zero. When purging a deleted file, we need to purge stripe objects up to
the max size the file has ever been.
Yehuda Sadeh [Tue, 8 Oct 2013 21:05:59 +0000 (14:05 -0700)]
rgw: protect against concurrent async quota updates
Leverage the cache lru_map locking for making sure that we don't end
up with more than a single concurrent async update on the same bucket
within the same update window.
Yan, Zheng [Thu, 10 Oct 2013 02:35:48 +0000 (10:35 +0800)]
mds: fix infinite loop of MDCache::populate_mydir().
make MDCache::populate_mydir() only fetch bare-bone stray dirs.
After all stray dirs are populated, call MDCache::scan_stray_dir(),
it fetches incomplete stray dirs.
Sandon Van Ness [Tue, 8 Oct 2013 18:58:57 +0000 (11:58 -0700)]
Go back to $PWD in fsstress.sh if compiling from source.
Although fsstress was being called with a static path the directory
it was writing to was in the current directory so doing a cd to the
source directory that is made in /tmp and then removing it later
caused it to be unable to write the files in a non-existent dir.
This change gets the current path first and cd's back into it after
it is done compiling fsstress.
Issue #6479.
Signed-off-by: Sandon Van Ness <sandon@inktank.com> Reviewed-by: Alfredo Deza <alfredo.deza@inktank.com>
Sandon Van Ness [Tue, 8 Oct 2013 18:58:57 +0000 (11:58 -0700)]
Go back to $PWD in fsstress.sh if compiling from source.
Although fsstress was being called with a static path the directory
it was writing to was in the current directory so doing a cd to the
source directory that is made in /tmp and then removing it later
caused it to be unable to write the files in a non-existent dir.
This change gets the current path first and cd's back into it after
it is done compiling fsstress.
Issue #6479.
Signed-off-by: Sandon Van Ness <sandon@inktank.com> Reviewed-by: Alfredo Deza <alfredo.deza@inktank.com>
Greg Farnum [Mon, 7 Oct 2013 20:11:21 +0000 (13:11 -0700)]
ReplicatedPG: copy: use aggregate return code instead of individual Op return
It appears that the OSD is not filling in the individual return codes, and they
should be equivalent for all purposes we care about here (the only Op we are
doing is the copy-get, and if it fails we are getting its failure code).
Reported-by: Sage Weil <sage@inktank.com> Signed-off-by: Greg Farnum <greg@inktank.com> Reviewed-by: Samuel Just <sam.just@inktank.com>
Sage Weil [Mon, 7 Oct 2013 12:22:20 +0000 (05:22 -0700)]
os/FileStore: fix ENOENT error code for getattrs()
In commit dc0dfb9e01d593afdd430ca776cf4da2c2240a20 the omap xattrs code
moved up a block and r was no longer local to the block. Translate
ENOENT -> 0 to compensate.
Fix the same error in _rmattrs().
Signed-off-by: Sage Weil <sage@inktank.com> Reviewed-by: Greg Farnum <greg@inktank.com> Reviewed-by: Samuel Just <sam.just@inktank.com>
fix mon double-free when dropping unhandled messages, and allow "get monmap" messages to go through without authenticating for MonCliente::get_monmap_privately()
Reviewed-by: Joao Eduardo Luis <joao.luis@inktank.com>
Alan Grosskurth [Sun, 6 Oct 2013 06:52:16 +0000 (23:52 -0700)]
ceph.spec.in: Always depend on junit4 (fixes bug #6216)
The RPM spec file currently lists `junit` as a dependency on all
platforms except recent versions of OpenSUSE. This is problematic
because `junit` refers to version 3.x, which doesn't satisfy the check
in the configure script:
As a result, rpmbuild doesn't build `libcephfs-test.jar` and fails:
http://tracker.ceph.com/issues/6216
So let's depend on `junit4` in all cases. This package is provided by
all supported platforms (el6, fc17, fc18, fc19, opensuse12.2,
opensuse12, sles11), and my testing on CentOS 6 shows that rpmbuild
now succeeds and produces the expected `libcephfs_jni1` RPM.
Sage Weil [Thu, 3 Oct 2013 23:30:29 +0000 (16:30 -0700)]
common/bloom_filter: drop raw_table_size_ member
We were storing table_size_ and raw_table_size_, where one is the size in
bits and the other is the size in bytes. This is silly. Store only the
size in bytes.
Also, bytes are always 8 bits, so use bit shifts and drop some of that
silliness too.
Move the member declarations to the top of the class so you read them
before the methods.