src/dbfs/fileop.c
author Tero Marttila <terom@fixme.fi>
Sat, 13 Dec 2008 18:55:01 +0200
branchnew-evsql
changeset 52 f5037572c326
parent 48 8b019d191353
permissions -rw-r--r--
improved evsql docs and added a doxygen config file
30
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     1
#include <stdlib.h>
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     2
#include <assert.h>
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     3
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     4
#include <postgresql/libpq/libpq-fs.h>
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     5
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     6
#include "dbfs.h"
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     7
#include "op_base.h"
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     8
#include "../lib/log.h"
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     9
40
03017f5f0087 add MODE param to makefile, fix INFO_DISABLED, add some constraints to the .sql, fix some -err's, EVSQL_PQ_ARBITRARY_TYPE_OID, and make read/write transactionless
Tero Marttila <terom@fixme.fi>
parents: 36
diff changeset
    10
/*
03017f5f0087 add MODE param to makefile, fix INFO_DISABLED, add some constraints to the .sql, fix some -err's, EVSQL_PQ_ARBITRARY_TYPE_OID, and make read/write transactionless
Tero Marttila <terom@fixme.fi>
parents: 36
diff changeset
    11
 * A file-operation, i.e. a sequence consisting of an OPEN, a multitude of READ/WRITE, followed by zero or more FLUSHes, and finally a single RELEASE.
03017f5f0087 add MODE param to makefile, fix INFO_DISABLED, add some constraints to the .sql, fix some -err's, EVSQL_PQ_ARBITRARY_TYPE_OID, and make read/write transactionless
Tero Marttila <terom@fixme.fi>
parents: 36
diff changeset
    12
 *
03017f5f0087 add MODE param to makefile, fix INFO_DISABLED, add some constraints to the .sql, fix some -err's, EVSQL_PQ_ARBITRARY_TYPE_OID, and make read/write transactionless
Tero Marttila <terom@fixme.fi>
parents: 36
diff changeset
    13
 * For historical reasons this opens a transaction and keeps it between open/release, but reads/writes now use the oid directly and are transactionless.
03017f5f0087 add MODE param to makefile, fix INFO_DISABLED, add some constraints to the .sql, fix some -err's, EVSQL_PQ_ARBITRARY_TYPE_OID, and make read/write transactionless
Tero Marttila <terom@fixme.fi>
parents: 36
diff changeset
    14
 */
03017f5f0087 add MODE param to makefile, fix INFO_DISABLED, add some constraints to the .sql, fix some -err's, EVSQL_PQ_ARBITRARY_TYPE_OID, and make read/write transactionless
Tero Marttila <terom@fixme.fi>
parents: 36
diff changeset
    15
