Print this page
NEX-3046 hsfs asserts instead of handling getpage beyond EOF
Reviewed by: Kevin Crowe <kevin.crowe@nexenta.com>
Reviewed by: Sanjay Nadkarni <sanjay.nadkarni@nexenta.com>
Reviewed by: Yuri Pankov <yuri.pankov@nexenta.com>
Reviewed by: Marcel Telka <marcel.telka@nexenta.com>
Revert "NEX-5659 hsfs asserts instead of handling getpage beyond EOF"
This reverts commit c4b53e5f3fdfec5d117f9719bc4b77581f318442.
NEX-5659 hsfs asserts instead of handling getpage beyond EOF
Reviewed by: Kevin Crowe <kevin.crowe@nexenta.com>
Reviewed by: Sanjay Nadkarni <sanjay.nadkarni@nexenta.com>
Reviewed by: Yuri Pankov <yuri.pankov@nexenta.com>
Reviewed by: Marcel Telka <marcel.telka@nexenta.com>
NEX-2974 cannot exec from hsfs since illumos 5405

@@ -20,11 +20,11 @@
  */
 
 /*
  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
- * Copyright 2015 Nexenta Systems, Inc.  All rights reserved.
+ * Copyright 2016 Nexenta Systems, Inc.  All rights reserved.
  * Copyright (c) 2017 by Delphix. All rights reserved.
  */
 
 /*
  * Vnode operations for the High Sierra filesystem

@@ -1159,10 +1159,12 @@
                  * Need to really do disk IO to get the page.
                  */
                 if (!calcdone) {
                         extension += hp->hs_ra_bytes;
 
+                        len = (extension != 0) ? extension : PAGESIZE;
+
                         /*
                          * Some cd writers don't write sectors that aren't
                          * used. Also, there's no point in reading sectors
                          * we'll never look at.  So, if we're asked to go
                          * beyond the end of a file, truncate to the length

@@ -1169,20 +1171,16 @@
                          * of that file.
                          *
                          * Additionally, this behaviour is required by section
                          * 6.4.5 of ISO 9660:1988(E).
                          */
-                        len = MIN(extension ? extension : PAGESIZE,
-                            filsiz - off);
+                        if (off < filsiz && off + len > filsiz)
+                                len = filsiz - off;
 
-                        /* A little paranoia. */
-                        ASSERT(len > 0);
-
                         /*
                          * After all that, make sure we're asking for things
-                         * in units that bdev_strategy() will understand
-                         * (see bug 4202551).
+                         * in units that bdev_strategy() will understand.
                          */
                         len = roundup(len, DEV_BSIZE);
                         calcdone = 1;
                 }