X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Fobdclass%2Flinux%2Flinux-obdo.c;h=3ca31f4a4572a1beccef21191d7a932773c7bd13;hp=e85b5ab43897ef4bd0f47556b41a613e8deefe6f;hb=e2af7fb3c91dfb13d34d8e1b2f2df8c09621f768;hpb=fbf5870b9848929d352460f1f005b79c0b5ccc5a diff --git a/lustre/obdclass/linux/linux-obdo.c b/lustre/obdclass/linux/linux-obdo.c index e85b5ab..3ca31f4 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. @@ -26,7 +24,7 @@ * 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. */ /* @@ -41,9 +39,6 @@ */ #define DEBUG_SUBSYSTEM S_CLASS -#ifndef EXPORT_SYMTAB -# define EXPORT_SYMTAB -#endif #ifndef __KERNEL__ #include @@ -57,118 +52,101 @@ #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, 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)); - - 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; } -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, struct obdo *obdo, obd_flag 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->la_gid = obdo->o_gid; + newvalid |= LA_GID; } - dst->o_valid |= newvalid; + dst->la_valid = newvalid; } -EXPORT_SYMBOL(obdo_from_la); +EXPORT_SYMBOL(la_from_obdo); void obdo_refresh_inode(struct inode *dst, struct obdo *src, obd_flag valid) { @@ -182,21 +160,15 @@ void obdo_refresh_inode(struct inode *dst, struct obdo *src, obd_flag valid) 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)) { + if (valid & OBD_MD_FLMTIME && src->o_mtime > LTIME_S(dst->i_mtime)) + 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_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; + dst->i_blkbits = cfs_ffs(src->o_blksize) - 1; #ifdef HAVE_INODE_BLKSIZE dst->i_blksize = src->o_blksize; #endif @@ -223,6 +195,11 @@ void obdo_to_inode(struct inode *dst, struct obdo *src, obd_flag valid) { valid &= src->o_valid; + LASSERTF(!(valid & (OBD_MD_FLTYPE | OBD_MD_FLGENER | OBD_MD_FLFID | + OBD_MD_FLID | OBD_MD_FLGROUP)), + "object "LPU64"/"LPU64", valid %x\n", + src->o_id, src->o_seq, valid); + if (valid & (OBD_MD_FLCTIME | OBD_MD_FLMTIME)) CDEBUG(D_INODE, "valid "LPX64", cur time %lu/%lu, new "LPU64"/"LPU64"\n", @@ -244,13 +221,11 @@ void obdo_to_inode(struct inode *dst, struct obdo *src, obd_flag valid) } if (valid & OBD_MD_FLBLKSZ) { - dst->i_blkbits = ffs(src->o_blksize)-1; + dst->i_blkbits = cfs_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) @@ -259,8 +234,6 @@ void obdo_to_inode(struct inode *dst, struct obdo *src, obd_flag valid) 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; } EXPORT_SYMBOL(obdo_to_inode); #endif