diff options
-rw-r--r-- | drivers/s390/cio/device_status.c | 8 | ||||
-rw-r--r-- | mm/rmap.c | 4 |
2 files changed, 10 insertions, 2 deletions
diff --git a/drivers/s390/cio/device_status.c b/drivers/s390/cio/device_status.c index 25d99bd28089..aa96e6752592 100644 --- a/drivers/s390/cio/device_status.c +++ b/drivers/s390/cio/device_status.c | |||
@@ -221,6 +221,14 @@ ccw_device_accumulate_irb(struct ccw_device *cdev, struct irb *irb) | |||
221 | 221 | ||
222 | cdev_irb = &cdev->private->irb; | 222 | cdev_irb = &cdev->private->irb; |
223 | 223 | ||
224 | /* | ||
225 | * If the clear function had been performed, all formerly pending | ||
226 | * status at the subchannel has been cleared and we must not pass | ||
227 | * intermediate accumulated status to the device driver. | ||
228 | */ | ||
229 | if (irb->scsw.fctl & SCSW_FCTL_CLEAR_FUNC) | ||
230 | memset(&cdev->private->irb, 0, sizeof(struct irb)); | ||
231 | |||
224 | /* Copy bits which are valid only for the start function. */ | 232 | /* Copy bits which are valid only for the start function. */ |
225 | if (irb->scsw.fctl & SCSW_FCTL_START_FUNC) { | 233 | if (irb->scsw.fctl & SCSW_FCTL_START_FUNC) { |
226 | /* Copy key. */ | 234 | /* Copy key. */ |
@@ -498,9 +498,9 @@ int page_mkclean(struct page *page) | |||
498 | struct address_space *mapping = page_mapping(page); | 498 | struct address_space *mapping = page_mapping(page); |
499 | if (mapping) | 499 | if (mapping) |
500 | ret = page_mkclean_file(mapping, page); | 500 | ret = page_mkclean_file(mapping, page); |
501 | if (page_test_and_clear_dirty(page)) | ||
502 | ret = 1; | ||
501 | } | 503 | } |
502 | if (page_test_and_clear_dirty(page)) | ||
503 | ret = 1; | ||
504 | 504 | ||
505 | return ret; | 505 | return ret; |
506 | } | 506 | } |