Lines Matching defs: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
296 void disk_force_media_change(struct gendisk *disk)
298 disk_event_uevent(disk, DISK_EVENT_MEDIA_CHANGE);
299 inc_diskseq(disk);
300 bdev_mark_dead(disk->part0, true);
317 * A disk events enabled device has the following sysfs nodes under
345 struct gendisk *disk = dev_to_disk(dev);
347 if (!(disk->event_flags & DISK_EVENT_FLAG_UEVENT))
349 return __disk_events_show(disk->events, buf);
362 struct gendisk *disk = dev_to_disk(dev);
364 if (!disk->ev)
366 return sprintf(buf, "%ld\n", disk->ev->poll_msecs);
373 struct gendisk *disk = dev_to_disk(dev);
382 if (!disk->ev)
385 disk_block_events(disk);
386 disk->ev->poll_msecs = intv;
387 __disk_unblock_events(disk, true);
414 disk_flush_events(ev->disk, 0);
433 int disk_alloc_events(struct gendisk *disk)
437 if (!disk->fops->check_events || !disk->events)
442 pr_warn("%s: failed to initialize events\n", disk->disk_name);
447 ev->disk = disk;
454 disk->ev = ev;
458 void disk_add_events(struct gendisk *disk)
460 if (!disk->ev)
464 list_add_tail(&disk->ev->node, &disk_events);
471 __disk_unblock_events(disk, true);
474 void disk_del_events(struct gendisk *disk)
476 if (disk->ev) {
477 disk_block_events(disk);
480 list_del_init(&disk->ev->node);
485 void disk_release_events(struct gendisk *disk)
488 WARN_ON_ONCE(disk->ev && disk->ev->block != 1);
489 kfree(disk->ev);