summaryrefslogtreecommitdiffstats
path: root/sys/vm/device_pager.c
diff options
context:
space:
mode:
authorattilio <attilio@FreeBSD.org>2011-07-06 15:09:52 +0000
committerattilio <attilio@FreeBSD.org>2011-07-06 15:09:52 +0000
commit9be9b5e188ec8d9c095232dd57d4e6476726ee50 (patch)
treecd05d03e892ae87096e3fcb90fd6c62091f84469 /sys/vm/device_pager.c
parent7893f5ef5d34ac7a7aef842558d61d6b921fa66e (diff)
downloadFreeBSD-src-9be9b5e188ec8d9c095232dd57d4e6476726ee50.zip
FreeBSD-src-9be9b5e188ec8d9c095232dd57d4e6476726ee50.tar.gz
Handle a race between device_pager and devsw in a more graceful manner:
return an error code rather than panic the kernel. Sponsored by: Sandvine Incorporated Reviewed by: kib Tested by: pho MFC after: 2 weeks
Diffstat (limited to 'sys/vm/device_pager.c')
-rw-r--r--sys/vm/device_pager.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/sys/vm/device_pager.c b/sys/vm/device_pager.c
index f2131dd..411482a 100644
--- a/sys/vm/device_pager.c
+++ b/sys/vm/device_pager.c
@@ -217,8 +217,10 @@ dev_pager_getpages(object, m, count, reqpage)
memattr = object->memattr;
VM_OBJECT_UNLOCK(object);
csw = dev_refthread(dev, &ref);
- if (csw == NULL)
- panic("dev_pager_getpage: no cdevsw");
+ if (csw == NULL) {
+ VM_OBJECT_LOCK(object);
+ return (VM_PAGER_FAIL);
+ }
td = curthread;
fpop = td->td_fpop;
td->td_fpop = NULL;
OpenPOWER on IntegriCloud