On Feb 21, 2011, at 10:53 AM, Benny Halevy wrote: > On 2011-02-21 09:49, Fred Isaman wrote: >> diff --git a/fs/nfs/pnfs.h b/fs/nfs/pnfs.h >> index 1d4e631..3766afea 100644 >> --- a/fs/nfs/pnfs.h >> +++ b/fs/nfs/pnfs.h >> @@ -79,6 +79,8 @@ struct pnfs_layoutdriver_type { >> * I/O, else return PNFS_NOT_ATTEMPTED to fall back to normal NFS >> */ >> enum pnfs_try_status (*read_pagelist) (struct nfs_read_data *nfs_data); >> + enum pnfs_try_status >> + (*write_pagelist) (struct nfs_write_data *nfs_data, int how); > > nit: line break OK > >> }; >> >> struct pnfs_layout_hdr { >> @@ -120,6 +122,8 @@ pnfs_update_layout(struct inode *ino, struct nfs_open_context *ctx, >> enum pnfs_iomode access_type); >> void set_pnfs_layoutdriver(struct nfs_server *, u32 id); >> void unset_pnfs_layoutdriver(struct nfs_server *); >> +enum pnfs_try_status pnfs_try_to_write_data(struct nfs_write_data *, >> + const struct rpc_call_ops *, int); >> enum pnfs_try_status pnfs_try_to_read_data(struct nfs_read_data *, >> const struct rpc_call_ops *); >> void pnfs_pageio_init_read(struct nfs_pageio_descriptor *, struct inode *); >> @@ -200,6 +204,13 @@ pnfs_try_to_read_data(struct nfs_read_data *data, >> return PNFS_NOT_ATTEMPTED; >> } >> >> +static inline enum pnfs_try_status >> +pnfs_try_to_write_data(struct nfs_write_data *data, >> + const struct rpc_call_ops *call_ops, int how) >> +{ >> + return PNFS_NOT_ATTEMPTED; >> +} >> + >> static inline bool >> pnfs_roc(struct inode *ino) >> { >> diff --git a/fs/nfs/write.c b/fs/nfs/write.c >> index 6cf5de6..b6b683d 100644 >> --- a/fs/nfs/write.c >> +++ b/fs/nfs/write.c >> @@ -873,6 +873,10 @@ static int nfs_write_rpcsetup(struct nfs_page *req, >> data->res.verf = &data->verf; >> nfs_fattr_init(&data->fattr); >> >> + if (data->lseg && >> + (pnfs_try_to_write_data(data, call_ops, how) == PNFS_ATTEMPTED)) >> + return 0; >> + >> return nfs_initiate_write(data, NFS_CLIENT(inode), call_ops, how); >> } >> >> diff --git a/include/linux/nfs_iostat.h b/include/linux/nfs_iostat.h >> index 37a1437..8866bb3 100644 >> --- a/include/linux/nfs_iostat.h >> +++ b/include/linux/nfs_iostat.h >> @@ -114,6 +114,7 @@ enum nfs_stat_eventcounters { >> NFSIOS_SHORTWRITE, >> NFSIOS_DELAY, >> NFSIOS_PNFS_READ, >> + NFSIOS_PNFS_WRITE, >> __NFSIOS_COUNTSMAX, >> }; >> >> diff --git a/include/linux/nfs_xdr.h b/include/linux/nfs_xdr.h >> index 09d9681..c82ad33 100644 >> --- a/include/linux/nfs_xdr.h >> +++ b/include/linux/nfs_xdr.h >> @@ -1039,6 +1039,7 @@ struct nfs_write_data { >> struct nfs_writeargs args; /* argument struct */ >> struct nfs_writeres res; /* result struct */ >> struct pnfs_layout_segment *lseg; >> + const struct rpc_call_ops *mds_ops; > > nit: mds_ops is not really used in the patch, just initialized. > better introduce it along with its usage in patch 7/7. OK. Fred > > Benny > >> int (*write_done_cb) (struct rpc_task *task, struct nfs_write_data *data); >> #ifdef CONFIG_NFS_V4 >> unsigned long timestamp; /* For lease renewal */ -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html