Linux Headquarters
[ Register ]
[ About us ] [ Home Page ]

[ Kernel ] [ Documentation ] [ Links ] [ Books ]

Advertisement

Kernel v2.5.75 /fs/dquot.c

Filename:/fs/dquot.c
Lines Added:15
Lines Deleted:2
Also changed in: (Previous) 2.5.74-bk7  2.5.74-bk6  2.5.74-bk5  2.5.71  2.5.70-bk19  2.5.70-bk18 
(Following)

Location
[  2.5.75
  [  fs
     o  dquot.c

Patch

diff -Nru a/fs/dquot.c b/fs/dquot.c
--- a/fs/dquot.c   Thu Jul 10 13:16:28 2003
+++ b/fs/dquot.c   Thu Jul 10 13:16:28 2003
@@ -74,6 +74,7 @@
 #include <linux/module.h>
 #include <linux/proc_fs.h>
 #include <linux/security.h>
+#include <linux/kmod.h>
 
 #include <asm/uaccess.h>
 
@@ -96,6 +97,7 @@
 
 static char *quotatypes[] = INITQFNAMES;
 static struct quota_format_type *quota_formats;   /* List of registered formats */
+static struct quota_module_name module_names[] = INIT_QUOTA_MODULE_NAMES;
 
 int register_quota_format(struct quota_format_type *fmt)
 {
@@ -123,8 +125,19 @@
 
    spin_lock(&dq_list_lock);
    for (actqf = quota_formats; actqf && actqf->qf_fmt_id != id; actqf = actqf->qf_next);
-   if (actqf && !try_module_get(actqf->qf_owner))
-      actqf = NULL;
+   if (!actqf || !try_module_get(actqf->qf_owner)) {
+      int qm;
+
+      for (qm = 0; module_names[qm].qm_fmt_id && module_names[qm].qm_fmt_id != id; qm++);
+      if (!module_names[qm].qm_fmt_id || request_module(module_names[qm].qm_mod_name)) {
+         actqf = NULL;
+         goto out;
+      }
+      for (actqf = quota_formats; actqf && actqf->qf_fmt_id != id; actqf = actqf->qf_next);
+      if (actqf && !try_module_get(actqf->qf_owner))
+         actqf = NULL;
+   }
+out:
    spin_unlock(&dq_list_lock);
    return actqf;
 }


Comments: webmaster (at) linuxhq.com.
Advertising: banners (at) linuxhq.com.
Compilation ©1998-2008 Linux Headquarters, Inc.