Message ID | 20191108233820.4325-1-chaitanya.kulkarni@wdc.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | block: allow zone_mgmt_ops to bail out on SIGKILL | expand |
On 2019/11/09 8:38, Chaitanya Kulkarni wrote: > This patch is on the similar concept which is posted earlier:- > https://marc.info/?l=linux-block&m=157321402002207&w=2. > > This allows zone-mgmt ops to handle SIGKILL. > > Signed-off-by: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com> > --- > > In case someone is interested here is the test on null blk with > added prints for zoneid. > > Without this patch :- > > # blkzone reset -o 0 -c 1000 /dev/nullb0 > ^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C > > [ 174.115065] null_blk: null_zone_mgmt 163 zoneid 993 > [ 174.125071] null_blk: null_zone_mgmt 163 zoneid 994 > [ 174.135076] null_blk: null_zone_mgmt 163 zoneid 995 > [ 174.145082] null_blk: null_zone_mgmt 163 zoneid 996 > [ 174.155087] null_blk: null_zone_mgmt 163 zoneid 997 > [ 174.165091] null_blk: null_zone_mgmt 163 zoneid 998 > [ 174.175096] null_blk: null_zone_mgmt 163 zoneid 999 > > With this patch :- > # blkzone reset -o 0 -c 1000 /dev/nullb0 > ^C > > [ 211.889379] null_blk: null_zone_mgmt 163 zoneid 191 > [ 211.899420] null_blk: null_zone_mgmt 163 zoneid 192 > [ 211.909424] null_blk: null_zone_mgmt 163 zoneid 193 > > --- > block/blk-zoned.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/block/blk-zoned.c b/block/blk-zoned.c > index 481eaf7d04d4..07ff2b75e6d7 100644 > --- a/block/blk-zoned.c > +++ b/block/blk-zoned.c > @@ -17,6 +17,7 @@ > #include <linux/mm.h> > #include <linux/vmalloc.h> > #include <linux/sched/mm.h> > +#include <linux/sched/signal.h> > > #include "blk.h" > > @@ -287,6 +288,8 @@ int blkdev_zone_mgmt(struct block_device *bdev, enum req_opf op, > > /* This may take a while, so be nice to others */ > cond_resched(); > + if (fatal_signal_pending(current)) > + break; I think that if the loop over the zone range is interrupted short, -EINTR should be returned even if the following submit_bio_wait() call succeeds. So may be an additional check is needed at the end of the function. > } > > ret = submit_bio_wait(bio); >
diff --git a/block/blk-zoned.c b/block/blk-zoned.c index 481eaf7d04d4..07ff2b75e6d7 100644 --- a/block/blk-zoned.c +++ b/block/blk-zoned.c @@ -17,6 +17,7 @@ #include <linux/mm.h> #include <linux/vmalloc.h> #include <linux/sched/mm.h> +#include <linux/sched/signal.h> #include "blk.h" @@ -287,6 +288,8 @@ int blkdev_zone_mgmt(struct block_device *bdev, enum req_opf op, /* This may take a while, so be nice to others */ cond_resched(); + if (fatal_signal_pending(current)) + break; } ret = submit_bio_wait(bio);
This patch is on the similar concept which is posted earlier:- https://marc.info/?l=linux-block&m=157321402002207&w=2. This allows zone-mgmt ops to handle SIGKILL. Signed-off-by: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com> --- In case someone is interested here is the test on null blk with added prints for zoneid. Without this patch :- # blkzone reset -o 0 -c 1000 /dev/nullb0 ^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C [ 174.115065] null_blk: null_zone_mgmt 163 zoneid 993 [ 174.125071] null_blk: null_zone_mgmt 163 zoneid 994 [ 174.135076] null_blk: null_zone_mgmt 163 zoneid 995 [ 174.145082] null_blk: null_zone_mgmt 163 zoneid 996 [ 174.155087] null_blk: null_zone_mgmt 163 zoneid 997 [ 174.165091] null_blk: null_zone_mgmt 163 zoneid 998 [ 174.175096] null_blk: null_zone_mgmt 163 zoneid 999 With this patch :- # blkzone reset -o 0 -c 1000 /dev/nullb0 ^C [ 211.889379] null_blk: null_zone_mgmt 163 zoneid 191 [ 211.899420] null_blk: null_zone_mgmt 163 zoneid 192 [ 211.909424] null_blk: null_zone_mgmt 163 zoneid 193 --- block/blk-zoned.c | 3 +++ 1 file changed, 3 insertions(+)