Whamcloud - gitweb
Remove the obdo->o_rdev member, and store rdev numbers in the inline data.
authorgord-fig <gord-fig>
Wed, 17 Oct 2001 00:28:29 +0000 (00:28 +0000)
committergord-fig <gord-fig>
Wed, 17 Oct 2001 00:28:29 +0000 (00:28 +0000)
lustre/include/linux/obd_class.h
lustre/include/linux/obdo.h

index 6926875..9d05040 100644 (file)
@@ -33,7 +33,7 @@ typedef uint32_t        obd_blksize;
 typedef uint32_t        obd_mode;
 typedef uint32_t        obd_uid;
 typedef uint32_t        obd_gid;
-typedef uint16_t        obd_rdev;
+typedef uint32_t        obd_rdev;
 typedef uint32_t        obd_flag;
 typedef uint32_t        obd_count;
 
@@ -55,7 +55,6 @@ struct obdo {
         obd_mode                o_mode;
         obd_uid                 o_uid;
         obd_gid                 o_gid;
-       obd_rdev                o_rdev;
         obd_flag                o_flags;
         obd_flag                o_obdflags;
         obd_count               o_nlink;
@@ -84,7 +83,6 @@ struct obdo {
 #define OBD_MD_FLGENER  (0x00002000UL)
 #define OBD_MD_FLINLINE (0x00004000UL)
 #define OBD_MD_FLOBDMD  (0x00008000UL)
-#define OBD_MD_FLRDEV   (0x00010000UL)
 #define OBD_MD_FLNOTOBD (~(OBD_MD_FLOBDMD | OBD_MD_FLOBDFLG | OBD_MD_FLBLOCKS))
 
 /*
@@ -325,8 +323,6 @@ static __inline__ void obdo_cpy_md(struct obdo *dst, struct obdo *src)
                 dst->o_gid = src->o_gid;
         if ( src->o_valid & OBD_MD_FLFLAGS ) 
                 dst->o_flags = src->o_flags;
-        if ( src->o_valid & OBD_MD_FLRDEV ) 
-                dst->o_rdev = src->o_rdev;
         /*
         if ( src->o_valid & OBD_MD_FLOBDFLG ) 
                 dst->o_obdflags = src->o_obdflags;
@@ -371,8 +367,6 @@ static __inline__ void obdo_from_inode(struct obdo *dst, struct inode *src)
                 dst->o_uid = src->i_uid;
         if ( dst->o_valid & OBD_MD_FLGID )
                 dst->o_gid = src->i_gid;
-        if ( dst->o_valid & OBD_MD_FLRDEV )
-                dst->o_rdev = src->i_rdev;
         if ( dst->o_valid & OBD_MD_FLFLAGS )
                 dst->o_flags = src->i_flags;
         if ( dst->o_valid & OBD_MD_FLNLINK )
@@ -404,8 +398,6 @@ static __inline__ void obdo_to_inode(struct inode *dst, struct obdo *src)
                 dst->i_uid = src->o_uid;
         if ( src->o_valid & OBD_MD_FLGID ) 
                 dst->i_gid = src->o_gid;
-        if ( src->o_valid & OBD_MD_FLRDEV ) 
-                dst->i_rdev = src->o_rdev;
         if ( src->o_valid & OBD_MD_FLFLAGS ) 
                 dst->i_flags = src->o_flags;
         if ( src->o_valid & OBD_MD_FLNLINK )
@@ -438,8 +430,6 @@ static __inline__ int obdo_cmp_md(struct obdo *dst, struct obdo *src,
                 res = (res || (dst->o_uid != src->o_uid));
         if ( compare & OBD_MD_FLGID )
                 res = (res || (dst->o_gid != src->o_gid));
-        if ( compare & OBD_MD_FLRDEV )
-                res = (res || (dst->o_rdev != src->o_rdev));
         if ( compare & OBD_MD_FLFLAGS ) 
                 res = (res || (dst->o_flags != src->o_flags));
         if ( compare & OBD_MD_FLNLINK )
index 6e257e9..c410354 100644 (file)
@@ -45,7 +45,13 @@ static void inline obdfs_from_inode(struct obdo *oa, struct inode *inode)
         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);
-        if (obdfs_has_inline(inode)) {
+       if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode)) {
+                CDEBUG(D_INODE, "copying device %x from inode to obdo\n",
+                      inode->i_rdev);
+               *((obd_rdev *)oa->o_inline) = kdev_t_to_nr(inode->i_rdev);
+                oa->o_obdflags |= OBD_FL_INLINEDATA;
+                oa->o_valid |= OBD_MD_FLINLINE;
+       } else if (obdfs_has_inline(inode)) {
                 CDEBUG(D_INODE, "copying inline data from inode to obdo\n");
                 memcpy(oa->o_inline, oinfo->oi_inline, OBD_INLINESZ);
                 oa->o_obdflags |= OBD_FL_INLINEDATA;
@@ -63,8 +69,16 @@ static void inline obdfs_to_inode(struct inode *inode, struct obdo *oa)
         obdo_to_inode(inode, oa);
 
         if (obdo_has_inline(oa)) {
-                CDEBUG(D_INODE, "copying inline data from obdo to inode\n");
-                memcpy(oinfo->oi_inline, oa->o_inline, OBD_INLINESZ);
+               if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode) ||
+                   S_ISFIFO(inode->i_mode)) {
+                       obd_rdev rdev = *((obd_rdev *)oa->o_inline);
+                       CDEBUG(D_INODE,
+                              "copying device %x from obdo to inode\n", rdev);
+                       init_special_inode(inode, inode->i_mode, rdev);
+               } else {
+                       CDEBUG(D_INFO, "copying inline from obdo to inode\n");
+                       memcpy(oinfo->oi_inline, oa->o_inline, OBD_INLINESZ);
+               }
                 oinfo->oi_flags |= OBD_FL_INLINEDATA;
         }
 } /* obdfs_to_inode */