Whamcloud - gitweb
mds/handler.c, mds/mds_reint.c: fixup the ext3 MDS code a bit to build on
authoradilger <adilger>
Sat, 23 Mar 2002 00:33:13 +0000 (00:33 +0000)
committeradilger <adilger>
Sat, 23 Mar 2002 00:33:13 +0000 (00:33 +0000)
the older 2.4.9 kernel (i_blkbits does not exist there), and add
in the missing fixup for i_diskblocks
ALL: add in test framework for simulating errors, dropped packets, etc.
does not yet integrate with the ext3 on-disk error interface

lustre/include/linux/obd_support.h
lustre/mds/handler.c
lustre/mds/mds_reint.c
lustre/obdclass/class_obd.c
lustre/obdclass/sysctl.c
lustre/ost/ost_handler.c

index 9386395..072dc84 100644 (file)
 
 /* global variables */
 extern unsigned long obd_memory;
-extern unsigned long obd_drop_packet;
+extern unsigned long obd_fail_loc;
 
 enum {
-        OBD_INST_MDS_GETATTR = 1,
-        OBD_INST_MDS_READPAGE,
-        OBD_INST_MDS_READPAGE_BULK,
-        OBD_INST_MDS_REINT,
-        OBD_INST_MDS_OPEN,
-        OBD_INST_MDS_CLOSE,
-        OBD_INST_OST_CONNECT,
-        OBD_INST_OST_DISCONNECT,
-        OBD_INST_OST_GET_INFO,
-        OBD_INST_OST_CREATE,
-        OBD_INST_OST_DESTROY,
-        OBD_INST_OST_GETATTR,
-        OBD_INST_OST_SETATTR,
-        OBD_INST_OST_OPEN,
-        OBD_INST_OST_CLOSE,
-        OBD_INST_OST_BRW,
-        OBD_INST_OST_PUNCH
+        OBD_FAIL_MDS = 0x100,
+        OBD_FAIL_MDS_HANDLE_UNPACK,
+        OBD_FAIL_MDS_GETATTR_NET,
+        OBD_FAIL_MDS_GETATTR_PACK,
+        OBD_FAIL_MDS_READPAGE_NET,
+        OBD_FAIL_MDS_READPAGE_PACK,
+        OBD_FAIL_MDS_READPAGE_BULK_NET,
+        OBD_FAIL_MDS_SENDPAGE,
+        OBD_FAIL_MDS_REINT_NET,
+        OBD_FAIL_MDS_REINT_UNPACK,
+        OBD_FAIL_MDS_REINT_SETATTR,
+        OBD_FAIL_MDS_REINT_SETATTR_WRITE,
+        OBD_FAIL_MDS_REINT_CREATE,
+        OBD_FAIL_MDS_REINT_CREATE_WRITE,
+        OBD_FAIL_MDS_REINT_UNLINK,
+        OBD_FAIL_MDS_REINT_UNLINK_WRITE,
+        OBD_FAIL_MDS_REINT_LINK,
+        OBD_FAIL_MDS_REINT_LINK_WRITE,
+        OBD_FAIL_MDS_REINT_RENAME,
+        OBD_FAIL_MDS_REINT_RENAME_WRITE,
+        OBD_FAIL_MDS_OPEN_NET,
+        OBD_FAIL_MDS_OPEN_PACK,
+        OBD_FAIL_MDS_CLOSE_NET,
+        OBD_FAIL_MDS_CLOSE_PACK,
+
+        OBD_FAIL_OST = 0x200,
+        OBD_FAIL_OST_CONNECT_NET,
+        OBD_FAIL_OST_DISCONNECT_NET,
+        OBD_FAIL_OST_GET_INFO_NET,
+        OBD_FAIL_OST_CREATE_NET,
+        OBD_FAIL_OST_DESTROY_NET,
+        OBD_FAIL_OST_GETATTR_NET,
+        OBD_FAIL_OST_SETATTR_NET,
+        OBD_FAIL_OST_OPEN_NET,
+        OBD_FAIL_OST_CLOSE_NET,
+        OBD_FAIL_OST_BRW_NET,
+        OBD_FAIL_OST_PUNCH_NET,
 };
 
