[Ocfs-tools-commits] khackel commits r28 - trunk/format
svn-commits at oss.oracle.com
svn-commits at oss.oracle.com
Tue May 4 21:24:08 CDT 2004
Author: khackel
Date: 2004-05-04 20:24:05 -0500 (Tue, 04 May 2004)
New Revision: 28
Modified:
trunk/format/system.c
Log:
added a file entry for the root at offset 1536 in ocfs2
Modified: trunk/format/system.c
===================================================================
--- trunk/format/system.c 2004-04-27 23:06:15 UTC (rev 27)
+++ trunk/format/system.c 2004-05-05 01:24:05 UTC (rev 28)
@@ -9,6 +9,39 @@
extern int minor_version;
+typedef struct _ocfs_file_entry_v2
+{
+ ocfs_disk_lock disk_lock; // DISKLOCK
+ __u8 signature[8]; // CHAR[8]
+ bool local_ext; // BOOL
+ __u8 next_free_ext; // NUMBER RANGE(0,OCFS_MAX_FILE_ENTRY_EXTENTS)
+ __s8 next_del; // DIRNODEINDEX
+ __s32 granularity; // NUMBER RANGE(-1,3)
+ __u8 filename[OCFS_MAX_FILENAME_LENGTH]; // CHAR[OCFS_MAX_FILENAME_LENGTH]
+ __u16 filename_len; // NUMBER RANGE(0,OCFS_MAX_FILENAME_LENGTH)
+ __u64 file_size; // NUMBER RANGE(0,ULONG_LONG_MAX)
+ __u64 alloc_size; // NUMBER RANGE(0,ULONG_LONG_MAX)
+ __u64 create_time; // DATE
+ __u64 modify_time; // DATE
+ ocfs_alloc_ext extents[OCFS_MAX_FILE_ENTRY_EXTENTS]; // EXTENT[OCFS_MAX_FILE_ENTRY_EXTENTS]
+ __u64 dir_node_ptr; // NUMBER RANGE(0,ULONG_LONG_MAX)
+ __u64 this_sector; // NUMBER RANGE(0,ULONG_LONG_MAX)
+ __u64 last_ext_ptr; /* NUMBER RANGE(0,ULONG_LONG_MAX)
+ Points to the last
+ allocated extent */
+ __u32 sync_flags; // NUMBER RANGE(0,0)
+ __u32 link_cnt; // NUMBER RANGE(0,UINT_MAX)
+ __u32 attribs; // ATTRIBS
+ __u32 prot_bits; // PERMS
+ __u32 uid; // UID
+ __u32 gid; // GID
+ __u16 dev_major; // NUMBER RANGE(0,65535)
+ __u16 dev_minor; // NUMBER RANGE(0,65535)
+ __u8 fe_reserved1[4]; // UNUSED
+ __u64 child_dirnode; // NUMBER RANGE(0,ULONG_LONG_MAX)
+/* sizeof(fe) = 496 bytes */
+} ocfs_file_entry_v2;
+
int ocfs_init_global_alloc_bm (__u32 num_bits, int file, ocfs_vol_disk_hdr *volhdr)
{
int ret = 0;
@@ -64,6 +97,7 @@
return startbit;
}
+static int ocfs_create_root_file_entry(int file, ocfs_vol_disk_hdr *volhdr);
int ocfs_create_root_directory (int file, ocfs_vol_disk_hdr * volhdr)
{
@@ -141,6 +175,11 @@
journal_off += OCFS_JOURNAL_DEFAULT_SIZE;
}
+ if (major_version == OCFS2_MAJOR_VERSION) {
+ if (!ocfs_create_root_file_entry(file, volhdr))
+ goto bail;
+ }
+
status = 1;
bail:
@@ -149,6 +188,50 @@
return status;
}
+#define OCFS_ROOT_FILE_ENTRY_OFF (3 * OCFS_SECTOR_SIZE)
+
+static int ocfs_create_root_file_entry(int file, ocfs_vol_disk_hdr *volhdr)
+{
+ int ret = 0;
+ ocfs_file_entry_v2 *fe;
+
+ fe = MemAlloc(OCFS_SECTOR_SIZE);
+ if (fe == NULL)
+ goto bail;
+
+ memset(fe, 0, OCFS_SECTOR_SIZE);
+ strcpy(&fe->filename[0], "root");
+ fe->filename_len = strlen(fe->filename);
+ fe->local_ext = true;
+ fe->granularity = -1;
+ strcpy (fe->signature, OCFS_FILE_ENTRY_SIGNATURE);
+ SET_VALID_BIT (fe->sync_flags);
+ fe->sync_flags &= ~(OCFS_SYNC_FLAG_CHANGE);
+ fe->last_ext_ptr = 0;
+ fe->this_sector = OCFS_ROOT_FILE_ENTRY_OFF;
+ fe->alloc_size = 0ULL;
+ fe->file_size = 0ULL;
+ //fe->extents[0].disk_off = volhdr->root_off;
+ //fe->extents[0].file_off = 0ULL;
+ //fe->extents[0].num_bytes = OCFS_DEFAULT_DIR_NODE_SIZE;
+ fe->next_free_ext = 0;
+ fe->uid = volhdr->uid;
+ fe->gid = volhdr->gid;
+ fe->prot_bits = volhdr->prot_bits;
+ fe->attribs = OCFS_ATTRIB_DIRECTORY;
+ fe->child_dirnode = volhdr->root_off;
+
+ if (!SetSeek(file, OCFS_ROOT_FILE_ENTRY_OFF))
+ goto bail;
+ if (!Write(file, OCFS_SECTOR_SIZE, (void *) fe))
+ goto bail;
+ fsync(file);
+ ret = 1;
+bail:
+ safefree (fe);
+ return ret;
+}
+
void ocfs_init_dirnode(ocfs_dir_node *dir, __u64 disk_off, __u32 bit_off)
{
memset(dir, 0, OCFS_DEFAULT_DIR_NODE_SIZE);
More information about the Ocfs-tools-commits
mailing list