*/
/*
* This file is part of Lustre, http://www.lustre.org/
- * Lustre is a trademark of Sun Microsystems, Inc.
*
* lustre/include/lprocfs_status.h
*
#include <linux/seq_file.h>
#include <libcfs/libcfs.h>
+#include <libcfs/linux/linux-fs.h>
#include <uapi/linux/lustre/lustre_idl.h>
/*
*/
struct lprocfs_vars {
const char *name;
- const struct file_operations *fops;
+ const struct proc_ops *fops;
void *data;
/** /proc file mode. */
mode_t proc_mode;
OPC_RANGE(LDLM) +
OPC_RANGE(MDS) +
OPC_RANGE(OST));
+#ifdef HAVE_SERVER_SUPPORT
} else if (opc < OUT_UPDATE_LAST_OPC) {
/* update opcode */
return (opc - OUT_UPDATE_FIRST_OPC +
OPC_RANGE(LDLM) +
OPC_RANGE(MDS) +
OPC_RANGE(OST));
+#endif /* HAVE_SERVER_SUPPORT */
} else {
/* Unknown Opcode */
return -1;
}
}
+#define LUSTRE_MAX_OPCODES_CLIENT (OPC_RANGE(OST) + \
+ OPC_RANGE(MDS) + \
+ OPC_RANGE(LDLM) + \
+ OPC_RANGE(MGS) + \
+ OPC_RANGE(OBD) + \
+ OPC_RANGE(LLOG) + \
+ OPC_RANGE(SEC) + \
+ OPC_RANGE(SEQ) + \
+ OPC_RANGE(SEC) + \
+ OPC_RANGE(FLD))
-#define LUSTRE_MAX_OPCODES (OPC_RANGE(OST) + \
- OPC_RANGE(MDS) + \
- OPC_RANGE(LDLM) + \
- OPC_RANGE(MGS) + \
- OPC_RANGE(OBD) + \
- OPC_RANGE(LLOG) + \
- OPC_RANGE(SEC) + \
- OPC_RANGE(SEQ) + \
- OPC_RANGE(SEC) + \
- OPC_RANGE(FLD) + \
+#ifdef HAVE_SERVER_SUPPORT
+#define LUSTRE_MAX_OPCODES (LUSTRE_MAX_OPCODES_CLIENT + \
OPC_RANGE(OUT_UPDATE) + \
OPC_RANGE(LFSCK))
+#else
+#define LUSTRE_MAX_OPCODES LUSTRE_MAX_OPCODES_CLIENT
+#endif
#define EXTRA_MAX_OPCODES ((PTLRPC_LAST_CNTR - PTLRPC_FIRST_CNTR) + \
OPC_RANGE(EXTRA))
#endif
extern struct proc_dir_entry *
lprocfs_add_simple(struct proc_dir_entry *root, char *name,
- void *data, const struct file_operations *fops);
+ void *data, const struct proc_ops *ops);
extern struct proc_dir_entry *
lprocfs_add_symlink(const char *name, struct proc_dir_entry *parent,
const char *format, ...);
extern int lprocfs_obd_cleanup(struct obd_device *obd);
extern int lprocfs_seq_create(struct proc_dir_entry *parent, const char *name,
- mode_t mode,
- const struct file_operations *seq_fops,
+ mode_t mode, const struct proc_ops *seq_fops,
void *data);
extern int lprocfs_obd_seq_create(struct obd_device *obd, const char *name,
- mode_t mode,
- const struct file_operations *seq_fops,
+ mode_t mode, const struct proc_ops *seq_fops,
void *data);
/* Generic callbacks */
/* You must use these macros when you want to refer to
* the import in a client obd_device for a lprocfs entry
+ * Note that it is not safe to 'goto', 'return' or 'break'
+ * out of the body of this statement. It *IS* safe to
+ * 'goto' the a label inside the statement, or to 'continue'
+ * to get out of the statement.
*/
-#define with_imp_locked(__obd, __imp, __rc) \
- for (down_read(&(__obd)->u.cli.cl_sem), \
+
+#define with_imp_locked_nested(__obd, __imp, __rc, __nest) \
+ for (down_read_nested(&(__obd)->u.cli.cl_sem, __nest), \
__imp = (__obd)->u.cli.cl_import, \
__rc = __imp ? 0 : -ENODEV; \
__imp ? 1 : (up_read(&(__obd)->u.cli.cl_sem), 0); \
__imp = NULL)
+#define with_imp_locked(__obd, __imp, __rc) \
+ with_imp_locked_nested(__obd, __imp, __rc, 0)
+
/* write the name##_seq_show function, call LDEBUGFS_SEQ_FOPS_RO for read-only
* debugfs entries; otherwise, you will define name##_seq_write function also
* for a read-write debugfs entry, and then call LDEBUGFS_SEQ_FOPS instead.
inode->i_private ? inode->i_private : \
PDE_DATA(inode)); \
} \
-static const struct file_operations name##_fops = { \
- .owner = THIS_MODULE, \
- .open = name##_single_open, \
- .read = seq_read, \
- .write = custom_seq_write, \
- .llseek = seq_lseek, \
- .release = lprocfs_single_release, \
+static const struct proc_ops name##_fops = { \
+ PROC_OWNER(THIS_MODULE) \
+ .proc_open = name##_single_open, \
+ .proc_read = seq_read, \
+ .proc_write = custom_seq_write, \
+ .proc_lseek = seq_lseek, \
+ .proc_release = lprocfs_single_release, \
}
#define LPROC_SEQ_FOPS_RO(name) __LPROC_SEQ_FOPS(name, NULL)
inode->i_private ? inode->i_private : \
PDE_DATA(inode)); \
} \
- static const struct file_operations name##_##type##_fops = { \
- .open = name##_##type##_open, \
- .write = name##_##type##_write, \
- .release = lprocfs_single_release, \
+ static const struct proc_ops name##_##type##_fops = { \
+ .proc_open = name##_##type##_open, \
+ .proc_write = name##_##type##_write, \
+ .proc_release = lprocfs_single_release, \
};
struct lustre_attr {
ssize_t lprocfs_obd_max_pages_per_rpc_seq_write(struct file *file,
const char __user *buffer,
size_t count, loff_t *off);
-int lprocfs_obd_short_io_bytes_seq_show(struct seq_file *m, void *data);
-ssize_t lprocfs_obd_short_io_bytes_seq_write(struct file *file,
- const char __user *buffer,
- size_t count, loff_t *off);
ssize_t short_io_bytes_show(struct kobject *kobj, struct attribute *attr,
char *buf);
ssize_t short_io_bytes_store(struct kobject *kobj, struct attribute *attr,