Commit de01e10c authored by Niranjan Dighe's avatar Niranjan Dighe Committed by Greg Kroah-Hartman

staging: lustre: Remove unused memhog functionality

Remove IOC_LIBCFS_MEMHOG ioctl functionality as it is no longer needed thereby
making functions like - kportal_memhog_alloc(), kportal_memhog_free() and type -
struct libcfs_device_userstate unused.
Signed-off-by: default avatarNiranjan Dighe <ndighe@visteon.com>
Acked-by: default avatarJames Simmons <jsimmons@infradead.org>
Reviewed-by: default avatarAndreas Dilger <andreas.dilger@intel.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 305b37bd
......@@ -387,11 +387,6 @@ int cfs_percpt_atomic_summary(atomic_t **refs);
* Support for temporary event tracing with minimal Heisenberg effect.
* -------------------------------------------------------------------- */
struct libcfs_device_userstate {
int ldu_memhog_pages;
struct page *ldu_memhog_root_page;
};
#define MKSTR(ptr) ((ptr)) ? (ptr) : ""
static inline int cfs_size_round4(int val)
......
......@@ -98,14 +98,12 @@ int libcfs_ioctl_popdata(void *arg, void *data, int size)
static int
libcfs_psdev_open(struct inode *inode, struct file *file)
{
struct libcfs_device_userstate **pdu = NULL;
int rc = 0;
if (!inode)
return -EINVAL;
pdu = (struct libcfs_device_userstate **)&file->private_data;
if (libcfs_psdev_ops.p_open != NULL)
rc = libcfs_psdev_ops.p_open(0, (void *)pdu);
rc = libcfs_psdev_ops.p_open(0, NULL);
else
return -EPERM;
return rc;
......@@ -115,14 +113,12 @@ libcfs_psdev_open(struct inode *inode, struct file *file)
static int
libcfs_psdev_release(struct inode *inode, struct file *file)
{
struct libcfs_device_userstate *pdu;
int rc = 0;
if (!inode)
return -EINVAL;
pdu = file->private_data;
if (libcfs_psdev_ops.p_close != NULL)
rc = libcfs_psdev_ops.p_close(0, (void *)pdu);
rc = libcfs_psdev_ops.p_close(0, NULL);
else
rc = -EPERM;
return rc;
......@@ -152,14 +148,8 @@ static long libcfs_ioctl(struct file *file,
return -EPERM;
panic("debugctl-invoked panic");
return 0;
case IOC_LIBCFS_MEMHOG:
if (!capable(CFS_CAP_SYS_ADMIN))
return -EPERM;
/* go thought */
}
pfile.off = 0;
pfile.private_data = file->private_data;
if (libcfs_psdev_ops.p_ioctl != NULL)
rc = libcfs_psdev_ops.p_ioctl(&pfile, cmd, (void *)arg);
else
......
......@@ -68,142 +68,16 @@ MODULE_LICENSE("GPL");
static struct dentry *lnet_debugfs_root;
static void kportal_memhog_free(struct libcfs_device_userstate *ldu)
{
struct page **level0p = &ldu->ldu_memhog_root_page;
struct page **level1p;
struct page **level2p;
int count1;
int count2;
if (*level0p != NULL) {
level1p = (struct page **)page_address(*level0p);
count1 = 0;
while (count1 < PAGE_CACHE_SIZE/sizeof(struct page *) &&
*level1p != NULL) {
level2p = (struct page **)page_address(*level1p);
count2 = 0;
while (count2 < PAGE_CACHE_SIZE/sizeof(struct page *) &&
*level2p != NULL) {
__free_page(*level2p);
ldu->ldu_memhog_pages--;
level2p++;
count2++;
}
__free_page(*level1p);
ldu->ldu_memhog_pages--;
level1p++;
count1++;
}
__free_page(*level0p);
ldu->ldu_memhog_pages--;
*level0p = NULL;
}
LASSERT(ldu->ldu_memhog_pages == 0);
}
static int kportal_memhog_alloc(struct libcfs_device_userstate *ldu, int npages,
gfp_t flags)
{
struct page **level0p;
struct page **level1p;
struct page **level2p;
int count1;
int count2;
LASSERT(ldu->ldu_memhog_pages == 0);
LASSERT(ldu->ldu_memhog_root_page == NULL);
if (npages < 0)
return -EINVAL;
if (npages == 0)
return 0;
level0p = &ldu->ldu_memhog_root_page;
*level0p = alloc_page(flags);
if (*level0p == NULL)
return -ENOMEM;
ldu->ldu_memhog_pages++;
level1p = (struct page **)page_address(*level0p);
count1 = 0;
memset(level1p, 0, PAGE_CACHE_SIZE);
while (ldu->ldu_memhog_pages < npages &&
count1 < PAGE_CACHE_SIZE/sizeof(struct page *)) {
if (cfs_signal_pending())
return -EINTR;
*level1p = alloc_page(flags);
if (*level1p == NULL)
return -ENOMEM;
ldu->ldu_memhog_pages++;
level2p = (struct page **)page_address(*level1p);
count2 = 0;
memset(level2p, 0, PAGE_CACHE_SIZE);
while (ldu->ldu_memhog_pages < npages &&
count2 < PAGE_CACHE_SIZE/sizeof(struct page *)) {
if (cfs_signal_pending())
return -EINTR;
*level2p = alloc_page(flags);
if (*level2p == NULL)
return -ENOMEM;
ldu->ldu_memhog_pages++;
level2p++;
count2++;
}
level1p++;
count1++;
}
return 0;
}
/* called when opening /dev/device */
static int libcfs_psdev_open(unsigned long flags, void *args)
{
struct libcfs_device_userstate *ldu;
try_module_get(THIS_MODULE);
LIBCFS_ALLOC(ldu, sizeof(*ldu));
if (ldu != NULL) {
ldu->ldu_memhog_pages = 0;
ldu->ldu_memhog_root_page = NULL;
}
*(struct libcfs_device_userstate **)args = ldu;
return 0;
}
/* called when closing /dev/device */
static int libcfs_psdev_release(unsigned long flags, void *args)
{
struct libcfs_device_userstate *ldu;
ldu = (struct libcfs_device_userstate *)args;
if (ldu != NULL) {
kportal_memhog_free(ldu);
LIBCFS_FREE(ldu, sizeof(*ldu));
}
module_put(THIS_MODULE);
return 0;
}
......@@ -260,19 +134,6 @@ static int libcfs_ioctl_int(struct cfs_psdev_file *pfile, unsigned long cmd,
return -EINVAL;
libcfs_debug_mark_buffer(data->ioc_inlbuf1);
return 0;
case IOC_LIBCFS_MEMHOG:
if (pfile->private_data == NULL) {
err = -EINVAL;
} else {
kportal_memhog_free(pfile->private_data);
/* XXX The ioc_flags is not GFP flags now, need to be fixed */
err = kportal_memhog_alloc(pfile->private_data,
data->ioc_count,
data->ioc_flags);
if (err != 0)
kportal_memhog_free(pfile->private_data);
}
break;
default: {
struct libcfs_ioctl_handler *hand;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment