socsvn commit: r239283 - soc2012/oleksandr/udf-head/sys/fs/udf2

oleksandr at FreeBSD.org oleksandr at FreeBSD.org
Wed Jul 11 21:35:56 UTC 2012


Author: oleksandr
Date: Wed Jul 11 21:35:53 2012
New Revision: 239283
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=239283

Log:
  Clean code, add debug printf and KASSERTS

Modified:
  soc2012/oleksandr/udf-head/sys/fs/udf2/udf_subr.c
  soc2012/oleksandr/udf-head/sys/fs/udf2/udf_vnops.c

Modified: soc2012/oleksandr/udf-head/sys/fs/udf2/udf_subr.c
==============================================================================
--- soc2012/oleksandr/udf-head/sys/fs/udf2/udf_subr.c	Wed Jul 11 20:17:14 2012	(r239282)
+++ soc2012/oleksandr/udf-head/sys/fs/udf2/udf_subr.c	Wed Jul 11 21:35:53 2012	(r239283)
@@ -31,11 +31,11 @@
 #include <sys/cdefs.h>
 #include <sys/endian.h>
 #include <sys/param.h>
-#include <sys/systm.h> /* KASSERT */
+#include <sys/systm.h> 
 #include <sys/vnode.h>
 #include <sys/malloc.h>
 #include <sys/stat.h>
-#include <sys/mount.h> /* We shouldn't be, but are dependent on this header. */
+#include <sys/mount.h>
 #include <sys/iconv.h>
 #include "ecma167-udf.h"
 #include "udf.h"
@@ -353,7 +353,7 @@
 		return (EINVAL);
 	}
 
-/*	assert(*last_tracknr >= *first_tracknr); */
+	KASSERT(*last_tracknr >= *first_tracknr, ("udf_search_tracks: sanity check failed")); 
 	return (0);
 }
 
@@ -1151,8 +1151,8 @@
 			free(dscr, M_UDFTEMP);
 			break;
 		}
-		/* assert((dscr_size % sector_size) == 0); */
-
+		KASSERT(!(dscr_size % sector_size), ("udf_read_vds_extent:" 
+					"wrong descriptor sze")); 
 		len -= dscr_size;
 		loc += dscr_size / sector_size;
 	}
@@ -1181,6 +1181,7 @@
 
 	anchor  = ump->anchors[0];
 	anchor2 = ump->anchors[1];
