diff options
Diffstat (limited to 'fs/nfs/nfs4filelayoutdev.c')
| -rw-r--r-- | fs/nfs/nfs4filelayoutdev.c | 34 |
1 files changed, 17 insertions, 17 deletions
diff --git a/fs/nfs/nfs4filelayoutdev.c b/fs/nfs/nfs4filelayoutdev.c index de5350f2b249..db07c7af1395 100644 --- a/fs/nfs/nfs4filelayoutdev.c +++ b/fs/nfs/nfs4filelayoutdev.c | |||
| @@ -225,11 +225,11 @@ nfs4_fl_free_deviceid(struct nfs4_file_layout_dsaddr *dsaddr) | |||
| 225 | } | 225 | } |
| 226 | 226 | ||
| 227 | static struct nfs4_pnfs_ds * | 227 | static struct nfs4_pnfs_ds * |
| 228 | nfs4_pnfs_ds_add(struct inode *inode, u32 ip_addr, u32 port) | 228 | nfs4_pnfs_ds_add(struct inode *inode, u32 ip_addr, u32 port, gfp_t gfp_flags) |
| 229 | { | 229 | { |
| 230 | struct nfs4_pnfs_ds *tmp_ds, *ds; | 230 | struct nfs4_pnfs_ds *tmp_ds, *ds; |
| 231 | 231 | ||
| 232 | ds = kzalloc(sizeof(*tmp_ds), GFP_KERNEL); | 232 | ds = kzalloc(sizeof(*tmp_ds), gfp_flags); |
| 233 | if (!ds) | 233 | if (!ds) |
| 234 | goto out; | 234 | goto out; |
| 235 | 235 | ||
| @@ -261,7 +261,7 @@ out: | |||
| 261 | * Currently only support ipv4, and one multi-path address. | 261 | * Currently only support ipv4, and one multi-path address. |
| 262 | */ | 262 | */ |
| 263 | static struct nfs4_pnfs_ds * | 263 | static struct nfs4_pnfs_ds * |
| 264 | decode_and_add_ds(struct xdr_stream *streamp, struct inode *inode) | 264 | decode_and_add_ds(struct xdr_stream *streamp, struct inode *inode, gfp_t gfp_flags) |
| 265 | { | 265 | { |
| 266 | struct nfs4_pnfs_ds *ds = NULL; | 266 | struct nfs4_pnfs_ds *ds = NULL; |
| 267 | char *buf; | 267 | char *buf; |
| @@ -303,7 +303,7 @@ decode_and_add_ds(struct xdr_stream *streamp, struct inode *inode) | |||
| 303 | rlen); | 303 | rlen); |
| 304 | goto out_err; | 304 | goto out_err; |
| 305 | } | 305 | } |
| 306 | buf = kmalloc(rlen + 1, GFP_KERNEL); | 306 | buf = kmalloc(rlen + 1, gfp_flags); |
| 307 | if (!buf) { | 307 | if (!buf) { |
| 308 | dprintk("%s: Not enough memory\n", __func__); | 308 | dprintk("%s: Not enough memory\n", __func__); |
| 309 | goto out_err; | 309 | goto out_err; |
| @@ -333,7 +333,7 @@ decode_and_add_ds(struct xdr_stream *streamp, struct inode *inode) | |||
| 333 | sscanf(pstr, "-%d-%d", &tmp[0], &tmp[1]); | 333 | sscanf(pstr, "-%d-%d", &tmp[0], &tmp[1]); |
| 334 | port = htons((tmp[0] << 8) | (tmp[1])); | 334 | port = htons((tmp[0] << 8) | (tmp[1])); |
| 335 | 335 | ||
| 336 | ds = nfs4_pnfs_ds_add(inode, ip_addr, port); | 336 | ds = nfs4_pnfs_ds_add(inode, ip_addr, port, gfp_flags); |
| 337 | dprintk("%s: Decoded address and port %s\n", __func__, buf); | 337 | dprintk("%s: Decoded address and port %s\n", __func__, buf); |
| 338 | out_free: | 338 | out_free: |
| 339 | kfree(buf); | 339 | kfree(buf); |
| @@ -343,7 +343,7 @@ out_err: | |||
| 343 | 343 | ||
| 344 | /* Decode opaque device data and return the result */ | 344 | /* Decode opaque device data and return the result */ |
| 345 | static struct nfs4_file_layout_dsaddr* | 345 | static struct nfs4_file_layout_dsaddr* |
| 346 | decode_device(struct inode *ino, struct pnfs_device *pdev) | 346 | decode_device(struct inode *ino, struct pnfs_device *pdev, gfp_t gfp_flags) |
| 347 | { | 347 | { |
| 348 | int i; | 348 | int i; |
| 349 | u32 cnt, num; | 349 | u32 cnt, num; |
| @@ -362,7 +362,7 @@ decode_device(struct inode *ino, struct pnfs_device *pdev) | |||
| 362 | struct page *scratch; | 362 | struct page *scratch; |
| 363 | 363 | ||
| 364 | /* set up xdr stream */ | 364 | /* set up xdr stream */ |
| 365 | scratch = alloc_page(GFP_KERNEL); | 365 | scratch = alloc_page(gfp_flags); |
| 366 | if (!scratch) | 366 | if (!scratch) |
| 367 | goto out_err; | 367 | goto out_err; |
| 368 | 368 | ||
| @@ -384,7 +384,7 @@ decode_device(struct inode *ino, struct pnfs_device *pdev) | |||
| 384 | } | 384 | } |
| 385 | 385 | ||
| 386 | /* read stripe indices */ | 386 | /* read stripe indices */ |
| 387 | stripe_indices = kcalloc(cnt, sizeof(u8), GFP_KERNEL); | 387 | stripe_indices = kcalloc(cnt, sizeof(u8), gfp_flags); |
| 388 | if (!stripe_indices) | 388 | if (!stripe_indices) |
| 389 | goto out_err_free_scratch; | 389 | goto out_err_free_scratch; |
| 390 | 390 | ||
| @@ -423,7 +423,7 @@ decode_device(struct inode *ino, struct pnfs_device *pdev) | |||
| 423 | 423 | ||
| 424 | dsaddr = kzalloc(sizeof(*dsaddr) + | 424 | dsaddr = kzalloc(sizeof(*dsaddr) + |
| 425 | (sizeof(struct nfs4_pnfs_ds *) * (num - 1)), | 425 | (sizeof(struct nfs4_pnfs_ds *) * (num - 1)), |
| 426 | GFP_KERNEL); | 426 | gfp_flags); |
| 427 | if (!dsaddr) | 427 | if (!dsaddr) |
| 428 | goto out_err_free_stripe_indices; | 428 | goto out_err_free_stripe_indices; |
| 429 | 429 | ||
| @@ -452,7 +452,7 @@ decode_device(struct inode *ino, struct pnfs_device *pdev) | |||
| 452 | for (j = 0; j < mp_count; j++) { | 452 | for (j = 0; j < mp_count; j++) { |
| 453 | if (j == 0) { | 453 | if (j == 0) { |
| 454 | dsaddr->ds_list[i] = decode_and_add_ds(&stream, | 454 | dsaddr->ds_list[i] = decode_and_add_ds(&stream, |
| 455 | ino); | 455 | ino, gfp_flags); |
| 456 | if (dsaddr->ds_list[i] == NULL) | 456 | if (dsaddr->ds_list[i] == NULL) |
| 457 | goto out_err_free_deviceid; | 457 | goto out_err_free_deviceid; |
| 458 | } else { | 458 | } else { |
| @@ -503,12 +503,12 @@ out_err: | |||
| 503 | * available devices. | 503 | * available devices. |
| 504 | */ | 504 | */ |
| 505 | static struct nfs4_file_layout_dsaddr * | 505 | static struct nfs4_file_layout_dsaddr * |
| 506 | decode_and_add_device(struct inode *inode, struct pnfs_device *dev) | 506 | decode_and_add_device(struct inode *inode, struct pnfs_device *dev, gfp_t gfp_flags) |
| 507 | { | 507 | { |
| 508 | struct nfs4_file_layout_dsaddr *d, *new; | 508 | struct nfs4_file_layout_dsaddr *d, *new; |
| 509 | long hash; | 509 | long hash; |
| 510 | 510 | ||
| 511 | new = decode_device(inode, dev); | 511 | new = decode_device(inode, dev, gfp_flags); |
| 512 | if (!new) { | 512 | if (!new) { |
| 513 | printk(KERN_WARNING "%s: Could not decode or add device\n", | 513 | printk(KERN_WARNING "%s: Could not decode or add device\n", |
| 514 | __func__); | 514 | __func__); |
| @@ -537,7 +537,7 @@ decode_and_add_device(struct inode *inode, struct pnfs_device *dev) | |||
| 537 | * of available devices, and return it. | 537 | * of available devices, and return it. |
| 538 | */ | 538 | */ |
| 539 | struct nfs4_file_layout_dsaddr * | 539 | struct nfs4_file_layout_dsaddr * |
| 540 | get_device_info(struct inode *inode, struct nfs4_deviceid *dev_id) | 540 | get_device_info(struct inode *inode, struct nfs4_deviceid *dev_id, gfp_t gfp_flags) |
| 541 | { | 541 | { |
| 542 | struct pnfs_device *pdev = NULL; | 542 | struct pnfs_device *pdev = NULL; |
| 543 | u32 max_resp_sz; | 543 | u32 max_resp_sz; |
| @@ -556,17 +556,17 @@ get_device_info(struct inode *inode, struct nfs4_deviceid *dev_id) | |||
| 556 | dprintk("%s inode %p max_resp_sz %u max_pages %d\n", | 556 | dprintk("%s inode %p max_resp_sz %u max_pages %d\n", |
| 557 | __func__, inode, max_resp_sz, max_pages); | 557 | __func__, inode, max_resp_sz, max_pages); |
| 558 | 558 | ||
| 559 | pdev = kzalloc(sizeof(struct pnfs_device), GFP_KERNEL); | 559 | pdev = kzalloc(sizeof(struct pnfs_device), gfp_flags); |
| 560 | if (pdev == NULL) | 560 | if (pdev == NULL) |
| 561 | return NULL; | 561 | return NULL; |
| 562 | 562 | ||
| 563 | pages = kzalloc(max_pages * sizeof(struct page *), GFP_KERNEL); | 563 | pages = kzalloc(max_pages * sizeof(struct page *), gfp_flags); |
| 564 | if (pages == NULL) { | 564 | if (pages == NULL) { |
| 565 | kfree(pdev); | 565 | kfree(pdev); |
| 566 | return NULL; | 566 | return NULL; |
| 567 | } | 567 | } |
| 568 | for (i = 0; i < max_pages; i++) { | 568 | for (i = 0; i < max_pages; i++) { |
| 569 | pages[i] = alloc_page(GFP_KERNEL); | 569 | pages[i] = alloc_page(gfp_flags); |
| 570 | if (!pages[i]) | 570 | if (!pages[i]) |
| 571 | goto out_free; | 571 | goto out_free; |
| 572 | } | 572 | } |
| @@ -587,7 +587,7 @@ get_device_info(struct inode *inode, struct nfs4_deviceid *dev_id) | |||
| 587 | * Found new device, need to decode it and then add it to the | 587 | * Found new device, need to decode it and then add it to the |
| 588 | * list of known devices for this mountpoint. | 588 | * list of known devices for this mountpoint. |
| 589 | */ | 589 | */ |
| 590 | dsaddr = decode_and_add_device(inode, pdev); | 590 | dsaddr = decode_and_add_device(inode, pdev, gfp_flags); |
| 591 | out_free: | 591 | out_free: |
| 592 | for (i = 0; i < max_pages; i++) | 592 | for (i = 0; i < max_pages; i++) |
| 593 | __free_page(pages[i]); | 593 | __free_page(pages[i]); |
