aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorAlex Elder <elder@dreamhost.com>2012-03-07 12:40:08 -0500
committerAlex Elder <elder@dreamhost.com>2012-03-22 11:47:52 -0400
commit0cdf9e60189a87356a865a96dbafc2240af5c91d (patch)
tree832d6059c472d2d8777a9819a0ecb7b945167a1f /net
parente36b13cceb46136d849aeee06b4907ad3570ba78 (diff)
libceph: get rid of zero_page_address
There's not a lot of benefit to zero_page_address, which basically holds a mapping of the zero page through the life of the messenger module. Even with our own mapping, the sendpage interface where it's used may need to kmap() it again. It's almost certain to be in low memory anyway. So stop treating the zero page specially in write_partial_msg_pages() and just get rid of zero_page_address entirely. Signed-off-by: Alex Elder <elder@dreamhost.com> Reviewed-by: Sage Weil <sage@newdream.net>
Diffstat (limited to 'net')
-rw-r--r--net/ceph/messenger.c11
1 files changed, 2 insertions, 9 deletions
diff --git a/net/ceph/messenger.c b/net/ceph/messenger.c
index adca1e6537ab..4f1714c4c93b 100644
--- a/net/ceph/messenger.c
+++ b/net/ceph/messenger.c
@@ -61,7 +61,6 @@ static char addr_str[ADDR_STR_COUNT][MAX_ADDR_STR_LEN];
61static atomic_t addr_str_seq = ATOMIC_INIT(0); 61static atomic_t addr_str_seq = ATOMIC_INIT(0);
62 62
63static struct page *zero_page; /* used in certain error cases */ 63static struct page *zero_page; /* used in certain error cases */
64static void *zero_page_address; /* kernel virtual addr of zero_page */
65 64
66const char *ceph_pr_addr(const struct sockaddr_storage *ss) 65const char *ceph_pr_addr(const struct sockaddr_storage *ss)
67{ 66{
@@ -111,9 +110,6 @@ void _ceph_msgr_exit(void)
111 ceph_msgr_wq = NULL; 110 ceph_msgr_wq = NULL;
112 } 111 }
113 112
114 BUG_ON(zero_page_address == NULL);
115 zero_page_address = NULL;
116
117 BUG_ON(zero_page == NULL); 113 BUG_ON(zero_page == NULL);
118 kunmap(zero_page); 114 kunmap(zero_page);
119 page_cache_release(zero_page); 115 page_cache_release(zero_page);
@@ -126,9 +122,6 @@ int ceph_msgr_init(void)
126 zero_page = ZERO_PAGE(0); 122 zero_page = ZERO_PAGE(0);
127 page_cache_get(zero_page); 123 page_cache_get(zero_page);
128 124
129 BUG_ON(zero_page_address != NULL);
130 zero_page_address = kmap(zero_page);
131
132 ceph_msgr_wq = alloc_workqueue("ceph-msgr", WQ_NON_REENTRANT, 0); 125 ceph_msgr_wq = alloc_workqueue("ceph-msgr", WQ_NON_REENTRANT, 0);
133 if (ceph_msgr_wq) 126 if (ceph_msgr_wq)
134 return 0; 127 return 0;
@@ -889,7 +882,7 @@ static int write_partial_msg_pages(struct ceph_connection *con)
889 } else { 882 } else {
890 page = zero_page; 883 page = zero_page;
891 if (do_datacrc) 884 if (do_datacrc)
892 kaddr = zero_page_address; 885 kaddr = kmap(page);
893 } 886 }
894 len = min_t(int, max_write - con->out_msg_pos.page_pos, 887 len = min_t(int, max_write - con->out_msg_pos.page_pos,
895 total_max_write); 888 total_max_write);
@@ -908,7 +901,7 @@ static int write_partial_msg_pages(struct ceph_connection *con)
908 con->out_msg_pos.page_pos + page_shift, 901 con->out_msg_pos.page_pos + page_shift,
909 len, 1); 902 len, 1);
910 903
911 if (do_datacrc && kaddr != zero_page_address) 904 if (do_datacrc)
912 kunmap(page); 905 kunmap(page);
913 906
914 if (ret <= 0) 907 if (ret <= 0)