Thread (57 messages) 57 messages, 8 authors, 2014-08-01

Re: [PATCH v8 04/22] Change direct_access calling convention

From: Boaz Harrosh <hidden>
Date: 2014-07-30 16:12:44
Also in: linux-fsdevel, lkml

On 07/30/2014 07:03 PM, Boaz Harrosh wrote:
<>
quoted
+long bdev_direct_access(struct block_device *bdev, sector_t sector,
+			void **addr, unsigned long *pfn, long size)
+{
+	const struct block_device_operations *ops = bdev->bd_disk->fops;
+	if (!ops->direct_access)
+		return -EOPNOTSUPP;
You need to check alignment on PAGE_SIZE since this API requires it, do
to pfn defined to a page_number.

(Unless you want to define another output-param like page_offset.
 but this exercise can be left to the caller)

You also need to check against the partition boundary. so something like:

+ 	if (sector & (PAGE_SECTORS-1))
+ 		return -EINVAL;
+	if (unlikely(sector + size > part_nr_sects_read(bdev->bd_part)))
Off course I was wrong here size is in bytes not in sectors. Which points
out that maybe this API needs to be in sectors.

[Actually it needs to be in pages both size and offset, because of return of
pfn, but its your call.]

Anyway my code above needs to be fixed with
	(size + 512 -1) / 512

Thanks
Boaz
+ 		return -ERANGE;

Then perhaps you can remove that check from drivers
quoted
+	return ops->direct_access(bdev, sector + get_start_sect(bdev), addr,
+					pfn, size);
+}
+EXPORT_SYMBOL_GPL(bdev_direct_access);
<>


--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help