Preserve max_dbs_open division during config change

And prevent max_dbs_open going below 1.
diff --git a/src/couch/src/couch_server.erl b/src/couch/src/couch_server.erl
index 480ed58..59b630e 100644
--- a/src/couch/src/couch_server.erl
+++ b/src/couch/src/couch_server.erl
@@ -293,7 +293,7 @@
     process_flag(trap_exit, true),
     {ok, #server{root_dir=RootDir,
                 engines = Engines,
-                max_dbs_open=MaxDbsOpen div couch_server:num_servers(),
+                max_dbs_open=per_couch_server(MaxDbsOpen),
                 update_lru_on_read=UpdateLruOnRead,
                 start_time=couch_util:rfc1123_date(),
                 couch_dbs=couch_dbs(N),
@@ -322,11 +322,13 @@
 handle_config_change("couchdb", "update_lru_on_read", _, _, N) ->
     gen_server:call(couch_server(N),{set_update_lru_on_read,false}),
     {ok, N};
-handle_config_change("couchdb", "max_dbs_open", Max, _, N) when is_list(Max) ->
-    gen_server:call(couch_server(N),{set_max_dbs_open,list_to_integer(Max)}),
+handle_config_change("couchdb", "max_dbs_open", Max0, _, N) when is_list(Max0) ->
+    Max1 = per_couch_server(list_to_integer(Max0)),
+    gen_server:call(couch_server(N),{set_max_dbs_open,Max1}),
     {ok, N};
 handle_config_change("couchdb", "max_dbs_open", _, _, N) ->
-    gen_server:call(couch_server(N),{set_max_dbs_open,?MAX_DBS_OPEN}),
+    Max = per_couch_server(?MAX_DBS_OPEN),
+    gen_server:call(couch_server(N),{set_max_dbs_open,Max}),
     {ok, N};
 handle_config_change("couchdb_engines", _, _, _, N) ->
     gen_server:call(couch_server(N), reload_engines),
@@ -356,6 +358,10 @@
     erlang:send_after(?RELISTEN_DELAY, whereis(?MODULE), {restart_config_listener, N}).
 
 
+per_couch_server(X) ->
+    erlang:max(1, X div couch_server:num_servers()).
+
+
 all_databases() ->
     {ok, DbList} = all_databases(
         fun(DbName, Acc) -> {ok, [DbName | Acc]} end, []),