Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 84726
b: refs/heads/master
c: 8b88b09
h: refs/heads/master
v: v3
  • Loading branch information
Christoph Hellwig authored and Linus Torvalds committed Feb 8, 2008
1 parent 577772d commit 553ef8b
Show file tree
Hide file tree
Showing 8 changed files with 70 additions and 48 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: efae09f3e99fcc1bdead7bc23a508b3bade3f82f
refs/heads/master: 8b88b0998e35d239e74446cc30f354bdab86df89
18 changes: 11 additions & 7 deletions trunk/arch/avr32/kernel/ocd.c
Original file line number Diff line number Diff line change
Expand Up @@ -90,25 +90,29 @@ static struct dentry *ocd_debugfs_DC;
static struct dentry *ocd_debugfs_DS;
static struct dentry *ocd_debugfs_count;

static u64 ocd_DC_get(void *data)
static int ocd_DC_get(void *data, u64 *val)
{
return ocd_read(DC);
*val = ocd_read(DC);
return 0;
}
static void ocd_DC_set(void *data, u64 val)
static int ocd_DC_set(void *data, u64 val)
{
ocd_write(DC, val);
return 0;
}
DEFINE_SIMPLE_ATTRIBUTE(fops_DC, ocd_DC_get, ocd_DC_set, "0x%08llx\n");

static u64 ocd_DS_get(void *data)
static int ocd_DS_get(void *data, u64 *val)
{
return ocd_read(DS);
*val = ocd_read(DS);
return 0;
}
DEFINE_SIMPLE_ATTRIBUTE(fops_DS, ocd_DS_get, NULL, "0x%08llx\n");

static u64 ocd_count_get(void *data)
static int ocd_count_get(void *data, u64 *val)
{
return ocd_count;
*val = ocd_count;
return 0;
}
DEFINE_SIMPLE_ATTRIBUTE(fops_count, ocd_count_get, NULL, "%lld\n");

Expand Down
8 changes: 4 additions & 4 deletions trunk/arch/powerpc/platforms/cell/spufs/file.c
Original file line number Diff line number Diff line change
Expand Up @@ -460,7 +460,7 @@ static int spufs_cntl_open(struct inode *inode, struct file *file)
if (!i->i_openers++)
ctx->cntl = inode->i_mapping;
mutex_unlock(&ctx->mapping_lock);
return spufs_attr_open(inode, file, spufs_cntl_get,
return simple_attr_open(inode, file, spufs_cntl_get,
spufs_cntl_set, "0x%08lx");
}

Expand All @@ -470,7 +470,7 @@ spufs_cntl_release(struct inode *inode, struct file *file)
struct spufs_inode_info *i = SPUFS_I(inode);
struct spu_context *ctx = i->i_ctx;

spufs_attr_release(inode, file);
simple_attr_close(inode, file);

mutex_lock(&ctx->mapping_lock);
if (!--i->i_openers)
Expand All @@ -482,8 +482,8 @@ spufs_cntl_release(struct inode *inode, struct file *file)
static const struct file_operations spufs_cntl_fops = {
.open = spufs_cntl_open,
.release = spufs_cntl_release,
.read = spufs_attr_read,
.write = spufs_attr_write,
.read = simple_attr_read,
.write = simple_attr_write,
.mmap = spufs_cntl_mmap,
};

Expand Down
32 changes: 20 additions & 12 deletions trunk/fs/debugfs/file.c
Original file line number Diff line number Diff line change
Expand Up @@ -56,13 +56,15 @@ const struct inode_operations debugfs_link_operations = {
.follow_link = debugfs_follow_link,
};

static void debugfs_u8_set(void *data, u64 val)
static int debugfs_u8_set(void *data, u64 val)
{
*(u8 *)data = val;
return 0;
}
static u64 debugfs_u8_get(void *data)
static int debugfs_u8_get(void *data, u64 *val)
{
return *(u8 *)data;
*val = *(u8 *)data;
return 0;
}
DEFINE_SIMPLE_ATTRIBUTE(fops_u8, debugfs_u8_get, debugfs_u8_set, "%llu\n");

Expand Down Expand Up @@ -97,13 +99,15 @@ struct dentry *debugfs_create_u8(const char *name, mode_t mode,
}
EXPORT_SYMBOL_GPL(debugfs_create_u8);