+	KASSERT(anchor, ("udf_read_vds_space: anchor is not valid"));
 
 	if (anchor2) {
 		size = sizeof(struct extent_ad);
@@ -2075,7 +2076,8 @@
 		maps_on = ump->vtop[log_part];
 		switch (ump->vtop_tp[log_part]) {
 		case UDF_VTOP_TYPE_PHYS :
-			KASSERT(maps_on == log_part, (" maps_on != log_part")); 
+			KASSERT(maps_on == log_part, ("udf_process_vds: logical"
+					"partition do not equal vpartnr translations\n"));
 			ump->vtop_alloc[log_part] = UDF_ALLOC_SPACEMAP;
 			break;
 		case UDF_VTOP_TYPE_VIRT :
@@ -2083,7 +2085,8 @@
 			ump->vtop_alloc[maps_on]  = UDF_ALLOC_SEQUENTIAL;
 			break;
 		case UDF_VTOP_TYPE_SPARABLE :
-			KASSERT(maps_on == log_part, ("maps_on != log_part")); 
+			KASSERT(maps_on == log_part, ("udf_process_vds: logical" 
+					"partition do not equal vpartnr translations\n"));
 			ump->vtop_alloc[log_part] = UDF_ALLOC_SPACEMAP;
 			break;
 		case UDF_VTOP_TYPE_META :
@@ -2937,8 +2940,9 @@
 	sector_size = le32toh(ump->logical_vol->lb_size);
 
 	/* check assertions */
-	/* assert(vat_node->fe || vat_node->efe); */
-	/* assert(ump->logvol_integrity); */
+	KASSERT(vat_node->fe || vat_node->efe, ("udf_check_for_vat:" 
+				"Extended File Entry or File Entry is null\n"));
+	KASSERT(ump->logvol_integrity, ("udf_check_for_vat: invalid current integrity")); 
 
 	/* set vnode type to regular file or we can't read from it! */
 	/* vat_node->vnode->v_type = VREG; */
@@ -3037,7 +3041,7 @@
 		vat_offset  = vat->header_len;
 		vat_entries = (vat_length - vat_offset)/4;
 
-		/* assert(lvinfo); */
+		KASSERT(lvinfo, ("udf_check_for_vat: invalid integrity descriptor")); 
 		lvinfo->num_files        = vat->num_files;
 		lvinfo->num_directories  = vat->num_directories;
 		lvinfo->min_udf_readver  = vat->min_udf_readver;
@@ -3134,15 +3138,16 @@
 
 			if (file_type == 248)
 			{
+				DPRINTF(VOLUMES, ("Checking for VAT at sector %d\n", vat_loc));
 				icb_loc.loc.part_num = htole16(UDF_VTOP_RAWPART);
 				icb_loc.loc.lb_num = htole32(vat_loc);
 				ino = udf_get_node_id(&icb_loc);
 
 				error = udf_get_node(ump, ino, &vat_node);
-				/* error = udf_vget(ump->vfs_mountp, ino, LK_EXCLUSIVE, &vp); */
-				/* vat_node = VTOI(vp); */
 				if (!error) {
 					error = udf_check_for_vat(vat_node);
+					DPRINTFIF(VOLUMES, !error,
+						("VAT accepted at %d\n", vat_loc));
 					if (!error)
 						break;
 				}
@@ -4496,15 +4501,16 @@
 	struct extfile_entry *efe = dir_node->efe;
 	struct fileid_desc *fid;
 	struct dirent *dirent;
-	uint64_t file_size, pre_diroffset, diroffset;
+	uint64_t file_size, pre_diroffset, diroffset = 0;
 	uint32_t lb_size;
-	int error;
+	int error = 0;
 
 	/* make sure we have a dirhash to work on */
 	dirh = dir_node->dir_hash;
-	KASSERT(dirh);
-	KASSERT(dirh->refcnt > 0);
+	KASSERT(dirh, ("dirhash_fill: dirhash is null"));
+	KASSERT(dirh->dn_refcount > 0, ("dirhash_fill: dirhash does not have reference"));
 
+#if 0	
 	if (dirh->flags & DIRH_BROKEN)
 		return (EIO);
 	if (dirh->flags & DIRH_COMPLETE)
@@ -4512,12 +4518,13 @@
 
 	/* make sure we have a clean dirhash to add to */
 	dirhash_purge_entries(dirh);
+#endif	
 
 	/* get directory filesize */
 	if (fe) {
 		file_size = le64toh(fe->inf_len);
 	} else {
-		assert(efe);
+		KASSERT(node->efe, ("Extended File Entry is null"));
 		file_size = le64toh(efe->inf_len);
 	}
 
@@ -4528,8 +4535,6 @@
 	/* allocate temporary space for dirent */
 	dirent = malloc(sizeof(struct dirent), M_UDFTEMP, M_WAITOK);
 
-	error = 0;
-	diroffset = 0;
 	while (diroffset < file_size) {
 		/* transfer a new fid/dirent */
 		pre_diroffset = diroffset;
@@ -5293,48 +5298,6 @@
 #endif
 
 /* --------------------------------------------------------------------- */
-#if 0
-int
-udf_vget(struct mount *mp, ino_t ino, int flags, struct vnode **vpp)
-{
-	printf("%s ran\n", __func__);
-
-	int error;
-	struct udf_node *unode;
-	struct udf_mount *ump;
-	struct vnode *nvp;
-	struct long_ad node_icb_loc;
-	int udf_file_type;
-
-	unode = uma_zalloc(udf_zone_node, M_WAITOK | M_ZERO);
-	unode = udf_alloc_node()
-	
-	unode->hash_id = ino;
-
-	lockmgr(nvp->v_vnlock, LK_EXCLUSIVE, NULL);
-	if ((error = insmntque(nvp, mp)) != 0) {
-		uma_zfree(udf_zone_node, unode);
-		return (error);
-	} 
-
-	/* TODO: Does this leak unode or vnodes? */
-	error = vfs_hash_insert(nvp, ino, flags, curthread, vpp, NULL, NULL);
-	if (error || *vpp != NULL)
-		return (error);
-
-	/* 
-	 * Load read and set up the unode structure.
-	 */
- 	udf_get_node_longad(ino, &node_icb_loc);
-	error = udf_get_node(ump, &node_icb_loc, unode);
-	if (error) {
-		vgone(nvp);
-		vput(nvp);
-		ungetnewvnode(nvp);
-	}
-	return 
-}
-#endif
 
 /*
  * Each node can have an attached streamdir node though not recursively. These
@@ -5363,6 +5326,8 @@
 	uint32_t lb_size, sector, dummy;
 	uint8_t  *file_data;
 
+	DPRINTF(NODE, ("udf_get_node called\n"));
+
  	udf_get_node_longad(ino, &icb_loc);
 
 
@@ -6221,12 +6186,13 @@
 	int           enough, error;
 	uint32_t      fid_size, lb_size;
 
-/*	assert(fid);
-	assert(dirent);
-	assert(dir_node);
-	assert(offset);
-	assert(*offset != 1); */
+	KASSERT(fid, ("udf_read_fid_stream: File Identifier Descriptor is null"));
+        /* KASSERT(dirent, ("dirent == null")); */
+	KASSERT(dir_node, ("udf_read_fid_stream: udf_node is null"));
+	KASSERT(offset, ("udf_read_fid_stream: offset == 0"));
+	KASSERT(*offset != 1, ("udf_read_fid_stream: offset != 1"));
 
+	DPRINTF(FIDS, ("read_fid_stream called at offset %llu\n", *offset));
 	/* check if we're past the end of the directory */
 	if (fe) {
 		file_size = le64toh(fe->inf_len);
@@ -6259,6 +6225,7 @@
 	if (error)
 		return (error);
 
+	DPRINTF(FIDS, ("\tfid piece read in fine\n"));
 	/*
 	 * Check if we got a whole descriptor.
 	 * TODO Try to `resync' directory stream when something is very wrong.
@@ -6269,11 +6236,13 @@
 	if (error) {
 		goto brokendir;
 	}
+	DPRINTF(FIDS, ("\ttag check ok\n"));
 
 	if (le16toh(fid->tag.id) != TAGID_FID) {
 		error = EIO;
 		goto brokendir;
 	}
+	DPRINTF(FIDS, ("\ttag checked ok: got TAGID_FID\n"));
 
 	/* check for length */
 	fid_size = udf_fidsize(fid);
@@ -6282,16 +6251,22 @@
 		error = EIO;
 		goto brokendir;
 	}
+	DPRINTF(FIDS, ("\tthe complete fid is read in\n"));
 
 	/* check FID contents */
 	error = udf_check_tag_payload((union dscrptr *) fid, lb_size);
 brokendir:
 	if (error) {
 		/* note that is sometimes a bit quick to report */
+		printf("UDF: BROKEN DIRECTORY ENTRY\n");
 		/* RESYNC? */
 		/* TODO: use udf_resync_fid_stream */
 		return (EIO);
 	}
+	DPRINTF(FIDS, ("\tplayload checked ok\n"));
+	
+	/* we got a whole and valid descriptor! */
+	DPRINTF(FIDS, ("\tinterpret FID\n"));
 
 	/* advance */
 	*offset += fid_size;

Modified: soc2012/oleksandr/udf-head/sys/fs/udf2/udf_vnops.c
==============================================================================
--- soc2012/oleksandr/udf-head/sys/fs/udf2/udf_vnops.c	Wed Jul 11 20:17:14 2012	(r239282)
+++ soc2012/oleksandr/udf-head/sys/fs/udf2/udf_vnops.c	Wed Jul 11 21:35:53 2012	(r239283)
@@ -520,8 +520,8 @@
 	/* bp->b_lblkno = bp->b_blkno; */
 
 	/* check assertions: we OUGHT to always get multiples of this */
-	KASSERT(sectors * lb_size == bp->b_bcount, ("udf_strategy: wrong length 
-				to fetch/store in sectors")); 
+	KASSERT(sectors * lb_size == bp->b_bcount, ("udf_strategy: wrong length"
+				"to fetch/store in sectors")); 
 	if (bp->b_blkno == bp->b_lblkno) {
 		/* get logical block and run */
 		error = udf_bmap_translate(udf_node, bp->b_lblkno, &lsector, &maxblks);


More information about the svn-soc-all mailing list