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