Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 273768
b: refs/heads/master
c: e6c40fe
h: refs/heads/master
v: v3
  • Loading branch information
Boaz Harrosh authored and Trond Myklebust committed Nov 3, 2011
1 parent 800f444 commit 3941977
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 36 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 4cdc685c7d06f659ef6c336d4242005cdd8df401
refs/heads/master: e6c40fe3f4c4967f1cb486191ed4a5d5f55f3f7e
32 changes: 16 additions & 16 deletions trunk/fs/nfs/objlayout/objio_osd.c
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ OBJIO_LSEG(struct pnfs_layout_segment *lseg)
}

struct objio_state;
typedef ssize_t (*objio_done_fn)(struct objio_state *ios);
typedef int (*objio_done_fn)(struct objio_state *ios);

struct objio_state {
/* Generic layer */
Expand Down Expand Up @@ -720,7 +720,7 @@ static int _io_rw_pagelist(struct objio_state *ios, gfp_t gfp_flags)
return 0;
}

static ssize_t _sync_done(struct objio_state *ios)
static int _sync_done(struct objio_state *ios)
{
struct completion *waiting = ios->private;

Expand All @@ -742,10 +742,10 @@ static void _done_io(struct osd_request *or, void *p)
kref_put(&ios->kref, _last_io);
}

static ssize_t _io_exec(struct objio_state *ios)
static int _io_exec(struct objio_state *ios)
{
DECLARE_COMPLETION_ONSTACK(wait);
ssize_t status = 0; /* sync status */
int ret = 0;
unsigned i;
objio_done_fn saved_done_fn = ios->done;
bool sync = ios->ol_state.sync;
Expand All @@ -771,16 +771,16 @@ static ssize_t _io_exec(struct objio_state *ios)

if (sync) {
wait_for_completion(&wait);
status = saved_done_fn(ios);
ret = saved_done_fn(ios);
}

return status;
return ret;
}

/*
* read
*/
static ssize_t _read_done(struct objio_state *ios)
static int _read_done(struct objio_state *ios)
{
ssize_t status;
int ret = _io_check(ios, false);
Expand All @@ -793,7 +793,7 @@ static ssize_t _read_done(struct objio_state *ios)
status = ret;

objlayout_read_done(&ios->ol_state, status, ios->ol_state.sync);
return status;
return ret;
}

static int _read_mirrors(struct objio_state *ios, unsigned cur_comp)
Expand Down Expand Up @@ -833,7 +833,7 @@ static int _read_mirrors(struct objio_state *ios, unsigned cur_comp)
return ret;
}

static ssize_t _read_exec(struct objio_state *ios)
static int _read_exec(struct objio_state *ios)
{
unsigned i;
int ret;
Expand All @@ -847,14 +847,14 @@ static ssize_t _read_exec(struct objio_state *ios)
}

ios->done = _read_done;
return _io_exec(ios); /* In sync mode exec returns the io status */
return _io_exec(ios);

err:
_io_free(ios);
return ret;
}

ssize_t objio_read_pagelist(struct objlayout_io_state *ol_state)
int objio_read_pagelist(struct objlayout_io_state *ol_state)
{
struct objio_state *ios = container_of(ol_state, struct objio_state,
ol_state);
Expand All @@ -870,7 +870,7 @@ ssize_t objio_read_pagelist(struct objlayout_io_state *ol_state)
/*
* write
*/
static ssize_t _write_done(struct objio_state *ios)
static int _write_done(struct objio_state *ios)
{
ssize_t status;
int ret = _io_check(ios, true);
Expand All @@ -887,7 +887,7 @@ static ssize_t _write_done(struct objio_state *ios)
}

objlayout_write_done(&ios->ol_state, status, ios->ol_state.sync);
return status;
return ret;
}

static int _write_mirrors(struct objio_state *ios, unsigned cur_comp)
Expand Down Expand Up @@ -955,7 +955,7 @@ static int _write_mirrors(struct objio_state *ios, unsigned cur_comp)
return ret;
}

static ssize_t _write_exec(struct objio_state *ios)
static int _write_exec(struct objio_state *ios)
{
unsigned i;
int ret;
Expand All @@ -969,14 +969,14 @@ static ssize_t _write_exec(struct objio_state *ios)
}

