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

oleksandr at FreeBSD.org oleksandr at FreeBSD.org
Fri Jul 6 12:29:17 UTC 2012


Author: oleksandr
Date: Fri Jul  6 12:29:14 2012
New Revision: 239036
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=239036

Log:
  add some comments and correct checks

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

Modified: soc2012/oleksandr/udf-head/sys/fs/udf2/udf_vnops.c
==============================================================================
--- soc2012/oleksandr/udf-head/sys/fs/udf2/udf_vnops.c	Fri Jul  6 10:35:29 2012	(r239035)
+++ soc2012/oleksandr/udf-head/sys/fs/udf2/udf_vnops.c	Fri Jul  6 12:29:14 2012	(r239036)
@@ -170,10 +170,12 @@
 	struct vnode *vp = ap->a_vp;
 	struct udf_node *udf_node = VTOI(vp);
 
+	DPRINTF(NODE, ("udf_reclaim called for node %p\n", udf_node));	
+	/* 
+	 * Destroy the vm object and flush associated pages.
+	 */
 	vnode_destroy_vobject(vp);
 
-	if (udf_node == NULL)
-		return (0);
 #if 0
 	/* update note for closure */
 	udf_update(vp, NULL, NULL, NULL, UPDATE_CLOSE);
@@ -188,9 +190,14 @@
 	cache_purge(vp);
 #endif
 	/* dispose all node knowledge */
-	vfs_hash_remove(vp);
-	udf_dispose_node(udf_node);
-	vp->v_data = NULL;
+	if (udf_node == NULL) {
+		DPRINTF(NODE, ("udf_reclaim(): null udfnode\n"));
+	} else {
+		vfs_hash_remove(vp);
+		/* dispose all node knowledge */
+		udf_dispose_node(udf_node);
+		vp->v_data = NULL;
+	}
 
 	return (0);
 }
@@ -226,11 +233,12 @@
 		file_size = le64toh(udf_node->efe->inf_len);
 
 	/* read contents using buffercache */
-	while (error == 0 && uio->uio_resid > 0) {
+	do {
 		/* reached end? */
 		if (file_size <= uio->uio_offset)
 			break;
 
+		/* maximise length to file extremity */
 		n = min(file_size - uio->uio_offset, uio->uio_resid);
 
  		lbn = uio->uio_offset / udf_node->ump->discinfo.sector_size;
@@ -239,12 +247,12 @@
 		n = min(n, file_size - uio->uio_offset);
 		error = bread(vp, lbn, udf_node->ump->discinfo.sector_size, NOCRED, &bp);
 		n = min(n, udf_node->ump->discinfo.sector_size - bp->b_resid);
+
 		if (!error) 
 			error = uiomove(bp->b_data + on, n, uio);
 
 		brelse(bp);
-	}
-
+	} while (error == 0 && uio->uio_resid > 0 && n != 0) 
 #if 0
 	/* note access time unless not requested */
 	if (!(vp->v_mount->mnt_flag & MNT_NOATIME)) {


More information about the svn-soc-all mailing list