30
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    16
struct dbfs_fileop {
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    17
    struct dbfs_op base;
40
03017f5f0087 add MODE param to makefile, fix INFO_DISABLED, add some constraints to the .sql, fix some -err's, EVSQL_PQ_ARBITRARY_TYPE_OID, and make read/write transactionless
Tero Marttila <terom@fixme.fi>
parents: 36
diff changeset
    18
    
03017f5f0087 add MODE param to makefile, fix INFO_DISABLED, add some constraints to the .sql, fix some -err's, EVSQL_PQ_ARBITRARY_TYPE_OID, and make read/write transactionless
Tero Marttila <terom@fixme.fi>
parents: 36
diff changeset
    19
    uint32_t oid;
03017f5f0087 add MODE param to makefile, fix INFO_DISABLED, add some constraints to the .sql, fix some -err's, EVSQL_PQ_ARBITRARY_TYPE_OID, and make read/write transactionless
Tero Marttila <terom@fixme.fi>
parents: 36
diff changeset
    20
//    uint32_t lo_fd;
30
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    21
};
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    22
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    23
static void _dbfs_fileop_free (struct dbfs_op *op_base) {
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    24
    struct dbfs_fileop *fop = (struct dbfs_fileop *) op_base;
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    25
    
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    26
    /* no-op */
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    27
    (void) fop;
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    28
}
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    29
48
8b019d191353 update dbfs code to work with new evsql
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    30
static void dbfs_open_res (struct evsql_result *res, void *arg) {
30
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    31
    struct dbfs_fileop *fop = arg;
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    32
    int err;
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    33
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    34
    // check the results
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    35
    if ((err = _dbfs_check_res(res, 1, 2)))
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    36
        SERROR(err = (err ==  1 ? ENOENT : EIO));
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    37
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    38
    const char *type;
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    39
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    40
    // extract the data
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    41
    if (0
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    42
        ||  evsql_result_string(res, 0, 0, &type,           0 ) // inodes.type
40
03017f5f0087 add MODE param to makefile, fix INFO_DISABLED, add some constraints to the .sql, fix some -err's, EVSQL_PQ_ARBITRARY_TYPE_OID, and make read/write transactionless
Tero Marttila <terom@fixme.fi>
parents: 36
diff changeset
    43
        ||  evsql_result_uint32(res, 0, 1, &fop->oid,       0 ) // inodes.data
30
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    44
    )
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    45
        SERROR(err = EIO);
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    46
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    47
    // is it a dir?
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    48
    if (_dbfs_mode(type) != S_IFREG)
35
4f10421681d2 working mknod, mkdir, symlink
Tero Marttila <terom@fixme.fi>
parents: 31
diff changeset
    49
        EERROR(err = EINVAL, "wrong type: %s", type);
30
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    50
    
36
56427f22e969 tweak debug/info output, implement dbfs_unlink with slightly improved error macros handling
Tero Marttila <terom@fixme.fi>
parents: 35
diff changeset
    51
    INFO("\t[dbfs.open %p:%p] -> ino=%lu, type=%s", fop, fop->base.req, (unsigned long int) fop->base.ino, type);
30
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    52
    
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    53
    // open_fn done, do the open_reply
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    54
    if ((err = dbfs_op_open_reply(&fop->base)))
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    55
        goto error;
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    56
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    57
    // success, fallthrough for evsql_result_free
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    58
    err = 0;
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    59
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    60
error:
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    61
    if (err)
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    62
        // fail it
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    63
        dbfs_op_fail(&fop->base, err);
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    64
    
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    65
    // free
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    66
    evsql_result_free(res);
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    67
}
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    68
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    69
static void dbfs_fileop_open (struct dbfs_op *op_base) {
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    70
    struct dbfs_fileop *fop = (struct dbfs_fileop *) op_base;
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    71
    struct dbfs *ctx = fuse_req_userdata(fop->base.req);
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    72
    int err;
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    73
    
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    74
    // make sure the file actually exists
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    75
    const char *sql =
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    76
        "SELECT"
40
03017f5f0087 add MODE param to makefile, fix INFO_DISABLED, add some constraints to the .sql, fix some -err's, EVSQL_PQ_ARBITRARY_TYPE_OID, and make read/write transactionless
Tero Marttila <terom@fixme.fi>
parents: 36
diff changeset
    77
        " inodes.type, inodes.data"
30
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    78
        " FROM inodes"
40
03017f5f0087 add MODE param to makefile, fix INFO_DISABLED, add some constraints to the .sql, fix some -err's, EVSQL_PQ_ARBITRARY_TYPE_OID, and make read/write transactionless
Tero Marttila <terom@fixme.fi>
parents: 36
diff changeset
    79
        " WHERE inodes.ino = $1::int4";
30
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    80
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    81
    static struct evsql_query_params params = EVSQL_PARAMS(EVSQL_FMT_BINARY) {
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    82
        EVSQL_PARAM ( UINT32 ),
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    83
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    84
        EVSQL_PARAMS_END
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    85
    };
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    86
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    87
    // build params
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    88
    if (0
40
03017f5f0087 add MODE param to makefile, fix INFO_DISABLED, add some constraints to the .sql, fix some -err's, EVSQL_PQ_ARBITRARY_TYPE_OID, and make read/write transactionless
Tero Marttila <terom@fixme.fi>
parents: 36
diff changeset
    89
        ||  evsql_param_uint32(&params, 0, fop->base.ino)
30
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    90
    )
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    91
        SERROR(err = EIO);
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    92
        
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    93
    // query
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    94
    if (evsql_query_params(ctx->db, fop->base.trans, sql, &params, dbfs_open_res, fop) == NULL)
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    95
        SERROR(err = EIO);
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    96
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    97
    // ok, wait for the info results
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    98
    return;
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    99
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   100
error:
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   101
    // fail it
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   102
    dbfs_op_fail(&fop->base, err);
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   103
}
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   104
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   105
void dbfs_open (struct fuse_req *req, fuse_ino_t ino, struct fuse_file_info *fi) {
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   106
    struct dbfs *ctx = fuse_req_userdata(req);
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   107
    struct dbfs_fileop *fop = NULL;
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   108
    int err;
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   109
    
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   110
    // allocate it
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   111
    if ((fop = calloc(1, sizeof(*fop))) == NULL && (err = EIO))
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   112
        ERROR("calloc");
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   113
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   114
    // do the op_open
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   115
    if ((err = dbfs_op_open(ctx, &fop->base, req, ino, fi, _dbfs_fileop_free, dbfs_fileop_open)))
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   116
        ERROR("dbfs_op_open");
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   117
    
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   118
    // log
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   119
    INFO("[dbfs.open %p:%p] ino=%lu, fi->flags=%04X", fop, req, ino, fi->flags);
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   120
    
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   121
    // wait
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   122
    return;
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   123
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   124
error:
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   125
    if (fop) {
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   126
        // we can fail normally
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   127
        dbfs_op_fail(&fop->base, err);
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   128
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   129
    } else {
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   130
        // must error out manually as we couldn't alloc the context
40
03017f5f0087 add MODE param to makefile, fix INFO_DISABLED, add some constraints to the .sql, fix some -err's, EVSQL_PQ_ARBITRARY_TYPE_OID, and make read/write transactionless
Tero Marttila <terom@fixme.fi>
parents: 36
diff changeset
   131
        if ((err = -fuse_reply_err(req, err)))
30
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   132
            EWARNING(err, "fuse_reply_err");
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   133
    }
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   134
}
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   135
48
8b019d191353 update dbfs code to work with new evsql
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
   136
