kmemtrace, fs: uninline simple_transaction_set()
Impact: cleanup We want to remove percpu.h from rcupdate.h (for upcoming kmemtrace changes), but this is not possible currently without breaking the build because fs.h has an implicit include file depedency: it uses PAGE_SIZE but does not include asm/page.h which defines it. This problem gets masked in practice because most fs.h using sites use rcupreempt.h (and other headers) which includes percpu.h which brings in asm/page.h indirectly. We cannot add asm/page.h to asm/fs.h because page.h is not an exported header. Move simple_transaction_set() to the other simple-transaction file helpers in fs/libfs.c. This removes the include file hell and also reduces kernel size a bit. Acked-by: Al Viro <viro@zeniv.linux.org.uk> Cc: Alexey Dobriyan <adobriyan@gmail.com> Cc: Pekka Enberg <penberg@cs.helsinki.fi> Cc: Eduard - Gabriel Munteanu <eduard.munteanu@linux360.ro> Cc: paulmck@linux.vnet.ibm.com LKML-Reference: <1237898630.25315.83.camel@penberg-laptop> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
Родитель
3d544f411f
Коммит
76791ab2d5
16
fs/libfs.c
16
fs/libfs.c
|
@ -575,6 +575,21 @@ ssize_t memory_read_from_buffer(void *to, size_t count, loff_t *ppos,
|
|||
* possibly a read which collects the result - which is stored in a
|
||||
* file-local buffer.
|
||||
*/
|
||||
|
||||
void simple_transaction_set(struct file *file, size_t n)
|
||||
{
|
||||
struct simple_transaction_argresp *ar = file->private_data;
|
||||
|
||||
BUG_ON(n > SIMPLE_TRANSACTION_LIMIT);
|
||||
|
||||
/*
|
||||
* The barrier ensures that ar->size will really remain zero until
|
||||
* ar->data is ready for reading.
|
||||
*/
|
||||
smp_mb();
|
||||
ar->size = n;
|
||||
}
|
||||
|
||||
char *simple_transaction_get(struct file *file, const char __user *buf, size_t size)
|
||||
{
|
||||
struct simple_transaction_argresp *ar;
|
||||
|
@ -820,6 +835,7 @@ EXPORT_SYMBOL(simple_sync_file);
|
|||
EXPORT_SYMBOL(simple_unlink);
|
||||
EXPORT_SYMBOL(simple_read_from_buffer);
|
||||
EXPORT_SYMBOL(memory_read_from_buffer);
|
||||
EXPORT_SYMBOL(simple_transaction_set);
|
||||
EXPORT_SYMBOL(simple_transaction_get);
|
||||
EXPORT_SYMBOL(simple_transaction_read);
|
||||
EXPORT_SYMBOL(simple_transaction_release);
|
||||
|
|
|
@ -2323,19 +2323,7 @@ ssize_t simple_transaction_read(struct file *file, char __user *buf,
|
|||
size_t size, loff_t *pos);
|
||||
int simple_transaction_release(struct inode *inode, struct file *file);
|
||||
|
||||
static inline void simple_transaction_set(struct file *file, size_t n)
|
||||
{
|
||||
struct simple_transaction_argresp *ar = file->private_data;
|
||||
|
||||
BUG_ON(n > SIMPLE_TRANSACTION_LIMIT);
|
||||
|
||||
/*
|
||||
* The barrier ensures that ar->size will really remain zero until
|
||||
* ar->data is ready for reading.
|
||||
*/
|
||||
smp_mb();
|
||||
ar->size = n;
|
||||
}
|
||||
void simple_transaction_set(struct file *file, size_t n);
|
||||
|
||||
/*
|
||||
* simple attribute files
|
||||
|
|
Загрузка…
Ссылка в новой задаче