X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fllite%2Fxattr.c;h=8772b7411804daec1085796164cf4b15a20ccdb5;hb=ea766bd959cc2347b223d597b3f8a31e010bed72;hp=479cbb4a79adc7659892e48054fdc5b1392027a7;hpb=9fb46705ae86aa2c0ac29427f0ff24f923560eb7;p=fs%2Flustre-release.git diff --git a/lustre/llite/xattr.c b/lustre/llite/xattr.c index 479cbb4..8772b74 100644 --- a/lustre/llite/xattr.c +++ b/lustre/llite/xattr.c @@ -27,7 +27,7 @@ * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. * - * Copyright (c) 2011, 2012, Whamcloud, Inc. + * Copyright (c) 2011, 2013, Intel Corporation. */ /* * This file is part of Lustre, http://www.lustre.org/ @@ -47,7 +47,7 @@ #include #include #include -#include +#include #include "llite_internal.h" @@ -239,10 +239,12 @@ int ll_setxattr(struct dentry *dentry, const char *name, if (lump != NULL && S_ISREG(inode->i_mode)) { struct file f; int flags = FMODE_WRITE; + int lum_size = (lump->lmm_magic == LOV_USER_MAGIC_V1) ? + sizeof(*lump) : sizeof(struct lov_user_md_v3); - f.f_dentry = dentry; - rc = ll_lov_setstripe_ea_info(inode, &f, flags, - lump, sizeof(*lump)); + f.f_dentry = dentry; + rc = ll_lov_setstripe_ea_info(inode, &f, flags, lump, + lum_size); /* b10667: rc always be 0 here for now */ rc = 0; } else if (S_ISDIR(inode->i_mode)) { @@ -489,6 +491,10 @@ ssize_t ll_getxattr(struct dentry *dentry, const char *name, lump = (struct lov_user_md *)buffer; memcpy(lump, lmm, lmmsize); + /* do not return layout gen for getxattr otherwise it would + * confuse tar --xattr by recognizing layout gen as stripe + * offset when the file is restored. See LU-2809. */ + lump->lmm_layout_gen = 0; rc = lmmsize; out: