dev.c (b2430d7567a376b3685627ca7e9d712f6f27d49b) | dev.c (85f40aec887110ae6bbefa87988def4606a3d583) |
---|---|
1/* 2 FUSE: Filesystem in Userspace 3 Copyright (C) 2001-2008 Miklos Szeredi <miklos@szeredi.hu> 4 5 This program can be distributed under the terms of the GNU GPL. 6 See the file COPYING. 7*/ 8 --- 889 unchanged lines hidden (view full) --- 898} 899 900/* Copy pages in the request to/from userspace buffer */ 901static int fuse_copy_pages(struct fuse_copy_state *cs, unsigned nbytes, 902 int zeroing) 903{ 904 unsigned i; 905 struct fuse_req *req = cs->req; | 1/* 2 FUSE: Filesystem in Userspace 3 Copyright (C) 2001-2008 Miklos Szeredi <miklos@szeredi.hu> 4 5 This program can be distributed under the terms of the GNU GPL. 6 See the file COPYING. 7*/ 8 --- 889 unchanged lines hidden (view full) --- 898} 899 900/* Copy pages in the request to/from userspace buffer */ 901static int fuse_copy_pages(struct fuse_copy_state *cs, unsigned nbytes, 902 int zeroing) 903{ 904 unsigned i; 905 struct fuse_req *req = cs->req; |
906 unsigned offset = req->page_descs[0].offset; 907 unsigned count = min(nbytes, (unsigned) PAGE_SIZE - offset); | |
908 909 for (i = 0; i < req->num_pages && (nbytes || zeroing); i++) { 910 int err; | 906 907 for (i = 0; i < req->num_pages && (nbytes || zeroing); i++) { 908 int err; |
909 unsigned offset = req->page_descs[i].offset; 910 unsigned count = min(nbytes, req->page_descs[i].length); |
|
911 912 err = fuse_copy_page(cs, &req->pages[i], offset, count, 913 zeroing); 914 if (err) 915 return err; 916 917 nbytes -= count; | 911 912 err = fuse_copy_page(cs, &req->pages[i], offset, count, 913 zeroing); 914 if (err) 915 return err; 916 917 nbytes -= count; |
918 count = min(nbytes, (unsigned) PAGE_SIZE); 919 offset = 0; | |
920 } 921 return 0; 922} 923 924/* Copy a single argument in the request to/from userspace buffer */ 925static int fuse_copy_one(struct fuse_copy_state *cs, void *val, unsigned size) 926{ 927 while (size) { --- 693 unchanged lines hidden (view full) --- 1621 unsigned int this_num; 1622 1623 page = find_get_page(mapping, index); 1624 if (!page) 1625 break; 1626 1627 this_num = min_t(unsigned, num, PAGE_CACHE_SIZE - offset); 1628 req->pages[req->num_pages] = page; | 918 } 919 return 0; 920} 921 922/* Copy a single argument in the request to/from userspace buffer */ 923static int fuse_copy_one(struct fuse_copy_state *cs, void *val, unsigned size) 924{ 925 while (size) { --- 693 unchanged lines hidden (view full) --- 1619 unsigned int this_num; 1620 1621 page = find_get_page(mapping, index); 1622 if (!page) 1623 break; 1624 1625 this_num = min_t(unsigned, num, PAGE_CACHE_SIZE - offset); 1626 req->pages[req->num_pages] = page; |
1627 req->page_descs[req->num_pages].length = this_num; |
|
1629 req->num_pages++; 1630 1631 offset = 0; 1632 num -= this_num; 1633 total_len += this_num; 1634 index++; 1635 } 1636 req->misc.retrieve_in.offset = outarg->offset; --- 517 unchanged lines hidden --- | 1628 req->num_pages++; 1629 1630 offset = 0; 1631 num -= this_num; 1632 total_len += this_num; 1633 index++; 1634 } 1635 req->misc.retrieve_in.offset = outarg->offset; --- 517 unchanged lines hidden --- |