static void debugfs_u16_set(void *data, u64 val)
static int debugfs_u16_set(void *data, u64 val)
{
*(u16 *)data = val;
return 0;
}
static u64 debugfs_u16_get(void *data)
static int debugfs_u16_get(void *data, u64 *val)
{
return *(u16 *)data;
*val = *(u16 *)data;
return 0;
}
DEFINE_SIMPLE_ATTRIBUTE(fops_u16, debugfs_u16_get, debugfs_u16_set, "%llu\n");

Expand Down Expand Up @@ -138,13 +142,15 @@ struct dentry *debugfs_create_u16(const char *name, mode_t mode,
}
EXPORT_SYMBOL_GPL(debugfs_create_u16);

static void debugfs_u32_set(void *data, u64 val)
static int debugfs_u32_set(void *data, u64 val)
{
*(u32 *)data = val;
return 0;
}
static u64 debugfs_u32_get(void *data)
static int debugfs_u32_get(void *data, u64 *val)
{
return *(u32 *)data;
*val = *(u32 *)data;
return 0;
}
DEFINE_SIMPLE_ATTRIBUTE(fops_u32, debugfs_u32_get, debugfs_u32_set, "%llu\n");

Expand Down Expand Up @@ -179,14 +185,16 @@ struct dentry *debugfs_create_u32(const char *name, mode_t mode,
}
EXPORT_SYMBOL_GPL(debugfs_create_u32);

static void debugfs_u64_set(void *data, u64 val)
static int debugfs_u64_set(void *data, u64 val)
{
*(u64 *)data = val;
return 0;
}

static u64 debugfs_u64_get(void *data)
static int debugfs_u64_get(void *data, u64 *val)
{
return *(u64 *)data;
*val = *(u64 *)data;
return 0;
}
DEFINE_SIMPLE_ATTRIBUTE(fops_u64, debugfs_u64_get, debugfs_u64_set, "%llu\n");

Expand Down
21 changes: 13 additions & 8 deletions trunk/fs/libfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -583,8 +583,8 @@ int simple_transaction_release(struct inode *inode, struct file *file)
/* Simple attribute files */

