Lines Matching refs:dax_dev

63 int dax_add_host(struct dax_device *dax_dev, struct gendisk *disk)
65 return xa_insert(&dax_hosts, (unsigned long)disk, dax_dev, GFP_KERNEL);
85 struct dax_device *dax_dev;
100 dax_dev = xa_load(&dax_hosts, (unsigned long)bdev->bd_disk);
101 if (!dax_dev || !dax_alive(dax_dev) || !igrab(&dax_dev->inode))
102 dax_dev = NULL;
104 if (!cmpxchg(&dax_dev->holder_data, NULL, holder))
105 dax_dev->holder_ops = ops;
107 dax_dev = NULL;
111 return dax_dev;
115 void fs_put_dax(struct dax_device *dax_dev, void *holder)
117 if (dax_dev && holder &&
118 cmpxchg(&dax_dev->holder_data, holder, NULL) == holder)
119 dax_dev->holder_ops = NULL;
120 put_dax(dax_dev);
140 * @dax_dev: a dax_device instance representing the logical memory range
150 long dax_direct_access(struct dax_device *dax_dev, pgoff_t pgoff, long nr_pages,
155 if (!dax_dev)
158 if (!dax_alive(dax_dev))
164 avail = dax_dev->ops->direct_access(dax_dev, pgoff, nr_pages,
172 size_t dax_copy_from_iter(struct dax_device *dax_dev, pgoff_t pgoff, void *addr,
175 if (!dax_alive(dax_dev))
183 if (test_bit(DAXDEV_NOCACHE, &dax_dev->flags))
188 size_t dax_copy_to_iter(struct dax_device *dax_dev, pgoff_t pgoff, void *addr,
191 if (!dax_alive(dax_dev))
199 if (test_bit(DAXDEV_NOMC, &dax_dev->flags))
204 int dax_zero_page_range(struct dax_device *dax_dev, pgoff_t pgoff,
209 if (!dax_alive(dax_dev))
219 ret = dax_dev->ops->zero_page_range(dax_dev, pgoff, nr_pages);
224 size_t dax_recovery_write(struct dax_device *dax_dev, pgoff_t pgoff,
227 if (!dax_dev->ops->recovery_write)
229 return dax_dev->ops->recovery_write(dax_dev, pgoff, addr, bytes, iter);
233 int dax_holder_notify_failure(struct dax_device *dax_dev, u64 off,
239 if (!dax_alive(dax_dev)) {
244 if (!dax_dev->holder_ops) {
249 rc = dax_dev->holder_ops->notify_failure(dax_dev, off, len, mf_flags);
258 void dax_flush(struct dax_device *dax_dev, void *addr, size_t size)
260 if (unlikely(!dax_write_cache_enabled(dax_dev)))
266 void dax_flush(struct dax_device *dax_dev, void *addr, size_t size)
272 void dax_write_cache(struct dax_device *dax_dev, bool wc)
275 set_bit(DAXDEV_WRITE_CACHE, &dax_dev->flags);
277 clear_bit(DAXDEV_WRITE_CACHE, &dax_dev->flags);
281 bool dax_write_cache_enabled(struct dax_device *dax_dev)
283 return test_bit(DAXDEV_WRITE_CACHE, &dax_dev->flags);
287 bool dax_synchronous(struct dax_device *dax_dev)
289 return test_bit(DAXDEV_SYNC, &dax_dev->flags);
293 void set_dax_synchronous(struct dax_device *dax_dev)
295 set_bit(DAXDEV_SYNC, &dax_dev->flags);
299 void set_dax_nocache(struct dax_device *dax_dev)
301 set_bit(DAXDEV_NOCACHE, &dax_dev->flags);
305 void set_dax_nomc(struct dax_device *dax_dev)
307 set_bit(DAXDEV_NOMC, &dax_dev->flags);
311 bool dax_alive(struct dax_device *dax_dev)
314 return test_bit(DAXDEV_ALIVE, &dax_dev->flags);
319 * Note, rcu is not protecting the liveness of dax_dev, rcu is ensuring
327 * device dax_dev field make sure the dax_dev is not leaked.
329 void kill_dax(struct dax_device *dax_dev)
331 if (!dax_dev)
334 if (dax_dev->holder_data != NULL)
335 dax_holder_notify_failure(dax_dev, 0, U64_MAX,
338 clear_bit(DAXDEV_ALIVE, &dax_dev->flags);
342 dax_dev->holder_ops = NULL;
343 dax_dev->holder_data = NULL;
347 void run_dax(struct dax_device *dax_dev)
349 set_bit(DAXDEV_ALIVE, &dax_dev->flags);
355 struct dax_device *dax_dev;
358 dax_dev = alloc_inode_sb(sb, dax_cache, GFP_KERNEL);
359 if (!dax_dev)
362 inode = &dax_dev->inode;
374 struct dax_device *dax_dev = to_dax_dev(inode);
377 kmem_cache_free(dax_cache, dax_dev);
382 struct dax_device *dax_dev = to_dax_dev(inode);
383 WARN_ONCE(test_bit(DAXDEV_ALIVE, &dax_dev->flags),
427 struct dax_device *dax_dev;
436 dax_dev = to_dax_dev(inode);
438 set_bit(DAXDEV_ALIVE, &dax_dev->flags);
439 inode->i_cdev = &dax_dev->cdev;
446 return dax_dev;
451 struct dax_device *dax_dev;
471 dax_dev = dax_dev_get(devt);
472 if (!dax_dev)
475 dax_dev->ops = ops;
476 dax_dev->private = private;
477 return dax_dev;
485 void put_dax(struct dax_device *dax_dev)
487 if (!dax_dev)
489 iput(&dax_dev->inode);
495 * @dax_dev: a dax_device instance
500 void *dax_holder(struct dax_device *dax_dev)
502 return dax_dev->holder_data;
507 * inode_dax: convert a public inode into its dax_dev
508 * @inode: An inode with i_cdev pointing to a dax_dev
521 struct inode *dax_inode(struct dax_device *dax_dev)
523 return &dax_dev->inode;
527 void *dax_get_private(struct dax_device *dax_dev)
529 if (!test_bit(DAXDEV_ALIVE, &dax_dev->flags))
531 return dax_dev->private;
537 struct dax_device *dax_dev = _dax_dev;
538 struct inode *inode = &dax_dev->inode;
540 memset(dax_dev, 0, sizeof(*dax_dev));