ext4: switch to seq_files
Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com> Cc: Mingming Cao <cmm@us.ibm.com> Signed-off-by: "Theodore Ts'o" <tytso@mit.edu> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
Родитель
07d45f1267
Коммит
91d9982779
|
@ -2583,25 +2583,24 @@ ext4_mb_free_committed_blocks(struct super_block *sb)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define MB_PROC_VALUE_READ(name) \
|
#define MB_PROC_FOPS(name) \
|
||||||
static int ext4_mb_read_##name(char *page, char **start, \
|
static int ext4_mb_##name##_proc_show(struct seq_file *m, void *v) \
|
||||||
off_t off, int count, int *eof, void *data) \
|
|
||||||
{ \
|
{ \
|
||||||
struct ext4_sb_info *sbi = data; \
|
struct ext4_sb_info *sbi = m->private; \
|
||||||
int len; \
|
\
|
||||||
*eof = 1; \
|
seq_printf(m, "%ld\n", sbi->s_mb_##name); \
|
||||||
if (off != 0) \
|
return 0; \
|
||||||
return 0; \
|
} \
|
||||||
len = sprintf(page, "%ld\n", sbi->s_mb_##name); \
|
\
|
||||||
*start = page; \
|
static int ext4_mb_##name##_proc_open(struct inode *inode, struct file *file)\
|
||||||
return len; \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define MB_PROC_VALUE_WRITE(name) \
|
|
||||||
static int ext4_mb_write_##name(struct file *file, \
|
|
||||||
const char __user *buf, unsigned long cnt, void *data) \
|
|
||||||
{ \
|
{ \
|
||||||
struct ext4_sb_info *sbi = data; \
|
return single_open(file, ext4_mb_##name##_proc_show, PDE(inode)->data);\
|
||||||
|
} \
|
||||||
|
\
|
||||||
|
static ssize_t ext4_mb_##name##_proc_write(struct file *file, \
|
||||||
|
const char __user *buf, size_t cnt, loff_t *ppos) \
|
||||||
|
{ \
|
||||||
|
struct ext4_sb_info *sbi = PDE(file->f_path.dentry->d_inode)->data;\
|
||||||
char str[32]; \
|
char str[32]; \
|
||||||
long value; \
|
long value; \
|
||||||
if (cnt >= sizeof(str)) \
|
if (cnt >= sizeof(str)) \
|
||||||
|
@ -2613,31 +2612,32 @@ static int ext4_mb_write_##name(struct file *file, \
|
||||||
return -ERANGE; \
|
return -ERANGE; \
|
||||||
sbi->s_mb_##name = value; \
|
sbi->s_mb_##name = value; \
|
||||||
return cnt; \
|
return cnt; \
|
||||||
}
|
} \
|
||||||
|
\
|
||||||
|
static const struct file_operations ext4_mb_##name##_proc_fops = { \
|
||||||
|
.owner = THIS_MODULE, \
|
||||||
|
.open = ext4_mb_##name##_proc_open, \
|
||||||
|
.read = seq_read, \
|
||||||
|
.llseek = seq_lseek, \
|
||||||
|
.release = single_release, \
|
||||||
|
.write = ext4_mb_##name##_proc_write, \
|
||||||
|
};
|
||||||
|
|
||||||
MB_PROC_VALUE_READ(stats);
|
MB_PROC_FOPS(stats);
|
||||||
MB_PROC_VALUE_WRITE(stats);
|
MB_PROC_FOPS(max_to_scan);
|
||||||
MB_PROC_VALUE_READ(max_to_scan);
|
MB_PROC_FOPS(min_to_scan);
|
||||||
MB_PROC_VALUE_WRITE(max_to_scan);
|
MB_PROC_FOPS(order2_reqs);
|
||||||
MB_PROC_VALUE_READ(min_to_scan);
|
MB_PROC_FOPS(stream_request);
|
||||||
MB_PROC_VALUE_WRITE(min_to_scan);
|
MB_PROC_FOPS(group_prealloc);
|
||||||
MB_PROC_VALUE_READ(order2_reqs);
|
|
||||||
MB_PROC_VALUE_WRITE(order2_reqs);
|
|
||||||
MB_PROC_VALUE_READ(stream_request);
|
|
||||||
MB_PROC_VALUE_WRITE(stream_request);
|
|
||||||
MB_PROC_VALUE_READ(group_prealloc);
|
|
||||||
MB_PROC_VALUE_WRITE(group_prealloc);
|
|
||||||
|
|
||||||
#define MB_PROC_HANDLER(name, var) \
|
#define MB_PROC_HANDLER(name, var) \
|
||||||
do { \
|
do { \
|
||||||
proc = create_proc_entry(name, mode, sbi->s_mb_proc); \
|
proc = proc_create_data(name, mode, sbi->s_mb_proc, \
|
||||||
|
&ext4_mb_##var##_proc_fops, sbi); \
|
||||||
if (proc == NULL) { \
|
if (proc == NULL) { \
|
||||||
printk(KERN_ERR "EXT4-fs: can't to create %s\n", name); \
|
printk(KERN_ERR "EXT4-fs: can't to create %s\n", name); \
|
||||||
goto err_out; \
|
goto err_out; \
|
||||||
} \
|
} \
|
||||||
proc->data = sbi; \
|
|
||||||
proc->read_proc = ext4_mb_read_##var ; \
|
|
||||||
proc->write_proc = ext4_mb_write_##var; \
|
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
static int ext4_mb_init_per_dev_proc(struct super_block *sb)
|
static int ext4_mb_init_per_dev_proc(struct super_block *sb)
|
||||||
|
|
Загрузка…
Ссылка в новой задаче