func (ds *InMemDS) SetAttr(id []byte, attr *pb.Attr, v uint32) (*pb.Attr, error) { ds.Lock() defer ds.Unlock() valid := fuse.SetattrValid(v) if entry, ok := ds.nodes[murmur3.Sum64(id)]; ok { if valid.Mode() { entry.attr.Mode = attr.Mode } if valid.Size() { if attr.Size == 0 { entry.blocks = 0 entry.lastblock = 0 } entry.attr.Size = attr.Size } if valid.Mtime() { entry.attr.Mtime = attr.Mtime } if valid.Atime() { entry.attr.Atime = attr.Atime } if valid.Uid() { entry.attr.Uid = attr.Uid } if valid.Gid() { entry.attr.Gid = attr.Gid } return entry.attr, nil } return &pb.Attr{}, nil }
func (o *OortFS) SetAttr(ctx context.Context, id []byte, attr *pb.Attr, v uint32) (*pb.Attr, error) { vip, err := o.validateIP(ctx) if err != nil { return nil, err } if !vip { return nil, errors.New("Unknown or unauthorized FS use") } valid := fuse.SetattrValid(v) b, err := o.GetChunk(ctx, id) if err != nil { return &pb.Attr{}, err } n := &pb.InodeEntry{} err = proto.Unmarshal(b, n) if err != nil { return &pb.Attr{}, err } if valid.Mode() { n.Attr.Mode = attr.Mode } if valid.Size() { if n.Attr.Size == 0 { n.Blocks = 0 n.LastBlock = 0 } n.Attr.Size = attr.Size } if valid.Mtime() { n.Attr.Mtime = attr.Mtime } if valid.Atime() { n.Attr.Atime = attr.Atime } if valid.Uid() { n.Attr.Uid = attr.Uid } if valid.Gid() { n.Attr.Gid = attr.Gid } b, err = proto.Marshal(n) if err != nil { return &pb.Attr{}, err } err = o.WriteChunk(ctx, id, b) if err != nil { return &pb.Attr{}, err } return n.Attr, nil }