X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fobdclass%2Flinux%2Flinux-obdo.c;h=ace43ab054376c08761e014f90b59f86b9ce9d18;hb=6712478e79588e73e28c7ccac3afc7ac2368a4f3;hp=e85b5ab43897ef4bd0f47556b41a613e8deefe6f;hpb=fbf5870b9848929d352460f1f005b79c0b5ccc5a;p=fs%2Flustre-release.git diff --git a/lustre/obdclass/linux/linux-obdo.c b/lustre/obdclass/linux/linux-obdo.c index e85b5ab..ace43ab 100644 --- a/lustre/obdclass/linux/linux-obdo.c +++ b/lustre/obdclass/linux/linux-obdo.c @@ -1,6 +1,4 @@ -/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*- - * vim:expandtab:shiftwidth=8:tabstop=8: - * +/* * GPL HEADER START * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. @@ -17,17 +15,15 @@ * * You should have received a copy of the GNU General Public License * version 2 along with this program; If not, see - * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * http://www.gnu.org/licenses/gpl-2.0.html * * GPL HEADER END */ /* - * Copyright 2008 Sun Microsystems, Inc. All rights reserved + * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. + * + * Copyright (c) 2012, 2014, Intel Corporation. */ /* * This file is part of Lustre, http://www.lustre.org/ @@ -41,226 +37,120 @@ */ #define DEBUG_SUBSYSTEM S_CLASS -#ifndef EXPORT_SYMTAB -# define EXPORT_SYMTAB -#endif -#ifndef __KERNEL__ -#include -#else +#include #include +#include /* for PAGE_SIZE */ #include -#include -#endif -#ifdef __KERNEL__ -#include -#include /* for PAGE_CACHE_SIZE */ - -/* WARNING: the file systems must take care not to tinker with - attributes they don't manage (such as blocks). */ -void obdo_from_inode(struct obdo *dst, struct inode *src, obd_flag valid) +/*FIXME: Just copy from obdo_from_inode*/ +void obdo_from_la(struct obdo *dst, const struct lu_attr *la, u64 valid) { - obd_flag newvalid = 0; - - if (valid & (OBD_MD_FLCTIME | OBD_MD_FLMTIME)) - CDEBUG(D_INODE, "valid %x, new time %lu/%lu\n", - valid, LTIME_S(src->i_mtime), - LTIME_S(src->i_ctime)); + u64 newvalid = 0; - if (valid & OBD_MD_FLATIME) { - dst->o_atime = LTIME_S(src->i_atime); + if (valid & LA_ATIME) { + dst->o_atime = la->la_atime; newvalid |= OBD_MD_FLATIME; } - if (valid & OBD_MD_FLMTIME) { - dst->o_mtime = LTIME_S(src->i_mtime); + if (valid & LA_MTIME) { + dst->o_mtime = la->la_mtime; newvalid |= OBD_MD_FLMTIME; } - if (valid & OBD_MD_FLCTIME) { - dst->o_ctime = LTIME_S(src->i_ctime); + if (valid & LA_CTIME) { + dst->o_ctime = la->la_ctime; newvalid |= OBD_MD_FLCTIME; } - if (valid & OBD_MD_FLSIZE) { - dst->o_size = i_size_read(src); + if (valid & LA_SIZE) { + dst->o_size = la->la_size; newvalid |= OBD_MD_FLSIZE; } - if (valid & OBD_MD_FLBLOCKS) { /* allocation of space (x512 bytes) */ - dst->o_blocks = src->i_blocks; + if (valid & LA_BLOCKS) { /* allocation of space (x512 bytes) */ + dst->o_blocks = la->la_blocks; newvalid |= OBD_MD_FLBLOCKS; } - if (valid & OBD_MD_FLBLKSZ) { /* optimal block size */ - dst->o_blksize = 1 << src->i_blkbits; - newvalid |= OBD_MD_FLBLKSZ; - } - if (valid & OBD_MD_FLTYPE) { - dst->o_mode = (dst->o_mode & S_IALLUGO)|(src->i_mode & S_IFMT); + if (valid & LA_TYPE) { + dst->o_mode = (dst->o_mode & S_IALLUGO) | + (la->la_mode & S_IFMT); newvalid |= OBD_MD_FLTYPE; } - if (valid & OBD_MD_FLMODE) { - dst->o_mode = (dst->o_mode & S_IFMT)|(src->i_mode & S_IALLUGO); + if (valid & LA_MODE) { + dst->o_mode = (dst->o_mode & S_IFMT) | + (la->la_mode & S_IALLUGO); newvalid |= OBD_MD_FLMODE; } - if (valid & OBD_MD_FLUID) { - dst->o_uid = src->i_uid; + if (valid & LA_UID) { + dst->o_uid = la->la_uid; newvalid |= OBD_MD_FLUID; } - if (valid & OBD_MD_FLGID) { - dst->o_gid = src->i_gid; + if (valid & LA_GID) { + dst->o_gid = la->la_gid; newvalid |= OBD_MD_FLGID; } - if (valid & OBD_MD_FLFLAGS) { - dst->o_flags = src->i_flags; - newvalid |= OBD_MD_FLFLAGS; - } - if (valid & OBD_MD_FLGENER) { - dst->o_generation = src->i_generation; - newvalid |= OBD_MD_FLGENER; - } - if (valid & OBD_MD_FLFID) { - dst->o_fid = src->i_ino; - newvalid |= OBD_MD_FLFID; - } - - dst->o_valid |= newvalid; + if (valid & LA_PROJID) { + dst->o_projid = la->la_projid; + newvalid |= OBD_MD_FLPROJID; + } + if (valid & LA_FLAGS) { + dst->o_flags = la->la_flags; + newvalid |= OBD_MD_FLFLAGS; + } + dst->o_valid |= newvalid; } -EXPORT_SYMBOL(obdo_from_inode); +EXPORT_SYMBOL(obdo_from_la); /*FIXME: Just copy from obdo_from_inode*/ -void obdo_from_la(struct obdo *dst, struct lu_attr *la, obd_flag valid) +void la_from_obdo(struct lu_attr *dst, const struct obdo *obdo, u64 valid) { - obd_flag newvalid = 0; + u64 newvalid = 0; + + valid &= obdo->o_valid; if (valid & OBD_MD_FLATIME) { - dst->o_atime = la->la_atime; - newvalid |= OBD_MD_FLATIME; + dst->la_atime = obdo->o_atime; + newvalid |= LA_ATIME; } if (valid & OBD_MD_FLMTIME) { - dst->o_mtime = la->la_mtime; - newvalid |= OBD_MD_FLMTIME; + dst->la_mtime = obdo->o_mtime; + newvalid |= LA_MTIME; } if (valid & OBD_MD_FLCTIME) { - dst->o_ctime = la->la_ctime; - newvalid |= OBD_MD_FLCTIME; + dst->la_ctime = obdo->o_ctime; + newvalid |= LA_CTIME; } if (valid & OBD_MD_FLSIZE) { - dst->o_size = la->la_size; - newvalid |= OBD_MD_FLSIZE; + dst->la_size = obdo->o_size; + newvalid |= LA_SIZE; } - if (valid & OBD_MD_FLBLOCKS) { /* allocation of space (x512 bytes) */ - dst->o_blocks = la->la_blocks; - newvalid |= OBD_MD_FLBLOCKS; + if (valid & OBD_MD_FLBLOCKS) { + dst->la_blocks = obdo->o_blocks; + newvalid |= LA_BLOCKS; } if (valid & OBD_MD_FLTYPE) { - dst->o_mode = (dst->o_mode & S_IALLUGO)|(la->la_mode & S_IFMT); - newvalid |= OBD_MD_FLTYPE; + dst->la_mode = (dst->la_mode & S_IALLUGO) | + (obdo->o_mode & S_IFMT); + newvalid |= LA_TYPE; } if (valid & OBD_MD_FLMODE) { - dst->o_mode = (dst->o_mode & S_IFMT)|(la->la_mode & S_IALLUGO); - newvalid |= OBD_MD_FLMODE; + dst->la_mode = (dst->la_mode & S_IFMT) | + (obdo->o_mode & S_IALLUGO); + newvalid |= LA_MODE; } if (valid & OBD_MD_FLUID) { - dst->o_uid = la->la_uid; - newvalid |= OBD_MD_FLUID; + dst->la_uid = obdo->o_uid; + newvalid |= LA_UID; } if (valid & OBD_MD_FLGID) { - dst->o_gid = la->la_gid; - newvalid |= OBD_MD_FLGID; - } - dst->o_valid |= newvalid; -} -EXPORT_SYMBOL(obdo_from_la); - -void obdo_refresh_inode(struct inode *dst, struct obdo *src, obd_flag valid) -{ - valid &= src->o_valid; - - if (valid & (OBD_MD_FLCTIME | OBD_MD_FLMTIME)) - CDEBUG(D_INODE, - "valid "LPX64", cur time %lu/%lu, new "LPU64"/"LPU64"\n", - src->o_valid, LTIME_S(dst->i_mtime), - LTIME_S(dst->i_ctime), src->o_mtime, src->o_ctime); - - if (valid & OBD_MD_FLATIME && src->o_atime > LTIME_S(dst->i_atime)) - LTIME_S(dst->i_atime) = src->o_atime; - - /* mtime is always updated with ctime, but can be set in past. - As write and utime(2) may happen within 1 second, and utime's - mtime has a priority over write's one, leave mtime from mds - for the same ctimes. */ - if (valid & OBD_MD_FLCTIME && src->o_ctime > LTIME_S(dst->i_ctime)) { - LTIME_S(dst->i_ctime) = src->o_ctime; - if (valid & OBD_MD_FLMTIME) - LTIME_S(dst->i_mtime) = src->o_mtime; - } - if (valid & OBD_MD_FLSIZE) - i_size_write(dst, src->o_size); - /* optimum IO size */ - if (valid & OBD_MD_FLBLKSZ && src->o_blksize > (1 << dst->i_blkbits)) { - dst->i_blkbits = ffs(src->o_blksize) - 1; -#ifdef HAVE_INODE_BLKSIZE - dst->i_blksize = src->o_blksize; -#endif - } - - if (dst->i_blkbits < CFS_PAGE_SHIFT) { -#ifdef HAVE_INODE_BLKSIZE - dst->i_blksize = CFS_PAGE_SIZE; -#endif - dst->i_blkbits = CFS_PAGE_SHIFT; - } - - /* allocation of space */ - if (valid & OBD_MD_FLBLOCKS && src->o_blocks > dst->i_blocks) - /* - * XXX shouldn't overflow be checked here like in - * obdo_to_inode(). - */ - dst->i_blocks = src->o_blocks; -} -EXPORT_SYMBOL(obdo_refresh_inode); - -void obdo_to_inode(struct inode *dst, struct obdo *src, obd_flag valid) -{ - valid &= src->o_valid; - - if (valid & (OBD_MD_FLCTIME | OBD_MD_FLMTIME)) - CDEBUG(D_INODE, - "valid "LPX64", cur time %lu/%lu, new "LPU64"/"LPU64"\n", - src->o_valid, LTIME_S(dst->i_mtime), - LTIME_S(dst->i_ctime), src->o_mtime, src->o_ctime); - - if (valid & OBD_MD_FLATIME) - LTIME_S(dst->i_atime) = src->o_atime; - if (valid & OBD_MD_FLMTIME) - LTIME_S(dst->i_mtime) = src->o_mtime; - if (valid & OBD_MD_FLCTIME && src->o_ctime > LTIME_S(dst->i_ctime)) - LTIME_S(dst->i_ctime) = src->o_ctime; - if (valid & OBD_MD_FLSIZE) - i_size_write(dst, src->o_size); - if (valid & OBD_MD_FLBLOCKS) { /* allocation of space */ - dst->i_blocks = src->o_blocks; - if (dst->i_blocks < src->o_blocks) /* overflow */ - dst->i_blocks = -1; - - } - if (valid & OBD_MD_FLBLKSZ) { - dst->i_blkbits = ffs(src->o_blksize)-1; -#ifdef HAVE_INODE_BLKSIZE - dst->i_blksize = src->o_blksize; -#endif - } - if (valid & OBD_MD_FLTYPE) - dst->i_mode = (dst->i_mode & ~S_IFMT) | (src->o_mode & S_IFMT); - if (valid & OBD_MD_FLMODE) - dst->i_mode = (dst->i_mode & S_IFMT) | (src->o_mode & ~S_IFMT); - if (valid & OBD_MD_FLUID) - dst->i_uid = src->o_uid; - if (valid & OBD_MD_FLGID) - dst->i_gid = src->o_gid; - if (valid & OBD_MD_FLFLAGS) - dst->i_flags = src->o_flags; - if (valid & OBD_MD_FLGENER) - dst->i_generation = src->o_generation; + dst->la_gid = obdo->o_gid; + newvalid |= LA_GID; + } + if (valid & OBD_MD_FLPROJID) { + dst->la_projid = obdo->o_projid; + newvalid |= LA_PROJID; + } + if (valid & OBD_MD_FLFLAGS) { + dst->la_flags = obdo->o_flags; + newvalid |= LA_FLAGS; + } + dst->la_valid = newvalid; } -EXPORT_SYMBOL(obdo_to_inode); -#endif +EXPORT_SYMBOL(la_from_obdo);