blob: b95ee5dc46cacd39a96b4af9a649ed6b4af96ec4 [file] [log] [blame]
David Teiglandb3b94fa2006-01-16 16:50:04 +00001/*
2 * Copyright (C) Sistina Software, Inc. 1997-2003 All rights reserved.
Bob Petersonca390602008-01-28 11:15:57 -06003 * Copyright (C) 2004-2008 Red Hat, Inc. All rights reserved.
David Teiglandb3b94fa2006-01-16 16:50:04 +00004 *
5 * This copyrighted material is made available to anyone wishing to use,
6 * modify, copy, or redistribute it subject to the terms and conditions
Steven Whitehousee9fc2aa2006-09-01 11:05:15 -04007 * of the GNU General Public License version 2.
David Teiglandb3b94fa2006-01-16 16:50:04 +00008 */
9
10#include <linux/sched.h>
11#include <linux/slab.h>
12#include <linux/spinlock.h>
13#include <linux/completion.h>
14#include <linux/buffer_head.h>
15#include <linux/posix_acl.h>
16#include <linux/sort.h>
Steven Whitehouse5c676f62006-02-27 17:23:27 -050017#include <linux/gfs2_ondisk.h>
Steven Whitehouse71b86f52006-03-28 14:14:04 -050018#include <linux/crc32.h>
Ryan O'Harafcb47e0b2006-10-03 11:57:35 -040019#include <linux/security.h>
Steven Whitehouse719ee342008-09-18 13:53:59 +010020#include <linux/time.h>
David Teiglandb3b94fa2006-01-16 16:50:04 +000021
22#include "gfs2.h"
Steven Whitehouse5c676f62006-02-27 17:23:27 -050023#include "incore.h"
David Teiglandb3b94fa2006-01-16 16:50:04 +000024#include "acl.h"
25#include "bmap.h"
26#include "dir.h"
Steven Whitehouse307cf6e2009-08-26 18:51:04 +010027#include "xattr.h"
David Teiglandb3b94fa2006-01-16 16:50:04 +000028#include "glock.h"
29#include "glops.h"
30#include "inode.h"
31#include "log.h"
32#include "meta_io.h"
David Teiglandb3b94fa2006-01-16 16:50:04 +000033#include "quota.h"
34#include "rgrp.h"
35#include "trans.h"
Steven Whitehouse5c676f62006-02-27 17:23:27 -050036#include "util.h"
David Teiglandb3b94fa2006-01-16 16:50:04 +000037
David Teiglandb3b94fa2006-01-16 16:50:04 +000038
Steven Whitehousebb8d8a62007-06-01 14:11:58 +010039void gfs2_dinode_out(const struct gfs2_inode *ip, void *buf)
40{
Steven Whitehousebb8d8a62007-06-01 14:11:58 +010041 struct gfs2_dinode *str = buf;
42
43 str->di_header.mh_magic = cpu_to_be32(GFS2_MAGIC);
44 str->di_header.mh_type = cpu_to_be32(GFS2_METATYPE_DI);
Steven Whitehousebb8d8a62007-06-01 14:11:58 +010045 str->di_header.mh_format = cpu_to_be32(GFS2_FORMAT_DI);
Steven Whitehousebb8d8a62007-06-01 14:11:58 +010046 str->di_num.no_addr = cpu_to_be64(ip->i_no_addr);
47 str->di_num.no_formal_ino = cpu_to_be64(ip->i_no_formal_ino);
48 str->di_mode = cpu_to_be32(ip->i_inode.i_mode);
49 str->di_uid = cpu_to_be32(ip->i_inode.i_uid);
50 str->di_gid = cpu_to_be32(ip->i_inode.i_gid);
51 str->di_nlink = cpu_to_be32(ip->i_inode.i_nlink);
Steven Whitehousea2e0f792010-08-11 09:53:11 +010052 str->di_size = cpu_to_be64(i_size_read(&ip->i_inode));
Steven Whitehouse77658aa2008-02-12 14:17:27 +000053 str->di_blocks = cpu_to_be64(gfs2_get_inode_blocks(&ip->i_inode));
Steven Whitehousebb8d8a62007-06-01 14:11:58 +010054 str->di_atime = cpu_to_be64(ip->i_inode.i_atime.tv_sec);
55 str->di_mtime = cpu_to_be64(ip->i_inode.i_mtime.tv_sec);
56 str->di_ctime = cpu_to_be64(ip->i_inode.i_ctime.tv_sec);
57
Steven Whitehousece276b02008-02-06 09:25:45 +000058 str->di_goal_meta = cpu_to_be64(ip->i_goal);
59 str->di_goal_data = cpu_to_be64(ip->i_goal);
Steven Whitehousebcf0b5b2008-11-03 13:39:46 +000060 str->di_generation = cpu_to_be64(ip->i_generation);
Steven Whitehousebb8d8a62007-06-01 14:11:58 +010061
Steven Whitehouse383f01f2008-11-04 10:05:22 +000062 str->di_flags = cpu_to_be32(ip->i_diskflags);
Steven Whitehouseecc30c72008-01-28 10:37:35 +000063 str->di_height = cpu_to_be16(ip->i_height);
Steven Whitehousebb8d8a62007-06-01 14:11:58 +010064 str->di_payload_format = cpu_to_be32(S_ISDIR(ip->i_inode.i_mode) &&
Steven Whitehouse383f01f2008-11-04 10:05:22 +000065 !(ip->i_diskflags & GFS2_DIF_EXHASH) ?
Steven Whitehousebb8d8a62007-06-01 14:11:58 +010066 GFS2_FORMAT_DE : 0);
Steven Whitehouse9a004502008-02-01 09:23:44 +000067 str->di_depth = cpu_to_be16(ip->i_depth);
Steven Whitehousead6203f2008-11-03 13:59:19 +000068 str->di_entries = cpu_to_be32(ip->i_entries);
Steven Whitehousebb8d8a62007-06-01 14:11:58 +010069
Steven Whitehouse3767ac22008-11-03 14:28:42 +000070 str->di_eattr = cpu_to_be64(ip->i_eattr);
Steven Whitehouse4bd91ba2007-06-05 09:39:18 +010071 str->di_atime_nsec = cpu_to_be32(ip->i_inode.i_atime.tv_nsec);
72 str->di_mtime_nsec = cpu_to_be32(ip->i_inode.i_mtime.tv_nsec);
73 str->di_ctime_nsec = cpu_to_be32(ip->i_inode.i_ctime.tv_nsec);
Steven Whitehousebb8d8a62007-06-01 14:11:58 +010074}