From: Boaz Harrosh <boaz@plexistor.com>
To: Matthew Wilcox <willy@linux.intel.com>
Cc: Ross Zwisler <ross.zwisler@linux.intel.com>,
linux-fsdevel <linux-fsdevel@vger.kernel.org>,
Andrew Morton <akpm@linux-foundation.org>,
linux-mm@kvack.org, Sagi Manole <sagi@plexistor.com>,
Yigal Korman <yigal@plexistor.com>
Subject: Re: [RFC 5/9] SQUASHME: prd: Last fixes for partitions
Date: Thu, 14 Aug 2014 16:55:40 +0300 [thread overview]
Message-ID: <53ECBFDC.1060204@plexistor.com> (raw)
In-Reply-To: <20140814131632.GF6754@linux.intel.com>
On 08/14/2014 04:16 PM, Matthew Wilcox wrote:
> On Thu, Aug 14, 2014 at 04:04:53PM +0300, Boaz Harrosh wrote:
>>> @@ -218,13 +218,13 @@ static long prd_direct_access(struct block_device *bdev, sector_t sector,
>>> {
>>> struct prd_device *prd = bdev->bd_disk->private_data;
>>>
>>> - if (!prd)
>>> + if (unlikely(!prd))
>>> return -ENODEV;
>>>
>>> *kaddr = prd_lookup_pg_addr(prd, sector);
>>> *pfn = prd_lookup_pfn(prd, sector);
>>>
>>> - return size;
>>> + return min_t(long, size, prd->size);
>>
>> This is off course a BUG need to subtract offset, will send version 2
>
> I was wondering about simplifying the return value for the drivers
> a little. Something like this:
>
Sure, looks good
I will produce a V2 for the brd-partitions set to send Jens, sometime
next week.
Thanks
Boaz
> diff --git a/arch/powerpc/sysdev/axonram.c b/arch/powerpc/sysdev/axonram.c
> index 741293f..8709b9f 100644
> --- a/arch/powerpc/sysdev/axonram.c
> +++ b/arch/powerpc/sysdev/axonram.c
> @@ -149,7 +149,7 @@ axon_ram_direct_access(struct block_device *device, sector_t sector,
> *kaddr = (void *)(bank->ph_addr + offset);
> *pfn = virt_to_phys(*kaddr) >> PAGE_SHIFT;
>
> - return min_t(long, size, bank->size - offset);
> + return bank->size - offset;
> }
>
> static const struct block_device_operations axon_ram_devops = {
> diff --git a/drivers/block/brd.c b/drivers/block/brd.c
> index 3483458..344681a 100644
> --- a/drivers/block/brd.c
> +++ b/drivers/block/brd.c
> @@ -384,9 +384,9 @@ static long brd_direct_access(struct block_device *bdev, sector_t sector,
> *kaddr = page_address(page);
> *pfn = page_to_pfn(page);
>
> - /* Could optimistically check to see if the next page in the
> - * file is mapped to the next page of physical RAM */
> - return min_t(long, PAGE_SIZE, size);
> + /* If size > PAGE_SIZE, we could look to see if the next page in the
> + * file happens to be mapped to the next page of physical RAM */
> + return PAGE_SIZE;
> }
> #else
> #define brd_direct_access NULL
> diff --git a/drivers/block/prd.c b/drivers/block/prd.c
> index cc0aabf..1cfbd5b 100644
> --- a/drivers/block/prd.c
> +++ b/drivers/block/prd.c
> @@ -216,7 +216,7 @@ static long prd_direct_access(struct block_device *bdev, sector_t sector,
> *kaddr = prd_lookup_pg_addr(prd, sector);
> *pfn = prd_lookup_pfn(prd, sector);
>
> - return size;
> + return size - (sector * 512);
> }
>
> static const struct block_device_operations prd_fops = {
> diff --git a/drivers/s390/block/dcssblk.c b/drivers/s390/block/dcssblk.c
> index 2ee5556..96bc411 100644
> --- a/drivers/s390/block/dcssblk.c
> +++ b/drivers/s390/block/dcssblk.c
> @@ -881,7 +881,7 @@ dcssblk_direct_access (struct block_device *bdev, sector_t secnum,
> *kaddr = (void *) (dev_info->start + offset);
> *pfn = virt_to_phys(*kaddr) >> PAGE_SHIFT;
>
> - return min_t(long, size, dev_sz - offset);
> + return dev_sz - offset;
> }
>
> static void
> diff --git a/fs/block_dev.c b/fs/block_dev.c
> index 93ebdd53..ce3e69c 100644
> --- a/fs/block_dev.c
> +++ b/fs/block_dev.c
> @@ -447,6 +447,7 @@ EXPORT_SYMBOL_GPL(bdev_write_page);
> long bdev_direct_access(struct block_device *bdev, sector_t sector,
> void **addr, unsigned long *pfn, long size)
> {
> + long max;
> const struct block_device_operations *ops = bdev->bd_disk->fops;
> if (!ops->direct_access)
> return -EOPNOTSUPP;
> @@ -456,8 +457,10 @@ long bdev_direct_access(struct block_device *bdev, sector_t sector,
> sector += get_start_sect(bdev);
> if (sector % (PAGE_SIZE / 512))
> return -EINVAL;
> - size = ops->direct_access(bdev, sector, addr, pfn, size);
> - return size ? size : -ERANGE;
> + max = ops->direct_access(bdev, sector, addr, pfn, size);
> + if (!max)
> + return -ERANGE;
> + return min(max, size);
> }
> EXPORT_SYMBOL_GPL(bdev_direct_access);
>
>
WARNING: multiple messages have this Message-ID (diff)
From: Boaz Harrosh <boaz@plexistor.com>
To: Matthew Wilcox <willy@linux.intel.com>
Cc: Ross Zwisler <ross.zwisler@linux.intel.com>,
linux-fsdevel <linux-fsdevel@vger.kernel.org>,
Andrew Morton <akpm@linux-foundation.org>,
linux-mm@kvack.org, Sagi Manole <sagi@plexistor.com>,
Yigal Korman <yigal@plexistor.com>
Subject: Re: [RFC 5/9] SQUASHME: prd: Last fixes for partitions
Date: Thu, 14 Aug 2014 16:55:40 +0300 [thread overview]
Message-ID: <53ECBFDC.1060204@plexistor.com> (raw)
In-Reply-To: <20140814131632.GF6754@linux.intel.com>
On 08/14/2014 04:16 PM, Matthew Wilcox wrote:
> On Thu, Aug 14, 2014 at 04:04:53PM +0300, Boaz Harrosh wrote:
>>> @@ -218,13 +218,13 @@ static long prd_direct_access(struct block_device *bdev, sector_t sector,
>>> {
>>> struct prd_device *prd = bdev->bd_disk->private_data;
>>>
>>> - if (!prd)
>>> + if (unlikely(!prd))
>>> return -ENODEV;
>>>
>>> *kaddr = prd_lookup_pg_addr(prd, sector);
>>> *pfn = prd_lookup_pfn(prd, sector);
>>>
>>> - return size;
>>> + return min_t(long, size, prd->size);
>>
>> This is off course a BUG need to subtract offset, will send version 2
>
> I was wondering about simplifying the return value for the drivers
> a little. Something like this:
>
Sure, looks good
I will produce a V2 for the brd-partitions set to send Jens, sometime
next week.
Thanks
Boaz
> diff --git a/arch/powerpc/sysdev/axonram.c b/arch/powerpc/sysdev/axonram.c
> index 741293f..8709b9f 100644
> --- a/arch/powerpc/sysdev/axonram.c
> +++ b/arch/powerpc/sysdev/axonram.c
> @@ -149,7 +149,7 @@ axon_ram_direct_access(struct block_device *device, sector_t sector,
> *kaddr = (void *)(bank->ph_addr + offset);
> *pfn = virt_to_phys(*kaddr) >> PAGE_SHIFT;
>
> - return min_t(long, size, bank->size - offset);
> + return bank->size - offset;
> }
>
> static const struct block_device_operations axon_ram_devops = {
> diff --git a/drivers/block/brd.c b/drivers/block/brd.c
> index 3483458..344681a 100644
> --- a/drivers/block/brd.c
> +++ b/drivers/block/brd.c
> @@ -384,9 +384,9 @@ static long brd_direct_access(struct block_device *bdev, sector_t sector,
> *kaddr = page_address(page);
> *pfn = page_to_pfn(page);
>
> - /* Could optimistically check to see if the next page in the
> - * file is mapped to the next page of physical RAM */
> - return min_t(long, PAGE_SIZE, size);
> + /* If size > PAGE_SIZE, we could look to see if the next page in the
> + * file happens to be mapped to the next page of physical RAM */
> + return PAGE_SIZE;
> }
> #else
> #define brd_direct_access NULL
> diff --git a/drivers/block/prd.c b/drivers/block/prd.c
> index cc0aabf..1cfbd5b 100644
> --- a/drivers/block/prd.c
> +++ b/drivers/block/prd.c
> @@ -216,7 +216,7 @@ static long prd_direct_access(struct block_device *bdev, sector_t sector,
> *kaddr = prd_lookup_pg_addr(prd, sector);
> *pfn = prd_lookup_pfn(prd, sector);
>
> - return size;
> + return size - (sector * 512);
> }
>
> static const struct block_device_operations prd_fops = {
> diff --git a/drivers/s390/block/dcssblk.c b/drivers/s390/block/dcssblk.c
> index 2ee5556..96bc411 100644
> --- a/drivers/s390/block/dcssblk.c
> +++ b/drivers/s390/block/dcssblk.c
> @@ -881,7 +881,7 @@ dcssblk_direct_access (struct block_device *bdev, sector_t secnum,
> *kaddr = (void *) (dev_info->start + offset);
> *pfn = virt_to_phys(*kaddr) >> PAGE_SHIFT;
>
> - return min_t(long, size, dev_sz - offset);
> + return dev_sz - offset;
> }
>
> static void
> diff --git a/fs/block_dev.c b/fs/block_dev.c
> index 93ebdd53..ce3e69c 100644
> --- a/fs/block_dev.c
> +++ b/fs/block_dev.c
> @@ -447,6 +447,7 @@ EXPORT_SYMBOL_GPL(bdev_write_page);
> long bdev_direct_access(struct block_device *bdev, sector_t sector,
> void **addr, unsigned long *pfn, long size)
> {
> + long max;
> const struct block_device_operations *ops = bdev->bd_disk->fops;
> if (!ops->direct_access)
> return -EOPNOTSUPP;
> @@ -456,8 +457,10 @@ long bdev_direct_access(struct block_device *bdev, sector_t sector,
> sector += get_start_sect(bdev);
> if (sector % (PAGE_SIZE / 512))
> return -EINVAL;
> - size = ops->direct_access(bdev, sector, addr, pfn, size);
> - return size ? size : -ERANGE;
> + max = ops->direct_access(bdev, sector, addr, pfn, size);
> + if (!max)
> + return -ERANGE;
> + return min(max, size);
> }
> EXPORT_SYMBOL_GPL(bdev_direct_access);
>
>
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2014-08-14 13:55 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-08-13 12:08 [RFC 0/9] pmem: Support for "struct page" with Persistent Memory storage Boaz Harrosh
2014-08-13 12:08 ` Boaz Harrosh
2014-08-13 12:10 ` [RFC 1/9] prd: Initial version of Persistent RAM Driver Boaz Harrosh
2014-08-13 12:11 ` [RFC 2/9] prd: add support for rw_page() Boaz Harrosh
2014-08-13 12:12 ` [RFC 3/9] prd: Add getgeo to block ops Boaz Harrosh
2014-08-13 12:14 ` [RFC 4/9] SQUASHME: prd: Fixs to getgeo Boaz Harrosh
2014-08-20 22:10 ` Ross Zwisler
2014-08-21 9:47 ` Boaz Harrosh
2014-08-13 12:16 ` [RFC 5/9] SQUASHME: prd: Last fixes for partitions Boaz Harrosh
2014-08-14 13:04 ` Boaz Harrosh
2014-08-14 13:16 ` Matthew Wilcox
2014-08-14 13:16 ` Matthew Wilcox
2014-08-14 13:55 ` Boaz Harrosh [this message]
2014-08-14 13:55 ` Boaz Harrosh
2014-08-14 13:07 ` [PATCH 5/9 v2] " Boaz Harrosh
2014-08-25 20:10 ` Ross Zwisler
2014-08-26 8:18 ` Boaz Harrosh
2014-08-26 17:36 ` Boaz Harrosh
2014-08-26 17:36 ` Boaz Harrosh
2014-08-26 20:34 ` Ross Zwisler
2014-08-26 20:34 ` Ross Zwisler
2014-08-27 9:41 ` Boaz Harrosh
2014-08-27 4:38 ` Matthew Wilcox
2014-08-27 9:55 ` Boaz Harrosh
2014-08-27 12:46 ` Matthew Wilcox
2014-08-27 13:01 ` Boaz Harrosh
2014-08-20 23:03 ` [RFC 5/9] " Ross Zwisler
2014-08-21 10:05 ` Boaz Harrosh
2014-08-21 10:05 ` Boaz Harrosh
2014-08-13 12:18 ` [RFC 6/9] SQUASHME: prd: Let each prd-device manage private memory region Boaz Harrosh
2014-08-21 16:57 ` Ross Zwisler
2014-08-13 12:20 ` [RFC 7/9] SQUASHME: prd: Support of multiple memory regions Boaz Harrosh
2014-08-25 23:02 ` Ross Zwisler
2014-08-25 23:02 ` Ross Zwisler
2014-08-13 12:21 ` [RFC 8/9] mm: export sparse_add/remove_one_section Boaz Harrosh
2014-08-13 12:26 ` [RFC 9/9] prd: Add support for page struct mapping Boaz Harrosh
2014-08-15 20:28 ` Toshi Kani
2014-08-17 9:17 ` Boaz Harrosh
2014-08-18 19:48 ` Toshi Kani
2014-08-19 8:40 ` Boaz Harrosh
2014-08-19 16:49 ` Toshi Kani
2014-08-22 14:36 ` Dave Hansen
2014-08-22 14:36 ` Dave Hansen
2014-09-09 16:16 ` Boaz Harrosh
2014-09-09 16:29 ` Dave Hansen
2014-08-20 20:13 ` [RFC 0/9] pmem: Support for "struct page" with Persistent Memory storage Ross Zwisler
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=53ECBFDC.1060204@plexistor.com \
--to=boaz@plexistor.com \
--cc=akpm@linux-foundation.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=ross.zwisler@linux.intel.com \
--cc=sagi@plexistor.com \
--cc=willy@linux.intel.com \
--cc=yigal@plexistor.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.