client: use put_inode on MetaRequest inode refs

When we drop the request inode refs, we need to use put_inode() to ensure
they get cleaned up properly (removed from inode_map, caps released, etc.).
Do this explicitly here (as we do with all other inode put() paths that
matter).

Fixes: #5381
Backport: cuttlefish
Signed-off-by: Sage Weil <sage@inktank.com>
librados: fix cmd OSDCommand test

If we get ENXIO, buflen will be 0.

Signed-off-by: Sage Weil <sage@inktank.com>
client: fix remaining Inode::put() caller, and make method psuedo-private

Not sure I can make this actually private and make Client::put_inode() a
friend method (making all of Client a friend would defeat the purpose).
This works well enough, though!

Signed-off-by: Sage Weil <sage@inktank.com>
client: send all request put's through put_request()

Make sure all MetaRequest reference put's go through the same path that
releases inode references, including all of the error paths.

Signed-off-by: Sage Weil <sage@inktank.com>
Merge remote-tracking branch 'gh/wip-5381' into wip-mds

Reviewed-by: Greg Farnum <greg@inktank.com>
osd: set maximum object attr size

Make a well-defined maximum size of an object attribute.  Since Linus has
a 64KB limit, and that is what we normally use to back this, use that as
the limit.  This means that even when leveldb is backing large xattrs
(as ext4 users must do) we will return EFBIG on >64KB setxattr attempts.

Signed-off-by: Sage Weil <sage@inktank.com>
osd/PGLog: populate log_keys_debug from read_old_log()

Fixes: #5470
Signed-off-by: Sage Weil <sage@inktank.com>
Reviewed-by: Samuel Just <sam.just@inktank.com>
librados: add test for large and many xattrs

Verify that we can set large and large numbers of attrs on an object.

Signed-off-by: Sage Weil <sage@inktank.com>
os/FileStore: automatically enable 'filestore xattr use omap' as needed

Automatically enable the 'filestore xattr use omap' option if the fs
does not appear to handle large xattrs on its own.

This makes for a more pleasant use experience as they are not told to
enable something that we already know they must enable in order to
continue.

Fixes: #5137
Signed-off-by: Sage Weil <sage@inktank.com>
rgw: add RGWFormatter_Plain allocation to sidestep cranky strlen()

Valgrind complains about an invalid read when we don't pad the allocation,
and because it is inlined we can't whitelist it for valgrind.  Workaround
the warning by just padding our allocations a bit.

Fixes: #5346
Backport: cuttlefish
Signed-off-by: Sage Weil <sage@inktank.com>
Merge pull request #387 from ceph/wip-5346

rgw: add RGWFormatter_Plain allocation to sidestep cranky strlen()

Reviewed-by: Yehuda Sadeh <yehuda@inktank.com>
install rules for init-rbdmap

Signed-off-by: Laurent Barbe <laurent@ksperis.com>
Move rbdmap file to /etc/ceph

Signed-off-by: Laurent Barbe <laurent@ksperis.com>
set object_info_t pool of an ObjectContext if it is undefined or bad

When reading object_info_t from an existing object attribute, the pool
may be < 0 and should be set to the pool containing the object. This is done
on the oi object on the stack but overriden later by:

    obc->obs.oi.decode(bv);

This decode is superfluous and is removed so that it does not override
the modified value of the pool.

Signed-off-by: Loic Dachary <loic@dachary.org>
Merge pull request #388 from dachary/master

set object_info_t pool of an ObjectContext if it is undefined or bad

Reviewed-by: Samuel Just <sam.just@inktank.com>
mds: man page: Fixed cut & paste error
Merge pull request #386 from ceph/wip-osd-xattr

automatically enable xattrs in omap; make size limits well defined

Reviewed-by: Samuel Just <sam.just@inktank.com>
osdc/Objecter: resend command map version checks on reconnect

We already do this for Ops and LingerOps, but missed this when we added
CommandOps to the mix.  The result is that an ill-timed mon disconnect will
leave a command map check (and thus the command) hanging.

This misbehavior was introduced when CommandOp was introduced, back in
commit 2e172225b01561bb7988b6d86d96ff4b9c1c5762, and we failed to fix it
in 8808ca57c652502d9cf803b0dc53673ca9dd62af.

Fixes: #5493
Signed-off-by: Sage Weil <sage@inktank.com>
Reviewed-by: Josh Durgin <josh.durgin@inktank.com>
ceph-disk: make is_held() smarter about full disks

Handle the case where the device is a full disk.  Make the partition
check a bit more robust (don't make assumptions about naming aside from
the device being a prefix of the partition).

Signed-off-by: Sage Weil <sage@inktank.com>
ceph-disk: handle /dev/foo/bar devices throughout

Assume the last component is the unique device name, even if it appears
under a subdir of /dev.

Signed-off-by: Sage Weil <sage@inktank.com>