void dbfs_read_res (struct evsql_result *res, void *arg) {
40
03017f5f0087 add MODE param to makefile, fix INFO_DISABLED, add some constraints to the .sql, fix some -err's, EVSQL_PQ_ARBITRARY_TYPE_OID, and make read/write transactionless
Tero Marttila <terom@fixme.fi>
parents: 36
diff changeset
   137
    struct fuse_req *req = arg;
30
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   138
    int err;
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   139
    const char *buf;
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   140
    size_t size;
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   141
 
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   142
    // check the results
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   143
    if ((err = _dbfs_check_res(res, 1, 1)) < 0)
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   144
        SERROR(err = EIO);
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   145
        
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   146
    // get the data
31
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents: 30
diff changeset
   147
    if (evsql_result_binary(res, 0, 0, &buf, &size, 0))
30
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   148
        SERROR(err = EIO);
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   149
40
03017f5f0087 add MODE param to makefile, fix INFO_DISABLED, add some constraints to the .sql, fix some -err's, EVSQL_PQ_ARBITRARY_TYPE_OID, and make read/write transactionless
Tero Marttila <terom@fixme.fi>
parents: 36
diff changeset
   150
    INFO("\t[dbfs.read %p] -> size=%zu", req, size);
30
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   151
        
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   152
    // send it
40
03017f5f0087 add MODE param to makefile, fix INFO_DISABLED, add some constraints to the .sql, fix some -err's, EVSQL_PQ_ARBITRARY_TYPE_OID, and make read/write transactionless
Tero Marttila <terom@fixme.fi>
parents: 36
diff changeset
   153
    if ((err = -fuse_reply_buf(req, buf, size)))
30
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   154
        EERROR(err, "fuse_reply_buf");
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   155
    
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   156
    // good, fallthrough
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   157
    err = 0;
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   158
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   159
error:
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   160
    if (err)
40
03017f5f0087 add MODE param to makefile, fix INFO_DISABLED, add some constraints to the .sql, fix some -err's, EVSQL_PQ_ARBITRARY_TYPE_OID, and make read/write transactionless
Tero Marttila <terom@fixme.fi>
parents: 36
diff changeset
   161
        fuse_reply_err(req, err);
03017f5f0087 add MODE param to makefile, fix INFO_DISABLED, add some constraints to the .sql, fix some -err's, EVSQL_PQ_ARBITRARY_TYPE_OID, and make read/write transactionless
Tero Marttila <terom@fixme.fi>
parents: 36
diff changeset
   162
30
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   163
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   164
    // free
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   165
    evsql_result_free(res);
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   166
}
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   167
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   168
void dbfs_read (struct fuse_req *req, fuse_ino_t ino, size_t size, off_t off, struct fuse_file_info *fi) {
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   169
    struct dbfs *ctx = fuse_req_userdata(req);
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   170
    int err;
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   171
    
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   172
    // log
40
03017f5f0087 add MODE param to makefile, fix INFO_DISABLED, add some constraints to the .sql, fix some -err's, EVSQL_PQ_ARBITRARY_TYPE_OID, and make read/write transactionless
Tero Marttila <terom@fixme.fi>
parents: 36
diff changeset
   173
    INFO("[dbfs.read %p] ino=%lu, size=%zu, off=%lu, fi->flags=%04X", req, ino, size, off, fi->flags);
30
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   174
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   175
    // query
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   176
    const char *sql = 
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   177
        "SELECT"
40
03017f5f0087 add MODE param to makefile, fix INFO_DISABLED, add some constraints to the .sql, fix some -err's, EVSQL_PQ_ARBITRARY_TYPE_OID, and make read/write transactionless
Tero Marttila <terom@fixme.fi>
parents: 36
diff changeset
   178
        " lo_pread_oid(data, $1::int4, $2::int4)"
03017f5f0087 add MODE param to makefile, fix INFO_DISABLED, add some constraints to the .sql, fix some -err's, EVSQL_PQ_ARBITRARY_TYPE_OID, and make read/write transactionless
Tero Marttila <terom@fixme.fi>
parents: 36
diff changeset
   179
        " FROM inodes"
03017f5f0087 add MODE param to makefile, fix INFO_DISABLED, add some constraints to the .sql, fix some -err's, EVSQL_PQ_ARBITRARY_TYPE_OID, and make read/write transactionless
Tero Marttila <terom@fixme.fi>
parents: 36
diff changeset
   180
        " WHERE ino = $3::int4";
30
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   181
    
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   182
    static struct evsql_query_params params = EVSQL_PARAMS(EVSQL_FMT_BINARY) {
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   183
        EVSQL_PARAM ( UINT32 ), // len
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   184
        EVSQL_PARAM ( UINT32 ), // off
40
03017f5f0087 add MODE param to makefile, fix INFO_DISABLED, add some constraints to the .sql, fix some -err's, EVSQL_PQ_ARBITRARY_TYPE_OID, and make read/write transactionless
Tero Marttila <terom@fixme.fi>
parents: 36
diff changeset
   185
        EVSQL_PARAM ( UINT32 ), // ino
30
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   186
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   187
        EVSQL_PARAMS_END
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   188
    };
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   189
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   190
    // build params
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   191
    if (0
40
03017f5f0087 add MODE param to makefile, fix INFO_DISABLED, add some constraints to the .sql, fix some -err's, EVSQL_PQ_ARBITRARY_TYPE_OID, and make read/write transactionless
Tero Marttila <terom@fixme.fi>
parents: 36
diff changeset
   192
        ||  evsql_param_uint32(&params, 0, size)
03017f5f0087 add MODE param to makefile, fix INFO_DISABLED, add some constraints to the .sql, fix some -err's, EVSQL_PQ_ARBITRARY_TYPE_OID, and make read/write transactionless
Tero Marttila <terom@fixme.fi>
parents: 36
diff changeset
   193
        ||  evsql_param_uint32(&params, 1, off)
03017f5f0087 add MODE param to makefile, fix INFO_DISABLED, add some constraints to the .sql, fix some -err's, EVSQL_PQ_ARBITRARY_TYPE_OID, and make read/write transactionless
Tero Marttila <terom@fixme.fi>
parents: 36
diff changeset
   194
        ||  evsql_param_uint32(&params, 2, ino)
30
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   195
    )
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   196
        SERROR(err = EIO);
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   197
        
40
03017f5f0087 add MODE param to makefile, fix INFO_DISABLED, add some constraints to the .sql, fix some -err's, EVSQL_PQ_ARBITRARY_TYPE_OID, and make read/write transactionless
Tero Marttila <terom@fixme.fi>
parents: 36
diff changeset
   198
    // query, transactionless
03017f5f0087 add MODE param to makefile, fix INFO_DISABLED, add some constraints to the .sql, fix some -err's, EVSQL_PQ_ARBITRARY_TYPE_OID, and make read/write transactionless
Tero Marttila <terom@fixme.fi>
parents: 36
diff changeset
   199
    if (evsql_query_params(ctx->db, NULL, sql, &params, dbfs_read_res, req) == NULL)
30
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   200
        SERROR(err = EIO);
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   201
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   202
    // ok, wait for the info results
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   203
    return;
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   204
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   205
error:
40
03017f5f0087 add MODE param to makefile, fix INFO_DISABLED, add some constraints to the .sql, fix some -err's, EVSQL_PQ_ARBITRARY_TYPE_OID, and make read/write transactionless
Tero Marttila <terom@fixme.fi>
parents: 36
diff changeset
   206
    fuse_reply_err(req, err);
30
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   207
}
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   208
48
8b019d191353 update dbfs code to work with new evsql
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
   209