struct simple_attr {
u64 (*get)(void *);
void (*set)(void *, u64);
int (*get)(void *, u64 *);
int (*set)(void *, u64);
char get_buf[24]; /* enough to store a u64 and "\n\0" */
char set_buf[24];
void *data;
Expand All @@ -595,7 +595,7 @@ struct simple_attr {
/* simple_attr_open is called by an actual attribute open file operation
* to set the attribute specific access operations. */
int simple_attr_open(struct inode *inode, struct file *file,
u64 (*get)(void *), void (*set)(void *, u64),
int (*get)(void *, u64 *), int (*set)(void *, u64),
const char *fmt)
{
struct simple_attr *attr;
Expand Down Expand Up @@ -635,14 +635,20 @@ ssize_t simple_attr_read(struct file *file, char __user *buf,
return -EACCES;

mutex_lock(&attr->mutex);
if (*ppos) /* continued read */
if (*ppos) { /* continued read */
size = strlen(attr->get_buf);
else /* first read */
} else { /* first read */
u64 val;
ret = attr->get(attr->data, &val);
if (ret)
goto out;

size = scnprintf(attr->get_buf, sizeof(attr->get_buf),
attr->fmt,
(unsigned long long)attr->get(attr->data));
attr->fmt, (unsigned long long)val);
}

ret = simple_read_from_buffer(buf, len, ppos, attr->get_buf, size);
out:
mutex_unlock(&attr->mutex);
return ret;
}
Expand All @@ -657,7 +663,6 @@ ssize_t simple_attr_write(struct file *file, const char __user *buf,
ssize_t ret;

attr = file->private_data;

if (!attr->set)
return -EACCES;

Expand Down
2 changes: 1 addition & 1 deletion trunk/include/linux/fs.h
Original file line number Diff line number Diff line change
Expand Up @@ -2068,7 +2068,7 @@ __simple_attr_check_format(const char *fmt, ...)
}

int simple_attr_open(struct inode *inode, struct file *file,
u64 (*get)(void *), void (*set)(void *, u64),
int (*get)(void *, u64 *), int (*set)(void *, u64),
const char *fmt);
int simple_attr_close(struct inode *inode, struct file *file);
ssize_t simple_attr_read(struct file *file, char __user *buf,
Expand Down
19 changes: 12 additions & 7 deletions trunk/lib/fault-inject.c
Original file line number Diff line number Diff line change
Expand Up @@ -134,23 +134,26 @@ bool should_fail(struct fault_attr *attr, ssize_t size)

#ifdef CONFIG_FAULT_INJECTION_DEBUG_FS

static void debugfs_ul_set(void *data, u64 val)
static int debugfs_ul_set(void *data, u64 val)
{
*(unsigned long *)data = val;
return 0;
}

#ifdef CONFIG_FAULT_INJECTION_STACKTRACE_FILTER
static void debugfs_ul_set_MAX_STACK_TRACE_DEPTH(void *data, u64 val)
static int debugfs_ul_set_MAX_STACK_TRACE_DEPTH(void *data, u64 val)
{
*(unsigned long *)data =
val < MAX_STACK_TRACE_DEPTH ?
val : MAX_STACK_TRACE_DEPTH;
return 0;
}
#endif /* CONFIG_FAULT_INJECTION_STACKTRACE_FILTER */

static u64 debugfs_ul_get(void *data)
static int debugfs_ul_get(void *data, u64 *val)
{
return *(unsigned long *)data;
*val = *(unsigned long *)data;
return 0;
}

DEFINE_SIMPLE_ATTRIBUTE(fops_ul, debugfs_ul_get, debugfs_ul_set, "%llu\n");
Expand All @@ -174,14 +177,16 @@ static struct dentry *debugfs_create_ul_MAX_STACK_TRACE_DEPTH(
}
#endif /* CONFIG_FAULT_INJECTION_STACKTRACE_FILTER */

static void debugfs_atomic_t_set(void *data, u64 val)
static int debugfs_atomic_t_set(void *data, u64 val)
{
atomic_set((atomic_t *)data, val);
return 0;
}

static u64 debugfs_atomic_t_get(void *data)
static int debugfs_atomic_t_get(void *data, u64 *val)
{
return atomic_read((atomic_t *)data);
*val = atomic_read((atomic_t *)data);
return 0;
}

DEFINE_SIMPLE_ATTRIBUTE(fops_atomic_t, debugfs_atomic_t_get,
Expand Down
16 changes: 8 additions & 8 deletions trunk/virt/kvm/kvm_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -1186,38 +1186,38 @@ static struct notifier_block kvm_cpu_notifier = {
.priority = 20, /* must be > scheduler priority */
};

static u64 vm_stat_get(void *_offset)
static int vm_stat_get(void *_offset, u64 *val)
{
unsigned offset = (long)_offset;
u64 total = 0;
struct kvm *kvm;

*val = 0;
spin_lock(&kvm_lock);
list_for_each_entry(kvm, &vm_list, vm_list)
total += *(u32 *)((void *)kvm + offset);
*val += *(u32 *)((void *)kvm + offset);
spin_unlock(&kvm_lock);
return total;
return 0;
}

DEFINE_SIMPLE_ATTRIBUTE(vm_stat_fops, vm_stat_get, NULL, "%llu\n");

static u64 vcpu_stat_get(void *_offset)
static int vcpu_stat_get(void *_offset, u64 *val)
{
unsigned offset = (long)_offset;
u64 total = 0;
struct kvm *kvm;
struct kvm_vcpu *vcpu;
int i;

*val = 0;
spin_lock(&kvm_lock);
list_for_each_entry(kvm, &vm_list, vm_list)
for (i = 0; i < KVM_MAX_VCPUS; ++i) {
vcpu = kvm->vcpus[i];
if (vcpu)
total += *(u32 *)((void *)vcpu + offset);
*val += *(u32 *)((void *)vcpu + offset);
}
spin_unlock(&kvm_lock);
return total;
return 0;
}

DEFINE_SIMPLE_ATTRIBUTE(vcpu_stat_fops, vcpu_stat_get, NULL, "%llu\n");
Expand Down

0 comments on commit 553ef8b

Please sign in to comment.