|
@@ -528,6 +528,23 @@ ssize_t simple_read_from_buffer(void __user *to, size_t count, loff_t *ppos,
|
|
return count;
|
|
return count;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ssize_t memory_read_from_buffer(void *to, size_t count, loff_t *ppos,
|
|
|
|
+ const void *from, size_t available)
|
|
|
|
+{
|
|
|
|
+ loff_t pos = *ppos;
|
|
|
|
+
|
|
|
|
+ if (pos < 0)
|
|
|
|
+ return -EINVAL;
|
|
|
|
+ if (pos >= available)
|
|
|
|
+ return 0;
|
|
|
|
+ if (count > available - pos)
|
|
|
|
+ count = available - pos;
|
|
|
|
+ memcpy(to, from + pos, count);
|
|
|
|
+ *ppos = pos + count;
|
|
|
|
+
|
|
|
|
+ return count;
|
|
|
|
+}
|
|
|
|
+
|
|
/*
|
|
/*
|
|
* Transaction based IO.
|
|
* Transaction based IO.
|
|
* The file expects a single write which triggers the transaction, and then
|
|
* The file expects a single write which triggers the transaction, and then
|
|
@@ -800,6 +817,7 @@ EXPORT_SYMBOL(simple_statfs);
|
|
EXPORT_SYMBOL(simple_sync_file);
|
|
EXPORT_SYMBOL(simple_sync_file);
|
|
EXPORT_SYMBOL(simple_unlink);
|
|
EXPORT_SYMBOL(simple_unlink);
|
|
EXPORT_SYMBOL(simple_read_from_buffer);
|
|
EXPORT_SYMBOL(simple_read_from_buffer);
|
|
|
|
+EXPORT_SYMBOL(memory_read_from_buffer);
|
|
EXPORT_SYMBOL(simple_transaction_get);
|
|
EXPORT_SYMBOL(simple_transaction_get);
|
|
EXPORT_SYMBOL(simple_transaction_read);
|
|
EXPORT_SYMBOL(simple_transaction_read);
|
|
EXPORT_SYMBOL(simple_transaction_release);
|
|
EXPORT_SYMBOL(simple_transaction_release);
|