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
275 bool disk_check_media_change(struct gendisk *disk)
279 events = disk_clear_events(disk, DISK_EVENT_MEDIA_CHANGE |
284 bdev_mark_dead(disk->part0, true);
285 set_bit(GD_NEED_PART_SCAN, &disk->state);
292 * @disk: the disk which will raise the event
294 * Should be called when the media changes for @disk. Generates a uevent
298 void disk_force_media_change(struct gendisk *disk)
300 disk_event_uevent(disk, DISK_EVENT_MEDIA_CHANGE);
301 inc_diskseq(disk);
302 bdev_mark_dead(disk->part0, true);
303 set_bit(GD_NEED_PART_SCAN, &disk->state);
320 * A disk events enabled device has the following sysfs nodes under
348 struct gendisk *disk = dev_to_disk(dev);
350 if (!(disk->event_flags & DISK_EVENT_FLAG_UEVENT))
352 return __disk_events_show(disk->events, buf);
365 struct gendisk *disk = dev_to_disk(dev);
367 if (!disk->ev)
369 return sprintf(buf, "%ld\n", disk->ev->poll_msecs);
376 struct gendisk *disk = dev_to_disk(dev);
385 if (!disk->ev)
388 disk_block_events(disk);
389 disk->ev->poll_msecs = intv;
390 __disk_unblock_events(disk, true);
417 disk_flush_events(ev->disk, 0);
436 int disk_alloc_events(struct gendisk *disk)
440 if (!disk->fops->check_events || !disk->events)
445 pr_warn("%s: failed to initialize events\n", disk->disk_name);
450 ev->disk = disk;
457 disk->ev = ev;
461 void disk_add_events(struct gendisk *disk)
463 if (!disk->ev)
467 list_add_tail(&disk->ev->node, &disk_events);
474 __disk_unblock_events(disk, true);
477 void disk_del_events(struct gendisk *disk)
479 if (disk->ev) {
480 disk_block_events(disk);
483 list_del_init(&disk->ev->node);
488 void disk_release_events(struct gendisk *disk)
491 WARN_ON_ONCE(disk->ev && disk->ev->block != 1);
492 kfree(disk->ev);