| /* |
| * Copyright (C) Sistina Software, Inc. 1997-2003 All rights reserved. |
| * Copyright (C) 2004-2008 Red Hat, Inc. All rights reserved. |
| * |
| * This copyrighted material is made available to anyone wishing to use, |
| * modify, copy, or redistribute it subject to the terms and conditions |
| * of the GNU General Public License version 2. |
| */ |
| |
| #include <linux/sched.h> |
| #include <linux/slab.h> |
| #include <linux/spinlock.h> |
| #include <linux/completion.h> |
| #include <linux/buffer_head.h> |
| #include <linux/posix_acl.h> |
| #include <linux/sort.h> |
| #include <linux/gfs2_ondisk.h> |
| #include <linux/crc32.h> |
| #include <linux/security.h> |
| #include <linux/time.h> |
| |
| #include "gfs2.h" |
| #include "incore.h" |
| #include "acl.h" |
| #include "bmap.h" |
| #include "dir.h" |
| #include "xattr.h" |
| #include "glock.h" |
| #include "glops.h" |
| #include "inode.h" |
| #include "log.h" |
| #include "meta_io.h" |
| #include "quota.h" |
| #include "rgrp.h" |
| #include "trans.h" |
| #include "util.h" |
| |
| |
| void gfs2_dinode_out(const struct gfs2_inode *ip, void *buf) |
| { |
| struct gfs2_dinode *str = buf; |
| |
| str->di_header.mh_magic = cpu_to_be32(GFS2_MAGIC); |
| str->di_header.mh_type = cpu_to_be32(GFS2_METATYPE_DI); |
| str->di_header.mh_format = cpu_to_be32(GFS2_FORMAT_DI); |
| str->di_num.no_addr = cpu_to_be64(ip->i_no_addr); |
| str->di_num.no_formal_ino = cpu_to_be64(ip->i_no_formal_ino); |
| str->di_mode = cpu_to_be32(ip->i_inode.i_mode); |
| str->di_uid = cpu_to_be32(ip->i_inode.i_uid); |
| str->di_gid = cpu_to_be32(ip->i_inode.i_gid); |
| str->di_nlink = cpu_to_be32(ip->i_inode.i_nlink); |
| str->di_size = cpu_to_be64(i_size_read(&ip->i_inode)); |
| str->di_blocks = cpu_to_be64(gfs2_get_inode_blocks(&ip->i_inode)); |
| str->di_atime = cpu_to_be64(ip->i_inode.i_atime.tv_sec); |
| str->di_mtime = cpu_to_be64(ip->i_inode.i_mtime.tv_sec); |
| str->di_ctime = cpu_to_be64(ip->i_inode.i_ctime.tv_sec); |
| |
| str->di_goal_meta = cpu_to_be64(ip->i_goal); |
| str->di_goal_data = cpu_to_be64(ip->i_goal); |
| str->di_generation = cpu_to_be64(ip->i_generation); |
| |
| str->di_flags = cpu_to_be32(ip->i_diskflags); |
| str->di_height = cpu_to_be16(ip->i_height); |
| str->di_payload_format = cpu_to_be32(S_ISDIR(ip->i_inode.i_mode) && |
| !(ip->i_diskflags & GFS2_DIF_EXHASH) ? |
| GFS2_FORMAT_DE : 0); |
| str->di_depth = cpu_to_be16(ip->i_depth); |
| str->di_entries = cpu_to_be32(ip->i_entries); |
| |
| str->di_eattr = cpu_to_be64(ip->i_eattr); |
| str->di_atime_nsec = cpu_to_be32(ip->i_inode.i_atime.tv_nsec); |
| str->di_mtime_nsec = cpu_to_be32(ip->i_inode.i_mtime.tv_nsec); |
| str->di_ctime_nsec = cpu_to_be32(ip->i_inode.i_ctime.tv_nsec); |
| } |