ios->done = _write_done;
return _io_exec(ios); /* In sync mode exec returns the io->status */
return _io_exec(ios);

err:
_io_free(ios);
return ret;
}

ssize_t objio_write_pagelist(struct objlayout_io_state *ol_state, bool stable)
int objio_write_pagelist(struct objlayout_io_state *ol_state, bool stable)
{
struct objio_state *ios = container_of(ol_state, struct objio_state,
ol_state);
Expand Down
36 changes: 19 additions & 17 deletions trunk/fs/nfs/objlayout/objlayout.c
Original file line number Diff line number Diff line change
Expand Up @@ -315,16 +315,13 @@ objlayout_read_pagelist(struct nfs_read_data *rdata)
loff_t offset = rdata->args.offset;
size_t count = rdata->args.count;
struct objlayout_io_state *state;
ssize_t status = 0;
int err;
loff_t eof;

dprintk("%s: Begin inode %p offset %llu count %d\n",
__func__, rdata->inode, offset, (int)count);

eof = i_size_read(rdata->inode);
if (unlikely(offset + count > eof)) {
if (offset >= eof) {
status = 0;
err = 0;
rdata->res.count = 0;
rdata->res.eof = 1;
/*FIXME: do we need to call pnfs_ld_read_done() */
Expand All @@ -341,14 +338,19 @@ objlayout_read_pagelist(struct nfs_read_data *rdata)
rdata->lseg, rdata,
GFP_KERNEL);
if (unlikely(!state)) {
status = -ENOMEM;
err = -ENOMEM;
goto out;
}
dprintk("%s: inode(%lx) offset 0x%llx count 0x%Zx eof=%d\n",
__func__, rdata->inode->i_ino, offset, count, rdata->res.eof);

status = objio_read_pagelist(state);
err = objio_read_pagelist(state);
out:
dprintk("%s: Return status %Zd\n", __func__, status);
rdata->pnfs_error = status;
if (unlikely(err)) {
rdata->pnfs_error = err;
dprintk("%s: Returned Error %d\n", __func__, err);
return PNFS_NOT_ATTEMPTED;
}
return PNFS_ATTEMPTED;
}

Expand Down Expand Up @@ -406,10 +408,7 @@ objlayout_write_pagelist(struct nfs_write_data *wdata,
int how)
{
struct objlayout_io_state *state;
ssize_t status;

dprintk("%s: Begin inode %p offset %llu count %u\n",
__func__, wdata->inode, wdata->args.offset, wdata->args.count);
int err;

state = objlayout_alloc_io_state(NFS_I(wdata->inode)->layout,
wdata->args.pages,
Expand All @@ -419,16 +418,19 @@ objlayout_write_pagelist(struct nfs_write_data *wdata,
wdata->lseg, wdata,
GFP_NOFS);
if (unlikely(!state)) {
status = -ENOMEM;
err = -ENOMEM;
goto out;
}

state->sync = how & FLUSH_SYNC;

status = objio_write_pagelist(state, how & FLUSH_STABLE);
err = objio_write_pagelist(state, how & FLUSH_STABLE);
out:
dprintk("%s: Return status %Zd\n", __func__, status);
wdata->pnfs_error = status;
if (unlikely(err)) {
wdata->pnfs_error = err;
dprintk("%s: Returned Error %d\n", __func__, err);
return PNFS_NOT_ATTEMPTED;
}
return PNFS_ATTEMPTED;
}

Expand Down
4 changes: 2 additions & 2 deletions trunk/fs/nfs/objlayout/objlayout.h
Original file line number Diff line number Diff line change
Expand Up @@ -115,8 +115,8 @@ extern int objio_alloc_io_state(
gfp_t gfp_flags);
extern void objio_free_io_state(struct objlayout_io_state *state);

extern ssize_t objio_read_pagelist(struct objlayout_io_state *ol_state);
extern ssize_t objio_write_pagelist(struct objlayout_io_state *ol_state,
extern int objio_read_pagelist(struct objlayout_io_state *ol_state);
extern int objio_write_pagelist(struct objlayout_io_state *ol_state,
bool stable);

/*
Expand Down

0 comments on commit 3941977

Please sign in to comment.