summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
c52d48b)
Make __LPROC_SEQ_FOPS to call lprocfs_single_release in release so that
the memory allocated in single_open to be freed.
Rename some of the auto-named methods to better reflect on the nature
of the underlying calls.
The previous code used to leak 32 bytes per every lustre proc file open
that uses lprocfs_..._seq_open primitive.
Change-Id: I08cc1bbb28af444f3fa5e903e38fd4a16dc4c79b
Signed-off-by: Oleg Drokin <green@whamcloud.com>
Reviewed-on: http://review.whamcloud.com/4150
Tested-by: Hudson
Tested-by: Maloo <whamcloud.maloo@gmail.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: wangdi <di.wang@whamcloud.com>
int lprocfs_obd_wr_ir_factor(struct file *file, const char *buffer,
unsigned long count, void *data);
int lprocfs_obd_wr_ir_factor(struct file *file, const char *buffer,
unsigned long count, void *data);
+extern int lprocfs_single_release(cfs_inode_t *, struct file *);
extern int lprocfs_seq_release(cfs_inode_t *, struct file *);
/* You must use these macros when you want to refer to
extern int lprocfs_seq_release(cfs_inode_t *, struct file *);
/* You must use these macros when you want to refer to
a read-write proc entry, and then call LPROC_SEQ_SEQ instead. Finally,
call lprocfs_obd_seq_create(obd, filename, 0444, &name#_fops, data); */
#define __LPROC_SEQ_FOPS(name, custom_seq_write) \
a read-write proc entry, and then call LPROC_SEQ_SEQ instead. Finally,
call lprocfs_obd_seq_create(obd, filename, 0444, &name#_fops, data); */
#define __LPROC_SEQ_FOPS(name, custom_seq_write) \
-static int name##_seq_open(cfs_inode_t *inode, struct file *file) { \
+static int name##_single_open(cfs_inode_t *inode, struct file *file) { \
struct proc_dir_entry *dp = PDE(inode); \
int rc; \
LPROCFS_ENTRY_AND_CHECK(dp); \
struct proc_dir_entry *dp = PDE(inode); \
int rc; \
LPROCFS_ENTRY_AND_CHECK(dp); \
} \
struct file_operations name##_fops = { \
.owner = THIS_MODULE, \
} \
struct file_operations name##_fops = { \
.owner = THIS_MODULE, \
- .open = name##_seq_open, \
+ .open = name##_single_open, \
.read = seq_read, \
.write = custom_seq_write, \
.llseek = seq_lseek, \
.read = seq_read, \
.write = custom_seq_write, \
.llseek = seq_lseek, \
- .release = lprocfs_seq_release, \
+ .release = lprocfs_single_release, \
}
#define LPROC_SEQ_FOPS_RO(name) __LPROC_SEQ_FOPS(name, NULL)
}
#define LPROC_SEQ_FOPS_RO(name) __LPROC_SEQ_FOPS(name, NULL)
CFS_DECLARE_RWSEM(_lprocfs_lock);
EXPORT_SYMBOL(_lprocfs_lock);
CFS_DECLARE_RWSEM(_lprocfs_lock);
EXPORT_SYMBOL(_lprocfs_lock);
+int lprocfs_single_release(struct inode *inode, struct file *file)
+{
+ LPROCFS_EXIT();
+ return single_release(inode, file);
+}
+EXPORT_SYMBOL(lprocfs_single_release);
+
int lprocfs_seq_release(struct inode *inode, struct file *file)
{
LPROCFS_EXIT();
int lprocfs_seq_release(struct inode *inode, struct file *file)
{
LPROCFS_EXIT();