LCOV - code coverage report
Current view: top level - fs/nfs - pnfs.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 0 6 0.0 %
Date: 2014-02-18 Functions: 0 2 0.0 %
Branches: 0 0 -

           Branch data     Line data    Source code
       1                 :            : /*
       2                 :            :  *  pNFS client data structures.
       3                 :            :  *
       4                 :            :  *  Copyright (c) 2002
       5                 :            :  *  The Regents of the University of Michigan
       6                 :            :  *  All Rights Reserved
       7                 :            :  *
       8                 :            :  *  Dean Hildebrand <dhildebz@umich.edu>
       9                 :            :  *
      10                 :            :  *  Permission is granted to use, copy, create derivative works, and
      11                 :            :  *  redistribute this software and such derivative works for any purpose,
      12                 :            :  *  so long as the name of the University of Michigan is not used in
      13                 :            :  *  any advertising or publicity pertaining to the use or distribution
      14                 :            :  *  of this software without specific, written prior authorization. If
      15                 :            :  *  the above copyright notice or any other identification of the
      16                 :            :  *  University of Michigan is included in any copy of any portion of
      17                 :            :  *  this software, then the disclaimer below must also be included.
      18                 :            :  *
      19                 :            :  *  This software is provided as is, without representation or warranty
      20                 :            :  *  of any kind either express or implied, including without limitation
      21                 :            :  *  the implied warranties of merchantability, fitness for a particular
      22                 :            :  *  purpose, or noninfringement.  The Regents of the University of
      23                 :            :  *  Michigan shall not be liable for any damages, including special,
      24                 :            :  *  indirect, incidental, or consequential damages, with respect to any
      25                 :            :  *  claim arising out of or in connection with the use of the software,
      26                 :            :  *  even if it has been or is hereafter advised of the possibility of
      27                 :            :  *  such damages.
      28                 :            :  */
      29                 :            : 
      30                 :            : #ifndef FS_NFS_PNFS_H
      31                 :            : #define FS_NFS_PNFS_H
      32                 :            : 
      33                 :            : #include <linux/nfs_fs.h>
      34                 :            : #include <linux/nfs_page.h>
      35                 :            : 
      36                 :            : enum {
      37                 :            :         NFS_LSEG_VALID = 0,     /* cleared when lseg is recalled/returned */
      38                 :            :         NFS_LSEG_ROC,           /* roc bit received from server */
      39                 :            :         NFS_LSEG_LAYOUTCOMMIT,  /* layoutcommit bit set for layoutcommit */
      40                 :            : };
      41                 :            : 
      42                 :            : struct pnfs_layout_segment {
      43                 :            :         struct list_head pls_list;
      44                 :            :         struct list_head pls_lc_list;
      45                 :            :         struct pnfs_layout_range pls_range;
      46                 :            :         atomic_t pls_refcount;
      47                 :            :         unsigned long pls_flags;
      48                 :            :         struct pnfs_layout_hdr *pls_layout;
      49                 :            : };
      50                 :            : 
      51                 :            : enum pnfs_try_status {
      52                 :            :         PNFS_ATTEMPTED     = 0,
      53                 :            :         PNFS_NOT_ATTEMPTED = 1,
      54                 :            : };
      55                 :            : 
      56                 :            : #ifdef CONFIG_NFS_V4_1
      57                 :            : 
      58                 :            : #define LAYOUT_NFSV4_1_MODULE_PREFIX "nfs-layouttype4"
      59                 :            : 
      60                 :            : enum {
      61                 :            :         NFS_LAYOUT_RO_FAILED = 0,       /* get ro layout failed stop trying */
      62                 :            :         NFS_LAYOUT_RW_FAILED,           /* get rw layout failed stop trying */
      63                 :            :         NFS_LAYOUT_BULK_RECALL,         /* bulk recall affecting layout */
      64                 :            :         NFS_LAYOUT_ROC,                 /* some lseg had roc bit set */
      65                 :            :         NFS_LAYOUT_RETURN,              /* Return this layout ASAP */
      66                 :            : };
      67                 :            : 
      68                 :            : enum layoutdriver_policy_flags {
      69                 :            :         /* Should the pNFS client commit and return the layout upon a setattr */
      70                 :            :         PNFS_LAYOUTRET_ON_SETATTR       = 1 << 0,
      71                 :            :         PNFS_LAYOUTRET_ON_ERROR         = 1 << 1,
      72                 :            : };
      73                 :            : 
      74                 :            : struct nfs4_deviceid_node;
      75                 :            : 
      76                 :            : /* Per-layout driver specific registration structure */
      77                 :            : struct pnfs_layoutdriver_type {
      78                 :            :         struct list_head pnfs_tblid;
      79                 :            :         const u32 id;
      80                 :            :         const char *name;
      81                 :            :         struct module *owner;
      82                 :            :         unsigned flags;
      83                 :            : 
      84                 :            :         int (*set_layoutdriver) (struct nfs_server *, const struct nfs_fh *);
      85                 :            :         int (*clear_layoutdriver) (struct nfs_server *);
      86                 :            : 
      87                 :            :         struct pnfs_layout_hdr * (*alloc_layout_hdr) (struct inode *inode, gfp_t gfp_flags);
      88                 :            :         void (*free_layout_hdr) (struct pnfs_layout_hdr *);
      89                 :            : 
      90                 :            :         struct pnfs_layout_segment * (*alloc_lseg) (struct pnfs_layout_hdr *layoutid, struct nfs4_layoutget_res *lgr, gfp_t gfp_flags);
      91                 :            :         void (*free_lseg) (struct pnfs_layout_segment *lseg);
      92                 :            : 
      93                 :            :         /* test for nfs page cache coalescing */
      94                 :            :         const struct nfs_pageio_ops *pg_read_ops;
      95                 :            :         const struct nfs_pageio_ops *pg_write_ops;
      96                 :            : 
      97                 :            :         struct pnfs_ds_commit_info *(*get_ds_info) (struct inode *inode);
      98                 :            :         void (*mark_request_commit) (struct nfs_page *req,
      99                 :            :                                      struct pnfs_layout_segment *lseg,
     100                 :            :                                      struct nfs_commit_info *cinfo);
     101                 :            :         void (*clear_request_commit) (struct nfs_page *req,
     102                 :            :                                       struct nfs_commit_info *cinfo);
     103                 :            :         int (*scan_commit_lists) (struct nfs_commit_info *cinfo,
     104                 :            :                                   int max);
     105                 :            :         void (*recover_commit_reqs) (struct list_head *list,
     106                 :            :                                      struct nfs_commit_info *cinfo);
     107                 :            :         int (*commit_pagelist)(struct inode *inode,
     108                 :            :                                struct list_head *mds_pages,
     109                 :            :                                int how,
     110                 :            :                                struct nfs_commit_info *cinfo);
     111                 :            : 
     112                 :            :         /*
     113                 :            :          * Return PNFS_ATTEMPTED to indicate the layout code has attempted
     114                 :            :          * I/O, else return PNFS_NOT_ATTEMPTED to fall back to normal NFS
     115                 :            :          */
     116                 :            :         enum pnfs_try_status (*read_pagelist) (struct nfs_read_data *nfs_data);
     117                 :            :         enum pnfs_try_status (*write_pagelist) (struct nfs_write_data *nfs_data, int how);
     118                 :            : 
     119                 :            :         void (*free_deviceid_node) (struct nfs4_deviceid_node *);
     120                 :            : 
     121                 :            :         void (*encode_layoutreturn) (struct pnfs_layout_hdr *layoutid,
     122                 :            :                                      struct xdr_stream *xdr,
     123                 :            :                                      const struct nfs4_layoutreturn_args *args);
     124                 :            : 
     125                 :            :         void (*cleanup_layoutcommit) (struct nfs4_layoutcommit_data *data);
     126                 :            : 
     127                 :            :         void (*encode_layoutcommit) (struct pnfs_layout_hdr *layoutid,
     128                 :            :                                      struct xdr_stream *xdr,
     129                 :            :                                      const struct nfs4_layoutcommit_args *args);
     130                 :            : };
     131                 :            : 
     132                 :            : struct pnfs_layout_hdr {
     133                 :            :         atomic_t                plh_refcount;
     134                 :            :         struct list_head        plh_layouts;   /* other client layouts */
     135                 :            :         struct list_head        plh_bulk_destroy;
     136                 :            :         struct list_head        plh_segs;      /* layout segments list */
     137                 :            :         nfs4_stateid            plh_stateid;
     138                 :            :         atomic_t                plh_outstanding; /* number of RPCs out */
     139                 :            :         unsigned long           plh_block_lgets; /* block LAYOUTGET if >0 */
     140                 :            :         u32                     plh_barrier; /* ignore lower seqids */
     141                 :            :         unsigned long           plh_retry_timestamp;
     142                 :            :         unsigned long           plh_flags;
     143                 :            :         loff_t                  plh_lwb; /* last write byte for layoutcommit */
     144                 :            :         struct rpc_cred         *plh_lc_cred; /* layoutcommit cred */
     145                 :            :         struct inode            *plh_inode;
     146                 :            : };
     147                 :            : 
     148                 :            : struct pnfs_device {
     149                 :            :         struct nfs4_deviceid dev_id;
     150                 :            :         unsigned int  layout_type;
     151                 :            :         unsigned int  mincount;
     152                 :            :         unsigned int  maxcount; /* gdia_maxcount */
     153                 :            :         struct page **pages;
     154                 :            :         unsigned int  pgbase;
     155                 :            :         unsigned int  pglen;    /* reply buffer length */
     156                 :            : };
     157                 :            : 
     158                 :            : #define NFS4_PNFS_GETDEVLIST_MAXNUM 16
     159                 :            : 
     160                 :            : struct pnfs_devicelist {
     161                 :            :         unsigned int            eof;
     162                 :            :         unsigned int            num_devs;
     163                 :            :         struct nfs4_deviceid    dev_id[NFS4_PNFS_GETDEVLIST_MAXNUM];
     164                 :            : };
     165                 :            : 
     166                 :            : extern int pnfs_register_layoutdriver(struct pnfs_layoutdriver_type *);
     167                 :            : extern void pnfs_unregister_layoutdriver(struct pnfs_layoutdriver_type *);
     168                 :            : 
     169                 :            : /* nfs4proc.c */
     170                 :            : extern int nfs4_proc_getdevicelist(struct nfs_server *server,
     171                 :            :                                    const struct nfs_fh *fh,
     172                 :            :                                    struct pnfs_devicelist *devlist);
     173                 :            : extern int nfs4_proc_getdeviceinfo(struct nfs_server *server,
     174                 :            :                                    struct pnfs_device *dev,
     175                 :            :                                    struct rpc_cred *cred);
     176                 :            : extern struct pnfs_layout_segment* nfs4_proc_layoutget(struct nfs4_layoutget *lgp, gfp_t gfp_flags);
     177                 :            : extern int nfs4_proc_layoutreturn(struct nfs4_layoutreturn *lrp);
     178                 :            : 
     179                 :            : /* pnfs.c */
     180                 :            : void pnfs_get_layout_hdr(struct pnfs_layout_hdr *lo);
     181                 :            : void pnfs_put_lseg(struct pnfs_layout_segment *lseg);
     182                 :            : 
     183                 :            : void pnfs_pageio_init_read(struct nfs_pageio_descriptor *, struct inode *,
     184                 :            :                            const struct nfs_pgio_completion_ops *);
     185                 :            : void pnfs_pageio_init_write(struct nfs_pageio_descriptor *, struct inode *,
     186                 :            :                             int, const struct nfs_pgio_completion_ops *);
     187                 :            : 
     188                 :            : void set_pnfs_layoutdriver(struct nfs_server *, const struct nfs_fh *, u32);
     189                 :            : void unset_pnfs_layoutdriver(struct nfs_server *);
     190                 :            : void pnfs_generic_pg_init_read(struct nfs_pageio_descriptor *, struct nfs_page *);
     191                 :            : int pnfs_generic_pg_readpages(struct nfs_pageio_descriptor *desc);
     192                 :            : void pnfs_generic_pg_init_write(struct nfs_pageio_descriptor *pgio,
     193                 :            :                                 struct nfs_page *req, u64 wb_size);
     194                 :            : int pnfs_generic_pg_writepages(struct nfs_pageio_descriptor *desc);
     195                 :            : bool pnfs_generic_pg_test(struct nfs_pageio_descriptor *pgio, struct nfs_page *prev, struct nfs_page *req);
     196                 :            : void pnfs_set_lo_fail(struct pnfs_layout_segment *lseg);
     197                 :            : struct pnfs_layout_segment *pnfs_layout_process(struct nfs4_layoutget *lgp);
     198                 :            : void pnfs_free_lseg_list(struct list_head *tmp_list);
     199                 :            : void pnfs_destroy_layout(struct nfs_inode *);
     200                 :            : void pnfs_destroy_all_layouts(struct nfs_client *);
     201                 :            : int pnfs_destroy_layouts_byfsid(struct nfs_client *clp,
     202                 :            :                 struct nfs_fsid *fsid,
     203                 :            :                 bool is_recall);
     204                 :            : int pnfs_destroy_layouts_byclid(struct nfs_client *clp,
     205                 :            :                 bool is_recall);
     206                 :            : void pnfs_put_layout_hdr(struct pnfs_layout_hdr *lo);
     207                 :            : void pnfs_set_layout_stateid(struct pnfs_layout_hdr *lo,
     208                 :            :                              const nfs4_stateid *new,
     209                 :            :                              bool update_barrier);
     210                 :            : int pnfs_choose_layoutget_stateid(nfs4_stateid *dst,
     211                 :            :                                   struct pnfs_layout_hdr *lo,
     212                 :            :                                   struct nfs4_state *open_state);
     213                 :            : int pnfs_mark_matching_lsegs_invalid(struct pnfs_layout_hdr *lo,
     214                 :            :                                 struct list_head *tmp_list,
     215                 :            :                                 struct pnfs_layout_range *recall_range);
     216                 :            : bool pnfs_roc(struct inode *ino);
     217                 :            : void pnfs_roc_release(struct inode *ino);
     218                 :            : void pnfs_roc_set_barrier(struct inode *ino, u32 barrier);
     219                 :            : bool pnfs_roc_drain(struct inode *ino, u32 *barrier, struct rpc_task *task);
     220                 :            : void pnfs_set_layoutcommit(struct nfs_write_data *wdata);
     221                 :            : void pnfs_cleanup_layoutcommit(struct nfs4_layoutcommit_data *data);
     222                 :            : int pnfs_layoutcommit_inode(struct inode *inode, bool sync);
     223                 :            : int _pnfs_return_layout(struct inode *);
     224                 :            : int pnfs_commit_and_return_layout(struct inode *);
     225                 :            : void pnfs_ld_write_done(struct nfs_write_data *);
     226                 :            : void pnfs_ld_read_done(struct nfs_read_data *);
     227                 :            : struct pnfs_layout_segment *pnfs_update_layout(struct inode *ino,
     228                 :            :                                                struct nfs_open_context *ctx,
     229                 :            :                                                loff_t pos,
     230                 :            :                                                u64 count,
     231                 :            :                                                enum pnfs_iomode iomode,
     232                 :            :                                                gfp_t gfp_flags);
     233                 :            : 
     234                 :            : void nfs4_deviceid_mark_client_invalid(struct nfs_client *clp);
     235                 :            : int pnfs_read_done_resend_to_mds(struct inode *inode, struct list_head *head,
     236                 :            :                         const struct nfs_pgio_completion_ops *compl_ops,
     237                 :            :                         struct nfs_direct_req *dreq);
     238                 :            : int pnfs_write_done_resend_to_mds(struct inode *inode, struct list_head *head,
     239                 :            :                         const struct nfs_pgio_completion_ops *compl_ops,
     240                 :            :                         struct nfs_direct_req *dreq);
     241                 :            : struct nfs4_threshold *pnfs_mdsthreshold_alloc(void);
     242                 :            : 
     243                 :            : /* nfs4_deviceid_flags */
     244                 :            : enum {
     245                 :            :         NFS_DEVICEID_INVALID = 0,       /* set when MDS clientid recalled */
     246                 :            :         NFS_DEVICEID_UNAVAILABLE,       /* device temporarily unavailable */
     247                 :            : };
     248                 :            : 
     249                 :            : /* pnfs_dev.c */
     250                 :            : struct nfs4_deviceid_node {
     251                 :            :         struct hlist_node               node;
     252                 :            :         struct hlist_node               tmpnode;
     253                 :            :         const struct pnfs_layoutdriver_type *ld;
     254                 :            :         const struct nfs_client         *nfs_client;
     255                 :            :         unsigned long                   flags;
     256                 :            :         unsigned long                   timestamp_unavailable;
     257                 :            :         struct nfs4_deviceid            deviceid;
     258                 :            :         atomic_t                        ref;
     259                 :            : };
     260                 :            : 
     261                 :            : struct nfs4_deviceid_node *nfs4_find_get_deviceid(const struct pnfs_layoutdriver_type *, const struct nfs_client *, const struct nfs4_deviceid *);
     262                 :            : void nfs4_delete_deviceid(const struct pnfs_layoutdriver_type *, const struct nfs_client *, const struct nfs4_deviceid *);
     263                 :            : void nfs4_init_deviceid_node(struct nfs4_deviceid_node *,
     264                 :            :                              const struct pnfs_layoutdriver_type *,
     265                 :            :                              const struct nfs_client *,
     266                 :            :                              const struct nfs4_deviceid *);
     267                 :            : struct nfs4_deviceid_node *nfs4_insert_deviceid_node(struct nfs4_deviceid_node *);
     268                 :            : bool nfs4_put_deviceid_node(struct nfs4_deviceid_node *);
     269                 :            : void nfs4_mark_deviceid_unavailable(struct nfs4_deviceid_node *node);
     270                 :            : bool nfs4_test_deviceid_unavailable(struct nfs4_deviceid_node *node);
     271                 :            : void nfs4_deviceid_purge_client(const struct nfs_client *);
     272                 :            : 
     273                 :            : static inline struct pnfs_layout_segment *
     274                 :            : pnfs_get_lseg(struct pnfs_layout_segment *lseg)
     275                 :            : {
     276                 :            :         if (lseg) {
     277                 :            :                 atomic_inc(&lseg->pls_refcount);
     278                 :            :                 smp_mb__after_atomic_inc();
     279                 :            :         }
     280                 :            :         return lseg;
     281                 :            : }
     282                 :            : 
     283                 :            : /* Return true if a layout driver is being used for this mountpoint */
     284                 :            : static inline int pnfs_enabled_sb(struct nfs_server *nfss)
     285                 :            : {
     286                 :            :         return nfss->pnfs_curr_ld != NULL;
     287                 :            : }
     288                 :            : 
     289                 :            : static inline int
     290                 :            : pnfs_commit_list(struct inode *inode, struct list_head *mds_pages, int how,
     291                 :            :                  struct nfs_commit_info *cinfo)
     292                 :            : {
     293                 :            :         if (cinfo->ds == NULL || cinfo->ds->ncommitting == 0)
     294                 :            :                 return PNFS_NOT_ATTEMPTED;
     295                 :            :         return NFS_SERVER(inode)->pnfs_curr_ld->commit_pagelist(inode, mds_pages, how, cinfo);
     296                 :            : }
     297                 :            : 
     298                 :            : static inline struct pnfs_ds_commit_info *
     299                 :            : pnfs_get_ds_info(struct inode *inode)
     300                 :            : {
     301                 :            :         struct pnfs_layoutdriver_type *ld = NFS_SERVER(inode)->pnfs_curr_ld;
     302                 :            : 
     303                 :            :         if (ld == NULL || ld->get_ds_info == NULL)
     304                 :            :                 return NULL;
     305                 :            :         return ld->get_ds_info(inode);
     306                 :            : }
     307                 :            : 
     308                 :            : static inline bool
     309                 :            : pnfs_mark_request_commit(struct nfs_page *req, struct pnfs_layout_segment *lseg,
     310                 :            :                          struct nfs_commit_info *cinfo)
     311                 :            : {
     312                 :            :         struct inode *inode = req->wb_context->dentry->d_inode;
     313                 :            :         struct pnfs_layoutdriver_type *ld = NFS_SERVER(inode)->pnfs_curr_ld;
     314                 :            : 
     315                 :            :         if (lseg == NULL || ld->mark_request_commit == NULL)
     316                 :            :                 return false;
     317                 :            :         ld->mark_request_commit(req, lseg, cinfo);
     318                 :            :         return true;
     319                 :            : }
     320                 :            : 
     321                 :            : static inline bool
     322                 :            : pnfs_clear_request_commit(struct nfs_page *req, struct nfs_commit_info *cinfo)
     323                 :            : {
     324                 :            :         struct inode *inode = req->wb_context->dentry->d_inode;
     325                 :            :         struct pnfs_layoutdriver_type *ld = NFS_SERVER(inode)->pnfs_curr_ld;
     326                 :            : 
     327                 :            :         if (ld == NULL || ld->clear_request_commit == NULL)
     328                 :            :                 return false;
     329                 :            :         ld->clear_request_commit(req, cinfo);
     330                 :            :         return true;
     331                 :            : }
     332                 :            : 
     333                 :            : static inline int
     334                 :            : pnfs_scan_commit_lists(struct inode *inode, struct nfs_commit_info *cinfo,
     335                 :            :                        int max)
     336                 :            : {
     337                 :            :         if (cinfo->ds == NULL || cinfo->ds->nwritten == 0)
     338                 :            :                 return 0;
     339                 :            :         else
     340                 :            :                 return NFS_SERVER(inode)->pnfs_curr_ld->scan_commit_lists(cinfo, max);
     341                 :            : }
     342                 :            : 
     343                 :            : static inline void
     344                 :            : pnfs_recover_commit_reqs(struct inode *inode, struct list_head *list,
     345                 :            :                          struct nfs_commit_info *cinfo)
     346                 :            : {
     347                 :            :         if (cinfo->ds == NULL || cinfo->ds->nwritten == 0)
     348                 :            :                 return;
     349                 :            :         NFS_SERVER(inode)->pnfs_curr_ld->recover_commit_reqs(list, cinfo);
     350                 :            : }
     351                 :            : 
     352                 :            : /* Should the pNFS client commit and return the layout upon a setattr */
     353                 :            : static inline bool
     354                 :            : pnfs_ld_layoutret_on_setattr(struct inode *inode)
     355                 :            : {
     356                 :            :         if (!pnfs_enabled_sb(NFS_SERVER(inode)))
     357                 :            :                 return false;
     358                 :            :         return NFS_SERVER(inode)->pnfs_curr_ld->flags &
     359                 :            :                 PNFS_LAYOUTRET_ON_SETATTR;
     360                 :            : }
     361                 :            : 
     362                 :            : static inline int pnfs_return_layout(struct inode *ino)
     363                 :            : {
     364                 :            :         struct nfs_inode *nfsi = NFS_I(ino);
     365                 :            :         struct nfs_server *nfss = NFS_SERVER(ino);
     366                 :            : 
     367                 :            :         if (pnfs_enabled_sb(nfss) && nfsi->layout)
     368                 :            :                 return _pnfs_return_layout(ino);
     369                 :            : 
     370                 :            :         return 0;
     371                 :            : }
     372                 :            : 
     373                 :            : static inline bool
     374                 :            : pnfs_use_threshold(struct nfs4_threshold **dst, struct nfs4_threshold *src,
     375                 :            :                    struct nfs_server *nfss)
     376                 :            : {
     377                 :            :         return (dst && src && src->bm != 0 && nfss->pnfs_curr_ld &&
     378                 :            :                                         nfss->pnfs_curr_ld->id == src->l_type);
     379                 :            : }
     380                 :            : 
     381                 :            : #ifdef NFS_DEBUG
     382                 :            : void nfs4_print_deviceid(const struct nfs4_deviceid *dev_id);
     383                 :            : #else
     384                 :            : static inline void nfs4_print_deviceid(const struct nfs4_deviceid *dev_id)
     385                 :            : {
     386                 :            : }
     387                 :            : #endif /* NFS_DEBUG */
     388                 :            : #else  /* CONFIG_NFS_V4_1 */
     389                 :            : 
     390                 :            : static inline void pnfs_destroy_all_layouts(struct nfs_client *clp)
     391                 :            : {
     392                 :            : }
     393                 :            : 
     394                 :            : static inline void pnfs_destroy_layout(struct nfs_inode *nfsi)
     395                 :            : {
     396                 :            : }
     397                 :            : 
     398                 :            : static inline struct pnfs_layout_segment *
     399                 :            : pnfs_get_lseg(struct pnfs_layout_segment *lseg)
     400                 :            : {
     401                 :            :         return NULL;
     402                 :            : }
     403                 :            : 
     404                 :            : static inline void pnfs_put_lseg(struct pnfs_layout_segment *lseg)
     405                 :            : {
     406                 :            : }
     407                 :            : 
     408                 :            : static inline int pnfs_return_layout(struct inode *ino)
     409                 :            : {
     410                 :            :         return 0;
     411                 :            : }
     412                 :            : 
     413                 :            : static inline int pnfs_commit_and_return_layout(struct inode *inode)
     414                 :            : {
     415                 :            :         return 0;
     416                 :            : }
     417                 :            : 
     418                 :            : static inline bool
     419                 :            : pnfs_ld_layoutret_on_setattr(struct inode *inode)
     420                 :            : {
     421                 :            :         return false;
     422                 :            : }
     423                 :            : 
     424                 :            : static inline bool
     425                 :            : pnfs_roc(struct inode *ino)
     426                 :            : {
     427                 :            :         return false;
     428                 :            : }
     429                 :            : 
     430                 :            : static inline void
     431                 :            : pnfs_roc_release(struct inode *ino)
     432                 :            : {
     433                 :            : }
     434                 :            : 
     435                 :            : static inline void
     436                 :            : pnfs_roc_set_barrier(struct inode *ino, u32 barrier)
     437                 :            : {
     438                 :            : }
     439                 :            : 
     440                 :            : static inline bool
     441                 :            : pnfs_roc_drain(struct inode *ino, u32 *barrier, struct rpc_task *task)
     442                 :            : {
     443                 :            :         return false;
     444                 :            : }
     445                 :            : 
     446                 :            : static inline void set_pnfs_layoutdriver(struct nfs_server *s,
     447                 :            :                                          const struct nfs_fh *mntfh, u32 id)
     448                 :            : {
     449                 :            : }
     450                 :            : 
     451                 :            : static inline void unset_pnfs_layoutdriver(struct nfs_server *s)
     452                 :            : {
     453                 :            : }
     454                 :            : 
     455                 :          0 : static inline void pnfs_pageio_init_read(struct nfs_pageio_descriptor *pgio, struct inode *inode,
     456                 :            :                                          const struct nfs_pgio_completion_ops *compl_ops)
     457                 :            : {
     458                 :          0 :         nfs_pageio_init_read(pgio, inode, compl_ops);
     459                 :          0 : }
     460                 :            : 
     461                 :          0 : static inline void pnfs_pageio_init_write(struct nfs_pageio_descriptor *pgio, struct inode *inode, int ioflags,
     462                 :            :                                           const struct nfs_pgio_completion_ops *compl_ops)
     463                 :            : {
     464                 :          0 :         nfs_pageio_init_write(pgio, inode, ioflags, compl_ops);
     465                 :          0 : }
     466                 :            : 
     467                 :            : static inline int
     468                 :            : pnfs_commit_list(struct inode *inode, struct list_head *mds_pages, int how,
     469                 :            :                  struct nfs_commit_info *cinfo)
     470                 :            : {
     471                 :            :         return PNFS_NOT_ATTEMPTED;
     472                 :            : }
     473                 :            : 
     474                 :            : static inline struct pnfs_ds_commit_info *
     475                 :            : pnfs_get_ds_info(struct inode *inode)
     476                 :            : {
     477                 :            :         return NULL;
     478                 :            : }
     479                 :            : 
     480                 :            : static inline bool
     481                 :            : pnfs_mark_request_commit(struct nfs_page *req, struct pnfs_layout_segment *lseg,
     482                 :            :                          struct nfs_commit_info *cinfo)
     483                 :            : {
     484                 :            :         return false;
     485                 :            : }
     486                 :            : 
     487                 :            : static inline bool
     488                 :            : pnfs_clear_request_commit(struct nfs_page *req, struct nfs_commit_info *cinfo)
     489                 :            : {
     490                 :            :         return false;
     491                 :            : }
     492                 :            : 
     493                 :            : static inline int
     494                 :            : pnfs_scan_commit_lists(struct inode *inode, struct nfs_commit_info *cinfo,
     495                 :            :                        int max)
     496                 :            : {
     497                 :            :         return 0;
     498                 :            : }
     499                 :            : 
     500                 :            : static inline void
     501                 :            : pnfs_recover_commit_reqs(struct inode *inode, struct list_head *list,
     502                 :            :                          struct nfs_commit_info *cinfo)
     503                 :            : {
     504                 :            : }
     505                 :            : 
     506                 :            : static inline int pnfs_layoutcommit_inode(struct inode *inode, bool sync)
     507                 :            : {
     508                 :            :         return 0;
     509                 :            : }
     510                 :            : 
     511                 :            : static inline bool
     512                 :            : pnfs_use_threshold(struct nfs4_threshold **dst, struct nfs4_threshold *src,
     513                 :            :                    struct nfs_server *nfss)
     514                 :            : {
     515                 :            :         return false;
     516                 :            : }
     517                 :            : 
     518                 :            : static inline struct nfs4_threshold *pnfs_mdsthreshold_alloc(void)
     519                 :            : {
     520                 :            :         return NULL;
     521                 :            : }
     522                 :            : 
     523                 :            : #endif /* CONFIG_NFS_V4_1 */
     524                 :            : 
     525                 :            : #endif /* FS_NFS_PNFS_H */

Generated by: LCOV version 1.9