-#define OBD_CHECK_DROP_PACKET(req, id)                                  \
-do {                                                                    \
-        if (obd_drop_packet != id)                                      \
-                break;                                                  \
-                                                                        \
-        CDEBUG(D_OTHER, "obd_drop_packet=%d, dropping packet.\n", id);  \
-        RETURN(0);                                                      \
+/* preparation for a more advanced failure testbed (not functional yet) */
+#define OBD_FAIL_MASK_SYS    0x0000FF00
+#define OBD_FAIL_MASK_LOC    (0x000000FF | OBD_FAIL_MASK_SYS)
+#define OBD_FAIL_ONCE        0x80000000
+#define OBD_FAILED           0x40000000
+#define OBD_FAIL_MDS_ALL_NET 0x01000000
+#define OBD_FAIL_OST_ALL_NET 0x02000000
+
+#define OBD_FAIL_CHECK(id)      ((obd_fail_loc & OBD_FAIL_MASK_LOC) == (id))
+
+#define OBD_FAIL_RETURN(id, ret)                                             \
+do {                                                                         \
+        if (OBD_FAIL_CHECK(id)) {                                            \
+                CERROR("obd_fail_loc=%d, fail operation rc=%d\n", id, ret);  \
+                RETURN(ret);                                                 \
+        }                                                                    \
 } while(0)
 
+#define OBD_FAIL_WRITE(id)                                                   \
+do {                                                                         \
+        if (OBD_FAIL_CHECK(id)) {                                            \
+                CERROR("obd_fail_loc=%d, fail write operation\n", id);       \
+                /* FIXME: do something bad here */                           \
+        }                                                                    \
+} while (0)
+
 #define OBD_ALLOC(ptr, size)                                    \
 do {                                                            \
         long s = (size);                                        \
index 394439e..1118d6c 100644 (file)
@@ -42,6 +42,8 @@ int mds_sendpage(struct ptlrpc_request *req, struct file *file,
         int rc = 0;
         mm_segment_t oldfs = get_fs();
 
+        OBD_FAIL_RETURN(OBD_FAIL_MDS_SENDPAGE, -EIO);
+
         if (req->rq_peer.peer_nid == 0) {
                 struct inode *inode = file->f_dentry->d_inode;
                 char *buf = (char *)(long)dst->addr;
@@ -59,7 +61,8 @@ int mds_sendpage(struct ptlrpc_request *req, struct file *file,
                 else if (!strcmp(inode->i_sb->s_type->name, "ext3")) {
                         struct buffer_head *bh;
 
-                        bh = ext3_bread(NULL, inode, offset >> inode->i_blkbits,
+                        bh = ext3_bread(NULL, inode,
+                                        offset >> inode->i_sb->s_blocksize_bits,
                                         0, &rc);
 
                         if (bh) {
@@ -222,7 +225,7 @@ int mds_getattr(struct ptlrpc_request *req)
 
         rc = mds_pack_rep(NULL, 0, NULL, 0, &req->rq_rephdr, &req->rq_rep,
                           &req->rq_replen, &req->rq_repbuf);
-        if (rc) {
+        if (rc || OBD_FAIL_CHECK(OBD_FAIL_MDS_GETATTR_PACK)) {
                 CERROR("mds: out of memory\n");
                 req->rq_status = -ENOMEM;
                 RETURN(0);
@@ -264,7 +267,7 @@ int mds_open(struct ptlrpc_request *req)
 
         rc = mds_pack_rep(NULL, 0, NULL, 0, &req->rq_rephdr, &req->rq_rep,
                           &req->rq_replen, &req->rq_repbuf);
-        if (rc) {
+        if (rc || OBD_FAIL_CHECK(OBD_FAIL_MDS_OPEN_PACK)) {
                 CERROR("mds: out of memory\n");
                 req->rq_status = -ENOMEM;
                 RETURN(0);
@@ -299,7 +302,7 @@ int mds_close(struct ptlrpc_request *req)
 
         rc = mds_pack_rep(NULL, 0, NULL, 0, &req->rq_rephdr, &req->rq_rep,
                           &req->rq_replen, &req->rq_repbuf);
-        if (rc) {
+        if (rc || OBD_FAIL_CHECK(OBD_FAIL_MDS_CLOSE_PACK)) {
                 CERROR("mds: out of memory\n");
                 req->rq_status = -ENOMEM;
                 RETURN(0);
@@ -336,7 +339,7 @@ int mds_readpage(struct ptlrpc_request *req)
 
         rc = mds_pack_rep(NULL, 0, NULL, 0, &req->rq_rephdr, &req->rq_rep,
                           &req->rq_replen, &req->rq_repbuf);
-        if (rc) {
+        if (rc || OBD_FAIL_CHECK(OBD_FAIL_MDS_READPAGE_PACK)) {
                 CERROR("mds: out of memory\n");
                 req->rq_status = -ENOMEM;
                 RETURN(0);
@@ -382,10 +385,10 @@ int mds_reint(struct ptlrpc_request *req)
         len = req->rq_req.mds->tgtlen;
 
         rc = mds_update_unpack(buf, len, &rec);
-        if (rc) {
+        if (rc || OBD_FAIL_CHECK(OBD_FAIL_MDS_REINT_UNPACK)) {
                 CERROR("invalid record\n");
                 req->rq_status = -EINVAL;
-                return 0;
+                RETURN(0);
         }
         /* rc will be used to interrupt a for loop over multiple records */
         rc = mds_reint_rec(&rec, req);
@@ -411,7 +414,7 @@ int mds_handle(struct obd_device *dev, struct ptlrpc_service *svc,
 
         rc = mds_unpack_req(req->rq_reqbuf, req->rq_reqlen,
                             &req->rq_reqhdr, &req->rq_req);
-        if (rc) {
+        if (rc || OBD_FAIL_CHECK(OBD_FAIL_MDS_HANDLE_UNPACK)) {
                 CERROR("lustre_mds: Invalid request\n");
                 GOTO(out, rc);
         }
@@ -420,31 +423,31 @@ int mds_handle(struct obd_device *dev, struct ptlrpc_service *svc,
 
         case MDS_GETATTR:
                 CDEBUG(D_INODE, "getattr\n");
-                OBD_CHECK_DROP_PACKET(req, OBD_INST_MDS_GETATTR);
+                OBD_FAIL_RETURN(OBD_FAIL_MDS_GETATTR_NET, 0);
                 rc = mds_getattr(req);
                 break;
 
         case MDS_READPAGE:
                 CDEBUG(D_INODE, "readpage\n");
-                OBD_CHECK_DROP_PACKET(req, OBD_INST_MDS_READPAGE);
+                OBD_FAIL_RETURN(OBD_FAIL_MDS_READPAGE_NET, 0);
                 rc = mds_readpage(req);
                 break;
 
         case MDS_REINT:
                 CDEBUG(D_INODE, "reint\n");
-                OBD_CHECK_DROP_PACKET(req, OBD_INST_MDS_REINT);
+                OBD_FAIL_RETURN(OBD_FAIL_MDS_REINT_NET, 0);
                 rc = mds_reint(req);
                 break;
 
         case MDS_OPEN:
                 CDEBUG(D_INODE, "open\n");
-                OBD_CHECK_DROP_PACKET(req, OBD_INST_MDS_OPEN);
+                OBD_FAIL_RETURN(OBD_FAIL_MDS_OPEN_NET, 0);
                 rc = mds_open(req);
                 break;
 
         case MDS_CLOSE:
                 CDEBUG(D_INODE, "close\n");
-                OBD_CHECK_DROP_PACKET(req, OBD_INST_MDS_CLOSE);
+                OBD_FAIL_RETURN(OBD_FAIL_MDS_CLOSE_NET, 0);
                 rc = mds_close(req);
                 break;
 
index ee22076..ba9e214 100644 (file)
@@ -41,15 +41,17 @@ extern struct ptlrpc_request *mds_prep_req(int size, int opcode, int namelen, ch
 
 static int mds_reint_setattr(struct mds_update_record *rec, struct ptlrpc_request *req)
 {
+        struct inode *inode;
        struct dentry *de;
 
        de = mds_fid2dentry(&req->rq_obd->u.mds, rec->ur_fid1, NULL);
-       if (IS_ERR(de)) { 
-               req->rq_rephdr->status = -ESTALE;
-               return 0;
+        if (IS_ERR(de) || OBD_FAIL_CHECK(OBD_FAIL_MDS_REINT_SETATTR)) {
+                req->rq_rephdr->status = -ESTALE;
+                RETURN(0);
        }
 
-        CDEBUG(D_INODE, "ino %ld\n", de->d_inode->i_ino);
+        inode = de->d_inode;
+        CDEBUG(D_INODE, "ino %ld\n", inode->i_ino);
 
        /* a _really_ horrible hack to avoid removing the data stored
           in the block pointers; this data is the object id 
@@ -58,20 +60,30 @@ static int mds_reint_setattr(struct mds_update_record *rec, struct ptlrpc_reques
        if ( rec->ur_iattr.ia_valid & ATTR_SIZE ) { 
                /* ATTR_SIZE would invoke truncate: clear it */ 
                rec->ur_iattr.ia_valid &= ~ATTR_SIZE;
-               de->d_inode->i_size = rec->ur_iattr.ia_size;
+                inode->i_size = rec->ur_iattr.ia_size;
+
+                /* an _even_more_ horrible hack to make this hack work with
+                 * ext3.  This is because ext3 keeps a separate inode size
+                 * until the inode is committed to ensure consistency.  This
+                 * will also go away with the move to EAs.
+                 */
+                if (!strcmp(inode->i_sb->s_type->name, "ext3"))
+                        inode->u.ext3_i.i_disksize = inode->i_size;
+
                /* make sure _something_ gets set - so new inode
                   goes to disk (probably won't work over XFS */
-               if (!rec->ur_iattr.ia_valid & ATTR_MODE) { 
+               if (!rec->ur_iattr.ia_valid & ATTR_MODE) {
                        rec->ur_iattr.ia_valid |= ATTR_MODE;
-                       rec->ur_iattr.ia_mode = de->d_inode->i_mode;
+                       rec->ur_iattr.ia_mode = inode->i_mode;
                }
        }
-       if ( de->d_inode->i_op->setattr ) {
+        OBD_FAIL_WRITE(OBD_FAIL_MDS_REINT_SETATTR_WRITE);
+        if ( inode->i_op->setattr ) {
                req->rq_rephdr->status =
-                       de->d_inode->i_op->setattr(de, &rec->ur_iattr);
-       } else { 
+                        inode->i_op->setattr(de, &rec->ur_iattr);
+       } else {
                req->rq_rephdr->status =
-                       inode_setattr(de->d_inode, &rec->ur_iattr);
+                        inode_setattr(inode, &rec->ur_iattr);
        }
 
        l_dput(de);
@@ -94,42 +106,35 @@ static int mds_reint_create(struct mds_update_record *rec,
                            struct ptlrpc_request *req)
 {
        int type = rec->ur_mode & S_IFMT;
-       struct dentry *de;
+        struct dentry *de = NULL;
        struct mds_rep *rep = req->rq_rep.mds;
-       struct dentry *dchild; 
+        struct dentry *dchild = NULL;
        int rc;
        ENTRY;
 
        de = mds_fid2dentry(&req->rq_obd->u.mds, rec->ur_fid1, NULL);
-       if (IS_ERR(de)) { 
-               req->rq_rephdr->status = -ESTALE;
+        if (IS_ERR(de) || OBD_FAIL_CHECK(OBD_FAIL_MDS_REINT_CREATE)) {
                 BUG();
-               EXIT;
-               return 0;
+                GOTO(out_reint_create, (rc = -ESTALE));
        }
         CDEBUG(D_INODE, "ino %ld\n", de->d_inode->i_ino);
 
        dchild = lookup_one_len(rec->ur_name, de, rec->ur_namelen - 1);
-       rc = PTR_ERR(dchild);
-       if (IS_ERR(dchild)) { 
-               CERROR("child lookup error %d\n", rc);
-               dput(de); 
-               req->rq_rephdr->status = -ESTALE;
+        if (IS_ERR(dchild)) {
+                CERROR("child lookup error %ld\n", PTR_ERR(dchild));
                 BUG();
-               EXIT;
-               return 0;
+                GOTO(out_reint_create, (rc = -ESTALE));
        }
 
        if (dchild->d_inode) {
                CERROR("child exists (dir %ld, name %s)\n", 
                       de->d_inode->i_ino, rec->ur_name);
-               dput(de); 
-               req->rq_rephdr->status = -EEXIST;
                 BUG();
-               EXIT;
-               return 0;
+                GOTO(out_reint_create, (rc = -EEXIST));
        }
 
+        OBD_FAIL_WRITE(OBD_FAIL_MDS_REINT_CREATE_WRITE);
+
        switch (type) {
        case S_IFREG: { 
                rc = vfs_create(de->d_inode, dchild, rec->ur_mode);
@@ -157,7 +162,6 @@ static int mds_reint_create(struct mds_update_record *rec,
        }
        }
 
-       req->rq_rephdr->status = rc;
        if (!rc) { 
                if (type == S_IFREG)
                        mds_store_objid(dchild->d_inode, &rec->ur_id); 
@@ -169,105 +173,95 @@ static int mds_reint_create(struct mds_update_record *rec,
                rep->ino = dchild->d_inode->i_ino;
        }
 
-       dput(de);
-       dput(dchild); 
-       EXIT;
-       return 0;
+out_reint_create:
+        req->rq_rephdr->status = rc;
+        l_dput(de);
+        l_dput(dchild);
+        RETURN(0);
 }
 
 static int mds_reint_unlink(struct mds_update_record *rec, 
                            struct ptlrpc_request *req)
 {
-       struct dentry *de;
-       struct dentry *dchild; 
-       int rc;
+        struct dentry *de = NULL;
+        struct dentry *dchild = NULL;
+        int rc = 0;
        ENTRY;
 
        de = mds_fid2dentry(&req->rq_obd->u.mds, rec->ur_fid1, NULL);
-       if (IS_ERR(de)) { 
+        if (IS_ERR(de) || OBD_FAIL_CHECK(OBD_FAIL_MDS_REINT_UNLINK)) {
                 BUG();
-               req->rq_rephdr->status = -ESTALE;
-               EXIT;
-               return 0;
+                GOTO(out_unlink, (rc = -ESTALE));
        }
         CDEBUG(D_INODE, "ino %ld\n", de->d_inode->i_ino);
 
        dchild = lookup_one_len(rec->ur_name, de, rec->ur_namelen - 1);
-       rc = PTR_ERR(dchild);
-       if (IS_ERR(dchild)) { 
-               CERROR("child lookup error %d\n", rc);
+        if (IS_ERR(dchild)) {
+                CERROR("child lookup error %ld\n", PTR_ERR(dchild));
                 BUG();
-               dput(de); 
-               req->rq_rephdr->status = -ESTALE;
-               EXIT;
-               return 0;
+                GOTO(out_unlink, (rc = -ESTALE));
        }
 
        if (!dchild->d_inode) {
                CERROR("child doesn't exist (dir %ld, name %s\n", 
                       de->d_inode->i_ino, rec->ur_name);
                 BUG();
-               dput(de); 
-               req->rq_rephdr->status = -ESTALE;
-               EXIT;
-               return 0;
+                GOTO(out_unlink, (rc = -ESTALE));
        }
 
+        OBD_FAIL_WRITE(OBD_FAIL_MDS_REINT_UNLINK_WRITE);
+
        switch (dchild->d_inode->i_mode & S_IFMT) {
        case S_IFDIR:
                rc = vfs_rmdir(de->d_inode, dchild);
                EXIT;
                break;
        default:
-               rc = vfs_unlink(de->d_inode, dchild);
-               
+                rc = vfs_unlink(de->d_inode, dchild);
                EXIT;
                break;
        }
 
-       req->rq_rephdr->status = rc;
-       dput(de);
-       dput(dchild); 
-       EXIT;
-       return 0;
+out_unlink:
+        req->rq_rephdr->status = rc;
+        l_dput(de);
+        l_dput(dchild);
+        RETURN(0);
 }
 
 static int mds_reint_link(struct mds_update_record *rec, 
                            struct ptlrpc_request *req)
 {
-       struct dentry *de_src = NULL;
-       struct dentry *de_tgt_dir = NULL;
-       struct dentry *dchild = NULL; 
-       int rc;
-       ENTRY;
+        struct dentry *de_src = NULL;
+        struct dentry *de_tgt_dir = NULL;
+        struct dentry *dchild = NULL;
+        int rc = 0;
 
-       rc = -ESTALE;
-       de_src = mds_fid2dentry(&req->rq_obd->u.mds, rec->ur_fid1, NULL);
-       if (IS_ERR(de_src)) { 
-               EXIT;
-               goto out_link;
-       }
+        ENTRY;
+        de_src = mds_fid2dentry(&req->rq_obd->u.mds, rec->ur_fid1, NULL);
+        if (IS_ERR(de_src) || OBD_FAIL_CHECK(OBD_FAIL_MDS_REINT_LINK)) {
+                GOTO(out_link, (rc = -ESTALE));
+        }
 
        de_tgt_dir = mds_fid2dentry(&req->rq_obd->u.mds, rec->ur_fid2, NULL);
-       if (IS_ERR(de_tgt_dir)) { 
-               EXIT;
-               goto out_link;
+        if (IS_ERR(de_tgt_dir)) {
+                GOTO(out_link, (rc = -ESTALE));
        }
 
        dchild = lookup_one_len(rec->ur_name, de_tgt_dir, rec->ur_namelen - 1);
-       if (IS_ERR(dchild)) { 
-               CERROR("child lookup error %d\n", rc);
-                EXIT;
-               goto out_link;
+       if (IS_ERR(dchild)) {
+                CERROR("child lookup error %ld\n", PTR_ERR(dchild));
+               GOTO(out_link, (rc = -ESTALE));
        }
 
        if (dchild->d_inode) {
                CERROR("child exists (dir %ld, name %s\n", 
                       de_tgt_dir->d_inode->i_ino, rec->ur_name);
-               EXIT;
-               goto out_link;
+               GOTO(out_link, (rc = -EEXIST));
        }
 
+        OBD_FAIL_WRITE(OBD_FAIL_MDS_REINT_LINK_WRITE);
+
        rc = vfs_link(de_src, de_tgt_dir->d_inode, dchild); 
         EXIT;
 
@@ -287,36 +281,33 @@ static int mds_reint_rename(struct mds_update_record *rec,
        struct dentry *de_tgtdir = NULL;
        struct dentry *de_old = NULL; 
        struct dentry *de_new = NULL; 
-       int rc;
+       int rc = 0;
        ENTRY;
 
-       rc = -ESTALE;
        de_srcdir = mds_fid2dentry(&req->rq_obd->u.mds, rec->ur_fid1, NULL);
-       if (IS_ERR(de_srcdir)) { 
-               EXIT;
-               goto out_rename;
+        if (IS_ERR(de_srcdir)) {
+                GOTO(out_rename, (rc = -ESTALE));
        }
 
        de_tgtdir = mds_fid2dentry(&req->rq_obd->u.mds, rec->ur_fid2, NULL);
-       if (IS_ERR(de_tgtdir)) { 
-               EXIT;
-               goto out_rename;
+        if (IS_ERR(de_tgtdir)) {
+                GOTO(out_rename, (rc = -ESTALE));
        }
 
        de_old = lookup_one_len(rec->ur_name, de_srcdir, rec->ur_namelen - 1);
-       if (IS_ERR(de_old)) { 
-               CERROR("child lookup error %d\n", rc);
-                EXIT;
-               goto out_rename;
+        if (IS_ERR(de_old)) {
+                CERROR("child lookup error %ld\n", PTR_ERR(de_old));
+                GOTO(out_rename, (rc = -ESTALE));
        }
 
        de_new = lookup_one_len(rec->ur_tgt, de_tgtdir, rec->ur_tgtlen - 1);
-       if (IS_ERR(de_new)) { 
-               CERROR("child lookup error %d\n", rc);
-                EXIT;
-               goto out_rename;
+        if (IS_ERR(de_new)) {
+                CERROR("child lookup error %ld\n", PTR_ERR(de_new));
+                GOTO(out_rename, (rc = -ESTALE));
        }
 
+        OBD_FAIL_WRITE(OBD_FAIL_MDS_REINT_RENAME_WRITE);
+
        rc = vfs_rename(de_srcdir->d_inode, de_old, de_tgtdir->d_inode, de_new);
         EXIT;
 
@@ -331,32 +322,30 @@ static int mds_reint_rename(struct mds_update_record *rec,
 
 typedef int (*mds_reinter)(struct mds_update_record *, struct ptlrpc_request*); 
 
-static mds_reinter  reinters[REINT_MAX+1] = { 
-       [REINT_SETATTR]   mds_reint_setattr, 
-       [REINT_CREATE]    mds_reint_create,
-       [REINT_UNLINK]    mds_reint_unlink, 
-       [REINT_LINK]      mds_reint_link,
-       [REINT_RENAME]    mds_reint_rename
+static mds_reinter  reinters[REINT_MAX+1] = {
+        [REINT_SETATTR]   mds_reint_setattr,
+        [REINT_CREATE]    mds_reint_create,
+        [REINT_UNLINK]    mds_reint_unlink,
+        [REINT_LINK]      mds_reint_link,
+        [REINT_RENAME]    mds_reint_rename
 };
 
 int mds_reint_rec(struct mds_update_record *rec, struct ptlrpc_request *req)
 {
        int rc; 
 
-       if (rec->ur_opcode < 0 || rec->ur_opcode > REINT_MAX) { 
-               CERROR("opcode %d not valid\n", 
-                      rec->ur_opcode); 
-               rc = req->rq_status = -EINVAL;
-               return rc;
+        if (rec->ur_opcode < 0 || rec->ur_opcode > REINT_MAX) {
+                CERROR("opcode %d not valid\n", rec->ur_opcode);
+                rc = req->rq_status = -EINVAL;
+                RETURN(rc);
        }
 
        rc = mds_pack_rep(NULL, 0, NULL, 0, &req->rq_rephdr, &req->rq_rep, 
                          &req->rq_replen, &req->rq_repbuf);
-       if (rc) { 
-               EXIT;
-               CERROR("mds: out of memory\n");
-               rc = req->rq_status = -ENOMEM;
-               return rc;
+        if (rc) {
+                CERROR("mds: out of memory\n");
+                rc = req->rq_status = -ENOMEM;
+                RETURN(rc);
        }
        req->rq_rephdr->xid = req->rq_reqhdr->xid;
 
index 5d83a89..9d92bbb 100644 (file)
@@ -61,7 +61,7 @@
 
 static int obd_init_magic;
 unsigned long obd_memory = 0;
-unsigned long obd_drop_packet = 0;
+unsigned long obd_fail_loc = 0;
 struct obd_device obd_dev[MAX_OBD_DEVICES];
 struct list_head obd_types;
 
@@ -545,7 +545,7 @@ EXPORT_SYMBOL(obdo_cachep);
 EXPORT_SYMBOL(gen_multi_setup);
 EXPORT_SYMBOL(gen_multi_cleanup);
 EXPORT_SYMBOL(obd_memory);
-EXPORT_SYMBOL(obd_drop_packet);
+EXPORT_SYMBOL(obd_fail_loc);
 
 static int __init init_obdclass(void)
 {
index 388e8f3..57ae735 100644 (file)
@@ -52,7 +52,7 @@ static int obd_sctl_reset( ctl_table * table, int write, struct file
 
 #define OBD_SYSCTL 300
 
-#define OBD_DROP_PACKET     1       /* control packet drop instrumentation */
+#define OBD_FAIL_LOC        1       /* control test failures instrumentation */
 #define OBD_ENTRY           2       /* control enter/leave pattern */
 #define OBD_TIMEOUT         3       /* timeout on upcalls to become intrble */
 #define OBD_HARD            4       /* mount type "hard" or "soft" */
@@ -63,7 +63,7 @@ static int obd_sctl_reset( ctl_table * table, int write, struct file
 #define OBD_VARS_SLOT       2
 
 static ctl_table obd_table[] = {
-        {OBD_VARS, "drop_packet", &obd_drop_packet, sizeof(int), 0644, NULL, &proc_dointvec},
+        {OBD_FAIL_LOC, "fail_loc", &obd_fail_loc, sizeof(int), 0644, NULL, &proc_dointvec},
         {OBD_VARS, "vars", &vars[0], sizeof(int), 0644, NULL, &proc_dointvec},
         {OBD_INDEX, "index", &index, sizeof(int), 0644, NULL, &obd_sctl_vars},
         {OBD_RESET, "reset", NULL, 0, 0644, NULL, &obd_sctl_reset},
@@ -71,7 +71,7 @@ static ctl_table obd_table[] = {
 };
 
 static ctl_table parent_table[] = {
-       {OBD_SYSCTL, "obd", NULL, 0, 0555, obd_table},
+       {OBD_SYSCTL, "lustre", NULL, 0, 0555, obd_table},
        {0}
 };
 
index 10a595b..3ef44b6 100644 (file)
@@ -574,57 +574,57 @@ static int ost_handle(struct obd_device *obddev, struct ptlrpc_service *svc,
 
         case OST_CONNECT:
                 CDEBUG(D_INODE, "connect\n");
-                OBD_CHECK_DROP_PACKET(req, OBD_INST_OST_CONNECT);
+                OBD_FAIL_RETURN(OBD_FAIL_OST_CONNECT_NET, 0);
                 rc = ost_connect(ost, req);
                 break;
         case OST_DISCONNECT:
                 CDEBUG(D_INODE, "disconnect\n");
-                OBD_CHECK_DROP_PACKET(req, OBD_INST_OST_DISCONNECT);
+                OBD_FAIL_RETURN(OBD_FAIL_OST_DISCONNECT_NET, 0);
                 rc = ost_disconnect(ost, req);
                 break;
         case OST_GET_INFO:
                 CDEBUG(D_INODE, "get_info\n");
-                OBD_CHECK_DROP_PACKET(req, OBD_INST_OST_GET_INFO);
+                OBD_FAIL_RETURN(OBD_FAIL_OST_GET_INFO_NET, 0);
                 rc = ost_get_info(ost, req);
                 break;
         case OST_CREATE:
                 CDEBUG(D_INODE, "create\n");
-                OBD_CHECK_DROP_PACKET(req, OBD_INST_OST_CREATE);
+                OBD_FAIL_RETURN(OBD_FAIL_OST_CREATE_NET, 0);
                 rc = ost_create(ost, req);
                 break;
         case OST_DESTROY:
                 CDEBUG(D_INODE, "destroy\n");
-                OBD_CHECK_DROP_PACKET(req, OBD_INST_OST_DESTROY);
+                OBD_FAIL_RETURN(OBD_FAIL_OST_DESTROY_NET, 0);
                 rc = ost_destroy(ost, req);
                 break;
         case OST_GETATTR:
                 CDEBUG(D_INODE, "getattr\n");
-                OBD_CHECK_DROP_PACKET(req, OBD_INST_OST_GETATTR);
+                OBD_FAIL_RETURN(OBD_FAIL_OST_GETATTR_NET, 0);
                 rc = ost_getattr(ost, req);
                 break;
         case OST_SETATTR:
                 CDEBUG(D_INODE, "setattr\n");
-                OBD_CHECK_DROP_PACKET(req, OBD_INST_OST_SETATTR);
+                OBD_FAIL_RETURN(OBD_FAIL_OST_SETATTR_NET, 0);
                 rc = ost_setattr(ost, req);
                 break;
         case OST_OPEN:
                 CDEBUG(D_INODE, "setattr\n");
-                OBD_CHECK_DROP_PACKET(req, OBD_INST_OST_OPEN);
+                OBD_FAIL_RETURN(OBD_FAIL_OST_OPEN_NET, 0);
                 rc = ost_open(ost, req);
                 break;
         case OST_CLOSE:
                 CDEBUG(D_INODE, "setattr\n");
-                OBD_CHECK_DROP_PACKET(req, OBD_INST_OST_CLOSE);
+                OBD_FAIL_RETURN(OBD_FAIL_OST_CLOSE_NET, 0);
                 rc = ost_close(ost, req);
                 break;
         case OST_BRW:
                 CDEBUG(D_INODE, "brw\n");
-                OBD_CHECK_DROP_PACKET(req, OBD_INST_OST_BRW);
+                OBD_FAIL_RETURN(OBD_FAIL_OST_BRW_NET, 0);
                 rc = ost_brw(ost, req);
                 break;
         case OST_PUNCH:
                 CDEBUG(D_INODE, "punch\n");
-                OBD_CHECK_DROP_PACKET(req, OBD_INST_OST_PUNCH);
+                OBD_FAIL_RETURN(OBD_FAIL_OST_PUNCH_NET, 0);
                 rc = ost_punch(ost, req);
                 break;
         default: