summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Elder <elder@dreamhost.com>2012-03-07 11:40:08 -0600
committerAlex Elder <elder@dreamhost.com>2012-03-22 10:47:52 -0500
commit0cdf9e60189a87356a865a96dbafc2240af5c91d (patch)
tree832d6059c472d2d8777a9819a0ecb7b945167a1f
parente36b13cceb46136d849aeee06b4907ad3570ba78 (diff)
downloadlinux-3.10-0cdf9e60189a87356a865a96dbafc2240af5c91d.tar.gz
linux-3.10-0cdf9e60189a87356a865a96dbafc2240af5c91d.tar.bz2
linux-3.10-0cdf9e60189a87356a865a96dbafc2240af5c91d.zip
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>
-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 adca1e6537a..4f1714c4c93 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];
static atomic_t addr_str_seq = ATOMIC_INIT(0);
static struct page *zero_page; /* used in certain error cases */
-static void *zero_page_address; /* kernel virtual addr of zero_page */
const char *ceph_pr_addr(const struct sockaddr_storage *ss)
{
@@ -111,9 +110,6 @@ void _ceph_msgr_exit(void)
ceph_msgr_wq = NULL;
}
- BUG_ON(zero_page_address == NULL);
- zero_page_address = NULL;
-
BUG_ON(zero_page == NULL);
kunmap(zero_page);
page_cache_release(zero_page);
@@ -126,9 +122,6 @@ int ceph_msgr_init(void)
zero_page = ZERO_PAGE(0);
page_cache_get(zero_page);
- BUG_ON(zero_page_address != NULL);
- zero_page_address = kmap(zero_page);
-
ceph_msgr_wq = alloc_workqueue("ceph-msgr", WQ_NON_REENTRANT, 0);
if (ceph_msgr_wq)
return 0;
@@ -889,7 +882,7 @@ static int write_partial_msg_pages(struct ceph_connection *con)
} else {
page = zero_page;
if (do_datacrc)
- kaddr = zero_page_address;
+ kaddr = kmap(page);
}
len = min_t(int, max_write - con->out_msg_pos.page_pos,
total_max_write);
@@ -908,7 +901,7 @@ static int write_partial_msg_pages(struct ceph_connection *con)
con->out_msg_pos.page_pos + page_shift,
len, 1);
- if (do_datacrc && kaddr != zero_page_address)
+ if (do_datacrc)
kunmap(page);
if (ret <= 0)