diff options
author | Hugh Dickins <hugh@veritas.com> | 2008-09-11 04:57:55 -0400 |
---|---|---|
committer | Jens Axboe <jens.axboe@oracle.com> | 2008-10-09 02:56:17 -0400 |
commit | 3e6053d76dcbd92b2f9f4ad5ece9bce83149523e (patch) | |
tree | 0e7ab62872071c39e2475decb769b9715de75376 /include/linux/blkdev.h | |
parent | 4677735f03f5b6b6f2182f457a921855cadfb85b (diff) |
block: adjust blkdev_issue_discard for swap
Two mods to blkdev_issue_discard(), thinking ahead to its use on swap:
1. Add gfp_mask argument, so swap allocation can use it where GFP_KERNEL
might deadlock but GFP_NOIO is safe.
2. Enlarge nr_sects argument from unsigned to sector_t: unsigned long is
enough to cover a whole swap area, but sector_t suits any partition.
Change sb_issue_discard()'s nr_blocks to sector_t too; but no need seen
for a gfp_mask there, just pass GFP_KERNEL down to blkdev_issue_discard().
Signed-off-by: Hugh Dickins <hugh@veritas.com>
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Diffstat (limited to 'include/linux/blkdev.h')
-rw-r--r-- | include/linux/blkdev.h | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index 37781d6fe04..b47767c72ce 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h | |||
@@ -16,6 +16,7 @@ | |||
16 | #include <linux/bio.h> | 16 | #include <linux/bio.h> |
17 | #include <linux/module.h> | 17 | #include <linux/module.h> |
18 | #include <linux/stringify.h> | 18 | #include <linux/stringify.h> |
19 | #include <linux/gfp.h> | ||
19 | #include <linux/bsg.h> | 20 | #include <linux/bsg.h> |
20 | #include <linux/smp.h> | 21 | #include <linux/smp.h> |
21 | 22 | ||
@@ -873,15 +874,15 @@ static inline struct request *blk_map_queue_find_tag(struct blk_queue_tag *bqt, | |||
873 | } | 874 | } |
874 | 875 | ||
875 | extern int blkdev_issue_flush(struct block_device *, sector_t *); | 876 | extern int blkdev_issue_flush(struct block_device *, sector_t *); |
876 | extern int blkdev_issue_discard(struct block_device *, sector_t sector, | 877 | extern int blkdev_issue_discard(struct block_device *, |
877 | unsigned nr_sects); | 878 | sector_t sector, sector_t nr_sects, gfp_t); |
878 | 879 | ||
879 | static inline int sb_issue_discard(struct super_block *sb, | 880 | static inline int sb_issue_discard(struct super_block *sb, |
880 | sector_t block, unsigned nr_blocks) | 881 | sector_t block, sector_t nr_blocks) |
881 | { | 882 | { |
882 | block <<= (sb->s_blocksize_bits - 9); | 883 | block <<= (sb->s_blocksize_bits - 9); |
883 | nr_blocks <<= (sb->s_blocksize_bits - 9); | 884 | nr_blocks <<= (sb->s_blocksize_bits - 9); |
884 | return blkdev_issue_discard(sb->s_bdev, block, nr_blocks); | 885 | return blkdev_issue_discard(sb->s_bdev, block, nr_blocks, GFP_KERNEL); |
885 | } | 886 | } |
886 | 887 | ||
887 | /* | 888 | /* |