All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] swap: send callback when swap slot is freed
@ 2009-08-12 14:37 ` Nitin Gupta
  0 siblings, 0 replies; 207+ messages in thread
From: Nitin Gupta @ 2009-08-12 14:37 UTC (permalink / raw)
  To: mingo; +Cc: linux-kernel

Currently, we have "swap discard" mechanism which sends a discard bio request
when we find a free cluster during scan_swap_map(). This callback can come a
long time after swap slots are actually freed.

This delay in callback is a great problem when (compressed) RAM [1] is used
as a swap device. So, this change adds a callback which is called as
soon as a swap slot becomes free. For above mentioned case of swapping
over compressed RAM device, this is very useful since we can immediately
free memory allocated for this swap page.

This callback does not replace swap discard support. It is called with
swap_lock held, so it is meant to trigger action that finishes quickly.
However, swap discard is an I/O request and can be used for taking longer
actions.

Links:
[1] http://code.google.com/p/compcache/

Signed-off-by: Nitin Gupta <ngupta@vflare.org>
---

 include/linux/swap.h |    5 +++++
 mm/swapfile.c        |   16 ++++++++++++++++
 2 files changed, 21 insertions(+), 0 deletions(-)

diff --git a/include/linux/swap.h b/include/linux/swap.h
index 7c15334..4cbe3c4 100644
--- a/include/linux/swap.h
+++ b/include/linux/swap.h
@@ -8,6 +8,7 @@
 #include <linux/memcontrol.h>
 #include <linux/sched.h>
 #include <linux/node.h>
+#include <linux/blkdev.h>
 
 #include <asm/atomic.h>
 #include <asm/page.h>
@@ -20,6 +21,8 @@ struct bio;
 #define SWAP_FLAG_PRIO_MASK	0x7fff
 #define SWAP_FLAG_PRIO_SHIFT	0
 
+typedef void (swap_free_notify_fn) (struct block_device *, unsigned long);
+
 static inline int current_is_kswapd(void)
 {
 	return current->flags & PF_KSWAPD;
@@ -155,6 +158,7 @@ struct swap_info_struct {
 	unsigned int max;
 	unsigned int inuse_pages;
 	unsigned int old_block_size;
+	swap_free_notify_fn *swap_free_notify_fn;
 };
 
 struct swap_list_t {
@@ -295,6 +299,7 @@ extern sector_t swapdev_block(int, pgoff_t);
 extern struct swap_info_struct *get_swap_info_struct(unsigned);
 extern int reuse_swap_page(struct page *);
 extern int try_to_free_swap(struct page *);
+extern void set_swap_free_notify(unsigned, swap_free_notify_fn *);
 struct backing_dev_info;
 
 /* linux/mm/thrash.c */
diff --git a/mm/swapfile.c b/mm/swapfile.c
index 8ffdc0d..aa95fc7 100644
--- a/mm/swapfile.c
+++ b/mm/swapfile.c
@@ -552,6 +552,20 @@ out:
 	return NULL;
 }
 
+/*
+ * Sets callback for event when swap_map[offset] == 0
+ * i.e. page at this swap offset is no longer used.
+ */
+void set_swap_free_notify(unsigned type, swap_free_notify_fn *notify_fn)
+{
+	struct swap_info_struct *sis;
+	sis = get_swap_info_struct(type);
+	BUG_ON(!sis);
+	sis->swap_free_notify_fn = notify_fn;
+	return;
+}
+EXPORT_SYMBOL(set_swap_free_notify);
+
 static int swap_entry_free(struct swap_info_struct *p,
 			   swp_entry_t ent, int cache)
 {
@@ -583,6 +597,8 @@ static int swap_entry_free(struct swap_info_struct *p,
 			swap_list.next = p - swap_info;
 		nr_swap_pages++;
 		p->inuse_pages--;
+		if (p->swap_free_notify_fn)
+			p->swap_free_notify_fn(p->bdev, offset);
 	}
 	if (!swap_count(count))
 		mem_cgroup_uncharge_swap(ent);

^ permalink raw reply related	[flat|nested] 207+ messages in thread

end of thread, other threads:[~2009-08-22  7:34 UTC | newest]

Thread overview: 207+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-08-12 14:37 [PATCH] swap: send callback when swap slot is freed Nitin Gupta
2009-08-12 14:37 ` Nitin Gupta
2009-08-12 18:33 ` Peter Zijlstra
2009-08-12 22:13 ` Andrew Morton
2009-08-12 22:48 ` Hugh Dickins
2009-08-12 22:48   ` Hugh Dickins
2009-08-13  2:30   ` Nitin Gupta
2009-08-13  2:30     ` Nitin Gupta
2009-08-13  6:53     ` Peter Zijlstra
2009-08-13  6:53       ` Peter Zijlstra
2009-08-13 14:44       ` Nitin Gupta
2009-08-13 14:44         ` Nitin Gupta
2009-08-13 17:45     ` Hugh Dickins
2009-08-13 17:45       ` Hugh Dickins
2009-08-13  2:41   ` Nitin Gupta
2009-08-13  2:41     ` Nitin Gupta
2009-08-13  5:05     ` compcache as a pre-swap area (was: [PATCH] swap: send callback when swap slot is freed) Al Boldi
2009-08-13  5:05       ` Al Boldi
2009-08-13 17:31       ` Nitin Gupta
2009-08-13 17:31         ` Nitin Gupta
2009-08-14  4:02         ` Al Boldi
2009-08-14  4:02           ` Al Boldi
2009-08-14  4:53           ` compcache as a pre-swap area Nitin Gupta
2009-08-14  4:53             ` Nitin Gupta
2009-08-14 15:49             ` Al Boldi
2009-08-14 15:49               ` Al Boldi
2009-08-15 11:00               ` Al Boldi
2009-08-15 11:00                 ` Al Boldi
2009-08-13 15:13   ` Discard support (was Re: [PATCH] swap: send callback when swap slot is freed) Matthew Wilcox
2009-08-13 15:13     ` Matthew Wilcox
2009-08-13 15:17     ` david
2009-08-13 15:17       ` david
2009-08-13 15:26       ` Matthew Wilcox
2009-08-13 15:26         ` Matthew Wilcox
2009-08-13 15:43     ` James Bottomley
2009-08-13 15:43       ` James Bottomley
2009-08-13 18:22       ` Ric Wheeler
2009-08-13 18:22         ` Ric Wheeler
2009-08-13 16:13     ` Nitin Gupta
2009-08-13 16:13       ` Nitin Gupta
2009-08-13 16:26     ` Markus Trippelsdorf
2009-08-13 16:26       ` Markus Trippelsdorf
2009-08-13 16:33       ` david
2009-08-13 16:33         ` david
2009-08-13 18:15         ` Greg Freemyer
2009-08-13 18:15           ` Greg Freemyer
2009-08-13 18:15           ` Greg Freemyer
2009-08-13 19:18           ` James Bottomley
2009-08-13 19:18             ` James Bottomley
2009-08-13 20:31             ` Richard Sharpe
2009-08-13 20:31               ` Richard Sharpe
2009-08-13 20:31               ` Richard Sharpe
2009-08-14 22:03             ` Mark Lord
2009-08-14 22:03               ` Mark Lord
2009-08-14 22:54               ` Greg Freemyer
2009-08-14 22:54                 ` Greg Freemyer
2009-08-15 13:12                 ` Mark Lord
2009-08-15 13:12                   ` Mark Lord
2009-08-13 20:44           ` david
2009-08-13 20:44             ` david
2009-08-13 20:54             ` Bryan Donlan
2009-08-13 20:54               ` Bryan Donlan
2009-08-14 22:10               ` Mark Lord
2009-08-14 22:10                 ` Mark Lord
2009-08-14 23:21                 ` Chris Worley
2009-08-14 23:21                   ` Chris Worley
2009-08-14 23:45                   ` Matthew Wilcox
2009-08-14 23:45                     ` Matthew Wilcox
2009-08-15  0:19                     ` Chris Worley
2009-08-15  0:19                       ` Chris Worley
2009-08-15  0:30                       ` Greg Freemyer
2009-08-15  0:30                         ` Greg Freemyer
2009-08-15  0:38                         ` Chris Worley
2009-08-15  0:38                           ` Chris Worley
2009-08-15  0:38                           ` Chris Worley
2009-08-15  1:55                           ` Greg Freemyer
2009-08-15  1:55                             ` Greg Freemyer
2009-08-15  1:55                             ` Greg Freemyer
2009-08-15 13:20                           ` Mark Lord
2009-08-15 13:20                             ` Mark Lord
2009-08-16 22:52                             ` Chris Worley
2009-08-16 22:52                               ` Chris Worley
2009-08-17  2:03                               ` Mark Lord
2009-08-17  2:03                                 ` Mark Lord
2009-08-15 12:59                       ` James Bottomley
2009-08-15 12:59                         ` James Bottomley
2009-08-15 13:22                         ` Mark Lord
2009-08-15 13:22                           ` Mark Lord
2009-08-15 13:55                           ` James Bottomley
2009-08-15 13:55                             ` James Bottomley
2009-08-15 17:39                             ` jim owens
2009-08-15 17:39                               ` jim owens
2009-08-16 17:08                               ` Robert Hancock
2009-08-16 17:08                                 ` Robert Hancock
2009-08-16 14:05                             ` Alan Cox
2009-08-16 14:05                               ` Alan Cox
2009-08-16 14:16                               ` Mark Lord
2009-08-16 14:16                                 ` Mark Lord
2009-08-16 15:34                               ` Arjan van de Ven
2009-08-16 15:34                                 ` Arjan van de Ven
2009-08-16 15:44                                 ` Theodore Tso
2009-08-16 15:44                                   ` Theodore Tso
2009-08-16 17:28                                   ` Mark Lord
2009-08-16 17:28                                   ` Mark Lord
2009-08-16 17:28                                     ` Mark Lord
2009-08-16 17:37                                     ` Mark Lord
2009-08-16 17:37                                     ` Mark Lord
2009-08-16 17:37                                       ` Mark Lord
2009-08-16 17:37                                       ` Mark Lord
2009-08-17 16:30                                       ` Bill Davidsen
2009-08-17 16:30                                         ` Bill Davidsen
2009-08-17 16:56                                         ` jim owens
2009-08-17 16:56                                           ` jim owens
2009-08-17 17:14                                           ` Bill Davidsen
2009-08-17 17:14                                             ` Bill Davidsen
2009-08-17 17:37                                             ` jim owens
2009-08-17 17:37                                               ` jim owens
2009-08-16 17:37                                     ` Mark Lord
2009-08-16 17:37                                     ` Mark Lord
2009-08-16 17:28                                   ` Mark Lord
2009-08-16 17:28                                   ` Mark Lord
2009-08-16 15:52                                 ` James Bottomley
2009-08-16 15:52                                   ` James Bottomley
2009-08-16 16:32                                   ` Mark Lord
2009-08-16 16:32                                     ` Mark Lord
2009-08-16 16:32                                     ` Mark Lord
2009-08-16 18:07                                     ` James Bottomley
2009-08-16 18:07                                       ` James Bottomley
2009-08-16 18:19                                       ` Mark Lord
2009-08-16 18:19                                         ` Mark Lord
2009-08-16 18:19                                         ` Mark Lord
2009-08-16 18:24                                         ` James Bottomley
2009-08-16 18:24                                           ` James Bottomley
2009-08-17 16:37                                           ` Bill Davidsen
2009-08-17 16:37                                             ` Bill Davidsen
2009-08-17 16:37                                             ` Bill Davidsen
2009-08-17 17:08                                             ` Greg Freemyer
2009-08-17 17:08                                               ` Greg Freemyer
2009-08-17 17:19                                               ` James Bottomley
2009-08-17 17:19                                                 ` James Bottomley
2009-08-17 18:16                                                 ` Ric Wheeler
2009-08-17 18:16                                                   ` Ric Wheeler
2009-08-17 18:21                                                 ` Greg Freemyer
2009-08-17 18:21                                                   ` Greg Freemyer
2009-08-17 18:21                                                   ` Greg Freemyer
2009-08-17 19:18                                                   ` James Bottomley
2009-08-17 19:18                                                     ` James Bottomley
2009-08-17 20:19                                                     ` Mark Lord
2009-08-17 20:19                                                       ` Mark Lord
2009-08-17 20:28                                                       ` James Bottomley
2009-08-17 20:28                                                         ` James Bottomley
2009-08-17 20:28                                               ` Mark Lord
2009-08-17 20:28                                                 ` Mark Lord
2009-08-16 16:59                                   ` Christoph Hellwig
2009-08-16 16:59                                     ` Christoph Hellwig
2009-08-17  4:24                                     ` Douglas Gilbert
2009-08-17  4:24                                       ` Douglas Gilbert
2009-08-17 13:56                                     ` James Bottomley
2009-08-17 13:56                                       ` James Bottomley
2009-08-17 14:10                                       ` Matthew Wilcox
2009-08-17 14:10                                         ` Matthew Wilcox
2009-08-17 19:12                                         ` Christoph Hellwig
2009-08-17 19:12                                           ` Christoph Hellwig
2009-08-17 19:24                                           ` James Bottomley
2009-08-17 19:24                                             ` James Bottomley
2009-08-16 21:50                                   ` Discard support Roland Dreier
2009-08-16 21:50                                     ` Roland Dreier
2009-08-16 22:06                                     ` Jeff Garzik
2009-08-16 22:06                                       ` Jeff Garzik
2009-08-16 22:06                                       ` Jeff Garzik
2009-08-16 22:13                                     ` Theodore Tso
2009-08-16 22:13                                       ` Theodore Tso
2009-08-16 22:51                                       ` Mark Lord
2009-08-16 22:51                                         ` Mark Lord
2009-08-16 22:51                                       ` Mark Lord
2009-08-16 22:51                                       ` Mark Lord
2009-08-16 22:51                                       ` Mark Lord
2009-08-16 19:29                                 ` Discard support (was Re: [PATCH] swap: send callback when swap slot is freed) Alan Cox
2009-08-16 19:29                                   ` Alan Cox
2009-08-16 23:05                                   ` John Robinson
2009-08-16 23:05                                     ` John Robinson
2009-08-17  2:05                                     ` Mark Lord
2009-08-17  2:05                                       ` Mark Lord
2009-08-13 21:28             ` Greg Freemyer
2009-08-13 21:28               ` Greg Freemyer
2009-08-13 22:20               ` Richard Sharpe
2009-08-13 22:20                 ` Richard Sharpe
2009-08-13 22:20                 ` Richard Sharpe
2009-08-14  0:19                 ` Greg Freemyer
2009-08-14  0:19                   ` Greg Freemyer
     [not found]                   ` <46b8a8850908131758s781b07f6v2729483c0e50ae7a@mail.gmail.com>
2009-08-14 21:33                     ` Greg Freemyer
2009-08-14 21:33                       ` Greg Freemyer
2009-08-14 21:56                       ` Discard support Roland Dreier
2009-08-14 21:56                         ` Roland Dreier
2009-08-14 22:10                         ` Greg Freemyer
2009-08-14 22:10                           ` Greg Freemyer
2009-08-14 21:33                     ` Discard support (was Re: [PATCH] swap: send callback when swap slot is freed) Greg Freemyer
2009-08-14 21:33                     ` Greg Freemyer
2009-08-14 21:33                     ` Greg Freemyer
2009-08-13 17:19     ` Hugh Dickins
2009-08-13 17:19       ` Hugh Dickins
2009-08-13 18:08     ` Douglas Gilbert
2009-08-13 18:08       ` Douglas Gilbert
2009-08-17  2:55 ` [PATCH] swap: send callback when swap slot is freed KAMEZAWA Hiroyuki
2009-08-17  5:08   ` Nitin Gupta
2009-08-17  5:11     ` KAMEZAWA Hiroyuki
2009-08-22  7:34   ` Nai Xia

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.