> Subject: Re: [Patch v2 06/15] CIFS: Introduce helper function to get page > offset and length in smb_rqst > > On 6/25/2018 5:14 PM, Long Li wrote: > >> Subject: Re: [Patch v2 06/15] CIFS: Introduce helper function to get > >> page offset and length in smb_rqst > >> > >> On 5/30/2018 3:47 PM, Long Li wrote: > >>> From: Long Li <longli@xxxxxxxxxxxxx> > >>> > >>> Introduce a function rqst_page_get_length to return the page offset > >>> and length for a given page in smb_rqst. This function is to be used > >>> by following patches. > >>> > >>> Signed-off-by: Long Li <longli@xxxxxxxxxxxxx> > >>> --- > >>> fs/cifs/cifsproto.h | 3 +++ > >>> fs/cifs/misc.c | 17 +++++++++++++++++ > >>> 2 files changed, 20 insertions(+) > >>> > >>> diff --git a/fs/cifs/cifsproto.h b/fs/cifs/cifsproto.h index > >>> 7933c5f..89dda14 100644 > >>> --- a/fs/cifs/cifsproto.h > >>> +++ b/fs/cifs/cifsproto.h > >>> @@ -557,4 +557,7 @@ int cifs_alloc_hash(const char *name, struct > >> crypto_shash **shash, > >>> struct sdesc **sdesc); > >>> void cifs_free_hash(struct crypto_shash **shash, struct sdesc > >>> **sdesc); > >>> > >>> +extern void rqst_page_get_length(struct smb_rqst *rqst, unsigned > >>> +int > >> page, > >>> + unsigned int *len, unsigned int *offset); > >>> + > >>> #endif /* _CIFSPROTO_H */ > >>> diff --git a/fs/cifs/misc.c b/fs/cifs/misc.c index 96849b5..e951417 > >>> 100644 > >>> --- a/fs/cifs/misc.c > >>> +++ b/fs/cifs/misc.c > >>> @@ -905,3 +905,20 @@ cifs_free_hash(struct crypto_shash **shash, > >> struct sdesc **sdesc) > >>> crypto_free_shash(*shash); > >>> *shash = NULL; > >>> } > >>> + > >>> +/** > >>> + * rqst_page_get_length - obtain the length and offset for a page > >>> +in smb_rqst > >>> + * Input: rqst - a smb_rqst, page - a page index for rqst > >>> + * Output: *len - the length for this page, *offset - the offset > >>> +for this page */ void rqst_page_get_length(struct smb_rqst *rqst, > >>> +unsigned int page, > >>> + unsigned int *len, unsigned int *offset) { > >>> + *len = rqst->rq_pagesz; > >>> + *offset = (page == 0) ? rqst->rq_offset : 0; > >> > >> Really? Page 0 always has a zero offset?? > > > > I think you are misreading this line. The offset for page 0 is rq_offset, the > offset for all subsequent pages are 0. > > Ah, yes, sorry I did read it incorrectly. > >>> + > >>> + if (rqst->rq_npages == 1 || page == rqst->rq_npages-1) > >>> + *len = rqst->rq_tailsz; > >>> + else if (page == 0) > >>> + *len = rqst->rq_pagesz - rqst->rq_offset; } > >>> > >> > >> This subroutine does what patch 5 does inline. Why not push this > >> patch up in the sequence and use the helper? > > > > This is actually a little different. This function returns the length and offset > for a given page in the request. There might be multiple pages in a request. > > Ok, but I still think there is quite a bit of inline computation of this stuff that > would more clearly and more robustly be done in a set of common functions. > If someone ever touches the code to support a new upper layer, or even > integrate with more complex compounding, things will get ugly fast. > > > The other function calculates the total length of all the pages in a request. > > Again, a great candidate for a common set of subroutines, IMO. I will look into this. The reason I didn't make a common function is that this is the only patch that will use it in this way. ��.n��������+%������w��{.n�����{�����ܨ}���Ơz�j:+v�����w����ޙ��&�)ߡ�a����z�ޗ���ݢj��w�f