Add dentry_get()/dentry_put() 04/111104/3
authorVyacheslav Cherkashin <v.cherkashin@samsung.com>
Fri, 1 Jul 2016 14:36:06 +0000 (17:36 +0300)
committerVyacheslav Cherkashin <v.cherkashin@samsung.com>
Mon, 30 Jan 2017 16:39:23 +0000 (19:39 +0300)
Change-Id: Ida2003a217d7de0cdf9c001e211f51185e8ec930
Signed-off-by: Vyacheslav Cherkashin <v.cherkashin@samsung.com>
us_manager/pf/pf_group.c
us_manager/pf/pf_group.h

index 38cfb85..5de3f48 100644 (file)
@@ -230,6 +230,31 @@ static void subsequent_install(struct task_struct *task,
        up_write(&task->mm->mmap_sem);
 }
 
+struct dentry *dentry_get(const char *path)
+{
+       struct dentry *d;
+       struct path st_path;
+
+       if (kern_path(path, LOOKUP_FOLLOW, &st_path) != 0) {
+               pr_err("failed to lookup dentry for path %s!\n", path);
+               return NULL;
+       }
+
+       d = st_path.dentry;
+       dget(d);
+       path_put(&st_path);
+
+       return d;
+}
+EXPORT_SYMBOL_GPL(dentry_get);
+
+void dentry_put(struct dentry *d)
+{
+       dput(d);
+}
+EXPORT_SYMBOL_GPL(dentry_put);
+
+
 /**
  * @brief Get dentry struct by path
  *
@@ -238,29 +263,13 @@ static void subsequent_install(struct task_struct *task,
  */
 struct dentry *dentry_by_path(const char *path)
 {
-       struct dentry *dentry;
-#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 38)
-       struct path st_path;
-       if (kern_path(path, LOOKUP_FOLLOW, &st_path) != 0) {
-#else /* LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 38) */
-       struct nameidata nd;
-       if (path_lookup(path, LOOKUP_FOLLOW, &nd) != 0) {
-#endif /* LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 38) */
-               printk("failed to lookup dentry for path %s!\n", path);
-               return NULL;
-       }
+       struct dentry *d;
 
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 25)
-       dentry = nd.dentry;
-       path_release(&nd);
-#elif LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 38)
-       dentry = nd.path.dentry;
-       path_put(&nd.path);
-#else /* LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 38) */
-       dentry = st_path.dentry;
-       path_put(&st_path);
-#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 25) */
-       return dentry;
+       d = dentry_get(path);
+       if (d)
+               dput(d);
+
+       return d;
 }
 EXPORT_SYMBOL_GPL(dentry_by_path);
 
index 3c170fa..20da025 100644 (file)
@@ -44,6 +44,8 @@ struct pfg_msg_cb {
 
 /* FIXME: create and use get_dentry() and put_dentry() */
 struct dentry *dentry_by_path(const char *path);
+struct dentry *dentry_get(const char *path);
+void dentry_put(struct dentry *d);
 
 struct pf_group *get_pf_group_by_dentry(struct dentry *dentry, void *priv);
 struct pf_group *get_pf_group_by_tgid(pid_t tgid, void *priv);