Whamcloud - gitweb
- add obdfilter to our setup, cleanup and debug environment
authorbraam <braam>
Fri, 29 Mar 2002 22:13:07 +0000 (22:13 +0000)
committerbraam <braam>
Fri, 29 Mar 2002 22:13:07 +0000 (22:13 +0000)
- fix tiny bug in filter.c

lustre/include/linux/obd_class.h
lustre/mds/handler.c
lustre/obdclass/class_obd.c
lustre/obdfilter/filter.c
lustre/tests/common.sh
lustre/tests/llmountcleanup.sh

index d60d0fc..bf36018 100644 (file)
@@ -67,46 +67,46 @@ extern void proc_lustre_remove_obd_entry(const char* name,
 
 #ifdef __KERNEL__
 struct obd_request {
-       struct obdo *oa;
-       struct obd_conn *conn;
-       __u32 plen1;
-       char *pbuf1;
+        struct obdo *oa;
+        struct obd_conn *conn;
+        __u32 plen1;
+        char *pbuf1;
 };
 
 static inline int obd_check_conn(struct obd_conn *conn) 
 {
-       struct obd_device *obd;
-       if (!conn) {
-               printk("obd_check_conn: NULL conn\n");
-               return -ENOTCONN;
-       }
-       obd = conn->oc_dev;
-       if (!obd) {
-               printk("obd_check_conn: NULL obd\n");
-               return -ENODEV;
-       }
-
-       if (!obd->obd_flags & OBD_ATTACHED ) {
-               printk("obd_check_conn: obd %d not attached\n", obd->obd_minor);
-               return -ENODEV;
-       }
-
-       if (!obd->obd_flags & OBD_SET_UP) {
-               printk("obd_check_conn: obd %d not setup\n", obd->obd_minor); 
-               return -ENODEV;
-       }
-
-       if (!obd->obd_type) {
-               printk("obd_check_conn: obd %d not typed\n", obd->obd_minor);
-               return -ENODEV;
-       }
-
-       if (!obd->obd_type->typ_ops) {
-               printk("obd_check_conn: obd %d no operations\n",
+        struct obd_device *obd;
+        if (!conn) {
+                printk("obd_check_conn: NULL conn\n");
+                return -ENOTCONN;
+        }
+        obd = conn->oc_dev;
+        if (!obd) {
+                printk("obd_check_conn: NULL obd\n");
+                return -ENODEV;
+        }
+
+        if (!obd->obd_flags & OBD_ATTACHED ) {
+                printk("obd_check_conn: obd %d not attached\n", obd->obd_minor);
+                return -ENODEV;
+        }
+
+        if (!obd->obd_flags & OBD_SET_UP) {
+                printk("obd_check_conn: obd %d not setup\n", obd->obd_minor); 
+                return -ENODEV;
+        }
+
+        if (!obd->obd_type) {
+                printk("obd_check_conn: obd %d not typed\n", obd->obd_minor);
+                return -ENODEV;
+        }
+
+        if (!obd->obd_type->typ_ops) {
+                printk("obd_check_conn: obd %d no operations\n",
                        obd->obd_minor);
-               return -EOPNOTSUPP;
-       }
-       return 0;
+                return -EOPNOTSUPP;
+        }
+        return 0;
 }
 
 #define OBT(dev)        dev->obd_type
@@ -135,175 +135,175 @@ do {                                                            \
 do {                                                            \
         int rc = obd_check_conn(conn);                          \
         if (rc) {                                               \
-               printk("obd: error in operation: " #op "\n");   \
-               return rc;                                      \
-       }                                                       \
+                printk("obd: error in operation: " #op "\n");   \
+                return rc;                                      \
+        }                                                       \
         if (!OBP(conn->oc_dev,op)) {                            \
-               printk("obd_" #op ": dev %d no operation\n",    \
-                      conn->oc_dev->obd_minor);                \
-               return -EOPNOTSUPP;                             \
-       }                                                       \
+                printk("obd_" #op ": dev %d no operation\n",    \
+                       conn->oc_dev->obd_minor);                \
+                return -EOPNOTSUPP;                             \
+        }                                                       \
 } while (0)
 
 static inline int obd_get_info(struct obd_conn *conn, obd_count keylen,
                                void *key, obd_count *vallen, void **val)
 {
-       int rc;
+        int rc;
         OBD_CHECK_SETUP(conn);
-       OBD_CHECK_OP(conn,get_info);
-       
-       rc = OBP(conn->oc_dev, get_info)(conn, keylen, key, vallen, val);
-       EXIT;
-       return rc;
+        OBD_CHECK_OP(conn,get_info);
+        
+        rc = OBP(conn->oc_dev, get_info)(conn, keylen, key, vallen, val);
+        EXIT;
+        return rc;
 }
 
 static inline int obd_set_info(struct obd_conn *conn, obd_count keylen,
                                void *key, obd_count vallen, void *val)
 {
-       int rc;
+        int rc;
         OBD_CHECK_SETUP(conn);
-       OBD_CHECK_OP(conn,set_info);
-       
-       rc = OBP(conn->oc_dev, set_info)(conn, keylen, key, vallen, val);
-       EXIT;
-       return rc;
+        OBD_CHECK_OP(conn,set_info);
+        
+        rc = OBP(conn->oc_dev, set_info)(conn, keylen, key, vallen, val);
+        EXIT;
+        return rc;
 }
 
 static inline int obd_setup(struct obd_device *obd, int datalen, void *data)
 {
-       struct obd_conn conn;
-       int rc;
-       conn.oc_dev = obd;
-
-       OBD_CHECK_OP((&conn),setup);
-       
-       rc = OBP(conn.oc_dev, setup)(obd, datalen, data);
-       EXIT;
-       return rc;
+        struct obd_conn conn;
+        int rc;
+        conn.oc_dev = obd;
+
+        OBD_CHECK_OP((&conn),setup);
+        
+        rc = OBP(conn.oc_dev, setup)(obd, datalen, data);
+        EXIT;
+        return rc;
 }
 
 static inline int obd_cleanup(struct obd_device *obd)
 {
-       struct obd_conn conn;
-       int rc;
-       conn.oc_dev = obd;
+        struct obd_conn conn;
+        int rc;
+        conn.oc_dev = obd;
 
         OBD_CHECK_SETUP(&conn);
-       OBD_CHECK_OP((&conn),cleanup);
-       
-       rc = OBP(conn.oc_dev, cleanup)(obd);
-       EXIT;
-       return rc;
+        OBD_CHECK_OP((&conn),cleanup);
+        
+        rc = OBP(conn.oc_dev, cleanup)(obd);
+        EXIT;
+        return rc;
 }
 
 static inline int obd_create(struct obd_conn *conn, struct obdo *obdo) 
 {
-       int rc;
+        int rc;
         OBD_CHECK_SETUP(conn);
-       OBD_CHECK_OP(conn,create);
-       
-       rc = OBP(conn->oc_dev, create)(conn, obdo);
-       EXIT;
-       return rc;
+        OBD_CHECK_OP(conn,create);
+        
+        rc = OBP(conn->oc_dev, create)(conn, obdo);
+        EXIT;
+        return rc;
 }
 
 static inline int obd_destroy(struct obd_conn *conn, struct obdo *obdo) 
 {
-       int rc;
+        int rc;
         OBD_CHECK_SETUP(conn);
-       OBD_CHECK_OP(conn,destroy);
-       
-       rc = OBP(conn->oc_dev, destroy)(conn, obdo);
-       EXIT;
-       return rc;
+        OBD_CHECK_OP(conn,destroy);
+        
+        rc = OBP(conn->oc_dev, destroy)(conn, obdo);
+        EXIT;
+        return rc;
 }
 
 static inline int obd_getattr(struct obd_conn *conn, struct obdo *obdo) 
 {
-       int rc;
+        int rc;
         OBD_CHECK_SETUP(conn);
-       OBD_CHECK_OP(conn,getattr);
-       
-       rc = OBP(conn->oc_dev, getattr)(conn, obdo);
-       EXIT;
-       return rc;
+        OBD_CHECK_OP(conn,getattr);
+        
+        rc = OBP(conn->oc_dev, getattr)(conn, obdo);
+        EXIT;
+        return rc;
 }
 
 static inline int obd_close(struct obd_conn *conn, struct obdo *obdo) 
 {
-       int rc;
+        int rc;
         OBD_CHECK_SETUP(conn);
-       OBD_CHECK_OP(conn,close);
-       
-       rc = OBP(conn->oc_dev, close)(conn, obdo);
-       EXIT;
-       return rc;
+        OBD_CHECK_OP(conn,close);
+        
+        rc = OBP(conn->oc_dev, close)(conn, obdo);
+        EXIT;
+        return rc;
 }
 static inline int obd_open(struct obd_conn *conn, struct obdo *obdo) 
 {
-       int rc;
+        int rc;
         OBD_CHECK_SETUP(conn);
-       OBD_CHECK_OP(conn,open);
-       
-       rc = OBP(conn->oc_dev, open) (conn, obdo);
-       EXIT;
-       return rc;
+        OBD_CHECK_OP(conn,open);
+        
+        rc = OBP(conn->oc_dev, open) (conn, obdo);
+        EXIT;
+        return rc;
 }
 
 static inline int obd_setattr(struct obd_conn *conn, struct obdo *obdo) 
 {
-       int rc;
+        int rc;
         OBD_CHECK_SETUP(conn);
-       OBD_CHECK_OP(conn,setattr);
-       
-       rc = OBP(conn->oc_dev, setattr)(conn, obdo);
-       EXIT;
-       return rc;
+        OBD_CHECK_OP(conn,setattr);
+        
+        rc = OBP(conn->oc_dev, setattr)(conn, obdo);
+        EXIT;
+        return rc;
 }
 
 static inline int obd_connect(struct obd_conn *conn)
 {
-       int rc;
+        int rc;
         OBD_CHECK_SETUP(conn);
-       OBD_CHECK_OP(conn,connect);
-       
-       rc = OBP(conn->oc_dev, connect)(conn);
-       EXIT;
-       return rc;
+        OBD_CHECK_OP(conn,connect);
+        
+        rc = OBP(conn->oc_dev, connect)(conn);
+        EXIT;
+        return rc;
 }
 
 static inline int obd_disconnect(struct obd_conn *conn)
 {
-       int rc;
+        int rc;
         OBD_CHECK_SETUP(conn);
-       OBD_CHECK_OP(conn,disconnect);
-       
-       rc = OBP(conn->oc_dev, disconnect)(conn);
-       EXIT;
-       return rc;
+        OBD_CHECK_OP(conn,disconnect);
+        
+        rc = OBP(conn->oc_dev, disconnect)(conn);
+        EXIT;
+        return rc;
 }
 
 static inline int obd_statfs(struct obd_conn *conn, struct statfs *buf)
 {
-       int rc;
+        int rc;
         OBD_CHECK_SETUP(conn);
-       OBD_CHECK_OP(conn,statfs);
-       
-       rc = OBP(conn->oc_dev, statfs)(conn, buf);
-       EXIT;
-       return rc;
+        OBD_CHECK_OP(conn,statfs);
+        
+        rc = OBP(conn->oc_dev, statfs)(conn, buf);
+        EXIT;
+        return rc;
 }
 
 static inline int obd_punch(struct obd_conn *conn, struct obdo *tgt,
                             obd_size count, obd_off offset)
 {
-       int rc;
+        int rc;
         OBD_CHECK_SETUP(conn);
-       OBD_CHECK_OP(conn,punch);
-       
-       rc = OBP(conn->oc_dev, punch)(conn, tgt, count, offset);
-       EXIT;
-       return rc;
+        OBD_CHECK_OP(conn,punch);
+        
+        rc = OBP(conn->oc_dev, punch)(conn, tgt, count, offset);
+        EXIT;
+        return rc;
 }
 
 static inline int obd_brw(int rw, struct obd_conn *conn, obd_count num_oa,
@@ -311,14 +311,14 @@ static inline int obd_brw(int rw, struct obd_conn *conn, obd_count num_oa,
                           struct page **buf, obd_size *count, obd_off *offset,
                           obd_flag *flags)
 {
-       int rc;
+        int rc;
         OBD_CHECK_SETUP(conn);
-       OBD_CHECK_OP(conn,brw);
-       
-       rc = OBP(conn->oc_dev, brw)(rw, conn, num_oa, oa, oa_bufs, buf,
-                                   count, offset, flags);
-       EXIT;
-       return rc;
+        OBD_CHECK_OP(conn,brw);
+        
+        rc = OBP(conn->oc_dev, brw)(rw, conn, num_oa, oa, oa_bufs, buf,
+                                    count, offset, flags);
+        EXIT;
+        return rc;
 }
 
 static inline int obd_preprw(int cmd, struct obd_conn *conn, 
@@ -326,40 +326,40 @@ static inline int obd_preprw(int cmd, struct obd_conn *conn,
                              int niocount, struct niobuf *nb, 
                              struct niobuf *res)
 {
-       int rc;
+        int rc;
         OBD_CHECK_SETUP(conn);
-       OBD_CHECK_OP(conn, preprw);
-       
-       rc = OBP(conn->oc_dev, preprw)(cmd, conn, objcount, obj, niocount, nb,
+        OBD_CHECK_OP(conn, preprw);
+        
+        rc = OBP(conn->oc_dev, preprw)(cmd, conn, objcount, obj, niocount, nb,
                                        res);
-       EXIT;
-       return rc;
+        EXIT;
+        return rc;
 }
 
 static inline int obd_commitrw(int cmd, struct obd_conn *conn, 
                         int objcount, struct obd_ioobj *obj, 
                         int niocount, struct niobuf *res)
 {
-       int rc;
+        int rc;
         OBD_CHECK_SETUP(conn);
-       OBD_CHECK_OP(conn, commitrw);
-       
-       rc = OBP(conn->oc_dev, commitrw)(cmd, conn, objcount, obj, niocount,
+        OBD_CHECK_OP(conn, commitrw);
+        
+        rc = OBP(conn->oc_dev, commitrw)(cmd, conn, objcount, obj, niocount,
                                          res);
-       EXIT;
-       return rc;
+        EXIT;
+        return rc;
 }
 
 static inline int obd_iocontrol(int cmd, struct obd_conn *conn, 
                                 int len, void *karg, void *uarg)
 {
-       int rc;
+        int rc;
         OBD_CHECK_SETUP(conn);
-       OBD_CHECK_OP(conn, iocontrol);
-       
-       rc = OBP(conn->oc_dev, iocontrol)(cmd, conn, len, karg, uarg);
-       EXIT;
-       return rc;
+        OBD_CHECK_OP(conn, iocontrol);
+        
+        rc = OBP(conn->oc_dev, iocontrol)(cmd, conn, len, karg, uarg);
+        EXIT;
+        return rc;
 }
 
 #endif 
@@ -406,7 +406,7 @@ static __inline__ void obdo_free(struct obdo *oa)
 }
 
 static __inline__ struct obdo *obdo_fromid(struct obd_conn *conn, obd_id id,
-                                          obd_mode mode, obd_flag valid)
+                                           obd_mode mode, obd_flag valid)
 {
         struct obdo *oa;
         int err;
@@ -419,7 +419,7 @@ static __inline__ struct obdo *obdo_fromid(struct obd_conn *conn, obd_id id,
         }
 
         oa->o_id = id;
-       oa->o_mode = mode;
+        oa->o_mode = mode;
         oa->o_valid = valid;
         if ((err = OBP(conn->oc_dev, getattr)(conn, oa))) {
                 obdo_free(oa);
@@ -471,8 +471,8 @@ static inline void obdo_from_iattr(struct obdo *oa, struct iattr *attr)
 static inline void iattr_from_obdo(struct iattr *attr, struct obdo *oa)
 {
         unsigned int ia_valid = oa->o_valid;
-       
-       memset(attr, 0, sizeof(*attr));
+        
+        memset(attr, 0, sizeof(*attr));
         if (ia_valid & OBD_MD_FLATIME) {
                 attr->ia_atime = oa->o_atime;
                 attr->ia_valid |= ATTR_ATIME;
index 0abff96..b04c4d0 100644 (file)
@@ -531,12 +531,11 @@ static int mds_cleanup(struct obd_device * obddev)
         }
 
         ptlrpc_stop_thread(mds->mds_service);
-
+        rpc_unregister_service(mds->mds_service);
         if (!list_empty(&mds->mds_service->srv_reqs)) {
                 // XXX reply with errors and clean up
                 CERROR("Request list not empty!\n");
         }
-
         OBD_FREE(mds->mds_service, sizeof(*mds->mds_service));
 
         sb = mds->mds_sb;
index 9d92bbb..81f0640 100644 (file)
@@ -70,7 +70,7 @@ static int obd_class_open(struct inode * inode, struct file * file)
 {
         ENTRY;
 
-       file->private_data = NULL;
+        file->private_data = NULL;
         MOD_INC_USE_COUNT;
         RETURN(0);
 }
@@ -80,8 +80,8 @@ static int obd_class_release(struct inode * inode, struct file * file)
 {
         ENTRY;
 
-       if (file->private_data)
-               file->private_data = NULL;
+        if (file->private_data)
+                file->private_data = NULL;
 
         MOD_DEC_USE_COUNT;
         RETURN(0);
@@ -106,7 +106,7 @@ static struct obd_type *obd_search_type(char *nm)
                         return type;
                 }
         }
-       return NULL;
+        return NULL;
 }
 
 static struct obd_type *obd_nm_to_type(char *nm) 
@@ -114,14 +114,14 @@ static struct obd_type *obd_nm_to_type(char *nm)
         struct obd_type *type = obd_search_type(nm);
 
 #ifdef CONFIG_KMOD
-       if ( !type ) {
-               if ( !request_module(nm) ) {
-                       CDEBUG(D_INFO, "Loaded module '%s'\n", nm);
-                       type = obd_search_type(nm);
-               } else {
-                       CDEBUG(D_INFO, "Can't load module '%s'\n", nm);
-               }
-       }
+        if ( !type ) {
+                if ( !request_module(nm) ) {
+                        CDEBUG(D_INFO, "Loaded module '%s'\n", nm);
+                        type = obd_search_type(nm);
+                } else {
+                        CDEBUG(D_INFO, "Can't load module '%s'\n", nm);
+                }
+        }
 #endif
         return type;
 }
@@ -132,40 +132,40 @@ static int obd_class_ioctl (struct inode * inode, struct file * filp,
 {
         /* NOTE this must be larger than any of the ioctl data structs */
         char buf[1024];
-       struct obd_ioctl_data *data;
-       struct obd_device *obd = filp->private_data;
-       struct obd_conn conn;
-       int rw = OBD_BRW_READ;
+        struct obd_ioctl_data *data;
+        struct obd_device *obd = filp->private_data;
+        struct obd_conn conn;
+        int rw = OBD_BRW_READ;
         int err = 0;
-       ENTRY;
+        ENTRY;
 
-       memset(buf, 0, sizeof(buf));
+        memset(buf, 0, sizeof(buf));
 
-       if (!obd && cmd != OBD_IOC_DEVICE && cmd != TCGETS) {
-               CERROR("OBD ioctl: No device\n");
-               RETURN(-EINVAL);
-       } 
-       if (obd_ioctl_getdata(buf, buf + 800, (void *)arg)) { 
-               CERROR("OBD ioctl: data error\n");
-               RETURN(-EINVAL);
-       }
-       data = (struct obd_ioctl_data *)buf;
+        if (!obd && cmd != OBD_IOC_DEVICE && cmd != TCGETS) {
+                CERROR("OBD ioctl: No device\n");
+                RETURN(-EINVAL);
+        
+        if (obd_ioctl_getdata(buf, buf + 800, (void *)arg)) { 
+                CERROR("OBD ioctl: data error\n");
+                RETURN(-EINVAL);
+        }
+        data = (struct obd_ioctl_data *)buf;
 
         switch (cmd) {
         case TCGETS:
                 RETURN(-EINVAL);
-       case OBD_IOC_DEVICE: { 
-               CDEBUG(D_IOCTL, "\n");
-               if (data->ioc_dev >= MAX_OBD_DEVICES ||
-                   data->ioc_dev < 0) { 
-                       CERROR("OBD ioctl: DEVICE insufficient devices\n");
-                       RETURN(-EINVAL);
-               }
-               CDEBUG(D_IOCTL, "device %d\n", data->ioc_dev);
-
-               filp->private_data = &obd_dev[data->ioc_dev];
+        case OBD_IOC_DEVICE: { 
+                CDEBUG(D_IOCTL, "\n");
+                if (data->ioc_dev >= MAX_OBD_DEVICES ||
+                    data->ioc_dev < 0) { 
+                        CERROR("OBD ioctl: DEVICE insufficient devices\n");
+                        RETURN(-EINVAL);
+                }
+                CDEBUG(D_IOCTL, "device %d\n", data->ioc_dev);
+
+                filp->private_data = &obd_dev[data->ioc_dev];
                 RETURN(0);
-       }
+        }
 
         case OBD_IOC_ATTACH: {
                 struct obd_type *type;
@@ -177,8 +177,8 @@ static int obd_class_ioctl (struct inode * inode, struct file * filp,
                         RETURN(-EBUSY);
                 }
 
-               CDEBUG(D_IOCTL, "attach %s %s\n",  MKSTR(data->ioc_inlbuf1), 
-                      MKSTR(data->ioc_inlbuf2));
+                CDEBUG(D_IOCTL, "attach %s %s\n",  MKSTR(data->ioc_inlbuf1), 
+                       MKSTR(data->ioc_inlbuf2));
 
                 /* find the type */
                 type = obd_nm_to_type(data->ioc_inlbuf1);
@@ -194,7 +194,7 @@ static int obd_class_ioctl (struct inode * inode, struct file * filp,
 
                 /* do the attach */
                 if (OBT(obd) && OBP(obd, attach))
-                       err = OBP(obd, attach)(obd, sizeof(*data), data);
+                        err = OBP(obd, attach)(obd, sizeof(*data), data);
 
                 if (err) {
                         obd->obd_type = NULL;
@@ -202,9 +202,9 @@ static int obd_class_ioctl (struct inode * inode, struct file * filp,
                         obd->obd_flags |=  OBD_ATTACHED;
                         type->typ_refcnt++;
                         CDEBUG(D_IOCTL, "OBD: dev %d attached type %s\n", 
-                              obd->obd_minor, data->ioc_inlbuf1);
-                       obd->obd_proc_entry = 
-                               proc_lustre_register_obd_device(obd);
+                               obd->obd_minor, data->ioc_inlbuf1);
+                        obd->obd_proc_entry = 
+                                proc_lustre_register_obd_device(obd);
                         MOD_INC_USE_COUNT;
                 }
 
@@ -232,8 +232,8 @@ static int obd_class_ioctl (struct inode * inode, struct file * filp,
                         RETURN(-EBUSY);
                 }
 
-               if (obd->obd_proc_entry)
-                       proc_lustre_release_obd_device(obd);
+                if (obd->obd_proc_entry)
+                        proc_lustre_release_obd_device(obd);
 
                 obd->obd_flags &= ~OBD_ATTACHED;
                 obd->obd_type->typ_refcnt--;
@@ -257,12 +257,12 @@ static int obd_class_ioctl (struct inode * inode, struct file * filp,
                 }
 
                 if ( OBT(obd) && OBP(obd, setup) )
-                       err = obd_setup(obd, sizeof(*data), data);
+                        err = obd_setup(obd, sizeof(*data), data);
 
-               if (!err) { 
-                       obd->obd_type->typ_refcnt++;
-                       obd->obd_flags |= OBD_SET_UP;
-               }
+                if (!err) { 
+                        obd->obd_type->typ_refcnt++;
+                        obd->obd_flags |= OBD_SET_UP;
+                }
 
                 RETURN(err);
         }
@@ -274,23 +274,23 @@ static int obd_class_ioctl (struct inode * inode, struct file * filp,
                 }
 
                 if ( OBT(obd) && OBP(obd, cleanup) )
-                       err = obd_cleanup(obd);
+                        err = obd_cleanup(obd);
 
-               if (!err) {
-                       obd->obd_flags &= ~OBD_SET_UP;
-                       obd->obd_type->typ_refcnt--;
-               }
+                if (!err) {
+                        obd->obd_flags &= ~OBD_SET_UP;
+                        obd->obd_type->typ_refcnt--;
+                }
                 RETURN(err);
         }
 
         case OBD_IOC_CONNECT: {
-               conn.oc_id = data->ioc_conn1;
-               conn.oc_dev = obd; 
+                conn.oc_id = data->ioc_conn1;
+                conn.oc_dev = obd; 
 
                 err = obd_connect(&conn);
 
-               CDEBUG(D_IOCTL, "assigned connection %d\n", conn.oc_id);
-               data->ioc_conn1 = conn.oc_id;
+                CDEBUG(D_IOCTL, "assigned connection %d\n", conn.oc_id);
+                data->ioc_conn1 = conn.oc_id;
                 if (err)
                         RETURN(err);
 
@@ -299,21 +299,21 @@ static int obd_class_ioctl (struct inode * inode, struct file * filp,
         }
 
         case OBD_IOC_DISCONNECT: { 
-               conn.oc_id = data->ioc_conn1;
-               conn.oc_dev = obd;
+                conn.oc_id = data->ioc_conn1;
+                conn.oc_dev = obd;
 
                 err = obd_disconnect(&conn);
                 RETURN(err);
-       }               
+        }               
 
-       case OBD_IOC_DEC_USE_COUNT: { 
-               MOD_DEC_USE_COUNT;
+        case OBD_IOC_DEC_USE_COUNT: { 
+                MOD_DEC_USE_COUNT;
                 RETURN(0);
-       }
+        }
 
         case OBD_IOC_CREATE: {
                 conn.oc_id = data->ioc_conn1;
-               conn.oc_dev = obd;
+                conn.oc_dev = obd;
 
                 err = obd_create(&conn, &data->ioc_obdo1);
                 if (err)
@@ -325,7 +325,7 @@ static int obd_class_ioctl (struct inode * inode, struct file * filp,
 
         case OBD_IOC_GETATTR: {
                 conn.oc_id = data->ioc_conn1;
-               conn.oc_dev = obd;
+                conn.oc_dev = obd;
 
                 err = obd_getattr(&conn, &data->ioc_obdo1);
                 if (err)
@@ -337,7 +337,7 @@ static int obd_class_ioctl (struct inode * inode, struct file * filp,
 
         case OBD_IOC_SETATTR: {
                 conn.oc_id = data->ioc_conn1;
-               conn.oc_dev = obd;
+                conn.oc_dev = obd;
 
                 err = obd_setattr(&conn, &data->ioc_obdo1);
                 if (err)
@@ -345,11 +345,11 @@ static int obd_class_ioctl (struct inode * inode, struct file * filp,
 
                 err = copy_to_user((int *)arg, data, sizeof(*data));
                 RETURN(err);
-       }
+        }
 
         case OBD_IOC_DESTROY: {
                 conn.oc_id = data->ioc_conn1;
-               conn.oc_dev = obd;
+                conn.oc_dev = obd;
 
                 err = obd_destroy(&conn, &data->ioc_obdo1);
                 if (err)
@@ -357,12 +357,12 @@ static int obd_class_ioctl (struct inode * inode, struct file * filp,
 
                 err = copy_to_user((int *)arg, data, sizeof(*data));
                 RETURN(err);
-       }
+        }
 
-       case OBD_IOC_BRW_WRITE:
-               rw = OBD_BRW_WRITE;
-       case OBD_IOC_BRW_READ: {
-               /* FIXME: use a better ioctl data struct than obd_ioctl_data.
+        case OBD_IOC_BRW_WRITE:
+                rw = OBD_BRW_WRITE;
+        case OBD_IOC_BRW_READ: {
+                /* FIXME: use a better ioctl data struct than obd_ioctl_data.
                  *        We don't really support multiple-obdo I/Os here,
                  *        for example offset and count are not per-obdo.
                  */
@@ -448,7 +448,7 @@ static int obd_class_ioctl (struct inode * inode, struct file * filp,
         }
         default: {
                 conn.oc_id = data->ioc_conn1;
-               conn.oc_dev = obd;
+                conn.oc_dev = obd;
 
                 err = obd_iocontrol(cmd, &conn, sizeof(*data), data, NULL);
                 if (err)
@@ -556,7 +556,7 @@ static int __init init_obdclass(void)
         
         INIT_LIST_HEAD(&obd_types);
         
-       if ( (err = misc_register(&obd_psdev)) ) { 
+        if ( (err = misc_register(&obd_psdev)) ) { 
                 CERROR("cannot register %d err %d\n", OBD_MINOR, err);
                 return -EIO;
         }
@@ -566,7 +566,7 @@ static int __init init_obdclass(void)
                 obd_dev[i].obd_minor = i;
                 INIT_LIST_HEAD(&obd_dev[i].obd_gen_clients);
                 INIT_LIST_HEAD(&obd_dev[i].obd_req_list);
-               init_waitqueue_head(&obd_dev[i].obd_req_waitq);
+                init_waitqueue_head(&obd_dev[i].obd_req_waitq);
         }
 
         err = obd_init_obdo_cache();
index 230a4ad..34c8976 100644 (file)
@@ -34,241 +34,241 @@ long filter_memory;
 #define S_SHIFT 12
 
 static char * obd_type_by_mode[S_IFMT >> S_SHIFT] = {
-       [0]                     "",
-       [S_IFREG >> S_SHIFT]    "R", 
-       [S_IFDIR >> S_SHIFT]    "D",
-       [S_IFCHR >> S_SHIFT]    "C",
-       [S_IFBLK >> S_SHIFT]    "B", 
-       [S_IFIFO >> S_SHIFT]    "F", 
-       [S_IFSOCK >> S_SHIFT]   "S",
-       [S_IFLNK >> S_SHIFT]    "L"
+        [0]                     "",
+        [S_IFREG >> S_SHIFT]    "R", 
+        [S_IFDIR >> S_SHIFT]    "D",
+        [S_IFCHR >> S_SHIFT]    "C",
+        [S_IFBLK >> S_SHIFT]    "B", 
+        [S_IFIFO >> S_SHIFT]    "F", 
+        [S_IFSOCK >> S_SHIFT]   "S",
+        [S_IFLNK >> S_SHIFT]    "L"
 };
 
 static void filter_id(char *buf, obd_id id, obd_mode mode)
 {
-       sprintf(buf, "O/%s/%Ld", obd_type_by_mode[(mode & S_IFMT) >> S_SHIFT],
-               id);
+        sprintf(buf, "O/%s/%Ld", obd_type_by_mode[(mode & S_IFMT) >> S_SHIFT],
+                id);
 }
 
 static struct file *filter_parent(obd_id id, obd_mode mode)
 {
-       char path[64];
-       struct file *file;
-       sprintf(path, "O/%s", obd_type_by_mode[(mode & S_IFMT) >> S_SHIFT]);
+        char path[64];
+        struct file *file;
+        sprintf(path, "O/%s", obd_type_by_mode[(mode & S_IFMT) >> S_SHIFT]);
 
-       file = filp_open(path, O_RDONLY, 0); 
-       return file;
+        file = filp_open(path, O_RDONLY, 0); 
+        return file;
 }
 
 void push_ctxt(struct obd_run_ctxt *save, struct obd_run_ctxt *new)
 { 
-       save->fs = get_fs();
-       save->pwd = dget(current->fs->pwd);
-       save->pwdmnt = mntget(current->fs->pwdmnt);
+        save->fs = get_fs();
+        save->pwd = dget(current->fs->pwd);
+        save->pwdmnt = mntget(current->fs->pwdmnt);
 
-       set_fs(new->fs);
-       set_fs_pwd(current->fs, new->pwdmnt, new->pwd);
+        set_fs(new->fs);
+        set_fs_pwd(current->fs, new->pwdmnt, new->pwd);
 }
 
 void pop_ctxt(struct obd_run_ctxt *saved)
 {
-       set_fs(saved->fs);
-       set_fs_pwd(current->fs, saved->pwdmnt, saved->pwd);
+        set_fs(saved->fs);
+        set_fs_pwd(current->fs, saved->pwdmnt, saved->pwd);
 
-       dput(saved->pwd);
-       mntput(saved->pwdmnt);
+        dput(saved->pwd);
+        mntput(saved->pwdmnt);
 }
 
 static int simple_mkdir(struct dentry *dir, char *name, int mode)
 {
-       struct dentry *dchild; 
-       int err;
-       ENTRY;
-       
-       dchild = lookup_one_len(name, dir, strlen(name));
-       if (IS_ERR(dchild)) { 
-               EXIT;
-               return PTR_ERR(dchild); 
-       }
-
-       if (dchild->d_inode) { 
-               dput(dchild);
-               EXIT;
-               return -EEXIST;
-       }
-
-       err = vfs_mkdir(dir->d_inode, dchild, mode);
-       dput(dchild);
-       
-       EXIT;
-       return err;
+        struct dentry *dchild; 
+        int err;
+        ENTRY;
+        
+        dchild = lookup_one_len(name, dir, strlen(name));
+        if (IS_ERR(dchild)) { 
+                EXIT;
+                return PTR_ERR(dchild); 
+        }
+
+        if (dchild->d_inode) { 
+                dput(dchild);
+                EXIT;
+                return -EEXIST;
+        }
+
+        err = vfs_mkdir(dir->d_inode, dchild, mode);
+        dput(dchild);
+        
+        EXIT;
+        return err;
 }
 
 static int simple_unlink(struct dentry *dir, char *name)
 {
-       struct dentry *dchild; 
-       int err;
-       ENTRY;
-       
-       dchild = lookup_one_len(name, dir, strlen(name));
-       if (IS_ERR(dchild)) { 
-               EXIT;
-               return PTR_ERR(dchild); 
-       }
-
-       if (!dchild->d_inode) { 
-               dput(dchild);
-               EXIT;
-               return -ENOENT;
-       }
-
-       err = vfs_unlink(dir->d_inode, dchild);
-       dput(dchild);
-       
-       EXIT;
-       return err;
+        struct dentry *dchild; 
+        int err;
+        ENTRY;
+        
+        dchild = lookup_one_len(name, dir, strlen(name));
+        if (IS_ERR(dchild)) { 
+                EXIT;
+                return PTR_ERR(dchild); 
+        }
+
+        if (!dchild->d_inode) { 
+                dput(dchild);
+                EXIT;
+                return -ENOENT;
+        }
+
+        err = vfs_unlink(dir->d_inode, dchild);
+        dput(dchild);
+        
+        EXIT;
+        return err;
 }
 
 static void filter_prep(struct obd_device *obddev)
 {
-       struct obd_run_ctxt saved;
-       struct file *file;
-       struct inode *inode;
-       loff_t off;
-       long rc;
-       char rootid[128];
-       __u64 lastino = 2;
-
-       push_ctxt(&saved, &obddev->u.filter.fo_ctxt);
-       rc = simple_mkdir(current->fs->pwd, "O", 0700);
-       rc = simple_mkdir(current->fs->pwd, "P", 0700);
-       rc = simple_mkdir(current->fs->pwd, "D", 0700);
-       file  = filp_open("O", O_RDONLY, 0); 
-       if (!file || IS_ERR(file)) { 
-               CERROR("cannot open O\n"); 
-               goto out;
-       }
-       rc = simple_mkdir(file->f_dentry, "R", 0700);  /* regular */
-       rc = simple_mkdir(file->f_dentry, "D", 0700);  /* directory */
-       rc = simple_mkdir(file->f_dentry, "L", 0700);  /* symbolic links */
-       rc = simple_mkdir(file->f_dentry, "C", 0700);  /* character devices */
-       rc = simple_mkdir(file->f_dentry, "B", 0700);  /* block devices */
-       rc = simple_mkdir(file->f_dentry, "F", 0700);  /* fifo's */
-       rc = simple_mkdir(file->f_dentry, "S", 0700);  /* sockets */
-       filp_close(file, NULL); 
-
-       filter_id(rootid, FILTER_ROOTINO, S_IFDIR);
-       file = filp_open(rootid, O_RDWR | O_CREAT, 00755);
-       if (IS_ERR(file)) {
-               CERROR("OBD filter: cannot make root directory"); 
-               goto out;
-       }
-       filp_close(file, 0);
-       rc = simple_mkdir(current->fs->pwd, rootid, 0755);
-
-       file = filp_open("D/status", O_RDWR | O_CREAT, 0700);
-       if ( !file || IS_ERR(file) ) {
-               CERROR("OBD filter: cannot open/create status file\n");
-               goto out;
-       }
-
-       /* steal operations */
-       inode = file->f_dentry->d_inode;
-       obddev->u.filter.fo_fop = file->f_op;
-       obddev->u.filter.fo_iop = inode->i_op;
-       obddev->u.filter.fo_aops = inode->i_mapping->a_ops;
-
-       off = 0;
-       if (inode->i_size == 0) { 
-               rc = file->f_op->write(file, (char *)&lastino, 
-                                      sizeof(lastino), &off);
-               if (rc != sizeof(lastino)) { 
-                       CERROR("OBD filter: error writing lastino\n");
-                       goto out;
-               }
-       } else { 
-               rc = file->f_op->read(file, (char *)&lastino, sizeof(lastino), 
-                                     &off);
-               if (rc != sizeof(lastino)) { 
-                       CERROR("OBD filter: error reading lastino\n");
-                       goto out;
-               }
-       }
-       obddev->u.filter.fo_lastino = lastino;
+        struct obd_run_ctxt saved;
+        struct file *file;
+        struct inode *inode;
+        loff_t off;
+        long rc;
+        char rootid[128];
+        __u64 lastino = 2;
+
+        push_ctxt(&saved, &obddev->u.filter.fo_ctxt);
+        rc = simple_mkdir(current->fs->pwd, "O", 0700);
+        rc = simple_mkdir(current->fs->pwd, "P", 0700);
+        rc = simple_mkdir(current->fs->pwd, "D", 0700);
+        file  = filp_open("O", O_RDONLY, 0); 
+        if (!file || IS_ERR(file)) { 
+                CERROR("cannot open O\n"); 
+                goto out;
+        }
+        rc = simple_mkdir(file->f_dentry, "R", 0700);  /* regular */
+        rc = simple_mkdir(file->f_dentry, "D", 0700);  /* directory */
+        rc = simple_mkdir(file->f_dentry, "L", 0700);  /* symbolic links */
+        rc = simple_mkdir(file->f_dentry, "C", 0700);  /* character devices */
+        rc = simple_mkdir(file->f_dentry, "B", 0700);  /* block devices */
+        rc = simple_mkdir(file->f_dentry, "F", 0700);  /* fifo's */
+        rc = simple_mkdir(file->f_dentry, "S", 0700);  /* sockets */
+        filp_close(file, NULL); 
+
+        filter_id(rootid, FILTER_ROOTINO, S_IFDIR);
+        file = filp_open(rootid, O_RDWR | O_CREAT, 00755);
+        if (IS_ERR(file)) {
+                CERROR("OBD filter: cannot make root directory"); 
+                goto out;
+        }
+        filp_close(file, 0);
+        rc = simple_mkdir(current->fs->pwd, rootid, 0755);
+
+        file = filp_open("D/status", O_RDWR | O_CREAT, 0700);
+        if ( !file || IS_ERR(file) ) {
+                CERROR("OBD filter: cannot open/create status file\n");
+                goto out;
+        }
+
+        /* steal operations */
+        inode = file->f_dentry->d_inode;
+        obddev->u.filter.fo_fop = file->f_op;
+        obddev->u.filter.fo_iop = inode->i_op;
+        obddev->u.filter.fo_aops = inode->i_mapping->a_ops;
+
+        off = 0;
+        if (inode->i_size == 0) { 
+                rc = file->f_op->write(file, (char *)&lastino, 
+                                       sizeof(lastino), &off);
+                if (rc != sizeof(lastino)) { 
+                        CERROR("OBD filter: error writing lastino\n");
+                        goto out;
+                }
+        } else { 
+                rc = file->f_op->read(file, (char *)&lastino, sizeof(lastino), 
+                                      &off);
+                if (rc != sizeof(lastino)) { 
+                        CERROR("OBD filter: error reading lastino\n");
+                        goto out;
+                }
+        }
+        obddev->u.filter.fo_lastino = lastino;
 
  out:
-       pop_ctxt(&saved);
+        pop_ctxt(&saved);
 }
 
 static void filter_post(struct obd_device *obddev)
 {
-       struct obd_run_ctxt saved;
-       long rc;
-       struct file *file;
-       loff_t off = 0; 
-
-       push_ctxt(&saved, &obddev->u.filter.fo_ctxt);
-       file = filp_open("D/status", O_RDWR | O_CREAT, 0700);
-       if ( !file || IS_ERR(file)) { 
-               CERROR("OBD filter: cannot create status file\n");
-               goto out;
-       }
-       rc = file->f_op->write(file, (char *)&obddev->u.filter.fo_lastino, 
-                      sizeof(obddev->u.filter.fo_lastino), &off);
-       if (rc != sizeof(sizeof(obddev->u.filter.fo_lastino)) ) { 
-               CERROR("OBD filter: error writing lastino\n");
-       }
-
-       rc = filp_close(file, NULL); 
-       if (rc) { 
-               CERROR("OBD filter: cannot close status file\n");
-       }
+        struct obd_run_ctxt saved;
+        long rc;
+        struct file *file;
+        loff_t off = 0; 
+
+        push_ctxt(&saved, &obddev->u.filter.fo_ctxt);
+        file = filp_open("D/status", O_RDWR | O_CREAT, 0700);
+        if ( !file || IS_ERR(file)) { 
+                CERROR("OBD filter: cannot create status file\n");
+                goto out;
+        }
+        rc = file->f_op->write(file, (char *)&obddev->u.filter.fo_lastino, 
+                       sizeof(obddev->u.filter.fo_lastino), &off);
+        if (rc != sizeof(obddev->u.filter.fo_lastino) ) { 
+                CERROR("OBD filter: error writing lastino\n");
+        }
+
+        rc = filp_close(file, NULL); 
+        if (rc) { 
+                CERROR("OBD filter: cannot close status file\n");
+        }
  out:
-       pop_ctxt(&saved);
+        pop_ctxt(&saved);
 }
 
 
 /* release per client resources */
 static int filter_disconnect(struct obd_conn *conn)
 {
-       /* XXX cleanup preallocated inodes */
-       return gen_disconnect(conn);
+        /* XXX cleanup preallocated inodes */
+        return gen_disconnect(conn);
 } /* ext2obd_disconnect */
 
 /* mount the file system (secretly) */
 static int filter_setup(struct obd_device *obddev, obd_count len,
-                       void *buf)
-                       
+                        void *buf)
+                        
 {
-       struct obd_ioctl_data* data = buf;
-       struct vfsmount *mnt;
-       int err; 
+        struct obd_ioctl_data* data = buf;
+        struct vfsmount *mnt;
+        int err; 
         ENTRY;
         
-       
-       mnt = do_kern_mount(data->ioc_inlbuf2, 0, 
-                           data->ioc_inlbuf1, NULL); 
-       err = PTR_ERR(mnt);
-       if (IS_ERR(mnt)) { 
-               EXIT;
-               return err;
-       }
-
-       obddev->u.filter.fo_sb = mnt->mnt_root->d_inode->i_sb;
-       if (!obddev->u.filter.fo_sb) {
-               EXIT;
-               return -ENODEV;
-       }
-
-       obddev->u.filter.fo_vfsmnt = mnt;
-       obddev->u.filter.fo_fstype = strdup(data->ioc_inlbuf2);
-
-       obddev->u.filter.fo_ctxt.pwdmnt = mnt;
-       obddev->u.filter.fo_ctxt.pwd = mnt->mnt_root;
-       obddev->u.filter.fo_ctxt.fs = KERNEL_DS;
-
-       filter_prep(obddev);
-       spin_lock_init(&obddev->u.filter.fo_lock);
+        
+        mnt = do_kern_mount(data->ioc_inlbuf2, 0, 
+                            data->ioc_inlbuf1, NULL); 
+        err = PTR_ERR(mnt);
+        if (IS_ERR(mnt)) { 
+                EXIT;
+                return err;
+        }
+
+        obddev->u.filter.fo_sb = mnt->mnt_root->d_inode->i_sb;
+        if (!obddev->u.filter.fo_sb) {
+                EXIT;
+                return -ENODEV;
+        }
+
+        obddev->u.filter.fo_vfsmnt = mnt;
+        obddev->u.filter.fo_fstype = strdup(data->ioc_inlbuf2);
+
+        obddev->u.filter.fo_ctxt.pwdmnt = mnt;
+        obddev->u.filter.fo_ctxt.pwd = mnt->mnt_root;
+        obddev->u.filter.fo_ctxt.fs = KERNEL_DS;
+
+        filter_prep(obddev);
+        spin_lock_init(&obddev->u.filter.fo_lock);
 
         MOD_INC_USE_COUNT;
         EXIT; 
@@ -277,12 +277,12 @@ static int filter_setup(struct obd_device *obddev, obd_count len,
 
 static __u64 filter_next_id(struct obd_device *obddev) 
 {
-       __u64 id;
-       spin_lock(&obddev->u.filter.fo_lock);
-       obddev->u.filter.fo_lastino++;
-       id =    obddev->u.filter.fo_lastino;
-       spin_unlock(&obddev->u.filter.fo_lock);
-       return id;
+        __u64 id;
+        spin_lock(&obddev->u.filter.fo_lock);
+        obddev->u.filter.fo_lastino++;
+        id =    obddev->u.filter.fo_lastino;
+        spin_unlock(&obddev->u.filter.fo_lock);
+        return id;
 }
 
 static int filter_cleanup(struct obd_device * obddev)
@@ -307,31 +307,30 @@ static int filter_cleanup(struct obd_device * obddev)
                 EXIT;
                 return 0;
         }
-       filter_post(obddev);
+        filter_post(obddev);
 
-       unlock_kernel();
-       mntput(obddev->u.filter.fo_vfsmnt); 
+        unlock_kernel();
+        mntput(obddev->u.filter.fo_vfsmnt); 
         obddev->u.filter.fo_sb = 0;
-       kfree(obddev->u.filter.fo_fstype);
+        kfree(obddev->u.filter.fo_fstype);
 
-       lock_kernel();
+        lock_kernel();
 
         MOD_DEC_USE_COUNT;
         EXIT;
         return 0;
 }
 
-
 static struct file *filter_obj_open(struct obd_device *obddev, 
-                                    struct obdo *oa)
+                                     struct obdo *oa)
 {
-       struct file *file;
-       int error = 0;
-       char id[24];
-       struct obd_run_ctxt saved;
-       struct super_block *sb;
+        struct file *file;
+        int error = 0;
+        char id[24];
+        struct obd_run_ctxt saved;
+        struct super_block *sb;
 
-       sb = obddev->u.filter.fo_sb;
+        sb = obddev->u.filter.fo_sb;
         if (!sb || !sb->s_dev) {
                 CDEBUG(D_SUPER, "fatal: device not initialized.\n");
                 EXIT;
@@ -344,56 +343,56 @@ static struct file *filter_obj_open(struct obd_device *obddev,
                 return NULL;
         }
 
-       if ( ! (oa->o_mode & S_IFMT) ) { 
-               CERROR("OBD filter_obj_open, no type (%Ld), mode %o!\n", 
-                      oa->o_id, oa->o_mode);
-       }
-       filter_id(id, oa->o_id, oa->o_mode); 
-       push_ctxt(&saved, &obddev->u.filter.fo_ctxt);
-       file = filp_open(id , O_RDONLY | O_LARGEFILE, 0);
-       pop_ctxt(&saved);
-
-       if (IS_ERR(file)) { 
-               error = PTR_ERR(file);
-               file = NULL;
-       }
-       CDEBUG(D_INODE, "opening obdo %s\n", id);
+        if ( ! (oa->o_mode & S_IFMT) ) { 
+                CERROR("OBD filter_obj_open, no type (%Ld), mode %o!\n", 
+                       oa->o_id, oa->o_mode);
+        }
+        filter_id(id, oa->o_id, oa->o_mode); 
+        push_ctxt(&saved, &obddev->u.filter.fo_ctxt);
+        file = filp_open(id , O_RDONLY | O_LARGEFILE, 0);
+        pop_ctxt(&saved);
+
+        if (IS_ERR(file)) { 
+                error = PTR_ERR(file);
+                file = NULL;
+        }
+        CDEBUG(D_INODE, "opening obdo %s\n", id);
 
-       return file;
+        return file;
 }
 
 static struct inode *filter_inode_from_obdo(struct obd_device *obddev, 
-                                    struct obdo *oa)
+                                     struct obdo *oa)
 {
-       struct file *file;
-       struct inode *inode; 
+        struct file *file;
+        struct inode *inode; 
 
-       file = filter_obj_open(obddev, oa);
-       if ( !file ) { 
-               CERROR("filter_inode_from_obdo failed\n"); 
-               return NULL;
-       }
+        file = filter_obj_open(obddev, oa);
+        if ( !file ) { 
+                CERROR("filter_inode_from_obdo failed\n"); 
+                return NULL;
+        }
 
         inode = iget(file->f_dentry->d_inode->i_sb, file->f_dentry->d_inode->i_ino); 
-       filp_close(file, 0);
-       return inode;
+        filp_close(file, 0);
+        return inode;
 }
 
 static inline void filter_from_inode(struct obdo *oa, struct inode *inode)
 {
-       int type = oa->o_mode & S_IFMT;
+        int type = oa->o_mode & S_IFMT;
         ENTRY;
 
         CDEBUG(D_INFO, "src inode %ld, dst obdo %ld valid 0x%08x\n",
                inode->i_ino, (long)oa->o_id, oa->o_valid);
         obdo_from_inode(oa, inode);
-       oa->o_mode &= ~S_IFMT;
-       oa->o_mode |= type;
+        oa->o_mode &= ~S_IFMT;
+        oa->o_mode |= type;
 
         if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode)) {
-               obd_rdev rdev = kdev_t_to_nr(inode->i_rdev);
+                obd_rdev rdev = kdev_t_to_nr(inode->i_rdev);
                 CDEBUG(D_INODE, "copying device %x from inode to obdo\n",
-                      rdev);
+                       rdev);
                 *((obd_rdev *)oa->o_inline) = rdev;
                 oa->o_obdflags |= OBD_FL_INLINEDATA;
                 oa->o_valid |= OBD_MD_FLINLINE;
@@ -431,14 +430,14 @@ static int filter_getattr(struct obd_conn *conn, struct obdo *oa)
                 return -EINVAL;
         }
 
-       if ( !(inode = filter_inode_from_obdo(conn->oc_dev, oa)) ) { 
-               EXIT;
-               return -ENOENT;
-       }
+        if ( !(inode = filter_inode_from_obdo(conn->oc_dev, oa)) ) { 
+                EXIT;
+                return -ENOENT;
+        }
 
-       oa->o_valid &= ~OBD_MD_FLID;
+        oa->o_valid &= ~OBD_MD_FLID;
         filter_from_inode(oa, inode);
-       
+        
         iput(inode);
         EXIT;
         return 0;
@@ -446,73 +445,73 @@ static int filter_getattr(struct obd_conn *conn, struct obdo *oa)
 
 static int filter_setattr(struct obd_conn *conn, struct obdo *oa)
 {
-       struct inode *inode;
-       struct iattr iattr;
-       int rc;
-       struct dentry de;
+        struct inode *inode;
+        struct iattr iattr;
+        int rc;
+        struct dentry de;
 
         if (!gen_client(conn)) {
                 CDEBUG(D_IOCTL, "invalid client %u\n", conn->oc_id);
                 return -EINVAL;
         }
 
-       inode = filter_inode_from_obdo(conn->oc_dev, oa); 
-       if ( !inode ) { 
-               EXIT;
-               return -ENOENT;
-       }
-
-       iattr_from_obdo(&iattr, oa);
-       iattr.ia_mode &= ~S_IFMT;
-       iattr.ia_mode |= S_IFREG;
-       de.d_inode = inode;
-       if ( inode->i_op->setattr ) {
-               rc = inode->i_op->setattr(&de, &iattr);
-       } else { 
-               rc = inode_setattr(inode, &iattr);
-       }
-
-       iput(inode);
-       EXIT;
-       return rc;
+        inode = filter_inode_from_obdo(conn->oc_dev, oa); 
+        if ( !inode ) { 
+                EXIT;
+                return -ENOENT;
+        }
+
+        iattr_from_obdo(&iattr, oa);
+        iattr.ia_mode &= ~S_IFMT;
+        iattr.ia_mode |= S_IFREG;
+        de.d_inode = inode;
+        if ( inode->i_op->setattr ) {
+                rc = inode->i_op->setattr(&de, &iattr);
+        } else { 
+                rc = inode_setattr(inode, &iattr);
+        }
+
+        iput(inode);
+        EXIT;
+        return rc;
 }
 
 static int filter_create (struct obd_conn* conn, struct obdo *oa)
 {
-       char name[64];
-       struct obd_run_ctxt saved;
-       struct file *file;
-       int mode;
-       struct obd_device *obddev = conn->oc_dev;
-       struct iattr;
-       ENTRY;
+        char name[64];
+        struct obd_run_ctxt saved;
+        struct file *file;
+        int mode;
+        struct obd_device *obddev = conn->oc_dev;
+        struct iattr;
+        ENTRY;
 
         if (!gen_client(conn)) {
                 CDEBUG(D_IOCTL, "invalid client %u\n", conn->oc_id);
                 return -EINVAL;
         }
-       CDEBUG(D_IOCTL, "\n");
-
-       oa->o_id = filter_next_id(conn->oc_dev);
-       if ( !(oa->o_mode && S_IFMT) ) { 
-               CERROR("filter obd: no type!\n");
-               return -ENOENT;
-       }
-
-       filter_id(name, oa->o_id, oa->o_mode);
-       push_ctxt(&saved, &obddev->u.filter.fo_ctxt);
-       mode = oa->o_mode;
-       mode &= ~S_IFMT;
-       mode |= S_IFREG; 
-       file = filp_open(name, O_RDONLY | O_CREAT, mode);
-       pop_ctxt(&saved);
-       if (IS_ERR(file)) { 
-               CERROR("Error mknod obj %s, err %ld\n", name, PTR_ERR(file));
-               return -ENOENT;
-       }
-       filp_close(file, 0);
-       CDEBUG(D_IOCTL, "\n");
-       
+        CDEBUG(D_IOCTL, "\n");
+
+        oa->o_id = filter_next_id(conn->oc_dev);
+        if ( !(oa->o_mode && S_IFMT) ) { 
+                CERROR("filter obd: no type!\n");
+                return -ENOENT;
+        }
+
+        filter_id(name, oa->o_id, oa->o_mode);
+        push_ctxt(&saved, &obddev->u.filter.fo_ctxt);
+        mode = oa->o_mode;
+        mode &= ~S_IFMT;
+        mode |= S_IFREG; 
+        file = filp_open(name, O_RDONLY | O_CREAT, mode);
+        pop_ctxt(&saved);
+        if (IS_ERR(file)) { 
+                CERROR("Error mknod obj %s, err %ld\n", name, PTR_ERR(file));
+                return -ENOENT;
+        }
+        filp_close(file, 0);
+        CDEBUG(D_IOCTL, "\n");
+        
         /* Set flags for fields we have set in ext2_new_inode */
         oa->o_valid |= OBD_MD_FLID | OBD_MD_FLBLKSZ | OBD_MD_FLBLOCKS |
                  OBD_MD_FLMTIME | OBD_MD_FLATIME | OBD_MD_FLCTIME |
@@ -525,10 +524,10 @@ static int filter_destroy(struct obd_conn *conn, struct obdo *oa)
         struct obd_device * obddev;
         struct obd_client * cli;
         struct inode * inode;
-       struct file *dir;
-       int rc;
-       struct obd_run_ctxt saved;
-       char id[128];
+        struct file *dir;
+        int rc;
+        struct obd_run_ctxt saved;
+        char id[128];
 
         if (!(cli = gen_client(conn))) {
                 CDEBUG(D_IOCTL, "invalid client %u\n", conn->oc_id);
@@ -537,41 +536,41 @@ static int filter_destroy(struct obd_conn *conn, struct obdo *oa)
         }
 
         obddev = conn->oc_dev;
-       inode = filter_inode_from_obdo(obddev, oa);
+        inode = filter_inode_from_obdo(obddev, oa);
 
-       if (!inode) { 
-               EXIT;
-               return -ENOENT;
-       }
+        if (!inode) { 
+                EXIT;
+                return -ENOENT;
+        }
 
         inode->i_nlink = 1;
-       inode->i_mode = 010000;
-       iput(inode);
+        inode->i_mode = 010000;
+        iput(inode);
 
-       filter_id(id, oa->o_id, oa->o_mode);
-       push_ctxt(&saved, &obddev->u.filter.fo_ctxt);
-       dir = filter_parent(oa->o_id, oa->o_mode);
-       if (IS_ERR(dir)) {
-               rc = PTR_ERR(dir);
-               EXIT;
-               goto out;
-       }
+        filter_id(id, oa->o_id, oa->o_mode);
+        push_ctxt(&saved, &obddev->u.filter.fo_ctxt);
+        dir = filter_parent(oa->o_id, oa->o_mode);
+        if (IS_ERR(dir)) {
+                rc = PTR_ERR(dir);
+                EXIT;
+                goto out;
+        }
 
-       rc = simple_unlink(dir->f_dentry, id);
+        rc = simple_unlink(dir->f_dentry, id);
 
-       filp_close(dir, 0);
+        filp_close(dir, 0);
 out:
-       pop_ctxt(&saved);
-       EXIT;
+        pop_ctxt(&saved);
+        EXIT;
         return rc;
 }
 
 static int filter_truncate(struct obd_conn *conn, struct obdo *oa, obd_size count,
                          obd_off offset)
 {
-       int error;
+        int error;
 
-       error = filter_setattr(conn, oa);
+        error = filter_setattr(conn, oa);
         oa->o_valid = OBD_MD_FLBLOCKS | OBD_MD_FLCTIME | OBD_MD_FLMTIME;
 
         EXIT;
@@ -592,15 +591,15 @@ static int filter_read(struct obd_conn *conn, struct obdo *oa, char *buf,
                 return -EINVAL;
         }
 
-       file = filter_obj_open(conn->oc_dev, oa); 
-       if (!file || IS_ERR(file)) { 
-               EXIT;
-               return -PTR_ERR(file);
-       }
+        file = filter_obj_open(conn->oc_dev, oa); 
+        if (!file || IS_ERR(file)) { 
+                EXIT;
+                return -PTR_ERR(file);
+        }
 
         /* count doubles as retval */
         retval = file->f_op->read(file, buf, *count, &offset);
-       filp_close(file, 0);
+        filp_close(file, 0);
 
         if ( retval >= 0 ) {
                 err = 0;
@@ -629,15 +628,15 @@ static int filter_write(struct obd_conn *conn, struct obdo *oa, char *buf,
                 return -EINVAL;
         }
 
-       file = filter_obj_open(conn->oc_dev, oa); 
-       if (!file || IS_ERR(file)) { 
-               EXIT;
-               return -PTR_ERR(file);
-       }
+        file = filter_obj_open(conn->oc_dev, oa); 
+        if (!file || IS_ERR(file)) { 
+                EXIT;
+                return -PTR_ERR(file);
+        }
 
         /* count doubles as retval */
         retval = file->f_op->write(file, buf, *count, &offset);
-       filp_close(file, 0);
+        filp_close(file, 0);
 
         if ( retval >= 0 ) {
                 err = 0;
@@ -653,21 +652,21 @@ static int filter_write(struct obd_conn *conn, struct obdo *oa, char *buf,
 } /* ext2obd_write */
 
 static int filter_pgcache_brw(int rw, struct obd_conn *conn, 
-                              obd_count num_oa,
-                              struct obdo **oa, 
-                              obd_count *oa_bufs, 
-                              struct page **pages,
-                              obd_size *count, 
-                              obd_off *offset, 
-                              obd_flag *flags)
+                               obd_count num_oa,
+                               struct obdo **oa, 
+                               obd_count *oa_bufs, 
+                               struct page **pages,
+                               obd_size *count, 
+                               obd_off *offset, 
+                               obd_flag *flags)
 {
         struct super_block      *sb;
-       mm_segment_t oldfs;
+        mm_segment_t oldfs;
         int                      onum;          /* index to oas */
         int                      pnum;          /* index to pages (bufs) */
         unsigned long            retval;
         int                      error;
-       struct file *file;
+        struct file *file;
 
         ENTRY;
 
@@ -678,71 +677,71 @@ static int filter_pgcache_brw(int rw, struct obd_conn *conn,
         }
 
         sb = conn->oc_dev->u.filter.fo_sb;
-       oldfs = get_fs();
-       set_fs(KERNEL_DS); 
+        oldfs = get_fs();
+        set_fs(KERNEL_DS); 
 
         pnum = 0; /* pnum indexes buf 0..num_pages */
         for (onum = 0; onum < num_oa; onum++) {
                 int              pg;
 
-               file = filter_obj_open(conn->oc_dev, oa[onum]); 
-               if (!file || IS_ERR(file)) { 
-                       EXIT;
-                       error = -ENOENT;
-                       goto ERROR;
-               }
+                file = filter_obj_open(conn->oc_dev, oa[onum]); 
+                if (!file || IS_ERR(file)) { 
+                        EXIT;
+                        error = -ENOENT;
+                        goto ERROR;
+                }
 
-               /* count doubles as retval */
+                /* count doubles as retval */
                 for (pg = 0; pg < oa_bufs[onum]; pg++) {
-                       CDEBUG(D_INODE, "OP %d obdo no/pno: (%d,%d) (%ld,%ld) off count (%Ld,%Ld)\n", 
-                              rw, onum, pnum, file->f_dentry->d_inode->i_ino,
-                              (unsigned long)offset[pnum] >> PAGE_CACHE_SHIFT,
-                              offset[pnum], count[pnum]);
-                       if (rw == WRITE) { 
-                               loff_t off; 
-                               char *buffer;
-                               off = offset[pnum]; 
-                               buffer = kmap(pages[pnum]); 
-                               retval = file->f_op->write(file, buffer, count[pnum], &off);
-                               kunmap(pages[pnum]);
-                               CDEBUG(D_INODE, "retval %ld\n", retval); 
-                       } else { 
-                               loff_t off = offset[pnum]; 
-                               char *buffer = kmap(pages[pnum]);
-
-                               if (off >= file->f_dentry->d_inode->i_size) {
-                                       memset(buffer, 0, count[pnum]);
-                                       retval = count[pnum];
-                               } else {
-                                       retval = file->f_op->read(file, buffer, count[pnum], &off);
-                               } 
-                               kunmap(pages[pnum]);
-
-                               if ( retval != count[pnum] ) {
-                                       filp_close(file, 0);
-                                       retval = -EIO;
-                                       EXIT;
-                                       goto ERROR;
-                               }
-                               CDEBUG(D_INODE, "retval %ld\n", retval); 
-                       }
-                       pnum++;
-               }
-               /* sizes and blocks are set by generic_file_write */
-               /* ctimes/mtimes will follow with a setattr call */ 
-               filp_close(file, 0);
-       }
-       
-       EXIT;
+                        CDEBUG(D_INODE, "OP %d obdo no/pno: (%d,%d) (%ld,%ld) off count (%Ld,%Ld)\n", 
+                               rw, onum, pnum, file->f_dentry->d_inode->i_ino,
+                               (unsigned long)offset[pnum] >> PAGE_CACHE_SHIFT,
+                               offset[pnum], count[pnum]);
+                        if (rw == WRITE) { 
+                                loff_t off; 
+                                char *buffer;
+                                off = offset[pnum]; 
+                                buffer = kmap(pages[pnum]); 
+                                retval = file->f_op->write(file, buffer, count[pnum], &off);
+                                kunmap(pages[pnum]);
+                                CDEBUG(D_INODE, "retval %ld\n", retval); 
+                        } else { 
+                                loff_t off = offset[pnum]; 
+                                char *buffer = kmap(pages[pnum]);
+
+                                if (off >= file->f_dentry->d_inode->i_size) {
+                                        memset(buffer, 0, count[pnum]);
+                                        retval = count[pnum];
+                                } else {
+                                        retval = file->f_op->read(file, buffer, count[pnum], &off);
+                                
+                                kunmap(pages[pnum]);
+
+                                if ( retval != count[pnum] ) {
+                                        filp_close(file, 0);
+                                        retval = -EIO;
+                                        EXIT;
+                                        goto ERROR;
+                                }
+                                CDEBUG(D_INODE, "retval %ld\n", retval); 
+                        }
+                        pnum++;
+                }
+                /* sizes and blocks are set by generic_file_write */
+                /* ctimes/mtimes will follow with a setattr call */ 
+                filp_close(file, 0);
+        }
+        
+        EXIT;
  ERROR:
-       set_fs(oldfs);
-       error = (retval >= 0) ? 0 : retval;
-       return error;
+        set_fs(oldfs);
+        error = (retval >= 0) ? 0 : retval;
+        return error;
 }
 
 static int filter_statfs (struct obd_conn *conn, struct statfs * statfs)
 {
-       struct super_block *sb;
+        struct super_block *sb;
         int err;
 
         ENTRY;
@@ -766,7 +765,7 @@ static int  filter_get_info(struct obd_conn *conn, obd_count keylen,
 {
         struct obd_device *obddev;
         struct obd_client * cli;
-       ENTRY;
+        ENTRY;
 
         if (!(cli = gen_client(conn))) {
                 CDEBUG(D_IOCTL, "invalid client %u\n", conn->oc_id);
@@ -779,7 +778,7 @@ static int  filter_get_info(struct obd_conn *conn, obd_count keylen,
              memcmp(key, "blocksize", keylen) == 0 ) {
                 *vallen = sizeof(int);
                 *val = (void *)obddev->u.filter.fo_sb->s_blocksize;
-               EXIT;
+                EXIT;
                 return 0;
         }
 
@@ -787,7 +786,7 @@ static int  filter_get_info(struct obd_conn *conn, obd_count keylen,
              memcmp(key, "blocksize_bits", keylen) == 0 ){
                 *vallen = sizeof(int);
                 *val = (void *)(int)obddev->u.filter.fo_sb->s_blocksize_bits;
-               EXIT;
+                EXIT;
                 return 0;
         }
 
@@ -795,7 +794,7 @@ static int  filter_get_info(struct obd_conn *conn, obd_count keylen,
              memcmp(key, "root_ino", keylen) == 0 ){
                 *vallen = sizeof(int);
                 *val = (void *)(int) FILTER_ROOTINO;
-               EXIT;
+                EXIT;
                 return 0;
         }
         
@@ -814,11 +813,11 @@ struct obd_ops filter_obd_ops = {
         o_statfs:      filter_statfs,
         o_getattr:     filter_getattr,
         o_create:      filter_create,
-       o_setattr:     filter_setattr,
+        o_setattr:     filter_setattr,
         o_destroy:     filter_destroy,
         o_read:        filter_read,
         o_write:       filter_write,
-       o_brw:         filter_pgcache_brw,
+        o_brw:         filter_pgcache_brw,
         o_punch:       filter_truncate,
 #if 0
         o_preallocate: ext2obd_preallocate_inodes,
index 328dd76..d1a2c0d 100644 (file)
@@ -65,6 +65,7 @@ setup() {
     insmod $SRCDIR/../../obd/rpc/ptlrpc.o || exit -1
     insmod $SRCDIR/../../obd/ldlm/ldlm.o || exit -1
     insmod $SRCDIR/../../obd/ext2obd/obdext2.o || exit -1
+    insmod $SRCDIR/../../obd/filterobd/obdfilter.o || exit -1
     insmod $SRCDIR/../../obd/ost/ost.o || exit -1
     insmod $SRCDIR/../../obd/osc/osc.o || exit -1
     insmod $SRCDIR/../../obd/obdecho/obdecho.o || exit -1
index 1267fe0..4bbeb8a 100755 (executable)
@@ -28,6 +28,7 @@ rmmod obdecho
 rmmod mds
 rmmod osc
 rmmod ost
+rmmod obdfilter
 rmmod obdext2
 rmmod ldlm
 rmmod ptlrpc