X-Git-Url: https://git.camperquake.de/gitweb.cgi?a=blobdiff_plain;f=module%2Fzfs%2Fzfs_znode.c;h=faf1161c916d4cc7a818c50eff0881756fad3054;hb=218b8eafbdcb9bc19fc5a252fdd411fde11bca48;hp=edfb860094eed336305c59f35e937e0dd30d686e;hpb=36df284366caa77cb40083d2e6bcce02274e2f05;p=zfs.git diff --git a/module/zfs/zfs_znode.c b/module/zfs/zfs_znode.c index edfb860..faf1161 100644 --- a/module/zfs/zfs_znode.c +++ b/module/zfs/zfs_znode.c @@ -278,7 +278,7 @@ zfs_inode_destroy(struct inode *ip) static void zfs_inode_set_ops(zfs_sb_t *zsb, struct inode *ip) { - uint64_t rdev; + uint64_t rdev = 0; switch (ip->i_mode & S_IFMT) { case S_IFREG: @@ -297,12 +297,16 @@ zfs_inode_set_ops(zfs_sb_t *zsb, struct inode *ip) ip->i_op = &zpl_symlink_inode_operations; break; + /* + * rdev is only stored in a SA only for device files. + */ case S_IFCHR: case S_IFBLK: - case S_IFIFO: - case S_IFSOCK: VERIFY(sa_lookup(ITOZ(ip)->z_sa_hdl, SA_ZPL_RDEV(zsb), &rdev, sizeof (rdev)) == 0); + /*FALLTHROUGH*/ + case S_IFIFO: + case S_IFSOCK: init_special_inode(ip, ip->i_mode, rdev); ip->i_op = &zpl_special_inode_operations; break; @@ -373,8 +377,7 @@ zfs_znode_alloc(zfs_sb_t *zsb, dmu_buf_t *db, int blksz, } ip->i_ino = obj; - ip->i_mode = zp->z_mode; - ip->i_mtime = ip->i_atime = ip->i_ctime = CURRENT_TIME_SEC; + zfs_inode_update(zp); zfs_inode_set_ops(zsb, ip); if (insert_inode_locked(ip)) @@ -557,8 +560,7 @@ zfs_mknode(znode_t *dzp, vattr_t *vap, dmu_tx_t *tx, cred_t *cr, size = links = 0; } - if (S_ISBLK(vap->va_mode) || S_ISCHR(vap->va_mode) || - S_ISFIFO(vap->va_mode) || S_ISSOCK(vap->va_mode)) + if (S_ISBLK(vap->va_mode) || S_ISCHR(vap->va_mode)) rdev = vap->va_rdev; parent = dzp->z_id; @@ -649,8 +651,7 @@ zfs_mknode(znode_t *dzp, vattr_t *vap, dmu_tx_t *tx, cred_t *cr, &empty_xattr, 8); } if (obj_type == DMU_OT_ZNODE || - (S_ISBLK(vap->va_mode) || S_ISCHR(vap->va_mode) || - S_ISFIFO(vap->va_mode) || S_ISSOCK(vap->va_mode))) { + (S_ISBLK(vap->va_mode) || S_ISCHR(vap->va_mode))) { SA_ADD_BULK_ATTR(sa_attrs, cnt, SA_ZPL_RDEV(zsb), NULL, &rdev, 8); }