From 19a2a8994955543ddd05550457331ba89538b278 Mon Sep 17 00:00:00 2001 From: gord-fig Date: Wed, 17 Oct 2001 00:28:29 +0000 Subject: [PATCH] Remove the obdo->o_rdev member, and store rdev numbers in the inline data. --- lustre/include/linux/obd_class.h | 12 +----------- lustre/include/linux/obdo.h | 20 +++++++++++++++++--- 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/lustre/include/linux/obd_class.h b/lustre/include/linux/obd_class.h index 6926875..9d05040 100644 --- a/lustre/include/linux/obd_class.h +++ b/lustre/include/linux/obd_class.h @@ -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 ) diff --git a/lustre/include/linux/obdo.h b/lustre/include/linux/obdo.h index 6e257e9..c410354 100644 --- a/lustre/include/linux/obdo.h +++ b/lustre/include/linux/obdo.h @@ -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 */ -- 1.8.3.1