. diag_nanobsd.php:
 . Since conf_mount_ro() is always being called, always call
   conf_mount_rw to keep refcount correct
 . Do not show refcount_read() return when it's -1
. config.lib.inc
 . Increment and decrement refcount even if nanobsd_force_rw is set.
   This is necessary to avoid partition being mounted as RO when
   nanobsd_force_rw is disabled and any process requested it to be RW
This commit is contained in:
Renato Botelho 2013-10-24 18:01:52 -02:00
parent a4e4b5609c
commit b8250344f5
2 changed files with 10 additions and 12 deletions

View File

@ -308,10 +308,7 @@ function conf_mount_rw() {
if($g['platform'] == "cdrom" or $g['platform'] == "pfSense")
return;
if (!isset($config['system']['nanobsd_force_rw']) && (refcount_reference(1000) > 1))
return;
if (isset($config['system']['nanobsd_force_rw']) && is_writable("/"))
if ((refcount_reference(1000) > 1) && is_writable("/"))
return;
$status = mwexec("/sbin/mount -u -w -o sync,noatime {$g['cf_path']}");
@ -348,12 +345,15 @@ function conf_mount_ro() {
/* Do not trust $g['platform'] since this can be clobbered during factory reset. */
$platform = trim(file_get_contents("/etc/platform"));
/* do not umount on cdrom or pfSense platforms */
if($platform == "cdrom" or $platform == "pfSense" or isset($config['system']['nanobsd_force_rw']))
if($platform == "cdrom" or $platform == "pfSense")
return;
if (refcount_unreference(1000) > 0)
return;
if(isset($config['system']['nanobsd_force_rw']))
return;
if($g['booting'])
return;

View File

@ -108,14 +108,11 @@ if ($_POST['changero']) {
}
if ($_POST['setrw']) {
if (isset($_POST['nanobsd_force_rw'])) {
if (!is_writable("/")) {
conf_mount_rw();
}
conf_mount_rw();
if (isset($_POST['nanobsd_force_rw']))
$config['system']['nanobsd_force_rw'] = true;
} else {
else
unset($config['system']['nanobsd_force_rw']);
}
write_config("Changed Permanent Read/Write Setting");
conf_mount_ro();
@ -175,7 +172,8 @@ if ($savemsg)
<form action="diag_nanobsd.php" method="post" name="iform">
<?php if (is_writable("/")) {
$refcount = refcount_read(1000);
if ($refcount == 1) {
/* refcount_read returns -1 when shared memory section does not exist */
if ($refcount == 1 || $refcount == -1) {
$refdisplay = "";
} else {
$refdisplay = " (reference count " . $refcount . ")";