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>
This commit is contained in:
Sage Weil 2013-06-28 18:15:23 -07:00
parent e235958fb1
commit 09e374f162
2 changed files with 5 additions and 0 deletions

View File

@ -489,6 +489,7 @@ OPTION(osd_recovery_op_priority, OPT_INT, 10)
OPTION(osd_mon_shutdown_timeout, OPT_DOUBLE, 5)
OPTION(osd_max_object_size, OPT_U64, 100*1024L*1024L*1024L) // OSD's maximum object size
OPTION(osd_max_attr_size, OPT_U64, 65536)
OPTION(filestore, OPT_BOOL, false)

View File

@ -2758,6 +2758,10 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& ops)
case CEPH_OSD_OP_SETXATTR:
{
if (op.xattr.value_len > g_conf->osd_max_attr_size) {
result = -EFBIG;
break;
}
if (!obs.exists) {
t.touch(coll, soid);
ctx->delta_stats.num_objects++;