void dbfs_write_res (struct evsql_result *res, void *arg) {
40
03017f5f0087 add MODE param to makefile, fix INFO_DISABLED, add some constraints to the .sql, fix some -err's, EVSQL_PQ_ARBITRARY_TYPE_OID, and make read/write transactionless
Tero Marttila <terom@fixme.fi>
parents: 36
diff changeset
   210
    struct fuse_req *req = arg;
31
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents: 30
diff changeset
   211
    int err;
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents: 30
diff changeset
   212
    uint32_t size;
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents: 30
diff changeset
   213
 
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents: 30
diff changeset
   214
    // check the results
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents: 30
diff changeset
   215
    if ((err = _dbfs_check_res(res, 1, 1)) < 0)
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents: 30
diff changeset
   216
        SERROR(err = EIO);
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents: 30
diff changeset
   217
        
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents: 30
diff changeset
   218
    // get the size
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents: 30
diff changeset
   219
    if (evsql_result_uint32(res, 0, 0, &size, 0))
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents: 30
diff changeset
   220
        SERROR(err = EIO);
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents: 30
diff changeset
   221
40
03017f5f0087 add MODE param to makefile, fix INFO_DISABLED, add some constraints to the .sql, fix some -err's, EVSQL_PQ_ARBITRARY_TYPE_OID, and make read/write transactionless
Tero Marttila <terom@fixme.fi>
parents: 36
diff changeset
   222
    INFO("\t[dbfs.write %p] -> size=%lu", req, (long unsigned int) size);
31
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents: 30
diff changeset
   223
        
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents: 30
diff changeset
   224
    // send it
40
03017f5f0087 add MODE param to makefile, fix INFO_DISABLED, add some constraints to the .sql, fix some -err's, EVSQL_PQ_ARBITRARY_TYPE_OID, and make read/write transactionless
Tero Marttila <terom@fixme.fi>
parents: 36
diff changeset
   225
    if ((err = -fuse_reply_write(req, size)))
31
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents: 30
diff changeset
   226
        EERROR(err, "fuse_reply_write");
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents: 30
diff changeset
   227
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents: 30
diff changeset
   228
    // good, fallthrough
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents: 30
diff changeset
   229
    err = 0;
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents: 30
diff changeset
   230
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents: 30
diff changeset
   231
error:
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents: 30
diff changeset
   232
    if (err)
40
03017f5f0087 add MODE param to makefile, fix INFO_DISABLED, add some constraints to the .sql, fix some -err's, EVSQL_PQ_ARBITRARY_TYPE_OID, and make read/write transactionless
Tero Marttila <terom@fixme.fi>
parents: 36
diff changeset
   233
        fuse_reply_err(req, err);
31
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents: 30
diff changeset
   234
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents: 30
diff changeset
   235
    // free
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents: 30
diff changeset
   236
    evsql_result_free(res);
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents: 30
diff changeset
   237
}
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents: 30
diff changeset
   238
