Lines Matching refs:disk

3  * Disk events - monitor disk events like media change and eject request.
12 struct gendisk *disk; /* the associated disk */
41 static unsigned long disk_events_poll_jiffies(struct gendisk *disk)
43 struct disk_events *ev = disk->ev;
52 else if (disk->event_flags & DISK_EVENT_FLAG_POLL)
59 * disk_block_events - block and flush disk event checking
60 * @disk: disk to block events for
73 void disk_block_events(struct gendisk *disk)
75 struct disk_events *ev = disk->ev;
93 cancel_delayed_work_sync(&disk->ev->dwork);
98 static void __disk_unblock_events(struct gendisk *disk, bool check_now)
100 struct disk_events *ev = disk->ev;
112 intv = disk_events_poll_jiffies(disk);
124 * disk_unblock_events - unblock disk event checking
125 * @disk: disk to unblock events for
133 void disk_unblock_events(struct gendisk *disk)
135 if (disk->ev)
136 __disk_unblock_events(disk, false);
141 * @disk: disk to check and flush events for
144 * Schedule immediate event checking on @disk if not blocked. Events in
146 * doesn't clear the events from @disk->ev.
149 * If @mask is non-zero must be called with disk->open_mutex held.
151 void disk_flush_events(struct gendisk *disk, unsigned int mask)
153 struct disk_events *ev = disk->ev;
167 * Tell userland about new events. Only the events listed in @disk->events are
171 static void disk_event_uevent(struct gendisk *disk, unsigned int events)
177 if (events & disk->events & (1 << i))
181 kobject_uevent_env(&disk_to_dev(disk)->kobj, KOBJ_CHANGE, envp);
187 struct gendisk *disk = ev->disk;
193 events = disk->fops->check_events(disk, clearing);
202 intv = disk_events_poll_jiffies(disk);
210 inc_diskseq(disk);
212 if (disk->event_flags & DISK_EVENT_FLAG_UEVENT)
213 disk_event_uevent(disk, events);
218 * @disk: disk to fetch and clear events from
227 static unsigned int disk_clear_events(struct gendisk *disk, unsigned int mask)
229 struct disk_events *ev = disk->ev;
236 disk_block_events(disk);
253 __disk_unblock_events(disk, ev->clearing ? true : false);
267 * @disk: gendisk to check
269 * Returns %true and marks the disk for a partition rescan whether a removable
272 bool disk_check_media_change(struct gendisk *disk)
276 events = disk_clear_events(disk, DISK_EVENT_MEDIA_CHANGE |
279 set_bit(GD_NEED_PART_SCAN, &disk->state);
288 * @disk: the disk which will raise the event
290 * Should be called when the media changes for @disk. Generates a uevent
294 void disk_force_media_change(struct gendisk *disk)
296 disk_event_uevent(disk, DISK_EVENT_MEDIA_CHANGE);
297 inc_diskseq(disk);
298 bdev_mark_dead(disk->part0, true);
299 set_bit(GD_NEED_PART_SCAN, &disk->state);
316 * A disk events enabled device has the following sysfs nodes under
344 struct gendisk *disk = dev_to_disk(dev);
346 if (!(disk->event_flags & DISK_EVENT_FLAG_UEVENT))
348 return __disk_events_show(disk->events, buf);
361 struct gendisk *disk = dev_to_disk(dev);
363 if (!disk->ev)
365 return sprintf(buf, "%ld\n", disk->ev->poll_msecs);
372 struct gendisk *disk = dev_to_disk(dev);
381 if (!disk->ev)
384 disk_block_events(disk);
385 disk->ev->poll_msecs = intv;
386 __disk_unblock_events(disk, true);
413 disk_flush_events(ev->disk, 0);
432 int disk_alloc_events(struct gendisk *disk)
436 if (!disk->fops->check_events || !disk->events)
441 pr_warn("%s: failed to initialize events\n", disk->disk_name);
446 ev->disk = disk;
453 disk->ev = ev;
457 void disk_add_events(struct gendisk *disk)
459 if (!disk->ev)
463 list_add_tail(&disk->ev->node, &disk_events);
470 __disk_unblock_events(disk, true);
473 void disk_del_events(struct gendisk *disk)
475 if (disk->ev) {
476 disk_block_events(disk);
479 list_del_init(&disk->ev->node);
484 void disk_release_events(struct gendisk *disk)
487 WARN_ON_ONCE(disk->ev && disk->ev->block != 1);
488 kfree(disk->ev);