X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Flod%2Flod_object.c;h=6179e4db7db08ec6e52f13eb42e26ef0b6b86b46;hb=df1d59429cbfd1ea2464e863458b6a4a268e516b;hp=bbbb3a2ef22ba79324e988e1ddc54eeb69b6116c;hpb=725f3f8eb96203b5679da46bfc4e6d22bf1cdf9c;p=fs%2Flustre-release.git diff --git a/lustre/lod/lod_object.c b/lustre/lod/lod_object.c index bbbb3a2..6179e4d 100644 --- a/lustre/lod/lod_object.c +++ b/lustre/lod/lod_object.c @@ -23,7 +23,7 @@ * Copyright 2009 Sun Microsystems, Inc. All rights reserved * Use is subject to license terms. * - * Copyright (c) 2012, Intel Corporation. + * Copyright (c) 2012, 2013, Intel Corporation. */ /* * lustre/lod/lod_object.c @@ -31,9 +31,6 @@ * Author: Alex Zhuravlev */ -#ifndef EXPORT_SYMTAB -# define EXPORT_SYMTAB -#endif #define DEBUG_SUBSYSTEM S_MDS #include @@ -49,7 +46,7 @@ #include "lod_internal.h" -extern cfs_mem_cache_t *lod_object_kmem; +extern struct kmem_cache *lod_object_kmem; static const struct dt_body_operations lod_body_lnk_ops; static int lod_index_lookup(const struct lu_env *env, struct dt_object *dt, @@ -390,15 +387,20 @@ static int lod_xattr_get(const struct lu_env *env, struct dt_object *dt, struct lov_desc *desc = &dev->lod_desc; if (buf->lb_buf == NULL) { - rc = sizeof(struct lov_user_md_v1); - } else if (buf->lb_len >= sizeof(struct lov_user_md_v1)) { - lum->lmm_magic = LOV_USER_MAGIC_V1; + rc = sizeof(*lum); + } else if (buf->lb_len >= sizeof(*lum)) { + lum->lmm_magic = cpu_to_le32(LOV_USER_MAGIC_V1); lmm_oi_set_seq(&lum->lmm_oi, FID_SEQ_LOV_DEFAULT); - lum->lmm_pattern = desc->ld_pattern; - lum->lmm_stripe_size = desc->ld_default_stripe_size; - lum->lmm_stripe_count = desc->ld_default_stripe_count; - lum->lmm_stripe_offset = desc->ld_default_stripe_offset; - rc = sizeof(struct lov_user_md_v1); + lmm_oi_set_id(&lum->lmm_oi, 0); + lmm_oi_cpu_to_le(&lum->lmm_oi, &lum->lmm_oi); + lum->lmm_pattern = cpu_to_le32(desc->ld_pattern); + lum->lmm_stripe_size = cpu_to_le32( + desc->ld_default_stripe_size); + lum->lmm_stripe_count = cpu_to_le16( + desc->ld_default_stripe_count); + lum->lmm_stripe_offset = cpu_to_le16( + desc->ld_default_stripe_offset); + rc = sizeof(*lum); } else { rc = -ERANGE; } @@ -482,8 +484,7 @@ static int lod_xattr_set_lov_on_dir(const struct lu_env *env, l->ldo_def_stripe_size = 0; l->ldo_def_stripenr = 0; - LASSERT(buf); - LASSERT(buf->lb_buf); + LASSERT(buf != NULL && buf->lb_buf != NULL); lum = buf->lb_buf; rc = lod_verify_striping(d, buf, 0); @@ -570,6 +571,8 @@ static int lod_xattr_del(const struct lu_env *env, struct dt_object *dt, const char *name, struct thandle *th, struct lustre_capa *capa) { + if (!strcmp(name, XATTR_NAME_LOV)) + lod_object_free_striping(env, lod_dt_obj(dt)); return dt_xattr_del(env, dt_object_child(dt), name, th, capa); } @@ -675,7 +678,7 @@ static void lod_ah_init(const struct lu_env *env, struct dt_allocation_hint *ah, struct dt_object *parent, struct dt_object *child, - cfs_umode_t child_mode) + umode_t child_mode) { struct lod_device *d = lu2lod_dev(child->do_lu.lo_dev); struct dt_object *nextp = NULL; @@ -704,7 +707,8 @@ static void lod_ah_init(const struct lu_env *env, * can be called with local object existing */ if (!dt_object_exists(nextc) || dt_object_remote(nextc)) - nextc->do_ops->do_ah_init(env, ah, nextp, nextc, child_mode); + nextc->do_ops->do_ah_init(env, ah, dt_object_remote(nextp) ? + NULL : nextp, nextc, child_mode); if (S_ISDIR(child_mode)) { if (lp->ldo_striping_cached == 0) { @@ -960,8 +964,6 @@ int lod_striping_create(const struct lu_env *env, struct dt_object *dt, int rc = 0, i; ENTRY; - LASSERT(lo->ldo_stripe); - LASSERT(lo->ldo_stripenr > 0); LASSERT(lo->ldo_striping_cached == 0); /* create all underlying objects */ @@ -1233,6 +1235,7 @@ void lod_object_free_striping(const struct lu_env *env, struct lod_object *lo) lo->ldo_stripes_allocated = 0; } lo->ldo_stripenr = 0; + lo->ldo_pattern = 0; } /*