30
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   239
void dbfs_write (struct fuse_req *req, fuse_ino_t ino, const char *buf, size_t size, off_t off, struct fuse_file_info *fi) {
31
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents: 30
diff changeset
   240
    struct dbfs *ctx = fuse_req_userdata(req);
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents: 30
diff changeset
   241
    int err;
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents: 30
diff changeset
   242
    
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents: 30
diff changeset
   243
    // log
40
03017f5f0087 add MODE param to makefile, fix INFO_DISABLED, add some constraints to the .sql, fix some -err's, EVSQL_PQ_ARBITRARY_TYPE_OID, and make read/write transactionless
Tero Marttila <terom@fixme.fi>
parents: 36
diff changeset
   244
    INFO("[dbfs.write %p] ino=%lu, size=%zu, off=%lu, fi->flags=%04X", req, ino, size, off, fi->flags);
31
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents: 30
diff changeset
   245
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents: 30
diff changeset
   246
    // query
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents: 30
diff changeset
   247
    const char *sql = 
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents: 30
diff changeset
   248
        "SELECT"
40
03017f5f0087 add MODE param to makefile, fix INFO_DISABLED, add some constraints to the .sql, fix some -err's, EVSQL_PQ_ARBITRARY_TYPE_OID, and make read/write transactionless
Tero Marttila <terom@fixme.fi>
parents: 36
diff changeset
   249
        " lo_pwrite_oid(data, $1::bytea, $2::int4)"
03017f5f0087 add MODE param to makefile, fix INFO_DISABLED, add some constraints to the .sql, fix some -err's, EVSQL_PQ_ARBITRARY_TYPE_OID, and make read/write transactionless
Tero Marttila <terom@fixme.fi>
parents: 36
diff changeset
   250
        " FROM inodes"
03017f5f0087 add MODE param to makefile, fix INFO_DISABLED, add some constraints to the .sql, fix some -err's, EVSQL_PQ_ARBITRARY_TYPE_OID, and make read/write transactionless
Tero Marttila <terom@fixme.fi>
parents: 36
diff changeset
   251
        " WHERE ino = $3::int4";
31
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents: 30
diff changeset
   252
    
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents: 30
diff changeset
   253
    static struct evsql_query_params params = EVSQL_PARAMS(EVSQL_FMT_BINARY) {
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents: 30
diff changeset
   254
        EVSQL_PARAM ( BINARY ), // buf
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents: 30
diff changeset
   255
        EVSQL_PARAM ( UINT32 ), // off
40
03017f5f0087 add MODE param to makefile, fix INFO_DISABLED, add some constraints to the .sql, fix some -err's, EVSQL_PQ_ARBITRARY_TYPE_OID, and make read/write transactionless
Tero Marttila <terom@fixme.fi>
parents: 36
diff changeset
   256
        EVSQL_PARAM ( UINT32 ), // oid
31
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents: 30
diff changeset
   257
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents: 30
diff changeset
   258
        EVSQL_PARAMS_END
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents: 30
diff changeset
   259
    };
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents: 30
diff changeset
   260
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents: 30
diff changeset
   261
    // build params
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents: 30
diff changeset
   262
    if (0
40
03017f5f0087 add MODE param to makefile, fix INFO_DISABLED, add some constraints to the .sql, fix some -err's, EVSQL_PQ_ARBITRARY_TYPE_OID, and make read/write transactionless
Tero Marttila <terom@fixme.fi>
parents: 36
diff changeset
   263
        ||  evsql_param_binary(&params, 0, buf, size)
03017f5f0087 add MODE param to makefile, fix INFO_DISABLED, add some constraints to the .sql, fix some -err's, EVSQL_PQ_ARBITRARY_TYPE_OID, and make read/write transactionless
Tero Marttila <terom@fixme.fi>
parents: 36
diff changeset
   264
        ||  evsql_param_uint32(&params, 1, off)
03017f5f0087 add MODE param to makefile, fix INFO_DISABLED, add some constraints to the .sql, fix some -err's, EVSQL_PQ_ARBITRARY_TYPE_OID, and make read/write transactionless
Tero Marttila <terom@fixme.fi>
parents: 36
diff changeset
   265
        ||  evsql_param_uint32(&params, 2, ino)
31
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents: 30
diff changeset
   266
    )
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents: 30
diff changeset
   267
        SERROR(err = EIO);
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents: 30
diff changeset
   268
        
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents: 30
diff changeset
   269
    // query
40
03017f5f0087 add MODE param to makefile, fix INFO_DISABLED, add some constraints to the .sql, fix some -err's, EVSQL_PQ_ARBITRARY_TYPE_OID, and make read/write transactionless
Tero Marttila <terom@fixme.fi>
parents: 36
diff changeset
   270
    if (evsql_query_params(ctx->db, NULL, sql, &params, dbfs_write_res, req) == NULL)
31
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents: 30
diff changeset
   271
        SERROR(err = EIO);
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents: 30
diff changeset
   272
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents: 30
diff changeset
   273
    // ok, wait for the info results
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents: 30
diff changeset
   274
    return;
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents: 30
diff changeset
   275
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents: 30
diff changeset
   276
error:
40
03017f5f0087 add MODE param to makefile, fix INFO_DISABLED, add some constraints to the .sql, fix some -err's, EVSQL_PQ_ARBITRARY_TYPE_OID, and make read/write transactionless
Tero Marttila <terom@fixme.fi>
parents: 36
diff changeset
   277
    fuse_reply_err(req, err);
30
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   278
}
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   279
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   280
void dbfs_flush (struct fuse_req *req, fuse_ino_t ino, struct fuse_file_info *fi) {
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   281
    struct dbfs_fileop *fop;
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   282
    int err;
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   283
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   284
    // get the fop
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   285
    if ((fop = (struct dbfs_fileop *) dbfs_op_req(req, ino, fi)) == NULL)
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   286
        return;
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   287
    
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   288
    // log
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   289
    INFO("[dbfs.flush %p:%p] ino=%lu", fop, req, ino);
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   290
    
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   291
    // and reply...
40
03017f5f0087 add MODE param to makefile, fix INFO_DISABLED, add some constraints to the .sql, fix some -err's, EVSQL_PQ_ARBITRARY_TYPE_OID, and make read/write transactionless
Tero Marttila <terom@fixme.fi>
parents: 36
diff changeset
   292
    if ((err = -fuse_reply_err(req, 0)))
30
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   293
        EWARNING(err, "fuse_reply_err");
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   294
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   295
    // done
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   296
    if ((err = dbfs_op_req_done(&fop->base)))
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   297
        goto error;
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   298
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   299
    // good
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   300
    return;
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   301
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   302
error:
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   303
    dbfs_op_fail(&fop->base, err);
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   304
}
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   305
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   306
void dbfs_release (struct fuse_req *req, fuse_ino_t ino, struct fuse_file_info *fi) {
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   307
    // just passthrough to dbfs_op
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   308
    // the lo_fd will be closed automatically
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   309
    dbfs_op_release(req, ino, fi);
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   310
}