2010-01-14 18:12:15

by Nitin Gupta

[permalink] [raw]
Subject: [PATCH] [mmotm v2] comment on swap notify locking constraints

A block device makes swap_slot_free_notify() callback
when the last reference to a swap slot is dropped.

This callback is made under swap_lock and page table
lock. This is a note of warning for registered callback
function which must meet these constraints.

Signed-off-by: Nitin Gupta <[email protected]>
---
include/linux/blkdev.h | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
index f86df8b..fb7b3c2 100644
--- a/include/linux/blkdev.h
+++ b/include/linux/blkdev.h
@@ -1294,6 +1294,7 @@ struct block_device_operations {
unsigned long long);
int (*revalidate_disk) (struct gendisk *);
int (*getgeo)(struct block_device *, struct hd_geometry *);
+ /* this callback is with swap_lock and page table lock held */
void (*swap_slot_free_notify) (struct block_device *, unsigned long);
struct module *owner;
};
--
1.6.2.5


2010-01-14 18:50:35

by Hugh Dickins

[permalink] [raw]
Subject: Re: [PATCH] [mmotm v2] comment on swap notify locking constraints

From: Nitin Gupta <[email protected]>

A block device makes swap_slot_free_notify() callback
when the last reference to a swap slot is dropped.

This callback is made under swap_lock and sometimes page table
lock. This is a note of warning for registered callback
function which must meet these constraints.

Signed-off-by: Nitin Gupta <[email protected]>
Signed-off-by: Hugh Dickins <[email protected]>
---
I've added "sometimes " in the comment above and the comment below:
sorry, I should have made that clearer when I made this point.

Hugh

include/linux/blkdev.h | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
index f86df8b..fb7b3c2 100644
--- a/include/linux/blkdev.h
+++ b/include/linux/blkdev.h
@@ -1294,6 +1294,7 @@ struct block_device_operations {
unsigned long long);
int (*revalidate_disk) (struct gendisk *);
int (*getgeo)(struct block_device *, struct hd_geometry *);
+ /* this callback is with swap_lock and sometimes page table lock held */
void (*swap_slot_free_notify) (struct block_device *, unsigned long);
struct module *owner;
};
--
1.6.2.5