John L. Villalovos
2004-Apr-21 19:18 UTC
[Ocfs2-devel] Commenting patch for 1st time mount stuff
Redoing commenting patch with /* */ comments Index: super.c ==================================================================--- super.c (revision 860) +++ super.c (working copy) @@ -961,6 +961,8 @@ osb->publ_map |= (1 << osb->node_num); osb->vol_state = VOLUME_INIT; + /* Check if first time this partition has been mounted. If so create + the root Oracle INode. */ status = ocfs_create_root_oin (osb, NULL); if (status >= 0) osb->vol_state = VOLUME_ENABLED; Index: oin.c ==================================================================--- oin.c (revision 860) +++ oin.c (working copy) @@ -446,6 +446,11 @@ /* ocfs_create_root_oin() * + * This function will create the root Oracle INode (OIN) on the file system if + * this is the first time that this partition has ever been mounted. + * + * If this is NOT the first time this partition has been mounted (meaning it + * has been mounted before) then this function does nothing. */ int ocfs_create_root_oin (ocfs_super * osb, struct inode *root) { @@ -459,7 +464,15 @@ LOG_ENTRY (); + /* Is this the first time this partition has been mounted? */ if (osb->vol_layout.root_start_off == 0) { + /* This is our first time being mounted. We need to take care + * of setting up the root Oracle inode. In order to do this we + * are going to call ocfs_create_root_dir_node. So we need to + * get the disk offset to the root directory (root_dirnode). + * In order to get that we need to read in the volume header + * from the first sector of the disk. */ + status = ocfs_wait_for_disk_lock_release (osb, OCFS_VOLUME_LOCK_OFFSET, 10000, OCFS_DLM_NO_LOCK); if (status < 0) { @@ -471,12 +484,14 @@ OCFS_DLM_EXCLUSIVE_LOCK, FLAG_FILE_CREATE, &lockres, &bh, NULL); if (status >= 0) { + /* Read the volume header from the first sector of the + * partition and put it into our buffer head */ status = ocfs_read_bh(osb, 0, &hdr_bh, 0, NULL); if (status < 0) LOG_ERROR_STATUS (status); tmpstat = ocfs_release_lock (osb, OCFS_VOLUME_LOCK_OFFSET, OCFS_DLM_EXCLUSIVE_LOCK, 0, lockres, bh, NULL); - + if (bh) brelse(bh); @@ -492,7 +507,13 @@ LOG_ERROR_STATUS (status); goto finally; } - + + /* Get the volume header data from our buffer head. We need to + * know the following in order to call + * ocfs_create_root_dir_node(): + * * root_off: disk offset to the ocfs root dirnode + * (root_directory) + * * internal_off: disk offset to the data segment */ volDiskHdr = (ocfs_vol_disk_hdr *) OCFS_BH_GET_DATA_READ(hdr_bh); /* read */ root_off = volDiskHdr->root_off; int_off = volDiskHdr->internal_off; @@ -502,10 +523,13 @@ ocfs_wait_for_disk_lock_release (osb, OCFS_VOLUME_LOCK_OFFSET, 30000, OCFS_DLM_NO_LOCK); + /* Setup the root_start_off with the correct value so + * that it will not run this function the next time the + * filesystem is mounted. */ osb->vol_layout.root_start_off = root_off; osb->vol_layout.root_int_off = int_off; } - + /* Do all the work in creating our root directory */ status = ocfs_create_root_dir_node (osb); if (status < 0) { LOG_ERROR_STATUS (status); -------------- next part -------------- Index: super.c ==================================================================--- super.c (revision 860) +++ super.c (working copy) @@ -961,6 +961,8 @@ osb->publ_map |= (1 << osb->node_num); osb->vol_state = VOLUME_INIT; + /* Check if first time this partition has been mounted. If so create + the root Oracle INode. */ status = ocfs_create_root_oin (osb, NULL); if (status >= 0) osb->vol_state = VOLUME_ENABLED; Index: oin.c ==================================================================--- oin.c (revision 860) +++ oin.c (working copy) @@ -446,6 +446,11 @@ /* ocfs_create_root_oin() * + * This function will create the root Oracle INode (OIN) on the file system if + * this is the first time that this partition has ever been mounted. + * + * If this is NOT the first time this partition has been mounted (meaning it + * has been mounted before) then this function does nothing. */ int ocfs_create_root_oin (ocfs_super * osb, struct inode *root) { @@ -459,7 +464,15 @@ LOG_ENTRY (); + /* Is this the first time this partition has been mounted? */ if (osb->vol_layout.root_start_off == 0) { + /* This is our first time being mounted. We need to take care + * of setting up the root Oracle inode. In order to do this we + * are going to call ocfs_create_root_dir_node. So we need to + * get the disk offset to the root directory (root_dirnode). + * In order to get that we need to read in the volume header + * from the first sector of the disk. */ + status = ocfs_wait_for_disk_lock_release (osb, OCFS_VOLUME_LOCK_OFFSET, 10000, OCFS_DLM_NO_LOCK); if (status < 0) { @@ -471,12 +484,14 @@ OCFS_DLM_EXCLUSIVE_LOCK, FLAG_FILE_CREATE, &lockres, &bh, NULL); if (status >= 0) { + /* Read the volume header from the first sector of the + * partition and put it into our buffer head */ status = ocfs_read_bh(osb, 0, &hdr_bh, 0, NULL); if (status < 0) LOG_ERROR_STATUS (status); tmpstat = ocfs_release_lock (osb, OCFS_VOLUME_LOCK_OFFSET, OCFS_DLM_EXCLUSIVE_LOCK, 0, lockres, bh, NULL); - + if (bh) brelse(bh); @@ -492,7 +507,13 @@ LOG_ERROR_STATUS (status); goto finally; } - + + /* Get the volume header data from our buffer head. We need to + * know the following in order to call + * ocfs_create_root_dir_node(): + * * root_off: disk offset to the ocfs root dirnode + * (root_directory) + * * internal_off: disk offset to the data segment */ volDiskHdr = (ocfs_vol_disk_hdr *) OCFS_BH_GET_DATA_READ(hdr_bh); /* read */ root_off = volDiskHdr->root_off; int_off = volDiskHdr->internal_off; @@ -502,10 +523,13 @@ ocfs_wait_for_disk_lock_release (osb, OCFS_VOLUME_LOCK_OFFSET, 30000, OCFS_DLM_NO_LOCK); + /* Setup the root_start_off with the correct value so + * that it will not run this function the next time the + * filesystem is mounted. */ osb->vol_layout.root_start_off = root_off; osb->vol_layout.root_int_off = int_off; } - + /* Do all the work in creating our root directory */ status = ocfs_create_root_dir_node (osb); if (status < 0) { LOG_ERROR_STATUS (status);